美文网首页
ConAnalysis - Concurrency Attack

ConAnalysis - Concurrency Attack

作者: James_Qiu | 来源:发表于2017-10-14 11:46 被阅读0次

    Running Steps of ConAnalysis

    Installation and Build of LLVM, Clang, Compiler RT & LLDB

    wget http://releases.llvm.org/5.0.0/llvm-5.0.0.src.tar.xz
    tar -xvf llvm-5.0.0.src.tar.xz
    
    wget http://releases.llvm.org/5.0.0/cfe-5.0.0.src.tar.xz
    tar -xvf cfe-5.0.0.src.tar.xz
    
    wget http://releases.llvm.org/5.0.0/compiler-rt-5.0.0.src.tar.xz
    tar -xvf compiler-rt-5.0.0.src.tar.xz
    
    wget http://releases.llvm.org/5.0.0/lldb-5.0.0.src.tar.xz
    tar -xvf lldb-5.0.0.src.tar.xz
    

    Use Version 3.6.1 instead (If not available or error occurs)!

    Addresses of Version 3.6.1

    http://releases.llvm.org/3.6.1/cfe-3.6.1.src.tar.xz
    http://releases.llvm.org/3.6.1/llvm-3.6.1.src.tar.xz
    http://releases.llvm.org/3.6.1/compiler-rt-3.6.1.src.tar.xz
    http://releases.llvm.org/3.6.1/lldb-3.6.1.src.tar.xz

    Move the Extracted Directories to the "tools" Directory of LLVM (and rename them for convenience)

    mv cfe-5.0.0.src llvm-5.0.0.src/tools/clang
    mv lldb-5.0.0.src llvm-5.0.0.src/tools/lldb
    mv compiler-rt-5.0.0.src llvm-5.0.0.src/tools/compiler-rt
    

    Get Dependencies Installed or Updated

    sudo apt-get update
    sudo apt-get install build-essential subversion python2.7-dev libedit-dev libncurses5-dev cmake inotify-tools fdupes libxml2-dev swig expect
    

    Compile LLVM

    Go to the llvm-3.6.1.src Directory.

    mkdir build
    cd build
    cmake -DCMAKE_BUILD_TYPE=Debug ..
    make # it takes so long
    

    Build LLVM

    After the above step, under path-to-llvm-source/build/bin, you'll see all the executables including clang and clang++ etc.

    sudo make install
    

    Installation of Submodules

    Currently, we're using whole-program-llvm to build the target project into one single llvm bitcode file. We're using whole-program-llvm as a submodule of our project. The following are the steps to set up whole-program-llvm.

    cd path-to-ConAnalysis-source
    git submodule update --init --recursive
    

    Setup Environment Variables

    You can put the following bash command into your ~/.bashrc file. Make sure you replace the path-to... with your own path name.

    export CONANAL_ROOT=path-to-ConAnalysis-source
    alias wllvm=$CONANAL_ROOT/whole-program-llvm/wllvm
    export WLLVM_HOME=$CONANAL_ROOT/whole-program-llvm
    export PATH=${WLLVM_HOME}:${PATH}
    export LLVM_COMPILER=clang
    export WLLVM_OUTPUT=WARNING
    

    To execute first,

    source ~/.bashrc
    

    Build ConAnalysis Project

    cd $CONANAL_ROOT
    
    mkdir build
    cd build
    cmake ..
    make
    

    Run the LLVM Analysis on libsafe

    ctest -R libsafe
    

    Then go to the folder contains the actual test output.

    cd $CONANAL_ROOT/build/Testing/Temporary
    vim LastTest.log
    

    For each test case, there is a folder under TESTS named standard-output contains all the verified standarded output.

    Run Scripts and Get Output Results

    Softwares and tools used for concurrency attack in git repo: https://github.com/ruigulala/concurrency-exploits

    Userspace

    [ mk.sh -> run.sh -> autotestSyncloop.sh -> autotestConAnalysis.sh ]

    Build MySQL ./mk.sh in concurrency-exploits/mysql-24988

    ./run.sh -> ./autotestSyncloop.sh mysql-24988 race_report0.race & ./autotestConAnalysis.sh mysql-24988 race_report0.race
    

    Kernel Space

    • Kernel Config
    • source config.sh -> sh from git -> boot -> ssh enter

    (To be continued ... )

    (Additional) Install MySQL and Extract "bc" File

    wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.7/mysql-5.7.19.tar.gz
    tar -xvf mysql-5.7.19.tar.gz
    cd mysql-5.7.19.tar.gz
    

    Add Patches (in config.cmake):

     /* Define to 1 if you have the `memcpy' function. */
     #undef HAVE_MEMCPY
    +#define HAVE_MEMCPY 1
    
     /* Define to 1 if you have the `memmove' function. */
     #undef HAVE_MEMMOVE
    +#define HAVE_MEMMOVE 1
    
     /* Define to 1 if you have the <memory.h> header file. */
     #undef HAVE_MEMORY_H
    
    mkdir build
    cd build
    CC=wllvm CXX=wllvm++ cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=$HOME/my_boost
    CC=wllvm CXX=wllvm++ make
    CC=wllvm CXX=wllvm++ make install
    
    # for MySQL versions not using cmake
    CC=wllvm CXX=wllvm++ ./configure
    make
    make install
    
    # extract bit code file
    extract-bc mysqld
    

    You will get mysqld.bc in the end by these steps.

    相关文章

      网友评论

          本文标题:ConAnalysis - Concurrency Attack

          本文链接:https://www.haomeiwen.com/subject/tbyxuxtx.html