Kitty是一款用Python语言编写的开源的模块化、可扩展的模糊测试框架,灵感来源于OpenRCE’s Sulley 和 Michael Eddington的 (现在为Deja Vu Security的) Peach Fuzzer 。
目标
我们开始写Kitty的时候,目的是帮助我们fuzz特殊的目标。也就就是运行于非TCP/IP通道上的私有和内部协议。一个通用、抽象的框架应该包含所有我们能想到的模糊测试过程中用到的所有通用功能,并且能方便用户扩展,以便用来攻击特定目标。
特性
心中有了这样的目标,以下的特性就非常重要:
1、模块性:fuzzer的每一个部分都是独立的,这意味着你能够用相同的监视代码监控不同的程序,用相同的载荷生成工具(aka Data Model)生成的数据可以在不同的信道中传递;
2、扩展性:如过你想测试新的东西,不需要修改Kitty的核心代码。即便不是所有,大部分功能应该在用户代码中实现。这包括监视,控制以及和被fuzz的目标的通信;
3、丰富的数据模型:数据模型的核心要丰富,能够描述高级的数据结构,包括字符串,哈希,长度,条件及其它。而且和其它框架一样,还要设计好,将来需要的时候可以扩展;
4、状态性:支持多阶段的模糊测试。不仅要能描述单独消息的载荷应该是什么样,还要能描述消息的顺序,甚至按照顺序进行fuzzing;
5、客户端和服务端fuzzing:假设你有一个配对的程序栈,你可以对服务端和客户端进行fuzz。这听起来是一个很高的要求,但实际上不是:只需要你像通常一样能够和目标通信即可;
6、跨平台:可以在Linux,OS X和Windows上运行。
它不是XX
好吧,Kitty不是一个模糊测试器。它包含了还未实现的特定的协议或者通信通道。你可以用它写一个自己的模糊测试器,你同样可以用其它的基于Kitty的代码,但是它不是一个开箱即用的模糊测试器。获取Kitty模型实现的一个好去处是Katnip。
Katnip
Kitty,作为一个框架,实现了模糊测试器的主循环,并且提供了用于创建一个完整的fuzzing会话所需要的数据模型和基类的语法。然而,特定类的实现并不是Kitty框架的一部分。这意味着,Kitty定义了与目标进行数据传递的接口和基类,但是没有提供HTTP,TCP或者UART之上的数据传输实现。各种类的实现可以在附赠的软件仓库Katnip Github中找到。
接下来是什么?
安装Kitty:
pip install git+https://github.com/cisco-sas/kitty.git#egg=kitty
阅读这里的文档。
构建自己的fuzzer。
如果需要帮助,可以询问我们的Google group。