笔记整理-信息系统开发基础-软件测试-模糊测试
模糊測試(Fuzzing),是一種通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法。
在模糊測試中,用隨機壞數(shù)據(jù)(也稱做fuzz)攻擊一個程序,然后等著觀察哪里遭到了破壞。模糊測試的技巧在于它是不符合邏輯的。
自動模糊測試不去猜測哪個數(shù)據(jù)會導(dǎo)致破壞(就像人工測試員那樣),而是將盡可能多的雜亂數(shù)據(jù)投入程序中。由這個測試驗證過的失敗模式通常對程序員來說是個徹底的震憾,因為任何按邏輯思考的人都不會想到這種失敗。
模糊測試是一項簡單的技術(shù),但它卻能揭示出程序中的重要bug。它能夠驗證出現(xiàn)實世界中的錯誤模式并在您的軟件發(fā)貨前對潛在的應(yīng)當(dāng)被堵塞的攻擊渠道進(jìn)行提示。
以下內(nèi)容轉(zhuǎn)載自:https://blog.csdn.net/qq_41453285/article/details/102058343
一、模糊測試的概念
一種通過向目標(biāo)系統(tǒng)提供非預(yù)期的輸入并監(jiān)視異常結(jié)果來發(fā)現(xiàn)軟件漏洞的方法。
二、模糊測試各階段
確定測試目標(biāo)
- 只有有了明確的測試目標(biāo)后,我們才能決定使用的模糊測試工具或方法。如果要在安全審計中對一個完全由內(nèi)部開發(fā)的應(yīng)用進(jìn)行模糊測試,測試目標(biāo)的選擇必須小心謹(jǐn)慎。但如果是要在第三方應(yīng)用中找到安全漏洞,測試目標(biāo)的選擇就更加靈活。要決定第三方應(yīng)用模糊測試的測試目標(biāo),首先需要參考該第三方應(yīng)用的供應(yīng)商歷史上曾出現(xiàn)過的安全漏洞。在一些典型的安全漏洞聚合網(wǎng)站如 SecurityFocus 18 和 Secunia 19 上可以查找到主要軟件供應(yīng)商歷史上曾出現(xiàn)過的安全漏洞。如果某個供應(yīng)商的歷史記錄很差,很可能意味著這個供應(yīng)商的代碼實踐 (code practice)能力很差,他們的產(chǎn)品有仍有很大可能存在未被發(fā)現(xiàn)的安全漏洞。除應(yīng)用程序外,應(yīng)用包含的特定文件或庫也可以是測試目標(biāo)。
- 如果需要選擇應(yīng)用包含的特定文件或者庫作為測試目標(biāo),你可以把注意力放在多個應(yīng)用程序之間共享的那些二進(jìn)制代碼上。因為如果這些共享的二進(jìn)制代碼中存在安全漏洞,將會有非常多的用戶受到影響,因而風(fēng)險也更大。
確定輸入向量
幾乎所有可被利用的安全漏洞都是因為應(yīng)用沒有對用戶的輸入進(jìn)行校驗或是進(jìn)行必要的非法輸入處理。是否能找到所有的輸入向量(input vector)是模糊測試能否成功的關(guān)鍵。如果不能準(zhǔn)確地找到輸入向量,或是不能找到預(yù)期的輸入值,模糊測試的作用就會受到很大的局限。有些輸入向量是顯而易見的,有些則不然。尋找輸入向量的原則是:從客戶端向目標(biāo)應(yīng)用發(fā)送的任何東西,包括頭(headers)、文件名(file name)、環(huán)境變量(environment variables),注冊表鍵(registry keys),以及其他信息,都應(yīng)該被看做是輸入向量。所有這些輸入向量都可能是潛在的模糊測試變量
生成模糊測試數(shù)據(jù)
一旦識別出輸入向量,就可以依據(jù)輸入向量產(chǎn)生模糊測試數(shù)據(jù)了。究竟是使用預(yù)先確定的值、使用基于存在的數(shù)據(jù)通過變異生成的值、還是使用動態(tài)生成的值依賴于被測應(yīng)用及其使用的數(shù)據(jù)格式。但是,無論選擇哪種方式,都應(yīng)該使用自動化過程來生成數(shù)據(jù)。
執(zhí)行模糊測試數(shù)據(jù)
該步驟緊接上一個步驟,正是在這個步驟,“模糊測試”變成了動詞。在該步驟中,一般會向被測目標(biāo)發(fā)送數(shù)據(jù)包、打開文件、或是執(zhí)行被測應(yīng)用。同上一個步驟一樣,這個步驟必須是自動化的。否則,我們就不算是真正在開展模糊測試。
監(jiān)視異常
一個重要但經(jīng)常容易被忽略的步驟是對異常和錯誤進(jìn)行監(jiān)控。設(shè)想我們在進(jìn)行一次模糊測試,在測試中,我們向被測的 Web 服務(wù)器發(fā)送了 10000 個數(shù)據(jù)包,最終導(dǎo)致了服務(wù)器崩潰。但服務(wù)器崩潰后,我們卻怎么也找不到導(dǎo)致服務(wù)器崩潰的數(shù)據(jù)包了。如果這種事真的發(fā)生了,我們只能說這個測試毫無價值。模糊測試需要根據(jù)被測應(yīng)用和所決定采用的模糊測試類型來設(shè)置各種形式的監(jiān)視。
判定發(fā)現(xiàn)的漏洞是否可能被利用
如果在模糊測試中發(fā)現(xiàn)了一個錯誤,依據(jù)審計的目的,可能需要判定這個被發(fā)現(xiàn)的錯誤是否是一個可被利用的安全漏洞。這種判定過程是典型的手工過程,需要操作者具有特定的安全知識。這個步驟不一定要由模糊測試的執(zhí)行者來進(jìn)行,也可以交給其他人來進(jìn)行。
三、模糊測試的使用流程
- 從源碼編譯時進(jìn)行插樁(插樁:類似于斷點,但是在程序運行的時候不會斷下來,而是記錄下來)
- 進(jìn)行輸入文件的選擇,進(jìn)行初始fuzzing
- 選擇策略和腳本,進(jìn)行初始fuzzing數(shù)據(jù)的突變
- 循環(huán)進(jìn)行,并且記錄觸發(fā)了的crash或者時間、長度等
四、模糊測試的注意事項
五、模糊測試器(fuzzer)
分類,、模糊測試工具按概念分為兩類:
- 基于變異(mutation-based):這一類測試器通過對已有的數(shù)據(jù)樣本進(jìn)行變異來創(chuàng)建測試用例
- 基于生成(generation-based):該類測試器為被測系統(tǒng)使用的協(xié)議或是文件格式建模,基于模型生成輸入并據(jù)此創(chuàng)建測試用例。這兩種模糊測試器各有其優(yōu)缺點
1.通用的開源框架
AFL、LibFuzzer、honggfuzz等(這些在GitHub或網(wǎng)上都可以找到)
2.不開源的
burpsuite等
演示案例:
RIPS代碼審計工具,見文章:https://blog.csdn.net/qq_41453285/article/details/100802295
XssFuzzing代碼審計工具,見文章:https://blog.csdn.net/qq_41453285/article/details/102055857
Seay代碼審計工具,見文章:https://blog.csdn.net/qq_41453285/article/details/102057007
總結(jié)
以上是生活随笔為你收集整理的笔记整理-信息系统开发基础-软件测试-模糊测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔记-项目进度管理-资源平衡和资源平滑
- 下一篇: 笔记整理-信息系统开发基础-软件测试-灰