AFL
AFL 的全称是 American Fuzzy Lop。这个名字源于一种宠物兔的品种,但在计算机安全领域指的是一个面向安全的模糊测试器。
简单来说,AFL 是一个用于自动发现软件中潜在漏洞(尤其是内存破坏类漏洞,如缓冲区溢出、释放后使用等)的强大工具。它通过向目标程序提供自动生成的、非预期的输入数据,并监视程序的异常行为(如崩溃、挂起)来工作。
AFL 的成功不在于它的复杂性,而在于它引入的一个非常巧妙的思路。在 AFL 之前,模糊测试大多是“盲目”的,比如随机生成数据。AFL 的核心创新在于“基于覆盖率的引导”。
不仅要测试程序,还要知道你的测试数据让程序执行了哪些新的代码路径。然后,优先选择那些能触发新路径的测试用例进行“变异”,从而像进化一样,让测试越来越深入程序的核心逻辑。
对于新入门计算机安全领域的读者来说,AFL 是一个不可多得的易上手的工具,整个项目代码不超过一万行。本章节主要介绍 AFL 的核心设计理念以及核心源码分析。