AppInit_DLLs
AppInit_DLLs 是什么?
AppInit_DLLsWindows 早期持久化技术,通过滥用注册表值,将指定 DLL 加载到所有链接 user32.dll 的用户态进程中。
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 应用。因此,一次注册表写入即可获得广泛的代码执行以及持久化,其运作方式是"新进程触发"而非一次性自启动。
该技术虽古老但极具启发性。它为经典的 Vanquish rootkit 提供了加载机制,商业软件在历史上也曾(且笨拙地)使用它——Nvidia 和多种输入法都附带过 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 部署用户态 rootkit。
● 常见问题
AppInit_DLLs 是什么?
Windows 早期持久化技术,通过滥用注册表值,将指定 DLL 加载到所有链接 user32.dll 的用户态进程中。 它属于网络安全的 攻击与威胁 分类。
AppInit_DLLs 是什么意思?
Windows 早期持久化技术,通过滥用注册表值,将指定 DLL 加载到所有链接 user32.dll 的用户态进程中。
如何防御 AppInit_DLLs?
针对 AppInit_DLLs 的防御通常结合技术控制与运营实践,详见上方完整定义。
AppInit_DLLs 还有哪些其他名称?
常见的别称包括: AppInit DLL 注入, user32 AppInit 持久化。