大綱
-測試總領(lǐng)
-模糊測試基本介紹
-模糊測試案例---OpenSSLbug_心臟出血
-模糊測試工具-go-fuzz介紹
-模糊測試go-fuzz應(yīng)用案例
測試總領(lǐng)
image.png
模糊測試—簡單而不平凡
-概念:一種通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法博个。
-技巧:自動模糊測試不去猜測哪個數(shù)據(jù)會導(dǎo)致破壞(就像人工測試員那樣)三幻,而是將盡可能多而雜亂數(shù)據(jù)投入程序中邢隧。去驗證程序?qū)κ∧J教幚砬闆r通常對程序員來說是個徹底的震撼,因為任何按邏輯思考的人都不會想到這種失敗隶糕。
-運行時間:24 小時對程序進(jìn)行模糊測試而其依然無事瓷产,那么隨后同種類型的攻擊就不大可能再危及到它。增加了程序健壯性及抵御意外輸入的安全性的自信心
-應(yīng)用:單元測試枚驻、接口測試濒旦、集成測試
-測試工具: Spike,Bunny再登,teenage mutant ninja turtles尔邓,sulley,oss-fuzz, jFuzz(java) go-fuzz(go)
-常見問題:內(nèi)存分配錯誤及緩沖器溢出的結(jié)果锉矢。
模糊測試案例---OpenSSLbug_心臟出血
image.png
image.png
Go-fuzz 原理介紹—流程
- -> 生成隨機(jī)數(shù)據(jù)
-> 輸入給程序
-> 觀察是否有crash
-> 如果發(fā)現(xiàn)crash梯嗽,則獲益
之后開發(fā)者根據(jù)crash的結(jié)果,嘗試fix bug沈撞,并
添加針對這個bug的單元測試case慷荔。
Go-fuzz 原理介紹—遺傳算法生成數(shù)據(jù)策略
-* 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
它是一個函數(shù)
-image.png
它是一個BUG
-image.png
寫單元測試用例
-image.png
單元測試用例執(zhí)行
-image.png
它是一個BUG
-image.png
Go-fuzz應(yīng)用---Bug_fuzz.go
-image.png
Go-fuzz應(yīng)用---執(zhí)行過程
image.png
image.png
image.png
image.png
它是一個BUG
-image.png