9 SULLEY

Sulley 名字来起源于电影《Monsters》, 一头毛绒绒的蓝色怪物。下面将要看到的 Sulley 也是一个怪物,强大的基于 Python 的 fuzzing 框架的怪物(在这里让我们感谢他们:Pedram Amini 和 Aaron Portnoy of TippingPoint)。Sulley 不仅仅是一个 fuzzer;它还有拥有优秀的崩 溃报告,自动虚拟化技术(VMWare automation)。在 fuzzing 的过程中你可以在任意时刻, 甚至是目标程序崩溃的时候,从新启动程序到前一刻,继续寻找 bug 之旅。In short, Sulley is badass.

Sulley 和 SPIKE(一款著名的协议 fuzzing 工具,当然它是免费的)一样使用了数据块 技术,所以生成的数据会更有“智慧”,不在是一群没头没脑的苍蝇。让我们看看什么是基 于块的 fuzzing 技术,在生成测试数据前,你必须针对协议或者是文件格式,完成一个数据 生成的框架,框架里尽可能详细的包含了协议(或者文件格式)的各个字段,数据类型,还 有长度信息,最后生成的测试数据就会非常有针对性。让后把这些测试数据传递给负责协议 测试的框架,用于 fuzzing。这项技术最早提出来的目的就是为了解决网络协议 fuzz 时的盲 目性。举个例子,在网络协议中,一般每个字段都有长度记录,如果我们发送的测试数据增 加了数据的长度,却没有改变长度记录,那服务端程序,就会根据长度记录,自动抛弃多余 的数据,这样在 fuzzing 的时候,就很难找出 bug 了。基于块的技术则是负责处理这些数据 块间的关系的,让生成的数据更标准,而不是像野蛮人。

接下来我们会详细的讲解 Sully,从安装到使用。先是快速的了解 Sulley 创建 protocol description(协议描述)的基础知识。接着再完成一个包含,fuzzing 框架,包捕获,以及崩溃报告的完整的 fuzzer。我们 fuzzing 的目标就是 WarFTPD,早期的版本存在栈溢出。测试 fuzzer 最常见方法就是,用有漏洞的程序喂它,如果它能咬出一个洞,说明你的 fuzzer 还不 傻,如果什么都没发现,那洗洗回去睡把。这次我们喂的是个怪物,如果你还没有饲养手册, 可以看看 Pedram 和 Aaron 写的 Sulley manual。好了,让我们继续。