定向模糊测试工具windranger的使用教程

编程入门 行业动态 更新时间:2024-10-28 15:23:29

定向模糊<a href=https://www.elefans.com/category/jswz/34/1767317.html style=测试工具windranger的使用教程"/>

定向模糊测试工具windranger的使用教程

本文主要介绍发表于ICSE 2022的一个定向模糊测试工具windranger的使用方法。

论文全称是:WindRanger: A Directed Greybox Fuzzer driven by Deviation Basic Blocks
工具介绍网址:/

docker安装

docker pull ardu/windranger

如果要本地安装,可以利用docker history之类的命令逆向出所需的依赖,然后安装。

官方示例

首先基于该镜像创建一个docker 容器

docker run -ti --privileged --cpus=1 ardu/windranger /bin/bash

进入容器后,实际上可以看到example文件夹中,作者给出了示例脚本。下面详细介绍下脚本中各个命令的含义。

git clone .git libming-CVE-2018-8807
cd libming-CVE-2018-8807
git checkout b72cc2f
./autogen.sh
mkdir build; cd build
CC=~/gllvm/gclang CXX=~/gllvm/gclang++ ../configure --disable-shared
make clean; make
cd util; ~/gllvm/get-bc swftophp
cd ../
mkdir fuzz; cd fuzz
cp ../util/swftophp.bc .
echo $'decompile.c:398' > targets
~/windranger/instrument/bin/cbi --targets=targets swftophp.bc
~/windranger/fuzz/afl-clang-fast swftophp.ci.bc -lpng16 -lm -lz -lfreetype -o swftophp.ci
mkdir in; wget -P in .swf
AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 AFL_SKIP_CPUFREQ=1 ~/windranger/fuzz/afl-fuzz -d -i in/ -o out ./swftophp.ci @@

下载待测软件libming,并切换到有漏洞的分支。

git clone .git libming-CVE-2018-8807
cd libming-CVE-2018-8807
git checkout b72cc2f

接着使用gllvm工具将软件编译为字节码形式。

mkdir build; cd build
CC=~/gllvm/gclang CXX=~/gllvm/gclang++ ../configure --disable-shared
make clean; make 
cd util; ~/gllvm/get-bc swftophp # 提取字节码,在swftophp所在目录生成swftophp.bc文件

创建fuzz文件夹,需要注意使用afl-fuzz命令的时候需要在这个文件夹下。因为afl-fuzz硬编码了文件路径,会在当前目录下查找插桩生成的distance.txt文件夹。所以如果不在该目录下fuzz,会报distance.txt不存在的错误。

mkdir fuzz; cd fuzz
cp ../util/swftophp.bc .
echo $'decompile.c:398' > targets #设置定向的目标
~/windranger/instrument/bin/cbi --targets=targets swftophp.bc # 静态分析,计算距离等
~/windranger/fuzz/afl-clang-fast swftophp.ci.bc -lpng16 -lm -lz -lfreetype -o swftophp.ci #用afl-clang-fast将字节码编译为二进制文件

in文件是放置初始种子。然后就可以开始测试swftophp文件了。

  • AFL_SKIP_CPUFREQ=1:这会跳过CPU的扩展策略。如果不想更改默认设置(比如没有root权限)的话,这个挺有用。代价是一些性能损失。
  • AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1:If you are Jakub, you may need AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES. Others need not apply, unless they also want to disable the /proc/sys/kernel/core_pattern check(来自AFL++的文档)
mkdir in; wget -P in .swf
AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 AFL_SKIP_CPUFREQ=1 ~/windranger/fuzz/afl-fuzz -d -i in/ -o out ./swftophp.ci @@

如果要批量跑的话,需要设置下面的环境变量为1,让afl-fuzz跑的时候不绑定在一个核上。

export AFL_NO_AFFINITY=1

测试libtiff

上面介绍完了官方给的样例。下面用该工具来测试下另一个库libtiff。其实整体流程是一样的。

TARGET=${1} #TARGET需要自己事先定义好行号,如"tiffcrop.c:564"
ARGS=${2} # tiffcrop 的测试参数,比如"-R90 @@ tmp.out"
#VERSION=${3}
PROGRAM=/home/SVF-tools/libtiff
WORK="$PROGRAM/work"
rm -rf "$WORK"
mkdir -p "$WORK"
mkdir -p "$WORK/lib" "$WORK/include"# 1.下载libtiff
git clone .git
cd libtiff
pushd $PROGRAM
#git checkout $VERSION
./autogen.sh
CC=~/gllvm/gclang CXX=~/gllvm/gclang++ ./configure --disable-shared --prefix="$WORK"
make clean; make
make install
## 获取待测程序tiffcrop的字节码
cd tools;~/gllvm/get-bc tiffcrop
popd
#运行完静态分析后,可以在当前目录下发现多了一些文本文件,比如distance.txt等
~/windranger/instrument/bin/cbi --targets=$TARGET $PROGRAM/tools/tiffcrop.bc
# 需要把一些库带上编译。如果报undefined reference的错误,就是少了一些链接库
~/windranger/fuzz/afl-clang-fast $PROGRAM/tools/tiffcrop.ci.bc $WORK/lib/libtiffxx.a $WORK/lib/libtiff.a -lz -lm -ljpeg -Wl,-Bstatic -llzma -Wl,-Bdynamic -o $PROGRAM/tools/tiffcrop.ciexport AFL_NO_AFFINITY=1 ## 不绑定一个核
# 需要提前把libitff的初始种子放到in文件夹中
~/windranger/fuzz/afl-fuzz -i /home/SVF-tools/temp/in/ -o ~/temp/out $PROGRAM/tools/tiffcrop.ci $ARGS

跑完后,可以用afl-cov等软件分析跑的结果,这里就不再赘述。

更多推荐

定向模糊测试工具windranger的使用教程

本文发布于:2024-03-09 13:15:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1725058.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:测试工具   模糊   教程   windranger

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!