1. 程式人生 > >模糊測試框架 Sulley 使用手記 (一)

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

在最近專案的測試中,我們引入了模糊測試(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狀態,然後測試繼續,夠直接吧,呵呵。

網上關於Sulley的資料不多,在這裡做點筆記,供大家參考。


什麼是模糊測試(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

相關推薦

Selenium測試結果視覺化工具--Sahagin測試框架使用入門

@Test public void inquiryTest_2() { wd.get("http://www-demo.trident-qa.com/en/contact/"); wd.findElement(By.name("your-name")).clear(); wd.find

Testng 測試框架原始碼閱讀

首先看下 maven-surefire 通過testng拉起單測,執行異常的日誌(有助於我們理解testng中呼叫關係): java.lang.instrument.IllegalClassFormatException: Error while instrumentin

ApiTesting全鏈路自動化測試框架 - 初版釋出

簡介 此框架是基於Python+Pytest+Requests+Allure+Yaml+Json實現全鏈路介面自動化測試。 主要流程:解析介面資料包 ->生成介面基礎配置(yml) ->生成測試用例(yaml+json) ->生成測試指令碼(.py) ->執行測試(pyte

模糊測試框架 Sulley 使用手記

在最近專案的測試中,我們引入了模糊測試(Fuzz testing)。在這個過程中,接觸到了Sulley,一款用Python實現的用於網路協議fuzz testing的開源測試框架。跟其他的開源工具比起

Java框架學習_SpringMVCSpringMVC的配置和測試使用、SpringMVC的核心架構

SpringMVC+Spring+Mybatis+Maven,SpringMVC是Spring家族的前端框架,具體概念請百度,下面建立工程直接擼 1、SpringMVC的配置和簡單測試使用: 匯入jar包:springmvc所用jar包 工程目錄: 編寫Hell

劍英的區塊鏈學習手記

strong mage git 人生 極客 lease 黑錢 開篇 png 開篇布拉拉 因為參與了小蟻的c#智能合約編譯器的開發,讓我第一次近距離接觸到區塊鏈技術。 以前我對區塊鏈技術的了解,只知道有一種叫做比特幣的玩意兒,以前有同事在幾百塊一個比特幣的時候屯了一批,後

Dubbo框架應用之--服務體系

white 部件 esp 恢復 fonts resp auto zh-cn 通過 Dubbo 是阿裏巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,能夠和 Spring框架無縫集成,也是一個很全面的

OPENCV----在APP性能測試中的應用

核心 color frame pan ems span urn sqrt || 應用項目: APP的性能測試 應用場景: APP啟動速度 視頻開播速度 加載速度 等~~ 緣來: 基於APP日誌和UiAutomator的測試方案,測試結果不能直白且精確的

SSH框架學習------struts2

str struts2 oct 簡單 src package efi struts2配置 html 1.總的目錄 2.所有程序 1)index.jsp很簡單 <%@ page language="java" contentType="text/html; chars

shell中條件測試常用的語法

shell中條件測試常用的語法     shell   bashshell中條件測試常用的語法(一)執行條件測試表達式後通常會返回“真”或“假”,就像執行命令後的返回值為0表示真,非0表示假一樣。在bash編程裏,條件測試常用的語法形式如下:說明:(1)語法1與語法2是等價的,

Web網站的測試流程和方法

不同的 ui測試 放置 有時 測試流程 數據 測試的 雲測 切換 近期,Alltesting的眾測平臺  有不少web網站的功能測試項目,像:  農事GERP種植系統   雲測試平臺   頭號專家網項目第三輪功能測試   於是,有些新加入眾測平臺的

AVFoundation 框架初探究

device 延時 dede 指定 來電 reat 基本 oops iop 夜深時動筆 前面一篇文章寫了視頻播放的幾種基本的方式,算是給這個系列開了一個頭,這裏面最想說和探究的就是AVFoundation框架,很想把這個框架不敢說是完全理解,但

測試平臺開發記錄

文檔 直接 重新整理 繼續 框架 運行 自動化 一點 開發 最近幾個月最主要的工作就是測試平臺開發,由於內容比較多,我計劃分幾期來討論。 提到“測試平臺”測試會覺得比較高大上,其實就是“xx測試管理系統”,既然是一個管理系統,又是主要服務於測試的,所以,主要功能就是:管理接

Java NIO框架Netty教程 – Hello Netty

tex highlight bsp ret 開發 包括 tor 習慣 事件機制 先啰嗦兩句,如果你還不知道Netty是做什麽的能做什麽。那可以先簡單的搜索了解一下。我只能說Netty是一個NIO的框架,可以用於開發分布式的Java程序。具體能做什麽,各位可以盡量發揮想象。技

測試環境docker化—基於ndp部署模式的docker基礎鏡像制作

XML spl nec 快速部署 onf 問題 java 加載 ons 本文來自網易雲社區作者:孫婷婷背景我所在測試項目組目前的測試環境只有一套,在項目版本叠代過程中,開發或產品偶爾會在測試環境進行數據校驗,QA人數在不斷增加,各個人員在負責不同模塊工作時也會產生臟數據,導

JAVA並行框架Fork/Join:簡介和代碼示例

over 框架設計 put 分割 gif 得到 java owa trace 一、背景 雖然目前處理器核心數已經發展到很大數目,但是按任務並發處理並不能完全充分的利用處理器資源,因為一般的應用程序沒有那麽多的並發處理任務。基於這種現狀,考慮把一個任務拆分成多個單元,每個單元

搭建ssh框架項目

pass figure 映射文件 ttext nsa Coding word map cti 一、創建web項目 二、導入jar包 三、創建數據庫(MySQL) 四、建立javaBean對象(ElecText.java),屬於持久層對象(PO對象) package

初始Spring Boot框架筆記整理

“約定大於配置” 特點 編輯 1. 建立獨立的Spring應用程式 2. 嵌入的Tomcat,無需部署WAR檔案 3. 簡化Maven配置 4. 自動配置Spring 5. 提供生產就緒型功能,如指標,健康檢查和外部配置

個人的武林:滲透測試常規思路分析

寫在前面 滲透測試是門技術,也是一門藝術。 這門技術(藝術)一開始也不是每個人都會的,正所謂沒有人一出生就會走路,從不懂到入門到深諳,一步步慢慢來,每個人都是這樣;但是在這個過程中,思路無疑是最重要的,沒有做不到只有想不到,就跟咱們高中解題時有了思路就迎刃而解一樣,手裡拿著鏟子(技巧知識)但不是道從何挖起

Spring框架入門教程——框架簡介

介紹 Spring是一個分層的(一站式) 輕量級開源框架 Spring的核心是控制反轉(IoC)和麵向切面(AOP) 為什麼說分層一站式呢? javaEE分三層開發 WEB層,業務層,持久層。在ssh整合框架中s == Struts2, s == spring,h