____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
Paper Machete(PM)協調Binary Ninja和Grakn.ai來幫助靜態二進制分析,以便在軟件中查找錯誤。 PM利用二進制忍者MLIL SSA提取有關單個指令,操作,寄存器/可變狀態和總體控制流的語義含義。
PM將這些數據遷移到Grakn-知識圖,使我們能夠為數據定義特定的域特異性本體,並編寫強大的推理規則,以在我們不想(或不能)明確存儲的數據之間形成關係。嘿,那有多整潔?
該項目與Derbycon 2017的演講一起發布,標題為“ Aiding static Analysis:通過知識圖推斷發現二進制目標中的漏洞”。您可以在這裡觀看那個談話。
Paper Machete的最初原型和公共代碼庫是由Battelle Memorial Institute的安全研究人員開發的。隨著該項目的成熟,我們希望您會發現它在您自己的研究中有用,並考慮為該項目做出貢獻。
ILS的Bnil Suite易於使用,令人愉悅的冗長且可讀。在任何時候,我們可以決定利用IL的其他層次和形式,而我們的發展很少。當您添加提起多個體系結構並編寫自定義舉昇機的能力時,我們幾乎沒有理由不使用Bnil。
Grakn的查詢語言(GRAQL)易於學習和直觀,這在這項研究的早期階段非常重要,而我們仍在手工編寫的查詢來模擬脆弱性研究人員在進行靜態分析時尋找的模式。
撰寫我們自己的領域特定本體的能力使我們能夠快速嘗試新的查詢想法和使查詢不復雜的方法。當我們遇到一個我們認為“ gee,如果我只能訪問...”之間的情況時,我們可以修改我們的本體論和推理規則以獲取這些信息。
雖然最終遊戲的最終遊戲是消除對人寫的查詢的需求,但事實是我們是從一片方面開始的。這意味著對人類脆弱性研究人員在尋找蟲子時尋找的模式進行了許多疑問,以建模。
紙幣需要BinaryNinja V1.1,Grakn V1.4.2,Grakn Python驅動程序和Java JRE
如果您想與PM一起玩,我們還提供了一些基本查詢,可以讓您入門。可以想像,沒有“銀彈”查詢可以找到特定漏洞類的所有表現。因此,我們包含了每個CWE查詢的版本。當我們添加尋找相同CWE的新方法時,我們將添加具有增量版本編號的腳本以區分。
cwe_120_v1.py使用Unsafe'get()'函數的測試(CWE -1220)
cwe_121_v1.py緩衝溢出的測試(CWE -121)
cwe_129_v1.py缺少邊界檢查的測試(CWE -129)
cwe_134_v1.py格式字符串漏洞的測試(CWE -134)
cwe_788_v1.py丟失界限的測試數組索引(CWE -788)
為了基本使用,請運行paper_machete.py腳本並按照提示進行操作。有關更高級的用途,請閱讀Wiki。
通常,您將從選項[1]開始,然後從選項[3]開始。如果您遇到了Grakn使用選項[4]的任何問題,將Grakn重置為乾淨的狀態,然後重試。
... banner ...
[1] Analyze a binary file
[2] Migrate a JSON file into Grakn
[3] Run all CWE queries
[4] Clean and restart Grakn
[5] Quit
選項[1]列出/analysis目錄中的所有可執行文件。因此,將要分析的任何可執行文件放在/analysis中。此選項將運行pmanalyze.py並在/analysis目錄中生成JSON文件。
一旦您使用[1]分析了文件並產生了由此產生的JSON文件,它們將作為選項[2]中的選擇。在選項[2]中選擇一個JSON文件將將數據遷移到Grakn中。
現在您有Grakn的數據,可以使用選項[3] 。這將啟動/queries所有腳本,以根據您選擇的按鍵。如果您編寫自己的查詢模式,只需將它們放入/queries中,選項[3]也會運行它們。