
Pythonでスクリプト可能なリバースエンジニアリングサンドボックス、QEMUベースの仮想マシン計装・検査フレームワーク
このプロジェクトはアーカイブされ、Issue キューはロックされています。このプロジェクトは参照目的でのみ公開されています。
.. image:: docs/media/pyrebox_logo_light_bg.png
.. _QEMU: http://qemu.org/ .. _DECAF: https://github.com/sycurelab/DECAF .. _S2E: https://github.com/dslab-epfl/s2e .. _AVATAR: https://github.com/avatartwo .. _PANDA: https://github.com/panda-re/panda .. _Volatility: http://www.volatilityfoundation.org/ .. _BUILD: BUILD.rst .. _here: https://github.com/Cisco-Talos/pyrebox/issues .. _slides: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _available: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _scripts: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _questions: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _presentation: https://www.youtube.com/watch?v=F2voG87obzM .. _Contest: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox は、Python スクリプト可能なリバースエンジニアリングサンドボックスです。これは QEMU に基づいており、動的解析とデバッグ機能を異なる視点から提供することでリバースエンジニアリングを支援することを目的としています。PyREBox を使用すると、実行中の QEMU VM を検査したり、そのメモリやレジスタを変更したり、実行をインストルメント化したり、Python の簡単なスクリプトを作成してあらゆる種類の分析を自動化することができます。QEMU(全体システムエミュレータとして動作する場合)は、完全なシステム(CPU、メモリ、デバイスなど)をエミュレートします。VMI 技術を使用することで、ゲストオペレーティングシステムを変更する必要はなく、実行時にそのメモリから透過的に情報を取得します。
DECAF_、PANDA_、S2E_、AVATAR_ などのいくつかの学術プロジェクトは、以前から QEMU ベースのインストルメンテーションを活用してリバースエンジニアリングのタスクを克服してきました。これらのプロジェクトでは C/C++ でプラグインを作成でき、動的タイント解析、シンボリック実行、実行トレースの記録と再生などの高度な機能を実装しています。PyREBox では、シンプルな設計と脅威アナリストにとっての使いやすさに重点を置いて、この技術を適用することを目指しています。
PyREBox は 2017 年の Volatility プラグインコンテスト_ で優勝しました!
このツールは HITB Amsterdam 2018 で発表されました。スライド_ をご覧いただくか、プレゼンテーション_ をご視聴ください。また、第 3 回 EuskalHack セキュリティコングレス(スライドはこちら_)でも発表されました。
PyREBox の最新機能を活用するために、最新バージョンをプルすることを忘れないでください。PyREBox は活発に開発されており、新しいクールな機能がこれからも追加される予定です!master ブランチは常に安定版を含んでいる必要がありますが、dev ブランチには最新の作業中の機能が含まれています。以下のアナウンス一覧は master ブランチを参照し、開発変更が master にマージされた日付を示します。
ビルドスクリプトが提供されています。依存関係の詳細については、BUILD_ を参照してください。Dockerfile も提供しています。
このプロジェクトのドキュメントは readthedocs.io_ でホストされています。
バグを発見したと思われる場合は、こちら_ に報告してください。
新しい Issue を作成する前に、他のユーザーが開いた質問_ を確認してください。
このプログラムは「現状のまま」提供され、サポートは保証されません。ただし、問題の解決を支援するために、バグを再現するためのできるだけ多くの情報を含めてください。
PyREBox は QEMU に基づいているため、PyREBox 内で VM を起動するには、QEMU VM を起動するときとまったく同じように実行する必要があります。例として、start_i386.sh、start_x86_64.sh という 2 つのサンプルスクリプトが提供されています。これらを参考にしてください。
現在サポートされている QEMU モニタオプションは stdio(-monitor stdio)のみです。
エミュレートされたゲストシステムを検査するためのシンプルなインターフェースを備えた全体システムエミュレーションプラットフォームを提供する。
QEMU から切り離されたクリーンな設計を持つこと。QEMU 上に構築された多くのプロジェクトは、QEMU がアップグレードされても進化せず、新機能や最適化、セキュリティアップデートを見逃しています。これを達成するために、PyREBox は独立したモジュールとして実装されており、QEMU と一緒にコンパイルでき、最小限の変更で済みます。
異なるアーキテクチャのサポート。現在、PyREBox は x86 および x86-64 ビットアーキテクチャの Windows のみをサポートしていますが、その設計により ARM、MIPS、PowerPC などの他のアーキテクチャや他のオペレーティングシステムもサポートできます。
PyREBox シェルを起動するには、QEMU のモニタで sh コマンドを入力するだけです。すぐに IPython シェルが起動します。このシェルはコマンド履歴と定義された変数を記録します。たとえば、値を保存しておき、後で別の実行ポイントでシェルを再度起動したときにその値を復元できます。PyREBox は、オートコンプリート、コマンド履歴、複数行編集、自動コマンドヘルプ生成など、IPython の利用可能なすべての機能を活用します。
PyREBox を使用すると、比較的ステルスな方法でシステム(またはプロセス)をデバッグできます。従来のデバッガはデバッグ対象のシステム内に常駐し(デバッグ対象のプロセスのメモリを変更してブレークポイントを挿入することさえあります)、PyREBox は検査対象のシステムの完全に外部にあり、ゲストへのドライバやコンポーネントのインストールは必要ありません。
.. image:: docs/media/breakpoint.gif
PyREBox は、実行中の VM の状態を検査および変更するための完全なコマンドセットを提供します。list_commands と入力すると完全なリストが表示されます。vol とそれに対応する volatility コマンドを入力するだけで、任意の volatility プラグインを実行できます。利用可能な volatility プラグインの完全なリストは、list_vol_commands と入力することで取得できます。このリストは自動的に生成されるため、PyREBox の volatility/ パスにインストールした volatility プラグインも表示されます。
独自のコマンドを定義することもできます!スクリプト内で関数を宣言し、ロードするだけの簡単な操作です。
コマンドよりも表現力豊かなものが必要な場合は、API を利用した Python スニペットを作成できます。API の詳細については、ドキュメント_ を参照するか、シェルで help(api) と入力してください。
.. image:: docs/media/stack.gif
PyREBox を使用すると、スクリプトを動的にロードできます。スクリプトは、命令の実行、メモリの読み取り/書き込み、プロセスの作成/破棄など、特定のイベントが発生したときに呼び出されるコールバック関数を登録できます。
PyREBox は Volatility と統合されているため、Python スクリプトでメモリフォレンジック用のすべての volatility プラグインを活用できます。最も有名なリバースエンジニアリングツールの多くは Python で実装されているか、少なくとも Python バインディングを持っています。私たちのアプローチにより、これらのツールをスクリプトに統合できます。
最後に、Python のコールバックは、命令実行のような頻繁なイベントでパフォーマンスの低下を引き起こす可能性があるため、トリガー を作成することも可能です。トリガー は、Python コールバックが実行される直前に、任意のイベントで実行時に動的に挿入できるネイティブコードプラグイン(C/C++ で開発)です。これにより、Python コードに到達するイベントの数を制限したり、ネイティブコードで値を事前計算したりできます。
このリポジトリには、独自のコードを作成する際に役立つサンプルスクリプト_ があります。コントリビューションを歓迎します。
まず第一に、PyREBox は QEMU_ と Volatility_ なしでは実現できませんでした。開発者とメンテナーの素晴らしい仕事に感謝します。
PyREBox は、DECAF_ や PANDA_ などのいくつかの学術プロジェクトに触発されています。実際、PyREBox がサポートするコールバックの多くは DECAF_ のものと同等であり、インストルメンテーションの背後にある概念はこれらの研究に基づいています。
PyREBox はサードパーティのコードを利用しており、それらはディレクトリ pyrebox/third_party 以下にあります。サードパーティプロジェクトごとに、元のライセンス、プロジェクトから取得した元のソースコードファイル、および PyREBox が使用するソースコードファイルの修正版(該当する場合)の表示を含めています。