本文講的是<b>使用libFuzzer fuzz Chrome V8入門指南</b>,
什麼是V8?
V8(也稱為Chrome V8)是由Chromium Project開發的用于Google Chrome浏覽器的開源JavaScript引擎。使用V8的其他項目包括Couchbase,MongoDB和Node.js.等。在本文的幫助下,可能您會對其有更為深入的了解。
衆所周知Google做事情總是會有點不一樣,是以它不會像./configure && make那麼簡單。但是一旦您找出正确的過程,這其實真的并不難。是以再次感謝Google給我指出正确的方向。
克隆depot_tools資料庫:
添加depot_tools到您的PATH結尾(您可能想把它放在您的~/.bashrc或~/.zshrc)。假設您克隆depot_tools到/path/to/depot_tools:
現在我們得到了我們将要fuzzing的代碼,然後建立chromium用于結帳的目錄并更改它:
從depot_tools 上運作工具fetch以檢視代碼及其依賴關系。
該–no-history選項将加快速度,因為它不會拉下整個git曆史,事實上我們并不是真正需要fuzzing。
其餘的說明假設您已切換到src目錄:
舉個例子,我使用的是Ubuntu 16.04 x64,而如果您正在使用Debian,那麼這些說明也應該适用于您。否則,您可能需要調整建構依賴關系。
安裝附加的建構依賴項。
運作鈎子
現在,您已經有了開始建構fuzzing器所需的代碼庫和工具。對于這個例子,我使用的是libFuzzer而不是AFL。
建構fuzzer
首先,我們将運作這個指令來設定我們的目标:
這将使建構得這個系統去使用libFuzzer,ASan和UBSan。當它成功運作時,您将受到類似Done. Made 6168 targets from 1323 files in 9620ms的消息的歡迎。接下來運作gn ls out/libfuzzer | grep fuzzer,您會收到一個包含約519個條目的清單,其中大部分我們不會關心。在這個例子中,我要選一個json解析器,是以讓我們來gn ls out/libfuzzer | grep json一下看看彈出的内容:
我覺得v8_json_parser_fuzzer看起來是一個不錯的選擇。是以為了建構這個特定的fuzzer,我們需要運作這個指令:
您會看到[55/1074] CXX obj/third_party/libFuzzer/libfuzzer/FuzzerExtraCounters.o正在建構的文字。這一步可能需要一段時間,是以請耐心等待一杯咖啡的時間。一旦完成,cd out/libfuzzer以及您将要發現的v8_json_parser_fuzzerfuzzer就會連同v8_json_parser_fuzzer.dict的字典檔案以及一個v8_json_parser_fuzzer.optionslibFuzzer選項檔案一起來讓您可以使用它定義各種東西。但我們現在不會對此進行深入。各位可以随意探索。
接下來為您的起始語料庫建立一個目錄,并根據所需将其命名為:
使用您的json檔案填寫json_parser_corpus。這裡我沒有使用附帶的V8fuzzing語料庫,因為每個人以及他們的fuzzing都被填滿了。如果您不想自己找一個示例,那麼您可以使用下面這個:
如果您隻有一個核心,那麼您的指令行将是:
而如果您有多個核心:
注意: -jobs=X X是您希望fuzzer在找到觸發特定job中止或崩潰的事件之後重新啟動-workers=X的次數,X是要使libFuzzer利用的CPU核心數。
最後,恭喜您現在正在對V8進行fuzzing,我非常希望您能是以而找到一兩個漏洞。
原文釋出時間為:2017年7月26日
本文作者:魯班七号
本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。
<a href="http://www.4hou.com/info/news/6191.html" target="_blank">原文連結</a>