新たに登場したEDR回避の手法が、研究者らによって他の回避手法と組み合わされた結果、検知が著しく困難になることが判明しました。
Flashpointは、Windows環境でエンドポイント検知・対応(EDR)製品を欺くために最近発見された回避技術「プロセスパラメータポイズニング(process parameter poisoning)」に関する調査結果を発表しました。この手法は7月に研究者のMax Hirschberger氏とOgulcan Ugur氏が初めて報告したもので、セキュリティツールと脅威アクターの双方がこれまで、プロセスインジェクションの検知や実行に一部の限られたWindows APIを利用してきたという事実を突いています。こうしたAPIには、VirtualAllocEx()、WriteProcessMemory()、MapViewOfFile2()などが含まれますが、これらに限定されるわけではありません。
同社の研究者らは、プロセス自体の起動と同時に立ち上がる標準的なプロセス初期化構造体の中に、攻撃者が悪意あるペイロードを直接隠す方法を発見しました。
Windowsシステム上ですでにコードを実行できている攻撃者は、「犠牲プロセス(sacrificial process)」を作成し、Windowsがその新しいプロセスに自動的に引き渡す起動パラメータを悪用できます。これは、EDR製品が従来プロセスインジェクションの監視対象としてきたメモリ割り当てや書き込み操作の一部を使わずに行われます。
7月の時点で、Hirschberger氏とUgur氏は市場をリードする4種類の非公開のEDR製品に対してこの手法を検証し、当時のブログ投稿で「コードインジェクションはすべてのケースで成功し、EDRが検知・ブロック・修復を行うよう設定されていたにもかかわらず、アラートは一切発生しなかった」と述べています。
Flashpointの研究者らは、この手法が特定のエンドポイント検知メカニズムをどのように回避しうるかを評価するため、Rustで独自の実装を構築して検証しました。Flashpointの調査は、元の研究結果を独自に検証すると同時に、Rustで実装した場合や他の回避手法と組み合わせた場合にこの技術がどう振る舞うかを詳しく調べたものです。
今回の検証でFlashpointは、拡張検知・対応(XDR)コンポーネントを備えた一般的なオープンソースEDRプラットフォームに対し、自社のRust製POCを用いて基本手法をテストしました。このEDRプラットフォームはバイナリの実行に対して一切アラートを出しませんでしたが、XDRコンポーネントは第2段階のペイロードによるその後の活動をブロックしました。
続いて研究者らは、この基本手法をDLLアンフッキングと組み合わせました。これは、セキュリティソフトウェアによって改変されたWindowsライブラリ関数を元に戻すことで、一部のユーザーモードEDR監視を回避しうる手法です。Flashpointはさらに、Microsoft製以外のDLLをブロックするポリシーも適用しました。これにより、一部のサードパーティ製EDR監視コンポーネントの読み込みを困難にすることができます。
この時点以降について、研究者らは「アナリストは実行中にXDRによるブロックを一切観測せず、同プラットフォーム上でのアラートも確認されなかった」と記しています。
EDR回避を阻止する方法
Flashpointは、プロセスパラメータポイズニングから身を守るために防御側が取れる4つの検知戦略を挙げています。すなわち、プロセスパラメータ内の異常なデータの検査、スレッド実行ハイジャッキングの監視、異常なメモリ領域から実行されるコードの検知、そしてメモリのアクセス権限が実行可能に変更されることの監視です。
Flashpointは総括として、防御側が従来プロセスインジェクションと結び付けられてきたWindows API呼び出しの監視だけに頼るのではなく、プロセスが実際に何を行っているかを監視するよう推奨しています。
FlashpointのシニアアナリストであるPaul Daubman氏はDark Readingの取材に対し、同社はこれまでのところこの手法が公開されたマルウェアの検体で使用された証拠を確認していないとしつつも、「脅威アクターがこれを利用することを妨げるものは実質的に何もない」と語っています。
「これはプロセスパラメータスプーフィングに似た手法です。プロセスパラメータスプーフィングはよく知られた技術ですが、実際の検体ではまだあまり使われていません」と同氏は述べています。「そのため、この手法についても、専門的なレッドチームや高度な脅威アクター以外の間で広く使われることはないと見ています」