
いくつかのヒューリスティックに基づくSWFファイルの自動解析。プラグインで拡張可能。
注意: 以下の手順はPython3用です。
Python2.7でFLASHMINGOをインストールする必要がある場合は、releases タブから1.0リリースをチェックアウトできます。インストール手順は基本的に同じです。
requirements.txt にリストされているPython3パッケージをインストールします。
次のコマンドを使用できます: pip3 install -r requirements.txt
デコンパイル機能を使用するには、Jython をインストールする必要があります。Ubuntu/Debianユーザーは apt install jython を実行できます。
プロジェクトをクローンするか、zipファイルをダウンロードしてください。
FLASHMINGO はSWFファイルの解析フレームワークです。このツールは疑わしいFlashファイルを自動的にトリアージし、さらなる解析プロセスをガイドすることで、チームの貴重なリソースを解放します。FLASHMINGO の解析モジュールをワークフローに簡単に組み込むことができます。
今日まで、フォレンジック捜査官やマルウェアアナリストは、疑わしいSWFファイルに対処しなければなりません。歴史が繰り返されるならば、セキュリティ脅威は2020年のFlashのサポート終了を超えてさらに大きくなる可能性さえあります。システムは、セキュリティパッチで更新されなくなったレガシーファイル形式を引き続きサポートします。自動化はこの問題に対処する最善の方法であり、ここでFLASHMINGOが役立ちます。FLASHMINGOはSWFファイルを自動処理する解析フレームワークであり、疑わしいFlashサンプルにフラグを立て、最小限の労力で解析できるようにします。スタンドアロンアプリケーションとして、または強力なライブラリとして、さまざまな解析ワークフローに統合されます。ユーザーはカスタムPythonプラグインを介してツールの機能を簡単に拡張できます。
FLASHMINGO はシンプルさを念頭に設計されています。SWFファイルを読み取り、その内容と構造を表すオブジェクト(SWFObject)を作成します。その後、FLASHMINGO はこの SWFObject に対して動作し、その値をメインプログラムに返す一連のプラグインを実行します。
以下は必須のASCIIアートフロー図です:
+----------+
| |
+------------+----------->+ PLUGIN 1 +------------+
| | | | |
| | +----------+ |
| | |
| | +----------+ |
| | | | |
+---------+ | +----------->+ PLUGIN 2 +--------+ |
|SWF FILE +----------->+ FLASHMINGO | | | | |
+---------+ | | +----------+ | |
| | | |
| | | |
| | | |
| | +-----v---v-+
| | | |
| | | |
+-----+------+------------------------->+ SWFOBJECT |
^ | |
| | |
| +-----+-----+
| |
| |
| |
+---------------------------------------+
FLASHMINGO をライブラリとして自身のプロジェクトで使用する場合、2種類のオブジェクトのみを扱う必要があります:
SWFObjectFlashmingo オブジェクト。これは基本的にプラグインと SWFObject を接続するハーネスとして機能します。FLASHMINGO のプラグインは、その名の通り plugins ディレクトリ内の独自のサブディレクトリに格納されています。
Flashmingo オブジェクトがインスタンス化されると、このディレクトリを走査し、すべてのプラグインのマニフェストを処理します。プラグインがアクティブであることを示す場合、後で使用するために登録されます。コードレベルでは、これは小さな plugin_info ディクショナリが plugins リストに追加されることを意味します。
プラグインは run_plugin API を介して2つの引数で呼び出されます:
SWFObject インスタンスオプションとして、ほとんどのプラグインは独自の ユーザーデータ を渡すことができます。これはプラグインに依存します(ドキュメントを参照)。例を用いて説明する方が簡単でしょう。
デフォルトのプラグイン SuspiciousNames は、すべての定数プールをスキャンし、疑わしい 部分文字列(例:'overflow', 'spray', 'shell' など)を含む文字列を検索します。プラグインには一般的な部分文字列のリストがハードコードされているため、そのまま使用できます。ただし、自分で定義した部分文字列のリストを names パラメータで渡すこともできます。
コード例:
fm = Flashmingo()
print fm.run_plugin('DangerousAPIs', swf=swf)
print fm.run_plugin('SuspiciousNames', swf=swf, names=['spooky'])
FLASHMINGO には標準でいくつかの便利なプラグインが含まれています:
簡単な開発のためにテンプレートプラグインが用意されています。 FLASHMINGO の拡張は非常に簡単です。以下の簡単な手順に従ってください:
run メソッドをオーバーライドするこれで準備完了です :)
docs ディレクトリを参照$ pip install sphinxcontrib-napoleon
Sphinx を設定してドキュメントをビルドした後、Sphinx の conf.py ファイルで napoleon を有効にします:
conf.py で、extensions リストに napoleon を追加します
extensions = ['sphinxcontrib.napoleon']
sphinx-apidoc を使用して API ドキュメントをビルドします:
$ sphinx-apidoc -f -o docs/source projectdir
これにより、Sphinx が処理する .rst ファイルが作成されます
$ make html
以上です! :)