sys8 cc-cs6序列号

afl
2023年4月6日发(作者:铃声多多下载)

使⽤Afl-fuzz(AmericanFuzzyLop)进⾏fuzzing测试(⼀)——使⽤初体验

1.具有导向性的模糊测试

Fuzzing技术被证明是当前鉴别软件安全问题⽅⾯最强⼤测试技术。当前⼤多数远程代码执⾏和特权提升等⽐较严重的漏洞都是使⽤

Fuzzing技术挖掘的。然⽽Fuzzing技术仍然存在着覆盖率低的缺陷。⽽许多的代码漏洞需要更⼤的路径覆盖率才能触发,⽽不是通过纯粹

的随机尝试。

为了解决这⼀问题,已经提出了不少通过提供被测试代码更多的信息去引导和增强测试技术的⽅法。如简单的语义库蒸馏(corpus

distillation),流分析(concolicexecution),到纯粹的符号执⾏(symbolicexecution)和静态分析等。

第⼀种⽅式(corpusdistillation)能很好地⼯作,但严重依赖于⼤量的、⾼质量的合法输⼊数据的语料库(corpus)。正因为如此,代码

覆盖率也只是衡量程序执⾏状态的⼀个简单化的度量,这种⽅式并不适合后续引导fuzzing测试的。

其余的技术(符号执⾏,concolic执⾏)⼀直都被认为是极有前景的。但仍然被可靠性问题和程序执⾏环境的复杂性所束缚。⼤部分⾼价值

的程序都有⾮常复杂的内部状态和执⾏路径,在这⼀⽅⾯符号执⾏和concolic技术往往会显得不够健壮(如路径爆炸问题),所以仍然稍逊

于传统的fuzzing技术。

AFL号称是当前最⾼级的Fuzzing测试⼯具之⼀。由lcamtuf所开发。通过对源码进⾏重新编译时进⾏插桩(简称编译时插桩)的⽅式⾃动

产⽣测试⽤例来探索⼆进制程序内部新的执⾏路径。与其他基于插桩技术的fuzzers相⽐,afl-fuzz具有较低的性能消耗,有各种⾼效的

fuzzing策略和tricks最⼩化技巧,不需要先⾏复杂的配置,能⽆缝处理复杂的现实中的程序。当然AFL也⽀持直接对没有源码的⼆进制程

序进⾏测试,但需要QEMU的⽀持。这在本⽂后⾯会做详细介绍。

2.安装

make

sudomakeinstall

3.对测试集进⾏fuzzing测试

在对测试集进⾏编译的时候把GCC编译器替换成afl-gcc,

在执⾏的过程中会遇到⼀些错误,但都给出了提⽰,如:

echocore>/proc/sys/kernel/core_pattern

4.对binutils进⾏fuzzing测试

GNUBinaryUtilities或binutils是⼀整套的编程语⾔⼯具程序,⽤来处理许多格式的⽬标⽂件。下载之后解压,然后按⼀下步骤编译:

cd~/binutils-2.25**

CC=afl-gcc./configure

make

在binutils-2.25⽬录下新建afl_in⽤于存放初始输⼊⽂件,新建afl_out⽂件夹⽤于保存fuzzing测试结果。

cd~/binutils-2.25

mkdirafl_inafl_out

cp/bin/psafl_in/

开始对reeelf程序进⾏测试

cd~/binutils-2.25

afl-fuzz-iafl_in-oafl_out./binutils/readelf-a@@

在执⾏过程中,afl-fuzz会把@@替代测试样本,即之前拷贝到afl_in⽬录下的ps程序,所以最后实际执⾏的命令为readelf-aps

(没错,跑了两天也没跑出个CRASH=_=)

5.对ImageMagic软件进⾏fuzzing测试

执⾏命令:

其中,/afl-testcases/jpeg/full/images为afl官⽹提供的测试集,⾥⾯有⼤量的各种格式的且经过修剪处理的测试⽤例(jpeg格式⽂件就

有8千多个),./utilities/magic是被测试程序,@@代表测试输⼊样本,即../afl-testcases/jpeg/full/images⽬录下的.jpeg⽂件,在实

际执⾏时@@会被替换成实际的测试样本,是随便命名的⽂件,主要是实现把.jpeg⽂件转换成.png⽂件的功能。

在运⾏⼗⼏个⼩时之后,出现了16个崩溃,然后就显⽰系统错误。

../afl-2.49b/afl-fuzz–i../afl-testcases/jpeg/full/images–o./fuzzoutput./utilities/magick@@

6.参考资料

更多推荐

afl