模糊測試框架 Sulley 使用手記 (一)

2021-05-11 02:18:11 字數 1839 閱讀 1640

在最近專案的測試中,我們引入了模糊測試(fuzz testing)。在這個過程中,接觸到了sulley,一款用python實現的用於網路協議fuzz testing的開源測試框架。跟其他的開源工具比起來,使用上比較靈活,而且也很方便。

舉例來說,在測試過程中如果出現了目標程式crashing的情況,會導致後續的測試無法繼續進行下去。針對這種情況,sulley提供了乙個用python實現的程序監控的agent(process_monitor.py),它的功能就是類似於watchdog,一旦檢測到程式崩潰,會自動重啟目標程式,使後續測試能順利進行下去。如果程式的內部資料,比如某些配置已經由於之前的fuzz testing被破壞掉了,只是簡單重啟目標程式還不足以讓後續的測試正常的進行,可以選擇在測試之初,直接把目標程式裝在vmware虛擬機器上,同樣的,sulley也提供了乙個用來控制vmware虛擬機器的agent(vmcontrol.py),可以完成對虛擬機器及snapshot的操作。有個這個agent的協助,我們可以在目標程式環境準備好之後但是測試開始之前,對虛擬機器做個vsnapshot,然後在測試開始之後,一旦發現crash,可以利用這個agent直接把虛擬機器rollback到之前預存好的snapshot狀態,然後測試繼續,夠直接吧,呵呵。

什麼是模糊測試(fuzz testing)

模糊測試(fuzz testing),根據wiki上給出的

定義,就是指一種軟體測試方法:通過給程式提供不合法的,沒有考慮到的,隨機的輸入,一旦程式出錯了(比如crashing,或斷言失敗),則bug被發現。根據程式輸入的不同,模糊測試可以應用在很多方面,比如檔案格式,網路協議,環境變數,鍵盤,滑鼠事件,資料庫,共享記憶體等,當然最常見的還是檔案格式和網路協議。

根據這個定義,要成功實施fuzz testing找出程式中的bug,在測試過程中我們需要解決以下2個問題:

- 如何生成隨機但有效的輸入

- 何能夠對目標程式監控以保證及時地發現, 定位目標程式錯誤

而這也正是模糊測試工具力**決的問題。

什麼是sulley

」工欲善其實,必先利其器「,為了能更方便地進行fuzz testing,工具自然是少不了的。

sulley

,正是一款用python實現的開源fuzz testing框架,主要應用於網路協議方面的測試. 目前現在關於這方面的測試工具也挺不少,不管是開源的(比如歷史悠久的

spike

, 或者是本文介紹的

sulley

)還是商業的(比如

mu dynamics

公司的產品

),更多可以看這裡.

事實上,在sulley出來之前,這方面的工具已經有一些了,但是為什麼sulley的作者還要選擇重新造輪子呢?根據sulley的文件,他這麼做的理由是,當時已有的工具主要是專注在」資料生成「部分,而僅僅做到這一步對sulley是不夠的,因為sulley設計的目標是:不僅要簡化資料生成,同樣要簡化與目標系統的之間的資料傳輸,以及目標系統的監控。因此我們可以把剛才這段話理解成,sulley要做的是乙個能支援fuzz testing的整個測試流程的框架。在這一點上,顯然sulley的定位比起之前的工具高出了很多。而且事實上,sulley的作者也不算是在造乙個全新的輪子,比如在具體實現sulley的時候,他也借鑑了一些當時已經成熟很成熟的fuzz框架(spike)的經驗,比如用「塊」結構的方式來構造資料,這點從sulley構造request所用的api介面就可以看出來,包括對於特定資料型別所用到的fuzz library也都直接從spike拿過來,這些內容,我們會在後面的文章中介紹。

好了,基本的背景知識了解完畢,

接下來我們會開始介紹sulley的整個框架中四個主要的組成部分:資料表示,會話管理,agent 以及 utilities.

(待續……)

by kevin.y

ruoyi cloud若依微服務框架使用手冊

一 若依微服務框架ruoyi cloud建立自己的業務微服務 選擇m en,下一步 選擇父專案 編輯專案名稱 finish 修改bootatrao.yaml埠等配置資訊 修改logback日誌存放位址 配置nacos 點選ruoyi system dev.ym檔案,轉殖並且重新命名為ruoyi mo...

使用bamboo測試框架

bamboo測試框架好用是好用,但是有一套規則,必須按這套規則寫,才能順利地跑起來。下面是幾大規則 list 1 測試 的檔案必須取名 tests.lua 測試 檔案必須引入測試框架 local testing require bamboo.testing 測試 中使用telescope lua測試...

使用CxxTest測試框架

vs2003中使用cxxtest測試框架 2.假設測試專案project1。在project1目錄新建新建空白專案testpriject1。3.開啟專案屬性,修改屬性 生成事件 預生成事件 新增命令 cxxtestgen.pl error printer o runner.cpp h 4.修改屬性 ...