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