天天看點

Kitty:Python語言編寫的Fuzzing架構

kitty是一款用python語言編寫的開源的子產品化、可擴充的模糊測試架構,靈感來源于openrce’s sulley 和 michael eddington的 (現在為deja vu security的) peach fuzzer 。

目标

我們開始寫kitty的時候,目的是幫助我們fuzz特殊的目标。也就就是運作于非tcp/ip通道上的私有和内部協定。一個通用、抽象的架構應該包含所有我們能想到的模糊測試過程中用到的所有通用功能,并且能友善使用者擴充,以便用來攻擊特定目标。

Kitty:Python語言編寫的Fuzzing架構

特性

心中有了這樣的目标,以下的特性就非常重要:

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。

作者:felix

來源:51cto