Winlogon 键控制登录动作
Winlogon 键决定交互式登录时执行什么:Userinit 指定登录初始化程序(正常值为 C:\Windows\system32\userinit.exe,),Shell 指定用户外壳(正常为 explorer.exe),Taskman 与 AppSetup 也可能被改动。值被追加路径后,每次用户登录都会拉起攻击者程序。
判定要点
要看的是「精确比对」而不是包含匹配。恶意值常写成 userinit.exe,C:\Users\Public\x.exe,只看开头出现了 userinit.exe 就放过,是最常见的漏检原因。32 位视图下的 Wow6432Node 分支要单独再看一遍。
基本信息
| 注册表路径 | HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon |
|---|---|
| 正常 Userinit | C:\Windows\system32\userinit.exe, |
| 正常 Shell | explorer.exe |
| 可劫持项 | Userinit、Shell、Taskman、AppSetup |
| 32 位视图 | HKLM\SOFTWARE\WOW6432Node 下的同名键 |
| 权限要求 | 读取普通用户即可,修改需管理员 |
典型使用场景
- 排查登录后立刻出现的异常进程
- 分析杀软或任务管理器被启动后秒退的现象
- 检查远程桌面登录即触发后门的情形
- 与其他自启项一起做持久化集中清点
- 清除后复验,确认注册表值已恢复默认
检查 Winlogon 关键值
检查 Winlogon 关键值
$k = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
Get-ItemProperty $k | Select-Object Userinit, Shell, Taskman, AppSetup
Get-ItemProperty $k -Name Userinit | Select-Object -ExpandProperty Userinit
Get-ItemProperty 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon' -ErrorAction SilentlyContinue | Select-Object Userinit, Shell
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| Userinit | 登录初始化程序 | 正常只有 userinit.exe 加一个逗号,多出路径即异常 |
| Shell | 用户外壳程序 | 正常为 explorer.exe,出现其他程序需逐个解释 |
| Taskman | 任务管理器替代程序 | 该项非空本身就是强信号 |
| Wow6432Node 分支 | 32 位视图同名键 | 主键干净不代表这里干净 |
逗号后的追加项是主要藏身处:判定时按逗号切分逐段核对,而不是用字符串包含判断,并确认每个路径对应的文件是否存在、由谁创建。
修改 Winlogon 值属于高危操作:先用 reg export 导出该分支留档,改回默认后再复验并重新登录测试。
导出留档并复验
导出留档并复验
reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" C:\evidence\winlogon.reg /y
Copy-Item 'C:\Users\Public\x.exe' C:\evidence\ -ErrorAction SilentlyContinue
Get-ItemProperty $k | Select-Object Userinit, Shell # 修复后再次核对同一类值还要看这些
- Winlogon 下的 LegalNoticeCaption 与 LegalNoticeText,被用于显示勒索通告
- AppSetup 与 VmApplet,位置隐蔽但同样会被加载
- HKCU 下 Shell 用户级覆盖,影响单用户登录
判定时的时间线索
- 键的 LastWriteTime 与入侵时间窗对照
- 被追加程序的文件创建时间与哈希比对
- 确认该程序是否真的存在于所写路径
- 检查是否有配套的 WMI 订阅或登录脚本执行同一动作