____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
Paper Machete(PM)は、ソフトウェアでバグを見つける目的で静的バイナリ分析を支援するために、バイナリニンジャとgrakn.aiを調整します。 PMは、バイナリNinja Mlil SSAを活用して、個々の命令、操作、登録/可変状態、および全体的な制御フローに関する意味的な意味を抽出します。
PMはこのデータをGraknに移行します。これは、データのドメイン固有のオントロジーを定義し、強力な推論ルールを作成して、明示的に保存したくない(またはできない)データ間の関係を形成する能力を提供する知識グラフです。ヒー、それはどれほどきれいですか?
このプロジェクトは、「静的分析を支援する:知識グラフの推論を通じてバイナリターゲットの脆弱性の発見」というタイトルのDerbycon 2017の講演に関連してリリースされました。ここでその話を見ることができます。
Paper Macheteの最初のプロトタイプとパブリックコードベースは、Battelle Memorial Instituteのセキュリティ研究者によって開発されました。このプロジェクトが成熟するにつれて、それがあなた自身の研究で役立つと思うことを願っています。プロジェクトに貢献することを検討してください。
ILSのBNILスイートは、扱いやすく、冗談を言って、人間が読みやすくなります。いつでも、私たちの側にはほとんど開発の取り組みがほとんどなく、ILの他のレベルとフォームを活用することを決定できます。複数のアーキテクチャを持ち上げてカスタムリフターを作成する機能を追加すると、BNILを使用しない理由はほとんどありません。
Graknのクエリ言語(GRAQL)は学習が容易で直感的です。これは、この研究の初期段階で非常に重要ですが、研究者が静的分析を実行するときに探すパターンの脆弱性をモデル化するためのクエリを執筆しています。
独自のドメイン固有のオントロジーを作成する機能により、新しいクエリのアイデアとクエリを複雑にする方法をすばやく試験できます。 「ジー、間の関係にアクセスしただけであれば」と思う場合に遭遇したとき、その情報を取得するためにオントロジーと推論のルールを変更できます。
PMの終了ゲームは、人間が書いたクエリの必要性を排除することですが、実際には、スクエア1から始まっています。つまり、バグ狩りの際に人間の脆弱性研究者が探すパターンをモデル化するために、多くの質問を手渡すことを意味します。
Paper MacheteにはBinaryNinja V1.1、Grakn V1.4.2、Grakn Pythonドライバー、およびJava JREが必要です
PMで遊びたい場合は、いくつかの基本的なクエリを含めて、開始することができます。ご想像のとおり、特定の脆弱性クラスのすべての症状を見つける「銀の弾丸」クエリはありません。このため、CWEクエリごとにバージョンを含めました。同じCWEを見つける新しい方法を追加すると、バージョン番号を増加させてスクリプトを追加して差別化します。
cwe_120_v1.py安全でない 'gets()' function(cwe -120)の使用のテスト
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]も実行されます。