Windows Defender Advanced Threat Protection で反射型の DLL 読み込みを検出


本記事は、Windows Security のブログDetecting reflective DLL loading with Windows Defender ATP” (2017 11 13 日 米国時間公開) を翻訳したものです


最新の攻撃では、ステルス性と持続性を維持するために、フォレンジックな痕跡をほとんど残さない方法が多く使われています。攻撃者は、ディスク上でファイルを作成したり使用したりすることなく、脆弱なプロセスや持続的なプロセスの中に攻撃を潜ませています。先日のブログ記事では、基礎的なクロスプロセス マイグレーションのほか、AtomBombing やプロセス ハロウイングなどの高度な手法を使用して、攻撃者がどのように検出を回避しているかをお伝えしました。

これ以外に、Windows ローダーを使用せずにダイナミックリンク ライブラリ (DLL) をプロセス メモリに読み込む、反射型の DLL 読み込みという手法も登場しています。

2004 年に Skape 氏と Jarkko Turkulainen 氏 (英語) が初めてインメモリの DLL 読み込みについて言及し、Windows ローダーでディスクの代わりにメモリから DLL を読み込む方法を説明しました。2008 年には、Harmony Security の Stephen Fewer 氏 (英語) が、プロセスへの登録なしで DLL を読み込む反射型の DLL 読み込みを紹介しました。最近の攻撃者の多くがこの方法を使用して検出を回避しています。

反射型の DLL 読み込みを行うのは簡単ではありません。DLL をメモリに書き込んだ後、インポートと再配置のどちらかまたは両方を行う必要があり、これを実行するには、カスタムのローダーを作成しなければなりません。

それでも攻撃者が正規アプリケーション用の Windows ローダーではなく、反射型の DLL 読み込みを使用するのは、以下の 2 つの理由があります。

  1. Windows ローダーを (LoadLibrary 関数で呼び出して) 使用する場合とは異なり、反射型の DLL 読み込みでは DLL をディスク上で操作する必要がありません。このため、攻撃者はプロセスを利用して DLL をメモリにマッピングし、ディスクに保存せずに DLL を反射的に読み込みます。
  2. ディスクに保存されないため、この方法で読み込まれたライブラリは、フォレンジック分析 (実行可能コードに類似したコンテンツが実行可能メモリに存在するかどうかの調査など) を行わない限り容易には発見できません。

インストルメンテーションと検出

反射型の DLL 読み込みの大きな特徴は、DLL コードのための実行可能なメモリを確保する必要があるという点です。これには、既存メモリの保護フラグを変更するか、または実行可能なメモリを新たに割り当てる必要があります。DLL コードのメモリの調達は、反射型の DLL 読み込みを識別する最も重要なシグナルとなります。

Windows 10 Creators Update では、実行可能なメモリ調達に使われる関数 VirtualAlloc および VirtualProtect の呼び出しを装備しました。これらは、Windows Defender Advanced Threat Protection (Windows Defender ATP) 用にシグナルを生成します。マイクロソフトは、これに基づいて新しいモデルを構築し、ブラウザーや生産性ソフトウェアなどの高リスク プロセスの広範囲にわたって反射型の DLL 読み込みを検出できるようにしました。

このモデルは、図 1 に示すように 2 段階のアプローチを採用しています。

  1. まず、通常のプロセスのメモリ割り当てをモデルが学習します。わかりやすい例では、Winword.exe などのプロセスは、4,000 というサイズのページ境界に合った実行可能メモリと特定の実行特性を割り当てます。Winword プロセス内でこの方法でメモリを割り当てるスレッドは、わずか数個程度です。
  2. 次に、通常の挙動から逸脱した量の実行可能メモリを割り当てようとする、悪意あるアクティビティのプロセス (悪意のあるマクロや攻撃の実行など) を検出します。

図 1. 正常なプロセスと悪意あるアクティビティのメモリ割り当ての比較

このモデルでは、反射型の DLL 読み込みを検出する重要なシグナルとしてメモリ イベントを使用することができることを示しています。実際のモデルには、割り当てサイズ、割り当て履歴、スレッド情報、割り当てフラグなどのさまざまな特徴が組み込まれています。また、アプリケーションの挙動はプラグインなど他の要因によっても大きく左右されるため、ネットワーク接続などの挙動に関するシグナルも追加し、検出の有効性を高めています。

反射型の DLL 読み込みの検出

次に、反射型 DLL 読み込みとソーシャル エンジニアリングの組み合わせを Windows Defender ATP で検出するしくみを説明します。たとえば、標的となったユーザーがファイル共有から Microsoft Word ドキュメントを開いたとします。ユーザーは、図 2 に示すようなコードのマクロを実行するように誘導されます (注: このような攻撃の影響を緩和するには、さまざまな方法があります。また、今後導入される Office のセキュリティ機能 (英語) で保護をさらに強化することができます)。

図 2. 悪意のあるマクロ

マクロのコードが実行されると、Microsoft Word プロセスは攻撃者が指定したコマンド アンド コントロール (C&C) サーバーにアクセスし、反射的に読み込まれる DLL のコンテンツを取得します。反射的に読み込まれた DLL は、C&C に接続し、対象マシンへのコマンド ライン アクセスを提供します。

このとき、DLL は元のドキュメントにも、ディスク上にも一切存在していません。最初のドキュメントに含まれる小さなマクロ スニペット以外の攻撃は、メモリ内で実行されます。メモリ フォレンジックを行うと、図 3 に示すように、対応する DLL が存在しない Microsoft Word プロセスにマッピングされた大規模な RWX セクションが発見されます。これらは、反射的に読み込まれた DLL が存在するメモリ セクションです。

図 3. 悪意あるドキュメントが開かれマクロが実行された時の、Microsoft Word プロセスの大規模な RWX メモリ セクション

図 4 に示すように、Windows Defender ATP はこのメモリ割り当てを異常と識別してアラートを生成し、コマンド アンド コントロール サーバーとの通信に関する情報と共にドキュメントのコンテンツを提供します。セキュリティ運用担当者は、この情報に基づいて攻撃範囲を評価し、侵害に対応することができます (図 4 参照)。

図 4. WDATP のアラート例

Microsoft Office 365 Advanced Threat Protection は、類似の攻撃の挙動を動的に照合することでユーザーを保護します。このような攻撃に対して、セキュリティ運用担当者は Office 365 の脅威エクスプローラーのページで図 5 のような Office 365 ATP の行動検出の結果を確認することができます。

図 5. Office 365 ATP の検出例

まとめ: Windows Defender ATP でインメモリ攻撃を検出

Windows 10 では、あらゆる最新型の攻撃に対する防御機能の強化を継続していきます。今回の記事では、Windows Defender ATP が反射型の DLL 読み込みを検出するしくみを説明しました。セキュリティ運用担当者は、Windows Defender ATP のアラートを活用して、社内ネットワークへの攻撃を即座に特定し対応することができます。

Windows Defender Advanced ATP は、悪意あるアクティビティを運用担当者にアラート通知する、侵害後の対応ソリューションです。多様なセキュリティ データ、高度な行動分析、機械学習を活用して攻撃時の特徴を把握し、強化されたインストルメンテーションと検出機能により、システムに潜む攻撃を確実に発見します。

また Windows Defender ATP では、セキュリティ運用担当者が攻撃を察知し迅速に対応できるように、詳細なイベント タイムラインやその他のコンテキスト情報を提供します。さらに、攻撃を受けたマシンを分離して、ネットワークの他の部分を保護することもできます。

Windows Defender ATP の機能の詳細については、こちらのページを参照してください。また、企業のセキュリティ戦略における侵害後の検出アプローチの重要性については、こちらのドキュメント (英語) を参照してください。Windows Defender ATP は Windows 10 Enterprise のコアに組み込まれ、無料でお試しいただけます

 

Christian Seifert

Windows Defender ATP 研究チーム

 

 

Skip to main content