什麼是模糊測試?
我一直在這里和這裡查看關於模糊測試的比特幣核心公關評論俱樂部會議。
你能解釋一下什麼是模糊測試嗎?
在論文The Art, Science and Engineering of Fuzzing 中,作者將 fuzzing 定義為“使用生成的輸入重複執行程序的過程,這些輸入可能在語法或語義上是錯誤的”。
模糊測試不是一個新概念。它是在 1990 年代初引入的,但目前它發現錯誤的潛力尚未在比特幣核心程式碼庫中得到充分探索。
當然,模糊測試不僅是一種技術,不僅被那些試圖防止軟體項目中的錯誤(防御者)使用,而且也被那些試圖利用錯誤(攻擊者)的人使用。如果像比特幣核心這樣的項目在防禦技術方面落後於最先進的技術,攻擊者可能會利用這一危險。
Matt Corallo於 2019 年 2 月在倫敦比特幣開發者大會上討論了模糊測試。
模糊測試是一種對測試案例進行黑盒測試的通用測試方法,該測試案例將一些隨機字節集作為輸入,在其上執行程序並試圖使其崩潰。這主要用於解碼器,諸如此類。事實證明,它們在獲取圖像解壓縮庫或處理網路上不受信任的數據並使其崩潰、查找其中的漏洞、查找堆棧溢出、緩衝區溢出等漏洞方面非常、非常、非常有效。它們不僅完全愚蠢,就像隨機字節一樣。他們實際上是檢測二進製文件。通常他們所做的是檢測二進製文件,您可以在硬體或軟體中執行此操作,並檢測給定輸入何時在程序中找到新路徑。
Matt Corallo在 2019 年 2 月的Advancing Bitcoin中補充道:
Fuzzing 在整個軟體世界中非常有用,但主要用於發現圖像解壓縮器、圖像解碼器、消息反序列化器之類的漏洞。它所做的是你編寫一個程序,將一些任意字節字元串作為輸入,然後你對這些字節做一些事情,然後模糊器試圖讓你崩潰。因此,如果您經常使用一些圖像解碼器或解壓縮器,它會發現您使用過多記憶體的錯誤,您會遇到記憶體不足的情況,並且那裡存在 DoS 漏洞。或者它可能會發現一個錯誤,你有一些緩衝區溢出,類似的東西。或者任何取決於您編寫的語言。Fuzzer 非常棒。您可以查找他們發現的所有各種 CVE 和漏洞。我們已經在 rust-lightning 中與它們進行了很多合作,並且我們有標準的方法來確保我們所有的消息反序列化器不會崩潰或不使用無限記憶體。但是我們也有一些允許節點做完全任意的事情。所以我們有一個執行完整節點並且可以線上接收字節的模糊目標。這使您可以在模糊環境中執行其他節點可能對您執行的任何操作,在該環境中,模糊測試器試圖創造性地使您的程序崩潰並提出可能使用不同程式碼路徑的不同輸入