capa 2.0: より良く、より強く、より速く

capa explorer rule generator interface news

Capa と呼ばれるオープンソース ツールのバージョン 2.0 を発表できることを嬉しく思います。 capa は、拡張可能なルール セットを使用して、プログラムの機能を自動的に識別します。このツールは、マルウェアのトリアージと詳細なリバース エンジニアリングの両方をサポートしています。 Capa について聞いたことがない場合、または復習が必要な場合は、最初のブログ記事をご覧ください。プロジェクトのリリース ページから capa 2.0 スタンドアロン バイナリをダウンロードし、 GitHubでソース コードをチェックアウトできます。

capa 2.0 により、誰でもより簡単にルールを提供できるようになり、既存のエコシステムがさらに活性化されます。このブログ投稿では、capa 2.0 に含まれる次の主要な改善点について詳しく説明しています。

  • capa explorer IDA Pro プラグインの新機能と拡張機能により、ウィンドウを切り替えることなく機能を対話的に探索し、新しいルールを作成できます
  • FLIRT を使用したライブラリ関数の識別と、それに付随するオープンソースの FLIRT シグネチャのリリースにより、より簡潔で関連性の高い結果が得られます
  • 追加のマルウェア機能を記述した数百の新しいルールにより、コレクションは合計 579 のルールになり、半数以上が ATT&CK 技術に関連しています
  • capa を他のプロジェクトと統合しやすくするための Python 3 への移行

capa エクスプローラーとルール ジェネレーター

capa explorer は、IDA Pro 内で直接 capa 結果を表示する IDAPython プラグインです。バージョン 2.0 リリースには、プラグインへの多くの追加と改善が含まれていますが、最もエキサイティングな追加を強調したいと思います: capa エクスプローラーは、新しい capa ルールを IDA Pro で直接記述できるようになりました!

マルウェアを分析する IDA Pro などのリバース エンジニアリング ツールにほとんどの時間を費やしているため、キャパ ルール ジェネレーターを追加することにしました。図 1 は、ルール ジェネレーターのインターフェイスを示しています。

capa explorer rule generator interface
図 1: capa エクスプローラー ルール ジェネレーター インターフェイス

入門ガイドを使用して capa Explorer をインストールしたら、[編集] > [プラグイン] > [ FLARE capa explorer]に移動してプラグインを開きます。ルール ジェネレーターの使用を開始するには、capa エクスプローラー ペインの上部にある [ルール ジェネレーター] タブを選択します。ここから、IDA Pro 逆アセンブリ ビューを、キャプチャしたいテクニックを含む関数に移動し、[分析] ボタンをクリックします。ルール ジェネレーターは、関数内で検出されたすべての capa 機能を解析、フォーマット、および表示します。ルール ジェネレーターの 3 つのメイン ペイン ( [機能] 、 [プレビュー] 、および [エディター] ) を使用して、ルールを作成できます。最初のステップは、機能ペインから機能を追加することです。

[機能] ペインは、関数から抽出されたすべての capa 機能を含むツリー ビューです。ペインの上部にある検索バーを使用して、特定の機能をフィルタリングできます。次に、ダブルクリックして機能を追加できます。図 2 は、この動作を示しています。

capa エクスプローラー機能の選択
図 2: capa エクスプローラーの機能選択

[機能] ペインから機能を追加すると、ルール ジェネレーターによって自動的に書式が設定され、[プレビュー] ペインと [エディター] ペインに追加されます。プレビューペインとエディターペインは、追加した機能を微調整するのに役立ち、ルールのメタデータなどの他の情報を変更できます。

エディターペインは、ルールを形成するステートメントと機能の階層を表示するインタラクティブなツリー ビューです。ドラッグ アンド ドロップを使用してノードを並べ替えたり、右クリックのコンテキスト メニューからノードを編集したりできます。人間がルール ロジックを理解しやすくするために、[説明] 列と [コメント]列に入力して、機能に説明とコメントを追加できます。ルール ジェネレーターは、エディターペインで行った変更を自動的に書式設定し、プレビューペインに追加します。図 3 は、エディターペインを使用してルールを操作する方法を示しています。

capa エクスプローラー エディター ペイン
図 3: capa エクスプローラーのエディター ペイン

プレビューペインは、最終的なルール テキストを含む編集可能なテキスト ボックスです。表示された任意のテキストを編集できます。ルール ジェネレーターは、プレビューペインで行った変更を自動的に書式設定し、エディターペインに追加します。図 4 は、プレビューウィンドウでルールを直接編集する方法を示しています。

capa エクスプローラーのプレビュー ペイン
図 4: capa エクスプローラーのプレビュー ペイン

編集を行うと、ルール ジェネレーターによってルールがリントされ、プレビューペインの下に表示されるメッセージを使用してエラーが通知されます。ルールの作成が完了したら、[保存] ボタンをクリックして capa rules ディレクトリに保存できます。ルール ジェネレーターは、プレビューペインに表示されている内容を正確に保存します。それはとても簡単です!

capa Explorer ルール ジェネレーターを使用すると、新しい capa ルールの作成にかかる時間が大幅に短縮されることがわかりました。このツールは、ルール作成プロセスのほとんどを自動化するだけでなく、IDA Pro とお気に入りのテキスト エディターとの間でコンテキストを切り替える必要がなくなるため、マルウェアの知識を新鮮なうちに体系化できます。

capa Explorer とルール ジェネレーターの詳細については、 READMEを参照してください。

FLIRT を使用したライブラリ関数の識別

数百の capa ルールを作成し、数千の capa 結果を調査した結果、ツールが組み込みのライブラリ コードのために気が散る結果を示すことがあることに気付きました。 capa はプログラマーのロジックに注意を向け、サポートするライブラリ コードを無視する必要があると考えています。たとえば、高度に最適化された C/C++ ランタイム ルーチンとオープンソース ライブラリ コードにより、プログラマは製品をすばやく構築できますが、それ自体は製品ではありません。したがって、capa の結果は、プログラム内のすべてのバイトの分類ではなく、プログラムに対するプログラマーの意図を反映する必要があります。

図 5 の capa v1.6 の結果と図 6 の capa v2.0 の結果を比較してください。capa v2.0 は、ほぼ 200 のライブラリ関数を識別してスキップし、より関連性の高い結果を生成します。

capa v1.6 の結果はライブラリ コード認識なし
図 5: ライブラリ コード認識なしの capa v1.6 の結果
capa v2.0の結果はライブラリコード関数を無視します
図 6: ライブラリ コード関数を無視した capa v2.0 の結果

そこで、プログラマーのコードとライブラリーのコードを区別する方法を探しました。

いくつかの戦略を試した後、Hex-Rays によって開発された Fast Library Identification and Recognition Technology (FLIRT) にたどり着きました。特に、この手法は 1996 年以来安定して有効であり、高速であり、必要なコード分析が非常に限られ、IDA Pro ユーザーベースで幅広いコミュニティを楽しんでいます。 IDA Pro がどのように FLIRT 署名を照合し、 Python バインディング使用して Rust で照合エンジンを再実装するかを理解しました。次に、最新のマルウェアで見られるライブラリ ルーチンの多くをカバーするオープンソースのシグネチャ セットを構築しました。最後に、capa を更新して、新しいシグネチャを使用してその分析をガイドしました。

capa はこれらの署名を使用して、ライブラリ コードとプログラマのコードを区別します。 capa は組み込みライブラリ関数の名前を抽出して照合できますが、ライブラリ コード内の機能と動作の検索はスキップします。このようにして、capa の結果は、プログラマーによって記述されたロジックをより適切に反映します。

さらに、ライブラリ関数の識別により、capa の実行時のパフォーマンスが大幅に向上します。capa はライブラリ関数の処理をスキップするため、実世界の関数のかなりの割合でコストのかかるルール マッチング手順を回避できます。 206 サンプルのテストベッド全体で、合計 186,000 関数の 28% が関数シグネチャによってライブラリ コードとして認識されました。私たちの実装は毎秒約 100,000 関数を認識できるため、ライブラリ関数の識別オーバーヘッドはごくわずかであり、capa は 2020 年よりも約 25% 高速です!

最後に、認識されたライブラリ関数を照合するためにルールの作成者が使用できる新しいフィーチャ クラスfunction-nameを導入しました。この機能は、ファイル レベルのスコープで一致します。この新しい機能を使用して、 Crypto++によって提供される AES などの暗号化ルーチンの特定の実装を認識することを既に開始しています (図 7 のルール例を参照)。

関数名を使用して Crypto++ 経由で AES を認識するルールの例
図 7: 関数名を使用して Crypto++ 経由で AES を認識するルールの例

興味深い行動のルールを開発するにつれて、一般的ではない手法が合法的に使用されている場所について多くのことを学びました.たとえば、マルウェア アナリストとして、VM 検出ルーチンなどのアンチ分析チェックと一緒にcpuid命令を目にすることが最も一般的です。したがって、この命令にフラグを立てるルールを単純に作成しました。しかし、テストベッドに対してテストしたところ、この命令はmemcpyなどの高度に最適化されたルーチンで合法的に使用され、新しい CPU 機能をオプトインするため、ルールはほとんどの最新のプログラムと一致しました。後から考えると、これは明らかですが、当時、すべての実行可能ファイルの約 15% でcpuidが見られたことは少し驚きでした。新しい FLIRT サポートにより、capa は、Visual Studio によって埋め込まれた最適化されたmemcpyルーチンを認識し、プログラマーのコードの一部ではないため、埋め込まれたcpuid命令にフラグを立てません。

ユーザーが capa 2.0 にアップグレードすると、ツールがより高速に実行され、より正確な結果が得られることがわかります。

署名の生成

すべてのユーザー (特に IDA Pro ライセンスを持たないユーザー) にpython-flirtの利点を提供するために、一般的なマルウェア分析のユースケース用の包括的な FLIRT 署名セットを作成するためにかなりの時間を費やしました。署名は capa に含まれており、GitHubで Apache 2.0 ライセンスの下で入手することもできます。私たちは、他のプロジェクトがこれから大きな恩恵を受けることができると信じています。たとえば、ライブラリ関数の識別を組み込むと、 FLOSSのパフォーマンスが向上することが期待されます。さらに、IDA Pro で署名を使用して、より多くのライブラリ コードを認識することができます。

私たちの最初の署名は次のとおりです。

  • Microsoft Visual Studio (VS) から、VS6 から VS2019 までのすべてのメジャー バージョン:
    • C および C++ ランタイム ライブラリ
    • Active Template Library (ATL) および Microsoft Foundation Class (MFC) ライブラリ
  • VS2015、VS2017、および VS2019 でコンパイルされた次のオープンソース プロジェクト:
    • クリプトPP
    • カール
    • マイクロソフト迂回路
    • Mbed TLS (以前の PolarSSL)
    • OpenSSL
    • zlib

関連するライブラリとオブジェクト ファイルを特定して収集するには、多くの作業が必要でした。古い VS バージョンでは、これは手動で行われていました。新しい VS バージョンとそれぞれのオープンソース プロジェクトでは、 vcpgkと Docker を使用してプロセスを自動化できました。

次に、IDA Pro FLAIR ユーティリティを使用して、ギガバイトの実行可能コードをパターン ファイルに変換し、さらに署名に変換しました。このプロセスには、広範な調査と多くの試行錯誤が必要でした。たとえば、最適な組み合わせを理解するために、2 週間かけてさまざまな FLAIR オプションをテストおよび調査しました。 IDA Pro に高品質の署名を提供してくれた Hex-Rays に感謝し、研究とツールをコミュニティと共有してくれたことに感謝します。

パターンとシグネチャ ファイルの生成の詳細については、 siglibリポジトリを参照してください。 FLAIR ユーティリティは、 Hex-Rays の Web サイトの保護されたダウンロード エリアから入手できます。

ルールの更新

最初のリリース以来、コミュニティはキャパ ルールの総数を 260 から570 を超える機能検出ルールへと 2 倍以上に増やしました。これは、capa が実際のマルウェアで見られるより多くの手法を認識し、アナリストがプログラムをリバース エンジニアリングする際の時間を確実に節約できることを意味します。繰り返しになりますが、12 の組織から 30 人近くの同僚が自らの経験をボランティアとしてこれらの規則を開発したため、私たちは支援の波に乗ってきました。ありがとうございました!

図 8 は、capa が現在獲得している機能の概要を示しています。

  • ホスト インタラクションは、ファイル システム、プロセス、およびレジストリとやり取りするためのプログラム機能について説明します。
  • アンチ分析では、パッカー、アンチ VM、アンチ デバッグ、およびその他の関連技術について説明します。
  • コレクションは、資格情報やクレジット カード情報などのデータを盗むために使用される機能を表します
  • データ操作では、データを暗号化、復号化、およびハッシュする機能について説明します
  • 通信は、HTTP、DNS、および TCP などのデータ転送技術について説明します

キャパ v2 グラフ

capa のルールの半分以上は、capa の範囲内にある ATT&CKバージョン 9で導入されたすべての手法を含む、 MITRE ATT&CK手法に関連付けられています。さらに、capa ルールのほぼ半分は現在、 Malware Behavior Catalog (MBC) 識別子に関連付けられています。

capa ルールの 70% 以上について、関連する実世界のバイナリを収集しました。各バイナリは興味深い機能を実装し、注目に値する機能を示します。 Capa テスト ファイル GitHub ページでサンプル コレクション全体を表示できます。コードの拡張機能とルールの更新を開発およびテストするために、これらのサンプルに大きく依存しています。

Python 3 のサポート

最後に、Capa を Python 2.7 から Python 3 に移行するのに 3 か月近く費やしました。これにはvivisectとの緊密な連携が必要でした。チームのサポートに感謝したいと思います。大規模なテストと 2 つの Python バージョンをサポートするいくつかのリリースの後、capa 2.0 と将来のバージョンが Python 3 のみになることに興奮しています。

結論

capa の最近の改善点をすべて確認したので、最新の capa バージョンにすぐにアップグレードしてください。ライブラリ関数識別のおかげで、capa はより迅速で関連性の高い結果を報告します。数百の新しいルールが最も興味深いマルウェア機能をキャプチャし、改善された capa エクスプローラー プラグインにより、分析に集中し、マルウェアの知識を新鮮なうちに成文化することができます。

Windows、Mac、および Linux 用のスタンドアロン バイナリは、 capa リリース ページで入手できます。 PyPiから capa をインストールするには、コマンドpip install flame-capaを使用します。ソースコードはcapa GitHub ページで入手できます。 GitHub のプロジェクト ページには、詳細なインストール手順やcapa explorerのウォークスルーなど、詳細なドキュメントが含まれています。 GitHubを使用して、質問をしたり、アイデアを議論したり、問題を提出したりしてください。

capa のルール コーパスに貢献することを強くお勧めします。改善された IDA Pro プラグインにより、これまで以上に簡単になります。ルールに関する問題やアイデアがある場合は、 GitHub リポジトリでお知らせください。ルールをコミュニティと共有すると、何十もの組織の何百ものリバース エンジニアに影響を与えることになります。

参照: https://www.mandiant.com/resources/blog/capa-2-better-stronger-faster

Comments

タイトルとURLをコピーしました