模糊測試對單元測試應用

大綱

-測試總領
-模糊測試基本介紹
-模糊測試案例---OpenSSLbug_心臟出血
-模糊測試工具-go-fuzz介紹
-模糊測試go-fuzz應用案例

測試總領

  • image.png

模糊測試—簡單而不平凡

-概念:一種通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。
-技巧:自動模糊測試不去猜測哪個數據會導致破壞(就像人工測試員那樣),而是將盡可能多而雜亂數據投入程序中。去驗證程序對失敗模式處理情況通常對程序員來說是個徹底的震撼,因為任何按邏輯思考的人都不會想到這種失敗。
-運行時間:24 小時對程序進行模糊測試而其依然無事,那么隨后同種類型的攻擊就不大可能再危及到它。增加了程序健壯性及抵御意外輸入的安全性的自信心
-應用:單元測試、接口測試、集成測試
-測試工具: Spike,Bunny,teenage mutant ninja turtles,sulley,oss-fuzz, jFuzz(java) go-fuzz(go)
-常見問題:內存分配錯誤及緩沖器溢出的結果。

模糊測試案例---OpenSSLbug_心臟出血

  • image.png

    image.png

Go-fuzz 原理介紹—流程

  • -> 生成隨機數據
    -> 輸入給程序
    -> 觀察是否有crash
    -> 如果發現crash,則獲益
    之后開發者根據crash的結果,嘗試fix bug,并
    添加針對這個bug的單元測試case。

Go-fuzz 原理介紹—遺傳算法生成數據策略

-* Insert/remove/duplicate/copy a random range of random bytes.
-* Bit flip.
-* Swap 2 bytes.
-* Set a byte to a random value.
-* Add/subtract from a byte/uint16/uint32/uint64 (le/be).
-* Replace a byte/uint16/uint32 with an interesting value (le/be).
-* Replace an ascii digit/number with another digit/number.
-* Splice another input.
-* Insert a part of another input.
-* Insert a string/int literal.
-* Replace with string/int literal.

Go-fuzz

-https://github.com/dvyukov/go-fuzz/

image.png

它是一個函數

-
image.png

它是一個BUG

-
image.png

寫單元測試用例

-
image.png

單元測試用例執行

-
image.png

它是一個BUG

-
image.png

Go-fuzz應用---Bug_fuzz.go

-
image.png

Go-fuzz應用---執行過程

image.png

image.png

image.png

image.png

它是一個BUG

-
image.png

測試工具支持分布式

image.png

會用測試工具程序員是好的程序員

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容