在內(nèi)部應(yīng)用安全測(cè)試中使用模糊測(cè)試
問(wèn):一位研究員最近用模糊測(cè)試發(fā)現(xiàn)了許多蘋果和微軟的漏洞。在內(nèi)部軟件開發(fā)過(guò)程中如何使用模糊測(cè)試來(lái)發(fā)現(xiàn)漏洞呢?
答:現(xiàn)在,很多軟件開發(fā)員、正規(guī)的安全研究者和網(wǎng)絡(luò)罪犯都在使用模糊測(cè)試技術(shù)——一種用大量無(wú)效的、意料之外的,或者隨機(jī)的數(shù)據(jù)來(lái)轟擊運(yùn)行中的程序的輸入的技術(shù)——來(lái)測(cè)試代碼的堅(jiān)固性。如果模糊數(shù)據(jù)導(dǎo)致程序在響應(yīng)這個(gè)參數(shù)操作時(shí)出現(xiàn)失效、崩潰、鎖起、消耗內(nèi)存,或者不可控制的錯(cuò)誤的話,開發(fā)者或研究者就會(huì)知道代碼中存在缺陷。這就是模糊工具常被稱為錯(cuò)誤注入器的原因,而模糊測(cè)試也被稱為堅(jiān)固性測(cè)試或者負(fù)面測(cè)試。最初的模糊工具Fuzz是Wisconsin Madison大學(xué)的教授Barton Miller和他的學(xué)生們?cè)?989年開發(fā)的。
微軟通過(guò)運(yùn)行上百萬(wàn)次的模糊測(cè)試在Office2010中發(fā)現(xiàn)了超過(guò)1800個(gè)錯(cuò)誤,這些測(cè)試不光在他們實(shí)驗(yàn)室的機(jī)器上運(yùn)行,也在他們公司內(nèi)部的閑置個(gè)人計(jì)算機(jī)上運(yùn)行。早期模糊測(cè)試需要測(cè)試員在一臺(tái)機(jī)器上設(shè)置一個(gè)模糊測(cè)試軟件,然后讓它運(yùn)行一個(gè)星期。我認(rèn)為你的應(yīng)用程序不太會(huì)和微軟Office一樣大型和復(fù)雜,但是可以肯定模糊測(cè)試一樣會(huì)在你的軟件開發(fā)生命周期中發(fā)揮作用。
由于模糊測(cè)試生成無(wú)效的輸入,它對(duì)測(cè)試錯(cuò)誤處理流程和發(fā)現(xiàn)緩沖區(qū)溢出、拒絕服務(wù)(DoS)、SQL注入、跨站點(diǎn)腳本(XSS)和格式化字符串漏洞很有效果。它在發(fā)現(xiàn)C或者C++程序中和內(nèi)存相關(guān)的漏洞(可能會(huì)成為安全漏洞)方面也很有用。顯然,你需要保存模糊測(cè)試中所生成的數(shù)值,并保留模糊測(cè)試器所生成的任何debug信息,這樣如果發(fā)生了一個(gè)錯(cuò)誤,你就可以重現(xiàn)它。實(shí)現(xiàn)這一目的的***辦法是建立一個(gè)簡(jiǎn)單的測(cè)試來(lái)隔離錯(cuò)誤,并使得問(wèn)題更容易理解和解決。
模糊測(cè)試的一個(gè)常見方式是定義危險(xiǎn)值列表,也就是模糊載體,然后把它們注入到程序中。例如,在程序要求輸入正的整數(shù)的時(shí)候,你應(yīng)該給它輸入零、負(fù)數(shù)以及很大的數(shù)字。對(duì)字符,你會(huì)輸入可識(shí)別的字符、引用和系統(tǒng)命令,而如果應(yīng)用程序讀取或者使用其他文件,你會(huì)給它發(fā)送損壞的或者意料之外的文件格式。不過(guò)一個(gè)模糊測(cè)試器對(duì)應(yīng)用了解的越多,就越不太可能發(fā)現(xiàn)“非常規(guī)”錯(cuò)誤。所以一些程序員喜歡使用窮舉和隨機(jī)的方法,不用對(duì)軟件行為有任何的預(yù)知。模糊測(cè)試可以幫助發(fā)現(xiàn)潛在的邏輯錯(cuò)誤,但是要重現(xiàn)那個(gè)引起程序邏輯錯(cuò)誤的事件和值可能會(huì)很困難。由于不同的模糊測(cè)試器會(huì)發(fā)現(xiàn)不同的漏洞,用不同的測(cè)試器運(yùn)行不同的測(cè)試可能會(huì)很有用。你可以嘗試的一些免費(fèi)的測(cè)試器包括JbroFuzz、WSFuzzer、Powerfuzzer和SPIKE。
在內(nèi)部軟件的開發(fā)流程中增加模糊測(cè)試肯定會(huì)提高軟件的可靠性和安全性,因?yàn)樗梢园l(fā)現(xiàn)那些通常代碼檢查和人工測(cè)試很難發(fā)現(xiàn)的錯(cuò)誤。由于這個(gè)方式涉及到使用那些被黑客用來(lái)發(fā)現(xiàn)漏洞的工具,它還可能幫你趕在黑客之前發(fā)現(xiàn)漏洞。但是,模糊測(cè)試需要與其他測(cè)試技術(shù)相結(jié)合;模糊器不總能發(fā)現(xiàn)那些不會(huì)引起程序崩潰的漏洞,例如加密或者其他的數(shù)據(jù)保護(hù)流程的不足。重要的是要把模糊測(cè)試作為一個(gè)漏洞發(fā)現(xiàn)方式,而不是一種質(zhì)量保證方式。
【編輯推薦】