1. 概要
Mavinject.exe は Microsoft が提供する正式なユーティリティであり、Application Virtualization(App-V)環境で DLL を特定のプロセスにインジェクションする用途で使用される。Windows 10 バージョン1607から OS に含まれており、Microsoft のデジタル署名が適用された信頼できる実行ファイルであるため、大半のセキュリティソリューションではこのプロセスを信頼リスト(ホワイトリスト)に含める傾向がある。
攻撃者は、このような点を利用して正常なプロセスに不正な DLL ペイロードをインジェクションする用途で mavinject.exe を悪用している。

[図1] mavinject.exe ファイルのプロパティおよび証明書情報
この手法は、MITRE ATT&CK で以下のように分類する。
- T1218.013 – Signed Binary Proxy Execution: Mavinject
- https://attack.mitre.org/techniques/T1218/013/
2. 動作原理
mavinject.exe は、従来の DLL インジェクション手法を自動化して動作するように実装されている。動作時、内部で呼び出される主な Windows API は以下の通りである:
- OpenProcess: 対象プロセスのハンドルを取得し、PROCESS_VM_OPERATION、PROCESS_VM_WRITE、PROCESS_CREATE_THREAD 権限が要求される。
- VirtualAllocEx: 対象プロセスの仮想メモリ空間にメモリを割り当てる。
- WriteProcessMemory: 割り当てられたメモリ空間に DLL パスを記録し、ローディング準備を完了させる。
- CreateRemoteThread: 新しいスレッドを生成して LoadLibraryW 関数を呼び出し、該当 DLL をロードおよび実行させる。
このような一連の動作は正常な Windows システムの作業のように見えるが、攻撃者の立場からすると、これによって外部コードの実行および検知の回避を同時に達成することができる。
ただし、Mavinject.exe は App-V 機能が有効になっている環境(Windows 10 1607 以上)でのみ使用可能であり、一部のセキュリティソリューションは App-V の有効/無効に基づいて検知の有無を判断する。
3. 実行方式の例
1) DLL インジェクション (/INJECTRUNNING)
この方式は、実行中の正常プロセスを対象に不正な DLL をインジェクションする際によく使用される方式である。
mavinject.exe <PID> /INJECTRUNNING <DLL パス>
- <PID>: 対象プロセスの Process ID
- <DLL パス>: インジェクションする DLL ファイルの全体パス
以下は mavinject.exe を使用してメモ帳プロセス(notepad.exe)に Windows 電卓プログラム(calc.exe)を実行する DLL ファイルをインジェクションする例である。
mavinject.exe 3812 /INJECTRUNNING c:\test\run_calc.dll

[図2] インジェクション例
このとき、電卓を実行するスレッドは、正常なプロセスである notepad.exe 内で動作する。もし、マルウェアをダウンロードしたり、C&C サーバー接続のように、不正な機能を含んだ DLL でインジェクションを行うと、実際にはメモ帳プロセスがこの動作を実行するように見える。プロセスツリー構造で確認しても最上位プロセスが mavinject.exe(正常) なので、ほとんどの EDR 製品で異常な振る舞いとして検知されるのを回避することができる。このように、攻撃者は正常なプロセスの異常な振る舞いを検知するのが困難な点を悪用する。
mavinject.exe は、一般的な DLL ファイルだけでなく NTFS Alternate Data Stream (ADS) パスに存在する DLL もインジェクションの対象として使用することができる。
例えば、以下のように test.txt ファイルに ADS ストリームで作成した hidden_dll データ(DLL)もインジェクションの対象に指定することができる。これは、一般的なファイル検知ロジックを回避するのに活用される手法である。

[図3] ADS で作成した DLL インジェクション例
ADS を悪用したマルウェア攻撃事例は、以下の通りである。
2) DLL Import テーブルベースのインジェクション(/HMODULE)
mavinject.exe <PID> /HMODULE=<Base Address> <DLL 名> <Ordinal 番号>
- <PID>: インジェクション対象プロセスの Process ID
- <Base Address>: ターゲットプロセス内にロードされたモジュールのベースアドレス
- <DLL 名>: インポートする DLL 名
- <Ordinal 番号>: 呼び出す Export 関数の Ordinal インデックス
この方式は、実行ファイルの Import Address Table(関数参照テーブル)を操作し、外部 DLL の特定の関数を直接呼び出すように誘導する手法である。 インジェクションする DLL とその関数の位置情報を明示的に指定できるため、より精密なコントロールが可能である。
4. 攻撃事例
以下は、mavinject.exe を実際の攻撃に悪用した事例である。
事例1: Earth Preta(Mustang Panda)の waitfor.exe インジェクション
TrendMicro の研究によると、中国の国家支援を受けていると知られている APT 組織 Earth Preta(Mustang Panda)は Mavinject.exe を利用した新しい攻撃キャンペーンを実行した。
攻撃者は、フィッシングメールを通じて初期侵入に成功したあと、正常な実行ファイル(OriginLegacyCLI.exe)と不正な DLL(EACore.dll)を含む圧縮ファイルをユーザーに配布した。彼らは、ターゲットシステムに ESET アンチウイルスのプロセスが動作中の場合、正常なプロセスである waitfor.exe に不正な DLL をインジェクションする。
ここで mavinject.exe を選択した理由は明確である。Microsoft 認証で署名されており、信頼できるユーティリティであるため、セキュリティソリューションの検知を回避するのに容易であり、システム内部でのインジェクション振る舞いを正常なものに偽装することができるためである。攻撃者は、この点を利用して密かにバックドアを有効にして、その後 C2 サーバーと通信を維持し、コマンドを実行することができる構造を構築した。
事例2: Lazarus グループの explorer.exe インジェクション手法
Lazarus は、ドキュメントベースのマルウェア配布手法を主に使用する攻撃グループであるこの事例でも 、不正なマクロが含まれているドキュメントを通じて初期アクセス権限を取得した。この事例でも、ドキュメントによって実行されたスクリプトは外部から不正なペイロードをダウンロードし、その後 mavinject.exe を利用して explorer.exe に不正な DLL をインジェクションする方式で動作する。
explorer.exe は、Windows ユーザー環境の中心となるプロセスであり、 セキュリティソリューションで感度を低く設定する場合が多い。mavinject.exe を通じたインジェクションは、このような性質を利用して検知される可能性を最小限に抑えるのに有利である。すなわち、この攻撃は正常なプロセスを経由したインジェクションという形を通じて振る舞いベースの検知システムを効果的に回避しようとする意図で設計されたものとみられる。

[図4] Earth Preta(Mustang Panda) – 攻撃度
5. 検知および対応方案
5.1. 検知方法
- コマンドラインでの mavinject.exe 実行の有無および引数(/INJECTRUNNING, /HMODULE)検知
- Sysmon、EDR などでの OpenProcess、VirtualAllocEx、WriteProcessMemory、CreateRemoteThread 呼び出しパターンのモニタリング
- LoadLibraryW 呼び出し経路の追跡および異常の有無の識別
5.2. 対応方案
- App-V 機能未使用時は mavinject.exe 実行遮断ポリシー適用
- 許可されていないプロセス間の DLL インジェクション検知ルールの確立
- システム内、正常なプロセスの異常な DLL ローディング履歴の定期点検
6. 結論
mavinject.exe は、Windows OS に基本的に含まれている正式なツールであるが、脅威行為者の観点からは、検知を回避するための有効な手段として使用される可能性がある。Earth Preta や Lazarus グループのような APT 組織がこのツールを活用し、精巧なインジェクションを実行しているという点は、正常なツールでさえも脅威行為者の戦術に含まれる可能性があることを示している。
セキュリティ担当者は、このようなシステムユーティリティが攻撃チェーンの一部として活用される可能性を念頭に置き、検知戦略と対応ポリシーを設計する必要がある。結局、「正常に見える異常」を識別することが、高度な脅威対応の鍵である。