AppInit_DLLs
AppInit_DLLs とは何ですか?
AppInit_DLLsuser32.dll をリンクするすべてのユーザー モード プロセスに指定 DLL を読み込ませるレジストリ値を悪用する、レガシーな Windows 持続化手法。
AppInit_DLLs の悪用(MITRE ATT&CK T1546.010)は、HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs およびその WOW6432Node 側を対象とします。LoadAppInit_DLLs が 1 に設定されると、user32.dll の初期化ルーチンは AppInit_DLLs に列挙された各 DLL を、user32.dll を読み込むすべてのプロセス、すなわち事実上すべての対話型 GUI アプリケーションにマップします。したがって、1 回のレジストリ書き込みだけで広範なコード実行と持続化が得られ、一度きりの自動起動ではなく「新規プロセスをトリガーとする」形で実行されます。
この手法は古いものの示唆に富みます。古典的な Vanquish ルートキットの読み込みメカニズムを提供したほか、商用ソフトウェアも歴史的に(そして不器用に)使用してきました。Nvidia やさまざまな IME が AppInit DLL を同梱していたため、セキュリティ チームは値が空でないというだけで単純にアラートを出すことはできません。Windows 8 以降、Secure Boot が有効な場合、列挙されたすべての DLL がコード署名されていない限り AppInit メカニズムは無効化され、その到達範囲は大幅に縮小します。Secure Boot が有効な Windows 10/11 では事実上機能しません。それでも、レガシーな Windows 7/Server 2008 環境や、互換性のために Secure Boot が無効化されたホストでは依然として観測されます。
対策:Secure Boot を有効に保つ、「署名済み AppInit DLL を要求する」ポリシーを適用する、Sysinternals の Autoruns で値のベースラインを取得する、そして Sysmon Event ID 13 または EDR テレメトリでこれらのキーへのレジストリ書き込みをアラートすることです。
flowchart TD
A[ローカル管理者権限を持つ攻撃者] --> W[DLL パスを AppInit_DLLs キーに書き込む]
W --> L[LoadAppInit_DLLs = 1 に設定]
L --> N[新しい GUI プロセスが起動]
N --> U[プロセスが user32.dll を読み込む]
U --> SB{Secure Boot 有効かつ DLL 未署名?}
SB -->|はい| BLK[読み込みスキップ - 手法は無力化]
SB -->|いいえ| INJ[悪意ある DLL がプロセスにマップされる]
INJ --> RUN[コードが全対話型アプリで実行 -> 持続化]
W -.検出.-> DET[Sysmon EID13 / Autoruns ベースラインのアラート]● 例
- 01
Windows 7 サーバーで AppInit_DLLs に悪意ある補助 DLL のパスを追加し、全プロセス横断であらゆるキー入力を記録する。
- 02
Secure Boot を無効化した環境で AppInit_DLLs を併用しユーザー モード ルートキットを展開する。
● よくある質問
AppInit_DLLs とは何ですか?
user32.dll をリンクするすべてのユーザー モード プロセスに指定 DLL を読み込ませるレジストリ値を悪用する、レガシーな Windows 持続化手法。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
AppInit_DLLs とはどういう意味ですか?
user32.dll をリンクするすべてのユーザー モード プロセスに指定 DLL を読み込ませるレジストリ値を悪用する、レガシーな Windows 持続化手法。
AppInit_DLLs からどのように防御しますか?
AppInit_DLLs に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
AppInit_DLLs の別名は何ですか?
一般的な別名: AppInit DLL インジェクション, user32 AppInit 持続化。