____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
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]也会运行它们。