热门问题
时间线
聊天
视角

american fuzzy lop

来自维基百科,自由的百科全书

American fuzzy lop
Remove ads

american fuzzy lop (AFL) 是一个自由的模糊测试工具,采用遗传算法以有效地提高测试用例代码覆盖率。目前为止,它帮助检测了数十个主要自由软件项目中的重大程序错误,包括X.Org Server[2]PHP[3]OpenSSL[4][5] pngcrushbash[6]Firefox[7]BIND[8][9] Qt[10]SQLite[11]

事实速览 开发者, 首次发布 ...

american fuzzy lop的原始码发布在GitHub上。american fuzzy lop得名于美国垂耳兔英语American Fuzzy Lop

Remove ads

典型用法

AFL要求用户提供一个运行测试应用程式的示例命令和至少一个示例输入文件。例如,在对音频播放器进行测试时,可以指示AFL用它打开一个简短的声音文件。然后,模糊测试器尝试实际执行指定的命令,如果成功,它会尝试将输入文件减少到触发相同行为的最小文件。

在初始阶段之后,AFL通过对输入文件进行各种修改来开始实际的模糊测试过程。当被测程序崩溃假当机时,表明发现了一个新错误,可能是一个安全漏洞。此时修改后的输入文件被保存以供用户进一步检查。

为了最大限度地提高模糊测试性能,建议使用american fuzzy lop进行灰盒测试,即在一个实用程序的帮助下编译被测程序原始码,该实用程序在编译被测程序时插入跟踪控制流的辅助函数(即“插桩”)来instrument英语Instrumentation_(computer_programming)代码。这允许模糊测试器检测目标的行为何时响应输入而改变。在灰盒测试不可能的情况下,也支持黑盒测试

Remove ads

特性

模糊引擎

Thumb
AFL的logo通过模糊测试输入拼接为一个动画产生。[12]

american fuzzy lop的模糊测试引擎使用几个算法尽可能触发被测程序的异常行为,如位翻转或将输入的整数数据修改为可能引发异常的边界值。[13] 除此之外,AFL可以根据示例关键字生成测试用例,这有助于对使用基于文本语法的程序进行模糊测试,例如 SQLite。[14] 生成的测试用例执行程序代码的不同部分,AFL记录会引起异常的输入数据,之后可以将这些数据输入到更专业的诊断程序进行进一步分析。进行模糊测试时,假当机可以通过设定的定时器超时来检测,而崩溃通过结束程序时的信号处理程序检测。

使用AFL进行模糊测试时,输入的测试用例可以通过标准输入或作为进程命令行中指定的输入文件提供给测试程序。目前不支持对通过网络接受输入数据的网络应用程式进行模糊测试,但在某些情况下有可行的解决方案。[15]

性能

american fuzzy lop面临的一大挑战是每秒对几百个进程的spawn英语spawn (computing)。除了从头开始spawn每个进程的原始引擎,american fuzzy lop提供高度依赖fork系统调用的默认引擎。[16] 可以通过利用LLVM延迟分叉伺服器模式或类似的持久模式进一步加快速度,但这是以必须修改测试程序为代价的。[17] 另外,american fuzzy lop支持通过网络对同一个程序进行模糊测试。

用户界面

american fuzzy lop拥有彩色的命令行界面,实时显示模糊测试过程和统计资讯,可以通过命令行界面或者环境变量修改配置,也可以从机器可读文件格式中读取运行时统计资讯。

实用程序

除了提供afl-fuzz用于模糊测试,american Fuzzy lop还包含用于监控模糊测试过程的实用程序。除此之外,afl-cminafl-tmin可以用于最小化测试用例和语料库,当其他模糊测试器也需要使用afl-fuzz生成的测试用例时尤其实用。

AFL++

事实速览 首次发布, 当前版本 ...

由于Google2017年9月以后对AFL的上游开发相对停滞,故诞生了一个社区维护的AFL分叉AFL++AFLplusplus[19] 。它包含了一些新特性和性能提升。[20]

Google推出的为开源软件提供免费模糊测试服务的OSS-Fuzz计划,也于2021年1月将AFL选项替换为了AFL++。[21]

参考资料

拓展阅读

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads