Moonwalk++はWindowsのコールスタックを偽装してEDRを回避する

新たなMoonwalk++の概念実証(PoC)は、マルウェアがメモリ上で暗号化されたままWindowsのコールスタックを偽装し、最新のEDR検知を回避できることを示しています。

この研究は、企業の防御側がますます依存するスタックベースのテレメトリにおける盲点を浮き彫りにしています。

「公開されている検知ツールは、コールスタックの改ざんをまったく認識できません」と研究者は述べています

Moonwalk++が示すスタックベース検知の限界

Moonwalk++は、特定の脆弱性やCVEを悪用しない概念実証の回避手法です。 

その代わりに、最新のエンドポイント検知・対応(EDR)ツールに組み込まれた前提、特にWindowsのコールスタック・テレメトリに依存してコードインジェクション、シェルコード実行、侵害後の挙動を特定する仕組みを標的にします。

コールスタックの検証、モジュールの出自、またはスタック巻き戻し(unwind)ヒューリスティクスに防御の比重を置く組織は、同様の手法が実運用のマルウェアに組み込まれた場合、影響を受ける可能性があります。 

Elastic Securityの研究者は、CALL命令の検証、信頼できるモジュール解決の確認、メモリ特性の分析によって悪意あるコールスタックを検知するためのガイダンスを公開しています。 

Moonwalk++は、このアプローチに基づく防御を回避することを明確に目的として設計されました。これは、成熟した検知ロジックそのものが攻撃者の標的になり得ることを示しています。

技術的には、Moonwalk++は複数の回避手法を単一の一貫した実行フローに統合し、あらゆる段階で正当な実行に見える外観を保つことで、従来のスタック偽装研究を拡張しています。 

まず、Windowsバイナリ内に自然に存在し、想定されるオフセットに有効なCALL命令をすでに含む命令ガジェットを利用することで、CALL命令の検証を回避し、偽造したリターンアドレスが整合性チェックを通過できるようにします。 

次に、OneDrive.exeのような信頼されたプロセスにシェルコードを注入し、プロセス自身のイメージベースから偽装したスタックフレームを取得することで、モジュール解決チェックを回避し、痕跡を正当なものに見せかけます。 

最後に、Moonwalk++はクリーンで巻き戻し可能なコールスタックを維持しつつ、カスタムROPチェーンを用いてメモリ内ペイロードを暗号化します。

これらの手法を組み合わせることで、マルウェアはメモリ上のみで実行・常駐しながら、正常に見えるコールスタックを提示して高度な検知テレメトリを無力化できます。

Moonwalk++に対してコールスタック検知が失敗した理由

テストでは、Hunt-Sleeping-BeaconsGet-InjectedThreadExEclipseといった一般的な検知手法がMoonwalk++の活動を検知できないことが示されました。 

これらのケースでは、Moonwalk++が生成するコールスタックが検証基準を完全に満たしていたため、ツールは意味のある侵害指標(IoC)を報告しませんでした。 

hollows_hunterのように、より広範なメモリ難読化の痕跡に焦点を当てるツールだけが異常を検出しましたが、それでも検知はコールスタック分析そのものではなく、異常なメモリ保護といった間接的な指標によるものでした。

これらの失敗は、悪意ある実行はいずれ異常に見えるはずだ、という前提に依存するスタックベース検知の根本的な弱点を露呈しています。 

Moonwalk++は、実行コンテキストを厳密に制御する攻撃者が、内部整合性を保ち、正しく巻き戻せて、完全に正当なモジュールへ解決されるコールスタックを構築できることを示すことで、この前提に挑戦しています。 

スタックのあらゆる層が防御側の想定と一致してしまうと、高度なテレメトリであっても識別能力を失います。 

その結果、検知の課題は「悪そうに見える」実行を見つけることから、微妙な振る舞いの兆候やメモリレベルのシグナルを認識することへと移りますが、これらは大規模環境で信頼性高く監視するのが依然として困難です。

EDR回避に対する検知の強化

以下の対策は、組織が検知を強化し、高度な回避手法によるリスクを低減するための実践的な方法を示しています。

  • コールスタック・テレメトリは補助的なシグナルとして扱いメモリ変更、スレッド活動、API使用状況、プロセス系譜(lineage)と相関させる。
  • 監視する 動的コードをほとんど実行しない信頼済みプロセスについて、異常な挙動やインジェクション活動を監視する。
  • 単一の手法に依存するのではなく、振る舞い・メモリ・実行コンテキストのシグナルを重ね合わせて検知を強化する。
  • 回避の盲点を特定するため、敵対者エミュレーションレッドチーミングを通じて検知ロジックをテストし検証する。
  • 動的コード実行、メモリ保護の変更、リターン指向プログラミング(ROP)の挙動に対して、より厳格な制御を適用する。

これらの手順を総合すると、単一の検知手法への依存を減らすことでレジリエンスの向上に役立ちます。 

検知ロジックが標的になるとき

Moonwalk++は、マルウェアが単に検知を回避することだけに注力するのではなく、防御側が依拠する前提やヒューリスティクスを悪用するよう意図的に設計されるという、攻撃者の手口におけるより広範な変化を反映しています。 

テレメトリそのものではなく、セキュリティツールがテレメトリをどのように解釈するかを標的にすることで、Moonwalk++のような手法は、検知ロジックを主要な攻撃対象領域として扱う進化する敵対者の思考様式を浮き彫りにしています。

この進化は、多くの組織がゼロトラストへと向かっている理由を改めて裏付けています。

翻訳元: https://www.esecurityplanet.com/threats/moonwalk-bypasses-edr-by-spoofing-windows-call-stacks/

ソース: esecurityplanet.com