LAVA是由Brendan Dolan-Gavitt等人提出的用于在程序中插入bug的技术方法,其相关论文《LAVA: Large-scale Automated Vulnerability Addition》发表在了2016年的S&P上。通过LAVA在uniq、who、md5sum、base64四个程序上进行bug插入而形成的测试集即为LAVA-M。LAVA-M被广泛应用于fuzz领域的工具效果评估,Angora、RedQueen、T-Fuzz、VUzzer等工具都使用了LAVA-M进行测试评估。本文结合Angora等技术文档和笔者实际经历,介绍一下LAVA-M的安装与使用。
1.下载
LAVA-M的下载地址为http://panda.moyix.net/~moyix/lava_corpus.tar.xz,点击链接下载压缩包并解压,可以在文件夹中找到分别存放base64、md5sum、uniq、who的子文件夹。下面我们以base64为例介绍安装与使用方法。
2.通过脚本自动化进行安装
进入base64文件夹,查看子文件及文件夹:
moonlight@ubuntu:~/lava_corpus/LAVA-M/base64$ ls
backtraces coreutils-8.24-lava-safe fuzzer_input inputs validated_bugs validate.sh
validated_bugs里列出了在base64中插入的crash编号;inputs里有能触发crash的输入,每一个输入的编号对应于一个crash的编号;fuzzer_input里有用于给fuzzer作为种子的输入;coreutils-8.24-lava-safe文件夹里存放了源代码及编译设置等;validate.sh为安装脚本,其代码如下:
#!/bin/bash
PROG="base64"
PROGOPT="-d"
INPUT_PATTERN="inputs/utmp-fuzzed-%s.b64"
INPUT_CLEAN="inputs/utmp.b64"
echo "Building buggy ${PROG}..."
cd coreutils-8.24-lava-safe
make clean &> /dev/null
./configure --prefix=`pwd`/lava-install LIBS="-lacl" &> /dev/null
make -j $(nproc) &> /dev/null
make install &> /dev/null
cd ..
echo "Checking if buggy ${PROG} succeeds on non-trigger input..."
./coreutils-8.24-lava-safe/lava-install/bin/${PROG} ${PROGOPT} ${IN