【fuzz trick】利用LCOV测量代码覆盖率

本文样例为LibTIFF version 4.0.4,以CVE-2016-9297漏洞举例

Install

直接使用apt安装包即可

sudo apt install lcov

Usage

整体流程大致如下

cd ./tiff-4.0.4/
lcov --zerocounters --directory ./
lcov --capture --initial --directory ./ --output-file app.info
../install/bin/tiffinfo -D -j -c -r -s -w ../out/default/crashes/id:000000,sig:06,src:000000,time:11605,execs:6660,op:havoc,rep:4
lcov --no-checksum --directory ./ --capture --output-file app2.info

每个部分含义如下:

  • lcov --zerocounters --directory ./,用于重置计数器
  • lcov --capture --initial --directory ./ --output-file app.info,创建一个”baseline”覆盖率数据文件,其中包含每个检测线的零覆盖率
  • ../install/bin/tiffinfo -D -j -c -r -s -w ../out/default/crashes/id:000000,sig:06,src:000000,time:11605,execs:6660,op:havoc,rep:4,运行要分析的程序和输入,或是fuzz出的crash样本,这一步可以多次运行不同的输入用于测量覆盖率
  • lcov --no-checksum --directory ./ --capture --output-file app2.info,将上一步出现的覆盖状态保存在app2.info

最后,我们需要生成一个html文件方便我们查看覆盖率情况

genhtml --highlight --legend -output-directory ./html-coverage/ ./app2.info

如果正常的话,我们就可以打开./html-coverage/index.html,查看覆盖率状况

coverage