安全分析工具dr checker的安装
安全分析工具dr checker的安装
Dr check(https://github.com/ucsb-seclab/dr_checker)是一个检查驱动安全错误的工具,依托llvm实现,使用指针分析、taint分析、基于类型的CG等技术,比依靠特征的工具要好一些。
但是安装还真是挺麻烦的。简单记录下安装过程。
环境:ubuntu20.04
1.安装需要的软件:
sudo apt install libncurses5。
2.download llvm 3.8.1 & clone dr.checker code
这个工具用的llvm的版本有点旧。去llvm下载了编译好的版本。
其实本来直接运行setup_drchecker.py就好。但是由于qiang的存在,下载不稳定。
3.setup envs for llvm
参考setup_drchecker.py
export LLVM_ROOT=/home/robot/RobotWork/llvm381
export PATH=$LLVM_ROOT/bin:$PATH
After adding the above lines to .bashrc
Please run: source ~/.bashrc on the terminal for the changes to take effect.
4.build
cd llvm_analysis
./build.sh
when build llvm_analysis/AnalysisHelpers
然后就报错了:
g++: error: unrecognized command line option ‘-Wcovered-switch-default’; did you mean ‘-Wno-switch-default’?
看了下是工程里其中两个小工具(Dr_linker和EntryPointIdentifier)的编译出了错。
编译命令是:
g++ $BASEDIR/src/main.cpp -fpermissive -o $BASEDIR/entry_point_handler `llvm-config --cxxflags --libs --ldflags --system-libs`
使用llvm-config来获取llvm的编译配置作为当前的配置。
应该是这个预编译的版本使用的是低版本clang编译的,而这里用的是G++,G++不认识这个。
查了一下,-Wno-switch-default是个不是很重要的配置,而switch有关的。
解决方法是将`llvm-config --cxxflags --libs --ldflags --system-libs`的执行结果里的-Wno-switch-default这个去掉,然后修改编译命令。成功编译,写了个小文件测试,运行也没问题。
其他1:
这里直接使用了预编译的llvm,如果自己编译一个呢:
克隆所要求的版本的llvm
git clone https://github.com/llvm/llvm-project.git -b release/3.8.x /home/robot/RobotWork/dr_checker/install/llvm
mkdir build
cd build
cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;compiler-rt;libcxx;libcxxabi;openmp" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=host ../llvm
ninja
然后就编译就失败了,ninja会卡住,然后就退出。换成make也是一样的,没有再试了。
其他2:
Github上还有个把这个工具迁移到llvm 9 的项目(dr_checker_4_linux)。克隆以后,build的时候也是一堆错误。但是好在提供了编译好文件,可以试试。