セキュリティ研究者は、企業の検知・対応(EDR)ツールを、信頼されたメモリ領域に悪意あるコードを注入することで回避できる、新たな高度なハッキング手法を発見した。この「Mockingjay」と呼ばれるステルス性の高い手法により、攻撃者は組織のネットワーク内で長期間にわたって検知されずに活動できる。
Security Joesの研究者が特定したこの攻撃手法は、EDRベンダーとセキュリティチーム双方にとって課題となる。
「こうした攻撃に効果的に対処するには、セキュリティソリューションは、特定のDLLやシステムコールを静的に監視するだけにとどまらない、包括的かつプロアクティブなアプローチを採用する必要がある」と研究者らは記した。 「振る舞い分析、異常検知、機械学習の技術を組み合わせることで、プロセスインジェクション技術を特定し、信頼されたプロセスのメモリ領域内にある悪意ある活動を検知する能力を高められる」
トップEDRソリューションを参照:Top EDR Solutions
Mockingjay攻撃を解説
Mockingjay攻撃は、システム上で稼働する信頼された正規のプロセスを標的とし、EDRツールが通常、インジェクション攻撃と関連付けるWindows APIの使用を回避または最小限に抑える。信頼されたプロセスのメモリ領域に密かに悪意あるコードを注入することで、Mockingjayは一見無害なプロセスの中に活動を隠す。
EDRツールは通常、インジェクション攻撃を検知するため、プロセスのメモリ領域内にあるWindows APIを監視する。そこで研究者らは、監視対象のWindows APIに依存せず、Windowsプロセスのメモリ領域内でコードを動的に実行する別の方法を探ることにした。
研究者らはブログ記事で、そのような攻撃手法を2つ詳しく説明した。
研究者らは、デフォルトでRWX(Read-Write-Execute)に設定された保護を持つセクションを含む、信頼されたWindowsライブラリを調査した。「これらのライブラリを悪用することで、さまざまなプロセスへのコード注入に成功し、セキュリティソリューションが通常監視している複数のWindows APIを実行する必要をなくせた」と研究者らは記している。「このアプローチでは、プロセスインジェクション技術と通常関連付けられるWindows APIをアプリケーションが直接呼び出さないため、防御ソフトウェアに検知される可能性が低下する。注入は、メモリ領域の割り当てや権限設定、新しいスレッドの開始すら行わずに実行される。この技術の独自性は、脆弱なDLLと、コードを正しいセクションにコピーすることを必要とする点にある」
両方の攻撃手法は、Visual Studio 2022 Community内にあるプロセスを利用する。1つ目はDLLのmsys-2.0.dllで、2つ目の攻撃手法はVisual Studio 2022 Communityのディレクトリ内にあるssh.exeプロセスを標的とする。
msys-2.0 DLLには、悪意あるコードの読み込みに悪用される可能性があるデフォルトのRWXセクションが含まれていると、Security Joesの研究者らは述べた。報告書では攻撃手法を詳しく説明し、次の6段階に要約している。
- カスタムアプリケーションがLoadLibraryWを使って脆弱なDLLを読み込む
- DLLのベースアドレスとセクションのオフセットを使ってRWXセクションの位置を解決する
- ディスクからクリーンなNTDLL.DLLのコピーを読み込み、目的のシステムコールのシステムコール番号を取得する
- EDRが追加したjmpの後にあるテスト命令のアドレスを、NTDLL.DLLのメモリ内コピー(EDRによってフック済み)から取得する
- テスト命令のアドレスとシステムコール番号を使い、研究者らが脆弱なDLLのRWX領域にスタブを組み立てる
- スタブが実行されると、通常どおりEAXレジスターにシステムコール番号を設定し、選択したシステムコールに対応するテスト命令のアドレスへ直ちにジャンプすることで、EDRの検証ステップを回避する
2つ目のEDR攻撃の詳細
研究の過程で、研究者らはmsys-2.0.dllライブラリが「GNUユーティリティーなど、POSIXエミュレーションを必要とするアプリケーションや、もともとWindows環境向けに設計されていないアプリケーションで一般的に利用されている」ことに気づいた。「Visual Studio 2022 Communityのサブディレクトリ内に、こうした特徴を持つ関連バイナリがあることを確認した」
概念実証では、Visual Studio 2022 Communityのディレクトリ内にあるssh.exeプロセスをペイロードの標的に選んだ。「これを実現するため、Windows APIのCreateProcessWを使い、カスタムアプリケーションの子プロセスとしてssh.exeプロセスを起動した」と研究者らは記し、攻撃手法を次のように要約している。
- カスタムアプリケーションを実行する
- DLLのmsys-2.0.dllを使用する信頼されたアプリケーション(ssh.exe)を子プロセスとして起動する
- カスタムアプリケーションが標的プロセス(ssh.exe)へのハンドルを開く
- 注入するコードをmsys-2.0.dllのRWXセクションにコピーする
- 信頼されたアプリケーションが通常の実行フロー中に注入されたコードを実行する
- RWXセクションに注入されたシェルコードが追加のDLL、MyLibrary.dllを読み込む
- バックコネクトシェルのセッションを確立する
「この手法の独自性は、注入したコードの実行を開始するために、標的プロセス内でメモリを割り当てたり、権限を設定したり、新しいスレッドを作成したりする必要がない点にある」と研究者らは記している。「この違いにより、この戦略は既存の他の手法とは一線を画し、エンドポイント検知・対応(EDR)システムにとってこの手法の検知を困難にしている」
Mockingjay攻撃から身を守る方法
振る舞い分析を統合したEDRシステムは、信頼されたプロセスまで監視範囲を広げることでMockingjay攻撃を阻止できる。こうした検知技術は、ベースラインとなる振る舞いのパターンを確立し、メモリの完全性をチェックすることで、コードインジェクションや不正な変更を特定できる。EDR技術は、コンテキスト分析と、異常なパターンを検知できる機械学習手法を活用することで、Mockingjay攻撃を認識してブロックする能力を高められる。
セキュリティチームにとって、Mockingjayは多層防御を採用する新たな根拠となる。1つのセキュリティツールが攻撃を見逃しても、2つ目のツールで被害を抑えられる可能性がある。





