大綱
-測試總領
-模糊測試基本介紹
-模糊測試案例---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