Mockingjay という新たなプロセス・インジェクションの手法:既存の EDR 検出を回避していく

New Mockingjay process injection technique evades EDR detection

2023/06/27 BleepingComputer — Mockingjay と名付けられた、新しいプロセス・インジェクションの手法により、脅威たちは EDR (Endpoint Detection and Response) などのセキュリティ製品による検知を回避し、侵害したシステム上で悪意のコードを密かに実行できるという。この手法を発見したのは、サイバー・セキュリティ企業 Security Joes の研究者たちである、具体的に言うと、RWX (Read/Write/Execute) セクションを持つ正規の DLL を利用して、EDR のフックを回避し、リモート・プロセスにコードを注入するものとなる。

プロセス・インジェクションとは、オペレーティング・システムから信頼を得ている実行プロセスのアドレス空間で、任意のコードを実行する手法であり、それを達成した脅威アクターは検知されることなく、悪意のコードを実行できる。


プロセス・インジェクションの例としては、DLL injection/PE (portable executable) Injection/ Reflective DLL Injection/ Thread Execution Hijacking/Process Hollowing/Mapping Injection/APC (asynchronous procedure call) Injection などがある。

これら全ての手法において、攻撃者は Windows の API などの各種システム・コールを使用し、プロセス/スレッドを作成し、プロセスのメモリ書き込みを行う必要がある。したがって、上記に関連する特定のアクションを監視するセキュリティ・ツールであれは、疑わしいインシデントを検出し、必要に応じて介入することが可能となる。

Security Joes が指摘する、Mockingjay の際立っている点は、一般的に悪用されることの多い、Windows API コールの使用/特別なパーミッションの設定・メモリ割り当ての実行/スレッドの起動などを行わないことだ。つまり、それらを制限することで、検出の機会を排除しているという。

Mockingjay を考案する

研究者たちの最初の目標は、デフォルトで RWX セクションを持つ、脆弱な DLL を見つけることだった。Security Joes のアナリストは、適切な DLL を探している最中に、Visual Studio 2022 Community に含まれる “msys-2.0.dll” という DLL を発見した。

彼らは、「この既存の RWX セクションを活用することで、固有のメモリ保護を利用することが可能となり、すでに EDR にフックされている可能性のある関数を、効果的にバイパスできる。このアプローチは、userland フックによる制限を回避するだけではなく、我々のインジェクション技術にとって、堅牢で信頼性の高い環境を確立することになる」と述べている。

続いて、彼らは2つのインジェクション手法を開発した。1つはセルフ・インジェクションであり、もう1つはリモート・プロセス・インジェクションである。

最初のケースは、カスタム・アプリケーション “nightmare.exe” が、2つのWindows API コールを使って脆弱な DLL をメモリ空間に直接ロードし、メモリ割り当てや、パーミッションの設定は行わずに、RWX セクションへの直接アクセスを許可するものだ。

Writing malicious code onto the RWX section
Writing malicious code onto the RWX section (Security Joes)

続いて、クリーンなシステム・モジュールである “NTDLL.DLL” を悪用してシステムコール番号を抽出し、”Hell’s Gate EDR unhook” テクニックを用いて EDR フックを回避し、注入されたシェルコードを検出されることなく実行させる。

Code to create system call stub so API use can be bypassed
Code to create system call stub so that API use can be bypassed
(Security Joes)

この2つ目の方法は、”msys-2.0.dll” の TWX セクションを悪用して、リモートプロセスにペイロードを注入するものだが、”ssh.exe” プロセスが最適だという。

このカスタム・アプリケーションは、子プロセスとして “ssh.exe” を起動し、ターゲット・プロセスへのハンドルを開き、脆弱な DLL の RWX メモリ空間に悪意のコードを注入する。

Code to launch the new process
Code to launch the new process (Security Joes)

最後に、注入されたシェルコードにより、”MyLibrary.dll” DLL ファイルをロードし、攻撃者のマシンの攻撃例としてリバースシェルを確立する。

Establishing a reverse shell on the breached system
Establishing a remote shell on the breached system (Security Joes)

テストによると、このリモート・インジェクション攻撃の制約により、ターゲット・プロセス内での新しいスレッドの作成/メモリを割り当て/パーミッションの設定などが行われないため、EDR ソリューションを上手く回避できたという。


Mockingjayで提案された、この2つの方法は、LoadLibraryW/CreateProcessW/GetModuleInformation などの Windows API を使用して、誤って設定された DLL をロードし、DLL の RWX セクションのアドレスを見つけだすというものだ。

しかし、一般的な EDR は、WriteProcessMemory/NtWriteVirtualMemory/CreateRemoteThread/NtCreateThreadEx などの API を監視している。それらは、従来のプロセス・インジェクション攻撃で呼び出されることが多いが、Mockingjay がアラームを発する可能性が低いとされる。

Joes Security による Mockingjay の開発は、組織が現行の EDR ソリューションだけに頼るのではなく、総合的なセキュリティ・アプローチを採用しなければならない理由を示す、もう1つの証拠となるである。

このブログで EDR を検索すると、それぞれのマルウェアの EDR 回避の手法などが見えてきます。それの中でも、2023/04/21 の「AuKill マルウェア:悪意のドライバーで EDR を無力化してから攻撃を開始」は力技系であり、今回の Mockingjay は忍系なのかもしれません。ただし、このところ、DLL サイドローディングの採用が主流になっているように思えます。ただし、そこへ至る手口は多様であるため、守る側もたいへんです。