背景:近年來,隨著信息技術的發(fā)展,各種新型自動化測試技術如雨后春筍般出現(xiàn)。其中,模糊測試(fuzz testing)技術開始受到行業(yè)關注,它尤其適用于發(fā)現(xiàn)未知的、隱蔽性較強的底層缺陷。這里,我們將結合AFL開源工具,對模糊測試的基本概念和流程進行說明。
01、模糊測試的定義
模糊測試的核心思想是,根據(jù)一定的規(guī)則,自動或半自動生成的隨機數(shù)據(jù),然后將產生的數(shù)據(jù)輸入到程序中,并監(jiān)視程序是否有異常出現(xiàn),以發(fā)現(xiàn)可能的程序錯誤,如內存泄漏、系統(tǒng)崩潰、未處理的異常等。
當一個模糊測試生成器開始啟動并運行后,它將自己尋找漏洞,并不需要人工干預,非常有助于發(fā)現(xiàn)傳統(tǒng)測試方法或手動審計無法檢測到的缺陷。
模糊測試包括幾個基本的測試步驟:確定被測系統(tǒng)->給定輸入->生成測試用例->灌入用例進行測試->監(jiān)控目標程序情況->輸出崩潰日志。
圖一:模糊測試流程
02、測試用例生成算法
模糊測試用例的生成算法主要有兩種:
1)基于變異:根據(jù)已知數(shù)據(jù)樣本,通過變異的方法生成新的測試用例;
例如對一個圖片文件進行變異,用戶需要提供一個相應格式的圖片文件,變異生成器會基于該圖片進行變異。著名的開源模糊測試工具AFL就是基于變異生成用例。
2)基于生成:根據(jù)已知的協(xié)議或接口規(guī)范,建模并生成測試用例;
某些程序可能對輸入有嚴格的規(guī)則要求,例如必須是SQL語句、或者給定的協(xié)議規(guī)范等。測試引擎需要在測試前預先學習對應的語法語義規(guī)則,對其進行建模,在此基礎上才能變異出有效的測試用例。?
03、測試工具介紹
當前已經有很多開源的模糊測試工具,其中使用較為廣泛的是AFL(American Fuzzy Lop),由谷歌工程師邁克爾·扎里斯基(Michal Zalewski)開發(fā),該項目已經由Github托管。
在執(zhí)行前,需要對被測程序源碼進行插樁
(instrumentation),以獲知被測程序的運行信息。在執(zhí)行過程中,它通過記錄輸入樣本的代碼覆蓋率,從而調整輸入樣本以提高覆蓋率,增加發(fā)現(xiàn)漏洞的概率。其工作流程大致如下:
1. 從源碼編譯程序時進行插樁,以記錄代碼覆蓋率;
2. 選擇一些輸入文件,作為初始測試集加入輸入隊列;
3. 將隊列中的文件按一定的策略進行“突變”;
4. 如果經過變異文件更新了覆蓋范圍,則將其保留添加到隊列中;
5. 上述過程一直循環(huán)進行,期間觸發(fā)crash的文件會被記錄下來。
圖二:AFL模糊測試的基本流程
AFL的優(yōu)點是可以輕松部署,配置相對簡單,測試效率相對較高。原生的AFL僅適配于C/C++程序的測試,不過目前已經衍生出很多分支,用于適配其他語言的模糊測試,如針對JAVA程序的Kelinci等。
04、用例變異方式
AFL是采用遺傳算法,基于變異生成的測試用例,變異的主要類型有下面這幾種:
· Bit flip,按位翻轉,1變?yōu)?,0變?yōu)?
· Arithmetic,整數(shù)加/減算術運算
· Interest,把一些特殊內容替換到原文件中
· Dictionary,把自動生成或用戶提供的token替換或插入到原文件中
· Havoc,又稱“大破壞”,是前面幾種變異的組合
· Splice,又稱“絞接”,將兩個文件拼接起來得到一個新文件
AFL需要一些初始輸入數(shù)據(jù)(也稱種子文件)作為模糊測試的起點,這些輸入可以是毫無意義的數(shù)據(jù)。AFL通過上述方式自動確定文件的格式和結構。當輸入隊列中的全部文件都完成變異測試,則完成了一個Cycle(周期),如果用戶不停止執(zhí)行,種子文件將會不斷變異下去。
圖三:AFL監(jiān)控臺,顯示當前為Cycle 6, Splice 12階段
扎里斯基曾經給出一個有趣的例子,對djpeg(一個Linux系統(tǒng)上的圖像處理程序)進行模糊測試,在僅初始輸入“hello”字符串的情況下,最后憑空生成了大量jpeg的圖像。
綜上所述,我們簡要介紹了模糊測試的概念以及開源工具AFL的測試流程,歡迎持續(xù)關注。
最后如果你想學習自動化測試和需要軟件測試資料,歡迎加入筆者的交流群:320231853,里面會有很多測試資源和大佬答疑解惑,我們一起交流一起學習!
搜索文章來源:http://www.zghlxwxcb.cn/news/detail-733869.html
復制文章來源地址http://www.zghlxwxcb.cn/news/detail-733869.html
到了這里,關于7年經驗之談 —— 什么是模糊測試?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!