ブログ(脅威調査)

COMオブジェクトのハンティング

COMオブジェクトは最近、ペネトレーション・テスト担当者、レッドチーム、そして水平展開を実行する悪意のある攻撃者によって使用されています。これまでCOMオブジェクトは、さまざまな研究者によって研究されました。その一人であるMatt Nelson(enigma0x3)は、2017年にCOMオブジェクトに関するブログ記事を発表し、取り上げられたCOMオブジェクトのいくつかは、Empireプロジェクトにも追加されました。FireEyeはレッドチームの活動を改善するために、Windows 7およびWindows 10上で利用可能なCOMオブジェクトの調査を行い、いくつかの興味深いCOMオブジェクトを発見しました。その中には、タスク・スケジューリング、ファイルレスのダウンロードや実行、コマンド実行を可能にするものがありました。これら自体はセキュリティの脆弱性ではありませんが、これらのオブジェクトを使用すると、プロセスの振る舞いやヒューリスティック・シグネチャに基づいた検知を回避することができるのです。

COMオブジェクトとは

Microsoftによると、「The Microsoft Component Object Model(COM)とは、相互通信が可能なバイナリ・ソフトウェア・コンポーネントを作成するための、プラットフォームに依存しない分散オブジェクト指向システムです。COMは、MicrosoftのOLE(複合文書)、ActiveX(インターネット対応コンポーネント)などの基礎技術です」。

COMは、別々のコード・モジュールが互いに通信することを可能にする、言語非依存のバイナリ相互運用規格として1990年代に作成され、単一プロセス内での通信やプロセス間通信に利用されます。分散COM(DCOM)は、ネットワーク経由でのリモートプロシージャコール(RPC)を可能にするシリアル化を追加します。

「COMオブジェクト」とは、IUnknownから派生する1つ以上のインターフェイスを実装する実行可能なコード・セクションのことです。IUnknownは、3つのメソッドを持つインターフェイスで、オブジェクトの参照カウンターの維持と他のインターフェイスの問い合わせに対応します。すべてのCOMオブジェクトは、一意のバイナリ識別子で識別されます。これらの128ビット(16バイト)グローバル識別子は、一般にGUID (Globally Unique Identifier) と呼ばれます。COMオブジェクトの識別に使用されるGUIDはCLSID(クラス識別子)、インターフェイスの識別に使用されるGUIDはIID(インターフェイス識別子)です。CLSIDの中には、ProgIDと呼ばれる、人間が読み取れるテキストのIDを持つものもあります。

COMはバイナリ相互運用規格なので、COMオブジェクトは異なる言語での実装や消費を前提に設計されます。COMオブジェクトは通常、呼び出し側プロセスのアドレス空間でインスタンス化されますが、プロセス間通信による他プロセスやリモートマシン上での実行がサポートされます。

Windowsレジストリには、CLSIDを実装コード(DLLまたはEXE内)にマッピングするキーが登録され、これにより該当オブジェクトを生成できるようになっています。

<中略>

結論

COMオブジェクトは、非常に強力で、汎用性があり、その上Windowsと統合されています。つまり、ほぼいつでも利用できます。COMオブジェクトは、コマンドライン引数、PowerShellロギング、ヒューリスティック検知など、さまざまな検知パターンをくぐり抜けるために使用できそうです。パート2ではCOMオブジェクトのハンティングの考察を続けようと思います。楽しみにお待ちください。

本ブログは、米FireEyeが公開した「Hunting COM Objects」の要約版です。技術詳細を含むブログ全文およびパート2(英語)は次のリンクをご参照ください。

本ブログ:https://www.fireeye.com/blog/threat-research/2019/06/hunting-com-objects.html
パート2:https://www.fireeye.com/blog/threat-research/2019/06/hunting-com-objects-part-two.html