Kitty:Python語言編寫的Fuzzing框架
Kitty是一款用Python語言編寫的開源的模塊化、可擴(kuò)展的模糊測(cè)試框架,靈感來源于OpenRCE’s Sulley 和 Michael Eddington的 (現(xiàn)在為Deja Vu Security的) Peach Fuzzer 。
目標(biāo)
我們開始寫Kitty的時(shí)候,目的是幫助我們fuzz特殊的目標(biāo)。也就就是運(yùn)行于非TCP/IP通道上的私有和內(nèi)部協(xié)議。一個(gè)通用、抽象的框架應(yīng)該包含所有我們能想到的模糊測(cè)試過程中用到的所有通用功能,并且能方便用戶擴(kuò)展,以便用來攻擊特定目標(biāo)。
特性
心中有了這樣的目標(biāo),以下的特性就非常重要:
1、模塊性:fuzzer的每一個(gè)部分都是獨(dú)立的,這意味著你能夠用相同的監(jiān)視代碼監(jiān)控不同的程序,用相同的載荷生成工具(aka Data Model)生成的數(shù)據(jù)可以在不同的信道中傳遞;
2、擴(kuò)展性:如過你想測(cè)試新的東西,不需要修改Kitty的核心代碼。即便不是所有,大部分功能應(yīng)該在用戶代碼中實(shí)現(xiàn)。這包括監(jiān)視,控制以及和被fuzz的目標(biāo)的通信;
3、豐富的數(shù)據(jù)模型:數(shù)據(jù)模型的核心要豐富,能夠描述高級(jí)的數(shù)據(jù)結(jié)構(gòu),包括字符串,哈希,長度,條件及其它。而且和其它框架一樣,還要設(shè)計(jì)好,將來需要的時(shí)候可以擴(kuò)展;
4、狀態(tài)性:支持多階段的模糊測(cè)試。不僅要能描述單獨(dú)消息的載荷應(yīng)該是什么樣,還要能描述消息的順序,甚至按照順序進(jìn)行fuzzing;
5、客戶端和服務(wù)端fuzzing:假設(shè)你有一個(gè)配對(duì)的程序棧,你可以對(duì)服務(wù)端和客戶端進(jìn)行fuzz。這聽起來是一個(gè)很高的要求,但實(shí)際上不是:只需要你像通常一樣能夠和目標(biāo)通信即可;
6、跨平臺(tái):可以在Linux,OS X和Windows上運(yùn)行。
它不是XX
好吧,Kitty不是一個(gè)模糊測(cè)試器。它包含了還未實(shí)現(xiàn)的特定的協(xié)議或者通信通道。你可以用它寫一個(gè)自己的模糊測(cè)試器,你同樣可以用其它的基于Kitty的代碼,但是它不是一個(gè)開箱即用的模糊測(cè)試器。獲取Kitty模型實(shí)現(xiàn)的一個(gè)好去處是Katnip。
Katnip
Kitty,作為一個(gè)框架,實(shí)現(xiàn)了模糊測(cè)試器的主循環(huán),并且提供了用于創(chuàng)建一個(gè)完整的fuzzing會(huì)話所需要的數(shù)據(jù)模型和基類的語法。然而,特定類的實(shí)現(xiàn)并不是Kitty框架的一部分。這意味著,Kitty定義了與目標(biāo)進(jìn)行數(shù)據(jù)傳遞的接口和基類,但是沒有提供HTTP,TCP或者UART之上的數(shù)據(jù)傳輸實(shí)現(xiàn)。各種類的實(shí)現(xiàn)可以在附贈(zèng)的軟件倉庫Katnip Github中找到。
接下來是什么?
安裝Kitty:
pip install git+https://github.com/cisco-sas/kitty.git#egg=kitty
閱讀這里的文檔。
構(gòu)建自己的fuzzer。
如果需要幫助,可以詢問我們的Google group。