Dynamic-link libraries (DLLs) that are specified in the AppInit_DLLs value in the Registry keys HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows or HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows are loaded by user32.dll into every process that loads user32.dll. In practice this is nearly every program, since user32.dll is a very common library. (Citation: Elastic Process Injection July 2017) Similar to Process Injection, these values can be abused to obtain persistence and privilege escalation by causing a malicious DLL to be loaded and run in the context of separate processes on the computer. (Citation: AppInit Registry)
The AppInit DLL functionality is disabled in Windows 8 and later versions when secure boot is enabled. (Citation: AppInit Secure Boot)
T1103は非常に強力かつステルス性の高いWindows向けのプロセス注入・自動実行手法です。
Windowsの基本ライブラリである user32.dll の「仕様」を悪用し、システム上で新しく立ち上がるほぼすべてのアプリケーションにマルウェア(DLL)を自動的に、強制注入(インジェクション)する手法です。
この手法で攻撃者は、「ユーザーやシステムが何かアプリを起動するだけで、自動的かつ網羅的にマルウェアを拡散・実行させること」を実現します。
広範囲な永続化:
特定のアプリ(例: メモ帳やブラウザなど)に依存せず、システム上で新しくプロセス(プログラム)が起動するたびに、その裏で自動的にマルウェアを何度も動かすことができます。
特権昇格:
もし高い権限(SYSTEM権限や管理者権限)で起動したプロセスがあれば、そのプロセスのメモリ空間にマルウェアのDLLが自動的にロードされるため、攻撃コードもその高い権限を引き継いで動作(特権昇格)できます。
高い隠蔽性(プロセスインジェクション効果):
マルウェアが独立した単体のファイル(.exe)としてプロセス一覧に現れず、信頼された正規プログラム(explorer.exe や業務アプリなど)の内部に溶け込んで動作するため、タスクマネージャーなどからの目視による発見が困難です。
AppInit DLLsの機能を有効化・変更するため、攻撃者は事前にシステム内での管理者権限(Administrator)を確保している必要があります。
悪意のあるDLLの配置:
プロセスに注入したい攻撃用のDLL(例: malicious.dll)を、ローカルディスク(C:\Windows\System32\ など)に配置します。
レジストリの改ざん:
WindowsがAppInit機能を参照する以下のレジストリキーを編集します。
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WindowsHKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows具体的には、以下の2つの値を書き換えます。
* `LoadAppInit_DLLs` の値を `1` に変更する(機能を有効化)。
* `AppInit_DLLs` の値に、ステップ1で配置したマルウェアのDLLパスを書き込む。
自動インジェクションの発動:
user32.dll という正規の共通ライブラリを読み込みます。user32.dll がロードされる際、OSは自動的に上記のレジストリを確認し、そこに指定されている AppInit_DLLs(攻撃者のDLL)を、その起動しようとしているアプリケーションのメモリ空間へ強制的に一緒に読み込ませます。コード実行:
アプリケーションが起動した瞬間、攻撃者のDLLに仕込まれたコード(DllMain)がバックグラウンドで即座に実行されます。
Windowsのアップデートによる仕様変更の把握と、レジストリの厳重な監視が効果的です。
セキュアブート(Secure Boot)の有効化:
これが最も強力な防御策です。 マイクロソフトはセキュリティ上のリスクから、Windows 8以降のOSにおいてセキュアブートが有効な場合、AppInit DLLsの機能を強制的に無効化(無視)する仕様を導入しました。社内の端末でセキュアブートが確実に有効になっているか確認してください。
レジストリの書き込み監視:
AppInit_DLLs および LoadAppInit_DLLs の値に対する新規作成や変更の挙動を、EDRやSysmon(Event ID 13: RegistryEvent)等で常時監視し、アラートを設定します。
アプリケーション制御(WDAC / AppLockerなど):
デジタル署名のない、または信頼されていない未加工のDLLが各プロセスにロードされるのをブロックするポリシーを適用します。
Sysinternals「Autoruns」の活用:
Microsoft公式ツール Autoruns を使用して「AppInit」タブを確認し、身に覚えのないサードパーティ製DLLが登録されていないか定期的に監査します。
諸刃の剣としての仕様:
元々は、ソフトウェア開発者がシステム全体の挙動をカスタマイズしたり、システム監査ツールやセキュリティ製品がすべてのプロセスを一括して監視・フック(割り込み処理)したりするために用意された「Windowsの正規の仕組み」でした。しかし、その強力さゆえにマルウェアに悪用される定番の抜け道となってしまいました。
モダンOSでの衰退と未だ残るリスク:
前述の通り、Windows 10や11などの現代の環境でセキュアブートが有効であれば自動的に無効化されますが、古いレガシーシステム(Windows 7やServer 2008など)が残っている環境、または意図的にセキュアブートをオフにしている環境では、今なお極めて致命的な永続化の起点となります。
CWE-15: External Control of System or Configuration Setting:
システムの重要な自動起動設定(AppInitレジストリ)を外部から不正に変更されてしまう不備。
CWE-427: Uncontrolled Search Path Element:
読み込まれるDLLの検索・指定パスが適切に制御されず、悪意のあるバイナリのロードを許してしまう問題。
OSの根本的な設計を突いた手法であるため、高度なスパイ活動や、解析を妨害するタイプのマルウェアで長年愛用されてきました。
T9000 / Ramsay:
主に機密情報を盗み出す目的で設計されたこれらのマルウェアは、標的の端末環境で確実にバックドアを維持し、すべてのユーザーモードプロセス(各種アプリケーション)の挙動を監視・奪取するために、AppInit_DLLs に自身のコンポーネント(例: ResN32.dll など)を登録する手法を実装していました。
Meterpreter (Metasploit):
ペネトレーションテスト(侵入テスト)用のフレームワークであるMetasploitには、特権昇格や強固な永続化をデモンストレーション・実行するためのモジュールとして、このAppInitレジストリを自動で書き換える機能が標準で含まれています。
もしSOC運用などで、「一般ユーザー向けのPCなのに、なぜか LoadAppInit_DLLs レジストリが 1 になっている」、あるいは 「サードパーティの正規ソフトウェア(セキュリティ製品やグラフィックドライバー等)以外の、不審なパスにあるDLLが AppInit_DLLs に指定されている」 というログを検知した場合は、セキュアブートが無効化され、深刻なバックドアが仕掛けられている可能性を疑う必要があります。
この攻撃手法に関連する CVE は登録されていません。