Windows应急响应 - 00 学习路线

00 - 学习路线与方法论

本页是 Windows 应急响应系列的起点,涵盖方法论、核心差异、学习计划和环境准备。

前置阅读:Windows应急响应(系列总索引)

Linux 对照:00-学习路线


一、PDCERF 模型在 Windows 环境中的应用

1.1 PDCERF 模型回顾

PDCERF 是 NIST SP 800-61 推荐的事件响应六阶段模型,同样适用于 Linux应急响应

1
2
3
4
5
6
7
8
9
┌──────────┐   ┌──────────┐   ┌──────────┐
│ Prepare │──▶│ Detect │──▶│ Contain
│ 准备 │ │ 检测 │ │ 遏制 │
└──────────┘ └──────────┘ └──────────┘

┌──────────┐ ┌──────────┐ ┌──────────┐
│ Follow │◀──│ Recover │◀──│ Eradicate│
│ 跟踪 │ │ 恢复 │ │ 根除 │
└──────────┘ └──────────┘ └──────────┘
阶段 英文 核心目标
P Preparation(准备) 工具就绪、基线建立、预案制定
D Detection(检测) 发现入侵迹象、确认事件
C Containment(遏制) 隔离受影响系统、阻止扩散
E Eradication(根除) 清除恶意代码和持久化机制
R Recovery(恢复) 系统恢复上线、验证安全性
F Follow-up(跟踪) 复盘总结、加固防御

1.2 各阶段的 Windows 特殊考量

P - 准备阶段

基线采集(Baseline Collection)

Windows 的基线比 Linux 复杂得多,需要记录:

正常的自启动项(Autoruns 基线导出)

正常的计划任务列表

正常的服务列表及其对应的 ServiceDLL

注册表关键路径的初始状态

正常的网络连接模式

推荐使用 KAPE 定期采集基线快照

1
2
3
4
5
6
7
8
9
10
11
12
# 导出 Autoruns 基线(需 Sysinternals Autoruns)
autorunsc.exe -a * -c -h -s -v -vt > C:\Baselines\autoruns_baseline.csv

# 导出计划任务基线
schtasks /query /fo CSV /v > C:\Baselines\schtasks_baseline.csv

# 导出服务基线
Get-Service | Select-Object Name, DisplayName, Status, StartType |
Export-Csv C:\Baselines\services_baseline.csv -NoTypeInformation

# 导出网络监听端口基线
netstat -anob > C:\Baselines\netstat_baseline.txt

Sysmon 部署 — 在准备阶段就应部署 Sysmon,否则事件发生后无日志可查

详见 → Windows应急响应/32-Sysmon部署与分析

日志策略配置

默认 Windows 审计策略记录的事件极少,必须通过组策略增强:

1
2
3
4
5
6
7
8
9
10
11
12
# 启用命令行审计(记录进程创建时的完整命令行)
# 组策略路径:Computer Configuration > Administrative Templates
# > System > Audit Process Creation > Include command line
auditpol /set /subcategory:"Process Creation" /success:enable

# 启用 PowerShell ScriptBlock Logging
# 组策略路径:Computer Configuration > Administrative Templates
# > Windows Components > Windows PowerShell
# > Turn on PowerShell Script Block Logging

# 增大 Security 日志容量(默认 20MB 太小)
wevtutil sl Security /ms:1073741824

D - 检测阶段

Windows 检测的信息源远多于 Linux:

信息源 说明 对应 Linux
Security.evtx 登录、账户管理、权限使用 auth.log / secure
System.evtx 服务安装、驱动加载、系统错误 syslog / kern.log
PowerShell Operational PS 脚本执行、模块加载 无直接对应
Sysmon 进程/网络/文件/注册表变更 auditd
Windows Defender Operational 恶意软件检测事件 ClamAV 日志
Task Scheduler Operational 计划任务创建/执行/失败 cron.log
WMI-Activity Operational WMI 查询和事件订阅 无对应
Prefetch / Amcache / ShimCache 程序执行历史 无对应
$MFT / $UsnJrnl 文件系统变更记录 inotify (实时)

快速检测命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 快速扫描最近 24h 的安全事件中的登录失败
Get-WinEvent -FilterHashtable @{
LogName='Security'; Id=4625;
StartTime=(Get-Date).AddHours(-24)
} | Measure-Object | Select-Object Count

# 检查最近创建的账户
Get-WinEvent -FilterHashtable @{
LogName='Security'; Id=4720;
StartTime=(Get-Date).AddDays(-7)
} | Format-List TimeCreated, Message

# 检查最近安装的服务
Get-WinEvent -FilterHashtable @{
LogName='System'; Id=7045;
StartTime=(Get-Date).AddDays(-7)
} | Format-List TimeCreated, Message

C - 遏制阶段

Windows 遏制操作与 Linux 有显著差异:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 网络隔离 — 禁用所有网卡(慎用,远程管理将中断)
Get-NetAdapter | Disable-NetAdapter -Confirm:$false

# 软隔离 — 防火墙阻断所有入站/出站(保留 RDP 管理端口)
netsh advfirewall set allprofiles firewallpolicy blockinbound,blockoutbound
netsh advfirewall firewall add rule name="Allow-RDP-Admin" dir=in action=allow protocol=tcp localport=3389 remoteip=10.0.0.100

# 禁用可疑账户
net user SuspiciousUser /active:no
Disable-LocalUser -Name "SuspiciousUser"

# 终止可疑进程
Stop-Process -Id <PID> -Force

# 禁用可疑计划任务
schtasks /change /tn "\Microsoft\Windows\SuspiciousTask" /disable

# 禁用可疑服务
Set-Service -Name "SuspiciousService" -StartupType Disabled
Stop-Service -Name "SuspiciousService" -Force

域环境遏制的额外操作:

禁用被攻陷的域账户

重置 krbtgt 密码(两次,间隔 > 10 小时)

检查并清理 GPO 中的恶意配置

隔离被攻陷的域控(极端情况)

E - 根除阶段

Windows 根除的难点在于持久化位置众多:

注册表 Run Keys → Windows应急响应/18-Registry-Run-Keys

计划任务 → 19-计划任务后门

服务 → Windows应急响应/20-服务后门

WMI → Windows应急响应/21-WMI持久化

DLL 劫持 → Windows应急响应/22-DLL劫持

COM 劫持 → 23-COM劫持

更多 → 30-持久化综合Checklist

推荐使用 Autoruns 进行全量自启动项审计

1
2
3
4
5
6
7
8
9
# 使用 Autoruns 命令行版本导出全部自启动项
autorunsc.exe -a * -c -h -s -v -vt > C:\IR\autoruns_current.csv

# 与基线对比(假设已有基线)
# 使用 PowerShell Compare-Object
$baseline = Import-Csv C:\Baselines\autoruns_baseline.csv
$current = Import-Csv C:\IR\autoruns_current.csv
Compare-Object $baseline $current -Property "Entry Location","Entry" |
Where-Object { $_.SideIndicator -eq "=>" }

R - 恢复阶段

Windows 恢复的特殊考量:

系统还原点(System Restore) — 可用于快速回滚配置变更

卷影副本(Volume Shadow Copy) — 可能包含被加密/删除的文件

Windows 备份 — WBADMIN 工具

1
2
3
4
5
6
7
8
9
10
# 列出可用的系统还原点
Get-ComputerRestorePoint

# 列出卷影副本
vssadmin list shadows

# 从卷影副本中恢复文件
# 先挂载卷影副本
$shadow = (vssadmin list shadows | Select-String "Shadow Copy Volume").ToString().Split('\\')[-1]
cmd /c mklink /d C:\ShadowMount "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\"

恢复后验证清单:

[ ] 所有已知持久化机制已清除

[ ] 防火墙规则恢复正常策略

[ ] 安全日志审计策略已增强

[ ] Sysmon 已部署/更新

[ ] 所有受影响的密码/凭据已重置

[ ] 补丁已更新到最新

F - 跟踪阶段

编写事件报告,至少包含:

事件时间线(Timeline)

攻击向量(Initial Access)

受影响范围(Scope)

持久化方式(Persistence)

数据泄露评估(Data Exfiltration)

修复与加固措施(Remediation)

经验教训(Lessons Learned)


二、Windows IR vs Linux IR 核心差异详解

这是全系列最重要的对照参考之一。来自 Linux IR 的经验需要映射到对应的 Windows 概念。

2.1 日志系统:evtx vs syslog

特性 Windows Event Log Linux syslog/journald
格式 二进制 evtx(结构化 XML) 纯文本 / 二进制 journal
存储位置 C:\Windows\System32\winevt\Logs\ /var/log/
查看工具 Event Viewer / wevtutil / Get-WinEvent cat / grep / journalctl
通道数量 300+ 个通道 ~20 个主要文件
日志轮转 按大小覆盖(默认 20MB) logrotate
远程收集 Windows Event Forwarding (WEF) rsyslog / syslog-ng
关键日志 Security, System, Application, PowerShell auth.log, syslog, kern.log
时间格式 UTC(SystemTime 字段) 本地时区(取决于配置)

Windows 事件日志的独特挑战:

默认日志大小太小(Security 默认 20MB),高频事件场景下可能在数小时内被覆盖

日志通道名称冗长且分散:Microsoft-Windows-PowerShell/Operational vs 简单的 /var/log/auth.log

需要记忆大量 Event ID(Security 日志有 100+ 个常用 ID)

攻击者可以清除单条日志记录(需要 Event ID 1102 监控)

1
2
3
4
5
6
7
# 查看所有日志通道
Get-WinEvent -ListLog * | Where-Object { $_.RecordCount -gt 0 } |
Sort-Object RecordCount -Descending |
Select-Object LogName, RecordCount, MaximumSizeInBytes |
Format-Table -AutoSize

# 等价于 Linux 的 "ls -la /var/log/"

2.2 持久化机制:注册表 vs crontab/systemd

Windows 持久化位置 Linux 等价物 攻击复杂度
HKLM\...\Run /etc/crontab
HKCU\...\Run 用户 crontab -e
Task Scheduler cron / systemd timer
Windows Service systemd service
WMI Event Subscription 无直接对应
DLL Search Order Hijack LD_PRELOAD / rpath
COM Object Hijack 无对应
IFEO (Image File Execution) 无对应
AppInit_DLLs /etc/ld.so.preload
Winlogon Helper PAM module
Boot/Logon Script (GPO) /etc/profile.d/
Security Support Provider PAM module
Print Monitor 无对应
LSA Authentication Package 无对应

Windows 的持久化位置超过 60 个(参见 30-持久化综合Checklist),而 Linux 主要集中在 10 个左右。

这意味着 Windows 根除阶段的工作量远大于 Linux。

2.3 进程模型:Token vs UID

特性 Windows Linux
进程标识 PID + PPID PID + PPID
权限来源 Access Token(SID + 特权列表) UID + GID + Capabilities
权限提升 Token 提升(UAC) / Token 窃取 sudo / SUID / Capabilities
进程树根 System (PID 4) → smss → csrss → … init/systemd (PID 1)
关键守护进程 svchost.exe, lsass.exe, csrss.exe sshd, cron, rsyslog
伪装检测 验证签名 + 路径 + 父进程 对比 /proc 与 which

Windows 进程树正常结构(重要 — 偏离此结构即为异常):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
System (PID 4)
└── smss.exe
├── csrss.exe (Session 0)
├── wininit.exe
│ ├── services.exe
│ │ ├── svchost.exe (多个实例)
│ │ ├── spoolsv.exe
│ │ └── ...
│ └── lsass.exe
├── csrss.exe (Session 1)
└── winlogon.exe
└── explorer.exe (用户 Shell)
├── chrome.exe
├── notepad.exe
└── ...

异常信号示例:

svchost.exe 的父进程不是 services.exe

lsass.exe 有多个实例

csrss.exe 从用户目录运行而非 System32

explorer.exe 产生 cmd.exepowershell.exe

2.4 认证协议:NTLM/Kerberos vs PAM

特性 Windows (域环境) Linux
本地认证 NTLM (SAM) PAM (/etc/shadow)
域/集中认证 Kerberos (AD) LDAP / Kerberos (可选)
凭据缓存 lsass.exe 内存中 无默认缓存
Hash 传递 Pass-the-Hash (NTLM) 无直接等价
票据传递 Pass-the-Ticket (Kerberos) 理论可行但罕见
黄金票据 Golden Ticket (krbtgt) 无等价
单点登录 AD Kerberos SSO 无原生 SSO

Windows 认证的最大风险:

lsass.exe 进程内存中缓存了 NTLM Hash 和 Kerberos 票据

攻击者使用 Mimikatz 等工具可直接从 lsass 提取凭据

这在 Linux 中没有直接等价物(Linux 不会在内存中长期缓存密码 Hash)

1
2
3
4
5
6
7
8
# 检查 lsass.exe 是否被异常访问(需 Sysmon Event ID 10)
Get-WinEvent -FilterHashtable @{
LogName='Microsoft-Windows-Sysmon/Operational';
Id=10
} | Where-Object {
$_.Message -match 'lsass.exe' -and
$_.Message -notmatch 'csrss.exe|svchost.exe|MsMpEng.exe'
} | Select-Object TimeCreated, Message -First 20

2.5 远程访问:RDP vs SSH

特性 RDP (Windows) SSH (Linux)
默认端口 3389/TCP 22/TCP
协议 RDP (图形界面) SSH (命令行)
认证方式 NLA + NTLM/Kerberos 密码 / 密钥 / 证书
暴破日志 Event ID 4625 (Security) /var/log/auth.log
成功登录日志 Event ID 4624 Type 10 /var/log/auth.log Accepted
会话记录 无原生录屏 无原生录屏
关键风险 BlueKeep, 弱密码, NLA 绕过 弱密码, 密钥泄露

RDP 完整日志链(排查暴破的关键):

Security.evtx → Event ID 4625 (失败) / 4624 (成功)

Microsoft-Windows-TerminalServices-LocalSessionManager/Operational → Event ID 21 (登录成功) / 24 (断开) / 25 (重连)

Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational → 连接源 IP

详见 → Windows应急响应/11-RDP暴力破解

2.6 文件系统:NTFS vs ext4

特性 NTFS ext4
备用数据流 (ADS) 支持(可隐藏数据) 不支持
主文件表 $MFT(记录所有文件元数据) inode 表
变更日志 $UsnJrnl 无原生等价
文件权限 DACL (ACL) rwx (user/group/other)
时间戳 MACE (Modified/Accessed/Created/Entry) MAC (Modified/Accessed/Changed)
加密 EFS (文件级) / BitLocker (卷级) LUKS (卷级)
预读取 Prefetch 文件

NTFS ADS 是 Windows 取证的关键知识点:

1
2
3
4
5
6
7
8
:: 查看文件的备用数据流
dir /r C:\Users\Public\Documents\

:: 创建 ADS(攻击者视角 — 了解手法才能检测)
echo "hidden payload" > C:\Users\Public\Documents\normal.txt:hidden.txt

:: 读取 ADS 内容
more < C:\Users\Public\Documents\normal.txt:hidden.txt
1
2
3
4
5
6
7
8
# PowerShell 检测 ADS
Get-Item C:\Users\Public\Documents\* -Stream * |
Where-Object { $_.Stream -ne ':$DATA' }

# 批量扫描目录下的 ADS
Get-ChildItem C:\Users\ -Recurse -ErrorAction SilentlyContinue |
ForEach-Object { Get-Item $_.FullName -Stream * -ErrorAction SilentlyContinue } |
Where-Object { $_.Stream -ne ':$DATA' -and $_.Stream -ne 'Zone.Identifier' }

三、技能树

3.1 基础技能(Week 1-2)

[ ] 理解 Windows 目录结构和关键系统文件

[ ] 掌握注册表五大根键和 Hive 文件

[ ] 熟练使用 net 命令族排查用户和组

[ ] 掌握 netstattasklist 等基础排查命令

[ ] 理解 Event Log 结构和 Event Viewer 使用

[ ] 记忆 20 个核心 Event ID

[ ] 能使用 Get-WinEvent 查询和过滤日志

[ ] 了解 Prefetch 和 Amcache 的作用

3.2 进阶技能(Week 3-5)

[ ] 能独立排查 RDP 暴力破解事件

[ ] 能分析 IIS/SQL Server 入侵

[ ] 掌握全部常见持久化机制的检测方法

[ ] 能使用 Autoruns 进行全量自启动项审计

[ ] 能使用 Process Explorer 分析可疑进程

[ ] 掌握 PowerShell ScriptBlock 日志分析

[ ] 能使用 KAPE 进行自动化取证采集

[ ] 能使用 Hayabusa/Chainsaw 快速扫描 evtx

3.3 高级技能(Week 6-8)

[ ] 能分析横向移动(PsExec/WMI/DCOM/WinRM)

[ ] 能检测 Golden Ticket / Silver Ticket

[ ] 能使用 Volatility 进行内存取证

[ ] 能进行恶意软件初步静态分析

[ ] 能部署和调优 Sysmon 配置

[ ] 能使用 Velociraptor 进行远程取证

[ ] 能编写 YARA 规则检测恶意文件

[ ] 能独立完成跨平台(Windows + Linux)综合事件调查


四、8 周学习计划

Week 1:系统基础

内容 页面 预计时长
Day 1 本页学习路线 + 环境搭建 00-学习路线 3h
Day 2 Windows 目录结构 + 注册表基础 01-系统基础与注册表 3h
Day 3 注册表深入 + SID + 安全模型 01-系统基础与注册表 3h
Day 4 CMD 排查命令实操 02-排查命令速查 2h
Day 5 PowerShell 排查命令实操 02-排查命令速查 2h
Day 6-7 复习 + 实操练习 3h

Week 2:日志与取证

内容 页面 预计时长
Day 1 Event Log 结构 + Event Viewer 03-事件日志分析 3h
Day 2 Security 日志关键 Event ID 03-事件日志分析 3h
Day 3 PowerShell / Sysmon / 其他日志 03-事件日志分析 2h
Day 4 Prefetch + Amcache + ShimCache 04-取证制品分析 3h
Day 5 SRUM + $MFT + Jumplist + LNK 04-取证制品分析 3h
Day 6-7 复习 + CyberDefenders 练习 4h

Week 3:入侵排查(上)

内容 页面 预计时长
Day 1 账户安全排查 05-账户安全排查 2h
Day 2 进程排查 Windows应急响应/06-进程与网络排查 3h
Day 3 网络排查 Windows应急响应/06-进程与网络排查 2h
Day 4 文件取证排查 Windows应急响应/07-文件取证排查 2h
Day 5 计划任务与服务排查 Windows应急响应/08-计划任务与服务排查 2h
Day 6-7 复习 + 综合实操 3h

Week 4:入侵排查(下)

内容 页面 预计时长
Day 1 注册表持久化排查 Windows应急响应/09-注册表持久化排查 3h
Day 2 PowerShell 日志分析 Windows应急响应/10-PowerShell日志分析 2h
Day 3-4 RDP 暴破实战 Windows应急响应/11-RDP暴力破解 4h
Day 5 IIS 入侵排查 Windows应急响应/12-IIS入侵排查 3h
Day 6-7 复习 + HackTheBox Sherlock 4h

Week 5:实战场景

内容 页面 预计时长
Day 1 SQL Server 入侵 Windows应急响应/13-SQL-Server入侵 2h
Day 2 钓鱼邮件分析 Windows应急响应/14-钓鱼邮件分析 2h
Day 3 横向移动检测 15-横向移动检测 3h
Day 4 勒索病毒响应 Windows应急响应/16-勒索病毒响应 3h
Day 5 挖矿木马排查 Windows应急响应/17-挖矿木马排查 2h
Day 6-7 综合场景实操 4h

Week 6:持久化后门(上)

内容 页面 预计时长
Day 1 Registry Run Keys Windows应急响应/18-Registry-Run-Keys 2h
Day 2 计划任务后门 19-计划任务后门 2h
Day 3 服务后门 Windows应急响应/20-服务后门 2h
Day 4 WMI 持久化 Windows应急响应/21-WMI持久化 2h
Day 5 DLL 劫持 + COM 劫持 Windows应急响应/22-DLL劫持 + 23-COM劫持 4h
Day 6-7 复习 + 实操 3h

Week 7:持久化后门(下)

内容 页面 预计时长
Day 1 启动文件夹 + IFEO Windows应急响应/24-启动文件夹后门 + Windows应急响应/25-IFEO镜像劫持 3h
Day 2 PS Profile + 辅助功能 26-PowerShell-Profile后门 + 27-辅助功能后门 2h
Day 3 AD Golden/Silver Ticket Windows应急响应/28-AD-Golden-Silver-Ticket 3h
Day 4 Print Spooler / BITS Windows应急响应/29-Print-Spooler-BITS滥用 2h
Day 5 持久化综合 Checklist 30-持久化综合Checklist 2h
Day 6-7 全量持久化排查实操 4h

Week 8:工具精通

内容 页面 预计时长
Day 1 Sysinternals 全套实操 31-Sysinternals套件 3h
Day 2 Sysmon 部署与配置 Windows应急响应/32-Sysmon部署与分析 3h
Day 3 日志工具(Hayabusa/Chainsaw/LogParser) Windows应急响应/33-日志收集与分析工具 2h
Day 4 Volatility 内存取证 Windows应急响应/34-Volatility内存取证 3h
Day 5 恶意软件初步分析 Windows应急响应/35-恶意软件初步分析 3h
Day 6 KAPE + Velociraptor Windows应急响应/36-KAPE与Velociraptor 3h
Day 7 综合复习 + 跨平台对比 3h

五、Windows IR 通用排查 Checklist

以下是一份通用的 Windows 应急排查清单,分为 CMD 和 PowerShell 两个版本。

在实际事件中按顺序执行,并记录每一步的输出。

5.1 CMD 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
@echo off
echo ============================================
echo Windows IR Quick Triage - CMD Version
echo Date: %date% %time%
echo ============================================

echo.
echo [1] 系统信息
echo ----------------------------------------
systeminfo

echo.
echo [2] 当前登录用户
echo ----------------------------------------
whoami /all
query user

echo.
echo [3] 本地用户列表
echo ----------------------------------------
net user

echo.
echo [4] 本地管理员组
echo ----------------------------------------
net localgroup Administrators

echo.
echo [5] 网络连接
echo ----------------------------------------
netstat -anob

echo.
echo [6] 路由表
echo ----------------------------------------
route print

echo.
echo [7] ARP 缓存
echo ----------------------------------------
arp -a

echo.
echo [8] DNS 缓存
echo ----------------------------------------
ipconfig /displaydns

echo.
echo [9] 进程列表
echo ----------------------------------------
tasklist /v
wmic process list full

echo.
echo [10] 计划任务
echo ----------------------------------------
schtasks /query /fo LIST /v

echo.
echo [11] 服务列表
echo ----------------------------------------
sc query state= all

echo.
echo [12] 自启动项(注册表)
echo ----------------------------------------
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
reg query "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"

echo.
echo [13] hosts 文件
echo ----------------------------------------
type C:\Windows\System32\drivers\etc\hosts

echo.
echo [14] 共享列表
echo ----------------------------------------
net share

echo.
echo [15] 最近修改的文件(Temp 目录)
echo ----------------------------------------
dir /od /a C:\Windows\Temp\
dir /od /a %TEMP%

echo.
echo [16] 防火墙状态
echo ----------------------------------------
netsh advfirewall show allprofiles

5.2 PowerShell 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#Requires -RunAsAdministrator
# Windows IR Quick Triage - PowerShell Version

$OutputPath = "C:\IR\Triage_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
New-Item -ItemType Directory -Path "C:\IR" -Force | Out-Null

function Write-Section($title) {
$separator = "=" * 60
"$separator`n $title`n$separator" | Tee-Object -FilePath $OutputPath -Append
}

# [1] 系统信息
Write-Section "系统信息"
Get-CimInstance Win32_OperatingSystem |
Select-Object Caption, Version, BuildNumber, OSArchitecture,
LastBootUpTime, InstallDate |
Format-List | Tee-Object -FilePath $OutputPath -Append

# [2] 当前用户和权限
Write-Section "当前用户"
whoami /all | Tee-Object -FilePath $OutputPath -Append

# [3] 本地用户
Write-Section "本地用户列表"
Get-LocalUser | Select-Object Name, Enabled, LastLogon,
PasswordLastSet, Description |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

# [4] 本地管理员组
Write-Section "管理员组成员"
Get-LocalGroupMember -Group "Administrators" |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

# [5] 网络连接(含进程名)
Write-Section "网络连接"
Get-NetTCPConnection |
Where-Object { $_.State -eq 'Established' -or $_.State -eq 'Listen' } |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort,
State, OwningProcess,
@{N='ProcessName';E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}} |
Sort-Object State, LocalPort |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

# [6] 进程列表(含路径和命令行)
Write-Section "进程列表"
Get-CimInstance Win32_Process |
Select-Object ProcessId, ParentProcessId, Name, ExecutablePath,
CommandLine, CreationDate |
Sort-Object CreationDate -Descending |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

# [7] 计划任务(非微软)
Write-Section "可疑计划任务"
Get-ScheduledTask |
Where-Object { $_.Author -notmatch 'Microsoft' -and $_.TaskPath -notmatch 'Microsoft' } |
Select-Object TaskName, TaskPath, State, Author |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

# [8] 服务(非微软)
Write-Section "第三方服务"
Get-CimInstance Win32_Service |
Where-Object { $_.PathName -notmatch 'Windows|Microsoft|svchost' } |
Select-Object Name, DisplayName, State, StartMode, PathName |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

# [9] 自启动注册表项
Write-Section "自启动注册表项"
$runKeys = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run"
)
foreach ($key in $runKeys) {
"--- $key ---" | Tee-Object -FilePath $OutputPath -Append
if (Test-Path $key) {
Get-ItemProperty $key |
Format-List | Tee-Object -FilePath $OutputPath -Append
} else {
" (不存在)" | Tee-Object -FilePath $OutputPath -Append
}
}

# [10] 最近安装的服务(Event ID 7045)
Write-Section "最近安装的服务(7天内)"
Get-WinEvent -FilterHashtable @{
LogName='System'; Id=7045;
StartTime=(Get-Date).AddDays(-7)
} -ErrorAction SilentlyContinue |
Select-Object TimeCreated, Message |
Format-List | Tee-Object -FilePath $OutputPath -Append

# [11] 最近登录失败(Event ID 4625)
Write-Section "最近登录失败(24h内)"
Get-WinEvent -FilterHashtable @{
LogName='Security'; Id=4625;
StartTime=(Get-Date).AddHours(-24)
} -ErrorAction SilentlyContinue |
Select-Object TimeCreated,
@{N='TargetUser';E={$_.Properties[5].Value}},
@{N='SourceIP';E={$_.Properties[19].Value}},
@{N='LogonType';E={$_.Properties[10].Value}} |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

# [12] DNS 缓存
Write-Section "DNS 缓存"
Get-DnsClientCache |
Select-Object Entry, RecordName, Data |
Format-Table -AutoSize | Tee-Object -FilePath $OutputPath -Append

Write-Host "`n[完成] 排查结果已保存至: $OutputPath" -ForegroundColor Green

六、工具准备清单

6.1 必备工具

工具 下载方式 用途
Sysinternals Suite winget install sysinternals 或微软官网 进程分析、自启动审计、网络监控
Sysmon Sysinternals 套件内含 增强系统日志(需配合配置文件)
SwiftOnSecurity Sysmon Config GitHub: SwiftOnSecurity/sysmon-config Sysmon 社区最佳配置
EZ Tools (Eric Zimmerman) GitHub: EricZimmerman/Get-ZimmermanTools 注册表/Prefetch/MFT/ShimCache 解析
KAPE kroll.com (免费注册下载) 自动化取证制品采集
Hayabusa GitHub: Yamato-Security/hayabusa evtx 快速威胁扫描
Chainsaw GitHub: WithSecureLabs/chainsaw evtx 快速搜索(Sigma 规则)

6.2 推荐工具

工具 用途
Velociraptor 远程取证与端点调查
Volatility 3 内存取证
PE-bear PE 文件结构分析
Detect It Easy (DIE) 恶意软件快速识别(壳、编译器)
YARA 恶意文件特征匹配
Wireshark 网络流量分析
CyberChef 数据编解码瑞士军刀
x64dbg 动态调试(高级)
LogParser 微软官方日志查询工具(SQL 语法)
Timeline Explorer EZ Tools 出品的 CSV 时间线查看器

6.3 一键安装脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 使用 winget 安装可直接获取的工具
winget install Microsoft.Sysinternals
winget install Wireshark.Wireshark
winget install Notepad++.Notepad++
winget install vscode

# 创建 IR 工具目录
$ToolsPath = "C:\Tools\IR"
New-Item -ItemType Directory -Path $ToolsPath -Force

# 下载 EZ Tools
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/EricZimmerman/Get-ZimmermanTools/master/Get-ZimmermanTools.ps1" `
-OutFile "$ToolsPath\Get-ZimmermanTools.ps1"
Set-Location $ToolsPath
.\Get-ZimmermanTools.ps1 -Dest "$ToolsPath\EZTools"

# 下载 Hayabusa
$hayabusaUrl = "https://github.com/Yamato-Security/hayabusa/releases/latest"
Write-Host "请手动从 $hayabusaUrl 下载最新版本"

# 下载 Chainsaw
$chainsawUrl = "https://github.com/WithSecureLabs/chainsaw/releases/latest"
Write-Host "请手动从 $chainsawUrl 下载最新版本"

# 下载 Sysmon 配置
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/SwiftOnSecurity/sysmon-config/master/sysmonconfig-export.xml" `
-OutFile "$ToolsPath\sysmonconfig.xml"

Write-Host "`n工具已安装至 $ToolsPath" -ForegroundColor Green

七、实验环境搭建指南

7.1 Apple Silicon Mac 用户(UTM)

Apple Silicon 不支持 VirtualBox,需使用 UTM(免费)或 Parallels

UTM 使用 QEMU 模拟 x86_64 架构运行 Windows ARM 或通过 Rosetta 转译

步骤:

  1. 从 Mac App Store 或 GitHub 安装 UTM

  2. 下载 Windows 11 ARM64 VHDX(推荐)或 Windows 10 x86_64 ISO

  3. 在 UTM 中创建虚拟机:

Architecture: ARM64(原生性能)或 x86_64(完全兼容但慢)

RAM: 4-8 GB

Disk: 64 GB+

  1. 安装 SPICE Guest Tools 以获取剪贴板共享和动态分辨率

注意:ARM 版 Windows 可通过 x86 兼容层运行大部分安全工具,但 Volatility 等工具可能有兼容问题

7.2 Intel Mac / Windows / Linux 用户(VirtualBox)

步骤:

  1. 安装 VirtualBox 7.x

  2. 下载 Windows 10 Enterprise Evaluation ISO

  3. 创建 VM:4GB RAM / 2 vCPU / 60GB 动态磁盘

  4. 安装完成后立即创建快照 Clean-Install

  5. 安装工具后创建快照 Tools-Ready

7.3 域环境搭建(可选但推荐)

用于学习 AD 相关章节(15-横向移动检测、Windows应急响应/28-AD-Golden-Silver-Ticket)

最小域环境配置:

DC01 — Windows Server 2019/2022,Active Directory Domain Services

WS01 — Windows 10,加入域的工作站

推荐使用 DetectionLab 自动化部署:

GitHub: clong/DetectionLab

包含 DC + Workstation + Splunk + Fleet

Vagrant + VirtualBox 一键部署


导航

返回总索引 → Windows应急响应

下一页 → 01-系统基础与注册表

Linux 对照 → 00-学习路线


上一章 目录 下一章
Windows应急响应 01-系统基础与注册表