Bitcoin-Core-Development

什麼是結構化模糊測試,比特幣核心目前認為的模糊測試是結構化的嗎?

  • December 20, 2020

你能定義什麼是結構化模糊測試,以及它比普通模糊測試帶來的好處嗎?

比特幣核心目前所做的一些模糊測試是否被認為是“結構化的”?

我將使用 Jonathan Metzman 在 Black Hat 2019 上的展示文稿中使用的定義,但顯然這是一個相對較新的領域,因此研究人員和學術界可能對正式定義存在分歧。

在本次演講中,Metzman 解釋了最初的 fuzzer 如何完全是黑匣子,這意味著他們對他們正在 fuzz 的目標一無所知。他們也是不知道結構的,這意味著他們對他們應該變異或生成的格式一無所知,只是從管道傳輸字節/dev/urandom等。

下一代模糊器仍然是黑盒,但它們現在具有結構意識,例如在對 HTML 進行模糊測試時,它們提供看起來像 HTML 的輸入,而不僅僅是隨機的廢話。

Metzman 認為當今的 fuzzer(例如 AFL)是覆蓋引導的、結構感知的,但它們是非結構化的。這就是比特幣核心現在在模糊測試方面的情況。我不認為有任何結構化模糊測試的實驗(如果錯誤我會更新)。

AFL 之所以能產生如此大的影響以及這種技術,是因為非結構化模糊測試允許人們在沒有真正了解他們實際模糊測試的格式的情況下使用它。但是因為它是覆蓋引導的,所以模糊器會逐漸生成更多有趣的輸入,這就是為什麼它實際上非常擅長發現錯誤。

Metzman 相信下一代模糊器將是結構化的。他們不會只做 AFL 在輸入上做的通用突變。他們將格式化特定的格式,例如從程序中刪除表達式,而不僅僅是翻轉位。它們還將允許您模糊您認為錯誤將出現的位置。

通過結構化模糊測試,您幾乎可以成為模糊測試器的一部分,您可以在其中看到未被覆蓋的程式碼,並決定您是否認為值得覆蓋該程式碼。然後你讓模糊器覆蓋該程式碼。

您將能夠通過編寫自定義 mutator 來做到這一點,您可以在其中定義將被呼叫以改變測試案例而不是預設 mutator 的函式。目前,您可以使用libFuzzer編寫自定義突變器。

引用自:https://bitcoin.stackexchange.com/questions/100703