1. 首先確定您的目標(biāo)
確定您是否只是在尋找安全性問(wèn)題潘鲫,還是在尋找所有類型的正確性問(wèn)題媚创。Fuzzing發(fā)現(xiàn)了許多在正常使用中可能永遠(yuǎn)不會(huì)遇到的低嚴(yán)重性問(wèn)題秋泳。這些可能看起來(lái)與安全漏洞完全相同脊凰,唯一的區(qū)別是沒(méi)有跨越信任邊界蜜葱。例如钠右,如果您模糊測(cè)試了一個(gè)只期望輸入來(lái)自受信任工具的輸出的工具邪意,您可能會(huì)發(fā)現(xiàn)許多在正常使用中永遠(yuǎn)不會(huì)遇到的崩潰综芥。是否有其他方法將造成崩潰的測(cè)試樣例輸入到工具中?如果是這樣丽蝎,您就發(fā)現(xiàn)了一個(gè)安全漏洞;如果不是這樣,那么您就發(fā)現(xiàn)了一個(gè)可能永遠(yuǎn)無(wú)法修復(fù)的低優(yōu)先級(jí)正確性問(wèn)題膀藐。項(xiàng)目是否愿意處理所有發(fā)現(xiàn)的問(wèn)題征峦,或者只處理安全性問(wèn)題?通過(guò)預(yù)先設(shè)置動(dòng)態(tài)分析的期望,您可以為自己節(jié)省大量的時(shí)間和挫折消请。
2. 明確您的信任邊界
明確并記錄應(yīng)該在哪里檢查錯(cuò)誤栏笆。對(duì)于像我這樣的安全專家來(lái)說(shuō),創(chuàng)建一個(gè)強(qiáng)安全性的心理模型是很容易的臊泰,在這個(gè)模型中蛉加,每個(gè)函數(shù)都防御地檢查每個(gè)輸入。遺憾的是缸逃,現(xiàn)實(shí)世界要比這復(fù)雜得多针饥。這種高度警惕是巨大的浪費(fèi),因此在生產(chǎn)中永遠(yuǎn)無(wú)法生存需频。我們必須更加努力地為項(xiàng)目建立一個(gè)正確的安全邊界的心理模型丁眼。有必要了解在程序控制流中哪些地方應(yīng)該進(jìn)行檢查,哪些地方可以省略檢查昭殉。
3.根據(jù)接口劃分項(xiàng)目
不同的模糊測(cè)試器有不同的適用特長(zhǎng)苞七。根據(jù)接口文件藐守、網(wǎng)絡(luò)、API將項(xiàng)目劃分蹂风,使用不同類型的fuzzer將會(huì)更加高效卢厂。
4. 探索現(xiàn)有的工具
新的模糊化工具一直在開(kāi)發(fā),而舊的工具正在獲得新的功能惠啄。重新審視一些最流行的工具慎恒,看看它們是否可以幫助您完成項(xiàng)目的一部分。戴維?伯德威爾(David Birdwell)最近將網(wǎng)絡(luò)模糊測(cè)試技術(shù)(network fuzzing)加入到美國(guó)模糊扶普(Fuzzy Lop)的衍生產(chǎn)品中撵渡,值得一看融柬。Hanno Bock寫了關(guān)于如何在fuzzing項(xiàng)目中使用一些常見(jiàn)的模糊工具的[有用教程]。(https://fuzzing-project.org/tutorials.html)
5編寫自己的工具
遇到如何在一個(gè)大型混合語(yǔ)言項(xiàng)目上執(zhí)行動(dòng)態(tài)分析的問(wèn)題趋距,而這個(gè)項(xiàng)目本身又不適合現(xiàn)有的工具時(shí)粒氧,我求助于David a . Wheeler,看看他會(huì)如何處理這個(gè)問(wèn)題棚品】炕叮惠勒博士建議,我可以考慮寫一個(gè)專門針對(duì)項(xiàng)目api的模糊測(cè)試工具铜跑。根據(jù)它們生成隨機(jī)輸入门怪,并添加大量至少在模糊期間啟用的斷言。如果您知道您的API(或者能夠內(nèi)測(cè)它)锅纺,那么創(chuàng)建一個(gè)特定的模糊器是相當(dāng)容易的掷空,您可以獲取隨機(jī)數(shù)生成器,為fireworks設(shè)置一個(gè)獨(dú)立的容器或VM囤锉,然后就可以開(kāi)始了坦弟。
6. fuzzing真的值得嗎?
對(duì)模糊化工具的一個(gè)常見(jiàn)批評(píng)是,在您運(yùn)行它們一段時(shí)間之后官地,它們就不再尋找bug了酿傍。這是一件好事!就像您不會(huì)因?yàn)榘l(fā)現(xiàn)很少的回歸而拋棄自動(dòng)化測(cè)試套件一樣,您不應(yīng)該使用這個(gè)基本原理來(lái)停止模糊測(cè)試您的項(xiàng)目驱入。如果你的fuzzing工具不再尋找bug赤炒,恭喜你!是慶祝的時(shí)候了!現(xiàn)在,我們來(lái)尋找更困難的bug亏较。
7. 聽(tīng)起來(lái)有很多工作
要做你真的希望我做這些嗎?只要給我一個(gè)好工具的名字(AFL)莺褒。你不必做所有這些事,至少不必一次做完雪情。如果您找到一個(gè)與您的項(xiàng)目一起工作的工具來(lái)覆蓋項(xiàng)目的一個(gè)子集遵岩,那么您可以開(kāi)始運(yùn)行它。您將最終弄清楚項(xiàng)目開(kāi)發(fā)人員(或您)是否愿意修復(fù)低優(yōu)先級(jí)問(wèn)題巡通,以及項(xiàng)目的信任邊界位于何處尘执。您可能會(huì)發(fā)現(xiàn)一個(gè)崩潰舍哄,生成一個(gè)補(bǔ)丁并提交給項(xiàng)目,但卻發(fā)現(xiàn)它被拒絕了正卧,因?yàn)閒uzzer生成的錯(cuò)誤輸入永遠(yuǎn)無(wú)法到達(dá)項(xiàng)目的那個(gè)部分蠢熄,因此添加您的檢查太浪費(fèi)了跪解。無(wú)論你采取哪種方法炉旷,都要幫那些追隨你的人一個(gè)忙,并把它寫下來(lái)叉讥。當(dāng)然窘行,它會(huì)過(guò)時(shí),但它使閱讀變得有趣图仓,并幫助你身后的人站在你的肩膀上罐盔。
最后一個(gè)提醒,如果你正在模糊別人的項(xiàng)目救崔,你有任何懷疑惶看,你發(fā)現(xiàn)了一個(gè)安全漏洞,記得使用項(xiàng)目的安全漏洞報(bào)告過(guò)程!