capa: マルウェアの機能を自動的に特定する

Interesting strings and import information of example malware from PMA Lab 1-1 news

capa は、悪意のあるプログラムを分析するための FLARE チームの最新のオープンソース ツールです。私たちのツールは、コミュニティがマルウェアで確認された動作をエンコード、認識、および共有するためのフレームワークを提供します。バックグラウンドに関係なく、capa を使用する場合、何十年にもわたるリバース エンジニアリングの累積経験を利用して、プログラムの機能を理解します。この投稿では、capa の仕組み、ツールのインストール方法と使用方法、および今日からトリアージ ワークフローに統合する必要がある理由について説明します。

問題

有能なアナリストは、調査で未知のファイルをすばやく理解し、優先順位を付けることができます。ただし、プログラムに悪意があるかどうか、攻撃中にそのプログラムが果たす役割、および潜在的な機能を判断するには、少なくとも基本的なマルウェア分析スキルが必要です。また、多くの場合、ファイルの完全な機能を回復し、作成者の意図を推測するには、経験豊富なリバース エンジニアが必要です。

マルウェアの専門家は、未知のバイナリを迅速にトリアージして、最初の洞察を得て、さらなる分析手順を導くことができます。一方、経験の浅いアナリストは、何を探すべきかわからず、いつもと違うものを区別するのに苦労することがよくあります。残念ながら、strings / FLOSSまたは PE ビューアーなどの一般的なツールは、最も低いレベルの詳細を表示するため、データ ポイントを組み合わせて解釈するユーザーに負担がかかります。

マルウェアトリアージ 01-01

これを説明するために、ここで利用可能なPractical Malware Analysis (PMA) の Lab 01-01 を見てみましょう。私たちの目標は、プログラムの機能を理解することです。図 1 は、ファイルの文字列とインポート テーブルを示しており、興味深い値が強調表示されています。

Interesting strings and import information of example malware from PMA Lab 1-1
図 1: PMA ラボ 1-1 からのサンプル マルウェアの興味深い文字列とインポート情報

このデータを使用して、リバース エンジニアは文字列とインポートされた API 関数について仮説を立て、プログラムの機能を推測できますが、それ以上のことはできません。このサンプルは、mutex の作成、プロセスの開始、またはネットワーク経由での通信を行う可能性があります (IP アドレス 127.26.152.13 に送信される可能性があります)。 Winsock (WS2_32) のインポートは、ネットワーク機能について考えさせますが、名前はここでは使用できません。これは、よくあることですが、序数によってインポートされるためです。

このサンプルを動的に分析することで、最初の疑惑を確認または反証し、追加の機能を明らかにすることができます。ただし、サンドボックス レポートまたは動的分析ツールは、実行されたコード パスから動作をキャプチャすることに限定されます。これにより、たとえば、コマンド アンド コントロール (C2) サーバーへの接続が成功した後にトリガーされる機能はすべて除外されます。通常、ライブ インターネット接続でマルウェアを分析することはお勧めしません。

このファイルを本当に理解するには、リバース エンジニアリングを行う必要があります。図 2 は、IDA Pro によるプログラムのメイン関数の逆コンパイルを示しています。説明を簡単にするために、逆アセンブリではなく逆コンパイルを使用しますが、同様の概念が両方の表現に適用されます。

PMA ラボ 1-1 の逆コンパイルされた main 関数の主な機能
図 2: PMA ラボ 1-1 の逆コンパイルされた main 関数の主な機能

プログラミングと Windows API の基本的な理解があれば、次の機能を確認できます。マルウェア:

  • ミューテックスを作成して、1 つのインスタンスのみが実行されるようにします
  • TCP ソケットを作成します。定数 2 = AF_INET 、1 = SOCK_STREAM 、および 6 = IPPROTO_TCPで示されます。
  • ポート 80 で IP アドレス 127.26.152.13 に接続します
  • データの送受信
  • 受信したデータを文字列sleepおよびexecと比較します
  • 新しいプロセスを作成します

実行のたびにすべてのコード パスが実行されるわけではありませんが、マルウェアにはこれらの動作を実行する機能があると言われています。そして、個々の結論を組み合わせることで、マルウェアは、ハードコードされた C2 サーバーによって指定された任意のプログラムを実行できるバックドアであると推論できます。この大まかな結論により、調査の範囲を絞り込み、脅威への対応方法を決定することができます。

能力識別の自動化

もちろん、マルウェアの分析がこれほど単純なことはめったにありません。意図のアーティファクトは、数百または数千の関数を含むバイナリを介して拡散する可能性があります。さらに、リバース エンジニアリングの学習曲線はかなり急勾配であり、アセンブリ言語やオペレーティング システムの内部構造など、多くの低レベルの概念をしっかりと理解している必要があります。

ただし、十分に練習すれば、API 呼び出し、文字列、定数、およびその他の機能の繰り返しパターンから、プログラムの機能を簡単に認識できます。キャパを使用して、重要な分析の結論のいくつかが実際に自動的に実行できることを示します。このツールは、専門知識を体系化し、コミュニティ全体が利用できるようにするための、一般的かつ柔軟な方法を提供します。 capa を実行すると、機能とパターンが人間のように認識され、その後の調査手順を推進できる高レベルの結論が生成されます。たとえば、capa が暗号化されていない HTTP 通信の機能を認識した場合、これは、プロキシ ログまたはその他のネットワーク トレースにピボットする必要があるヒントになる可能性があります。

キャパのご紹介

サンプル プログラムに対して capa を実行すると、図 3 のツール出力がほぼそれを物語っています。メインの表には、このサンプルで特定されたすべての機能が示されています。左側の各エントリは機能を説明しています。右側の関連する名前空間は、関連する機能をグループ化するのに役立ちます。 capa はすばらしい仕事をし、前のセクションで説明したすべてのプログラム機能を説明しました。

PMA Lab 1-1のキャパ分析
図 3: PMA Lab 1-1 のキャパ分析

キャパはしばしば驚くほど良い結果をもたらすことがわかりました。そのため、能力を特定するために使用される証拠を capa で常に表示できるようにする必要があります。図 4 は、「TCP ソケットの作成」の結論に対する capa の詳細な出力を示しています。ここで、capa が関連する機能を見つけたバイナリ内の正確な場所を調べることができます。ルールの構文については少し後で説明しますが、それまでの間、ルールは低レベルの機能を組み合わせたロジック ツリーで構成されていると推測できます。

マルウェアの例での「TCP ソケットの作成」ルールの機能一致の詳細
図 4: サンプル マルウェアの「TCP ソケットの作成」ルールの機能一致の詳細

キャパの仕組み

capa は、未知のプログラムをアルゴリズムでトリアージする 2 つの主要なコンポーネントで構成されています。まず、コード分析エンジンが、文字列、逆アセンブリ、制御フローなどの機能をファイルから抽出します。次に、ロジック エンジンは、共通のルール形式で表現されている機能の組み合わせを見つけます。ロジック エンジンが一致を見つけると、capa はルールによって記述された機能について報告します。

特徴抽出

コード分析エンジンは、プログラムから低レベルの機能を抽出します。すべての機能は、文字列や数字など、人間が認識できるものと一致しており、capa がその機能を説明できるようにします。これらの機能は通常、ファイル機能と逆アセンブリ機能の 2 つの大きなカテゴリに分類されます。

ファイルの特徴は、未加工のファイル データとその構造 (PE ファイル ヘッダーなど) から抽出されます。これは、ファイル全体をスクロールして気付く情報です。上記の文字列とインポートされた API に加えて、これらにはエクスポートされた関数とセクション名が含まれます。

逆アセンブル機能は、ファイルの高度な静的分析から抽出されます。これは、制御フローを逆アセンブルして再構築することを意味します。図 5 は、API 呼び出し、命令ニーモニック、数値、および文字列参照を含む一部の逆アセンブリ機能を示しています。

PMA ラボ 1-1 の逆アセンブル コード セグメントのファイル機能の例
図 5: PMA Lab 1-1 の逆アセンブル コード セグメントのファイル機能の例

高度な分析では、プログラム内の関数と他のスコープを区別できるため、capa はそのロジックを適切な詳細レベルで適用できます。たとえば、関連のない API が異なる関数で使用されている場合でも、capa ルールで各関数に対して個別に照合する必要があることを指定できるため、混乱することはありません。

柔軟で拡張可能な機能抽出を念頭に置いて capa を設計しました。追加のコード分析バックエンドを簡単に統合できます。現在、capa スタンドアロン バージョンはvivisect分析フレームワークに依存しています。 IDA Pro を使用している場合は、IDAPython バックエンドを使用して capa を実行することもできます。コード分析エンジン間の違いにより、機能セットが異なり、結果が異なる場合があることに注意してください。幸いなことに、これは通常、実際には深刻な問題ではありません。

ルールレイヤー

capa ルールは、構造化された機能の組み合わせを使用して、プログラムに実装できる機能を記述します。必要なすべての機能が存在する場合、capa はプログラムにその機能が含まれていると結論付けます。

capa ルールは、ロジックを表現するためのメタデータとステートメントのツリーを含む YAML ドキュメントです。特に、ルール言語は論理演算子とカウントをサポートしています。図 6 の「TCP ソケットの作成」ルールは、番号 6、1、2、およびAPI 関数socketまたはWSASocketのいずれかへの呼び出しが、単一の基本ブロックのスコープ内に存在する必要があることを示しています。基本ブロックは、アセンブリ コードを非常に低いレベルでグループ化するため、密接に関連するコード セグメントを一致させるのに理想的な場所になります。基本ブロック内に加えて、capa は関数およびファイル レベルでのマッチングをサポートします。関数スコープは逆アセンブルされた関数のすべての機能を結び付けますが、ファイル スコープはファイル全体のすべての機能を含みます。

TCP ソケットの作成を識別する capa ルール ロジック
図 6: TCP ソケットの作成を識別する capa ルールのロジック

図 7 は、capa が高レベルで意味のある結果をユーザーに表示できるようにするルール メタデータを示しています。ルール名は識別された機能を説明し、名前空間はそれを技術または分析カテゴリに関連付けます。名前と名前空間は、capa の出力の機能テーブルで既に確認しました。メタデータ セクションには、 authorexamplesなどのフィールドを含めることもできます。例を使用して、機能が存在することがわかっているファイルとオフセットを参照し、すべてのルールの単体テストと検証を可能にします。さらに、capa ルールは、実際のマルウェアで見られる動作に関する優れたドキュメントとして機能するため、参照用にコピーを自由に保管しておいてください。今後の投稿では、CAPA による ATT&CK および Malware Behavior Catalog フレームワークのサポートなど、その他のメタ情報について説明します。

ルールのメタ情報
図 7: ルールのメタ情報

インストール

capa をできるだけ簡単に使用できるようにするために、Windows、Linux、および OSX 用のスタンドアロンの実行可能ファイルを提供しています。このツールは Python で記述されており、ソース コードは GitHub で入手できます。追加の最新のインストール手順は、capa リポジトリーで入手できます。

FLARE-VMの新しいバージョン ( GitHubで入手可能) には capa も含まれています。

使用法

プログラム実行 capa の機能を識別し、入力ファイルを指定するには、次のようにします。

$ キャパ疑わしい.exe

capa は、Windows PE ファイル (EXE、DLL、SYS) とシェルコードをサポートしています。シェルコード ファイルで capa を実行するには、ファイル形式とアーキテクチャを明示的に指定する必要があります。たとえば、32 ビット シェルコードを分析するには、次のようにします。

  • $ capa -f sc32 shellcode.bin

識別された機能に関する詳細情報を取得するために、capa は 2 つの追加の詳細レベルをサポートしています。ルールで capa が一致した場所と理由に関する最も詳細な出力を取得するには、非常に詳細なオプションを使用します。

  • $ capa -vv 疑わしい.exe

特定のルールのみに注目したい場合は、タグ オプションを使用してルール メタ セクションのフィールドをフィルタリングできます。

  • $ capa -t “TCP ソケットの作成” 疑わしい.exe

サポートされているすべてのオプションを確認し、ドキュメントを統合するには、capa のヘルプを表示します。

  • $ キャパ -h

貢献する

capa がコミュニティに価値をもたらし、あらゆる種類の貢献を奨励することを願っています。フィードバック、アイデア、プル リクエストは大歓迎です。貢献文書は素晴らしい出発点です。

ルールは capa の識別アルゴリズムの基礎です。私たちはそれらを簡単に楽しく書きたいと思っています。ルールのアイデアがある場合は、Issue を開くか、 capa-rulesにプル リクエストを送信してください。このようにして、誰もがマルウェア分析コミュニティの集合的な知識から利益を得ることができます.

capa のソース コードとサポートされているルールの間で作業と議論を分離するために、 capaに組み込まれているすべてのルールに対して 2 つ目の GitHub リポジトリを使用します。 capa メイン リポジトリには、ルール リポジトリが git サブモジュールとして組み込まれています。ルール形式のドキュメントを含む詳細については、ルール リポジトリを参照してください。

結論

このブログ投稿では、FLARE チームのマルウェア分析コミュニティへの最新の貢献を紹介しました。 capa は、マルウェアに見られる動作をエンコード、認識、および共有するためのオープンソース フレームワークです。コミュニティは、調査、ハンティング、およびトリアージ中に遭遇する大量のマルウェアに対抗するために、このタイプのツールを必要としていると考えています。バックグラウンドに関係なく、capa を使用すると、プログラムが何をするかを理解するために何十年にもわたる蓄積された経験が呼び出されます。

次回のマルウェア分析で capa を試してみてください。このツールは非常に使いやすく、フォレンジック アナリスト、インシデント レスポンダー、リバース エンジニアに貴重な情報を提供します。ツールを気に入っていただけた場合、ツールを使用して問題が発生した場合、またはその他のコメントがある場合は、プロジェクトの GitHub ページ からご連絡ください

参照: https://www.mandiant.com/resources/blog/capa-automatically-identify-malware-capabilities

Comments

Copied title and URL