| name | windows-incident-response |
|---|---|
| description | Windows主机应急响应处置技能(源自 NOP Team《Windows应急响应 Cookbook v1.2》全量内容,全部图形化操作已转化为命令行)。覆盖挖矿病毒、远控后门、勒索病毒、暴力破解(RDP/SMB/SNMP/FTP/MSSQL)、钓鱼、非持续性恶意外连、隧道、BadUSB、MSSQL后门九类事件处置,38项常规安全检查(隐藏账户/启动项/计划任务/服务/WMI事件订阅/COM劫持/IFEO/AppInit/Winsock/屏幕保护等30余种权限维持排查)、善后定损、取证小技巧。远程处置走 Windows 自带 WinRM 通道(控制台工具或 pywinrm 直连),支持 AI 免 RDP 全自动命令行取证。当用户报告或要求处理 Windows 主机被入侵、CPU异常、挖矿、勒索加密、RDP/SMB/FTP/MSSQL爆破、可疑外连、后门、隧道、webshell,或要求应急响应、安全检查、权限维持排查、取证分析时使用。 |
Windows 应急响应
本技能是《Windows应急响应 Cookbook v1.2》(NOP Team,830页)的结构化 CLI 化转写版本(原著仓库 · 在线阅读;双层许可:源自原手册的内容遵循 GPL-3.0,本项目 GUI→CLI 转化与新增内容以 MIT 发布,详见 LICENSE),按事件类型拆分为 references/,保留原书页码(pN)可回溯。核心改编:原书大量流程依赖 GUI(任务管理器/regedit/事件查看器/lusrmgr 等),本技能已全部转为命令行等价操作,GUI 工具(Process Explorer/System Informer/OpenArk/Autoruns 等)仅作为交互式人工排查的备选提及。
使用流程
- 有 WinRM 凭据时优先用控制台工具:
python scripts/win-ir-console-web.py(WebUI,浏览器打开 http://127.0.0.1:8527)填目标地址勾选检查项一键排查+标记+查杀,参数化检查项支持路径定向,人工环节工具内提示;无浏览器环境用win-ir-console.py(tkinter);只有命令行通道时按下述流程手动处置。 - 判断事件类型,按"场景路由"读取对应参考文件(处置前先读
references/00-cheatsheet.md取命令,参考文件里有完整背景与页码)。 - 所有事件都遵循统一处置主线(下节),场景文件只讲差异部分。
- 进程与文件处置完成后,必须走"善后阶段 + 常规安全检查"——挖矿/远控事件通常伴随多种权限维持后门(隐藏账户、计划任务、WMI订阅、COM劫持等),只删恶意文件不查后门必然复发。
- 报告结论时给出:事件定性、IOC(IP/域名/文件MD5)、时间线、已处置项、遗留风险、加固建议。
- 遇到"人工介入点"(见下节)必须停下来提醒用户去操作,标注清楚谁、在哪、做什么、如何回报;不得跳过、不得假装已由 Agent 完成。
场景路由
| 场景 | 参考文件 |
|---|---|
| 命令速查(高频命令单行版,先读这个) | references/00-cheatsheet.md |
| 任何事件开始前(物料/工具准备,CLI 化配置) | references/01-preparation.md |
| 挖矿病毒(CPU异常、可疑外连矿池) | references/02-mining.md |
| 远控后门(EDR 告警文件、外连 C&C 的 IP:端口) | references/03-backdoor.md |
| 挖矿/远控/非持续共用核心流程(找pid→样本→启动时间→查杀→删文件) | references/04-core-procedures.md |
| 勒索病毒(文件被加密、勒索信) | references/05-ransomware.md |
| 暴力破解(RDP/SMB/SNMP/FTP/MSSQL 爆破告警) | references/06-brute-force.md |
| 钓鱼事件 | references/07-phishing.md |
| 非持续性事件(恶意外连偶尔出现、抓不到进程) | references/08-non-persistent.md |
| 隧道事件(DNS/ICMP/TCP/UDP/KCP/QUIC/Web 隧道) | references/09-tunnel.md |
| BadUSB 投毒事件 | references/10-badusb.md |
| MSSQL 事件排查(xp_cmdshell/程序集/Job/触发器) | references/11-mssql.md |
| 善后阶段(定损、横向排查、改密) | references/12-aftermath.md |
| 常规检查① 账号与登录(用户/隐藏账户/会话/RDP记录) | references/13-checklist-accounts.md |
| 常规检查② 权限维持(启动项/计划任务/服务/WMI事件订阅) | references/14-checklist-persistence.md |
| 常规检查③ 行为痕迹(近期活动/证书/命令历史/PS配置/敏感目录/浏览器) | references/15-checklist-artifacts.md |
| 常规检查④ 系统状态(网络/进程/环境变量/补丁/日志/BITS/防火墙/Defender) | references/16-checklist-system.md |
| 常规检查⑤ 劫持类后门(DLL/AppCert/AppInit/Shimming/IFEO/COM/PasswordFilter/NetworkProvider/Winsock) | references/17-checklist-hijack.md |
| 取证小技巧(文件查找/时间筛选/内存搜串/内网传输) | references/18-tips.md |
| 知识点附录(RDP登录权限规则/登录类型表/计划任务机制/服务隐藏对抗/签名验证) | references/19-appendix.md |
| 常见问题(文件被隐藏/恶意文件被删后如何溯源) | references/20-troubleshooting.md |
| 远程处置通道(WinRM 直连:目标无直接通道时的命令行取证方案) | references/21-winrm.md |
辅助脚本(上传受害机前先审计内容):
scripts/win-ir-console-web.py— ★远程应急响应控制台(WebUI,首选):python win-ir-console-web.py [--port 8527 --open]后浏览器操作。填目标 IP + WinRM 凭据 → 14 模块 63 项细粒度检查(可单独勾选,侧栏 默认/全选/清空 + 底部执行按钮,隐藏服务枚举/全命名空间 WMI 等重项默认关闭);13 个参数化检查项支持路径定向(路径/pid/服务名/任务名/IP/注册表键/天数);点选检查项在底部命令预览 dock 实时显示将执行的命令(可收起);无论是否有发现均全量落盘IR_logs/IR_*.log,可导出 Markdown 报告;「自定义命令」页内置 8 个常用命令模板(最早RDP登录/计划任务动作/按名搜索/读文件/MD5/外连/读flag目录,免手写转义)+ 命令历史 + Ctrl+Enter;发现项可标记(持久化)→ 定向查杀按类型自动处置(执行前确认);「人工介入指引」页签给出 GUI-only 环节的用户操作步骤;连接参数自动记忆、pywinrm 三层超时对齐 + 瞬断自动重试、中文输出(UTF-8 prelude + wmic UTF-16/GBK 智能解码)。依赖pip install pywinrmscripts/win-ir-console.py— 同功能的 tkinter 桌面版(无浏览器环境时备用)scripts/win-triage.ps1— 一键体检(无 GUI 纯 CLI 采集,输出文本报告;适合通道只有命令行时上传目标机执行)scripts/win-monitor-conn.bat— 地址诱骗/非持续性事件:监控连向指定 IP 的进程并自动落盘取证(netstat + wmic 循环)
统一处置主线
挖矿、远控、隧道、非持续性、BadUSB 共用同一条主线,仅"定位 pid"入口不同(完整命令见 04-core-procedures.md):
梳理现场(IOC:IP/域名/文件MD5 → 威胁情报研判 → 二次核实 → 问历史事件)
↓
定位异常进程 pid ←入口因场景而异:
挖矿: Get-Process 按 CPU/内存/网络排序(tasklist/wmic/PS 三选一)
远控: EDR给文件→handle.exe 查占用反查进程;态势给IP:端口→netstat -ano | findstr / Get-NetTCPConnection
隧道: netsh trace 抓包 + etl2pcapng → Packet comments 里带 PID(p243)
非持续性: hosts 重定向恶意域名 → win-monitor-conn.bat 部署监控 → 等待触发
↓
查进程详情(名称/路径/命令行/启动时间):
wmic process where ProcessId=<pid> get Name,ExecutablePath,CommandLine /format:list
(Get-Process -Id <pid>).StartTime;wmic process where ProcessId=<pid> get CreationDate
↓
采样取证(网络/U盘取样本 → 微步/VT/哈勃等沙箱)→ 处置:
暂停进程 pssuspend <pid> / 恢复 pssuspend -r <pid>
杀进程 taskkill /F /PID <pid> | Stop-Process -Id <pid> -Force | wmic ... call Terminate
杀进程树 taskkill /F /T /PID <pid>(/T 连同子进程)
↓
删文件前:handle.exe <路径> 查占用(占用进程可能就是恶意进程)→ reg query 全局搜该文件路径关联的持久化 → del / Remove-Item
↓
善后阶段(12-aftermath.md):定损 → 同密码/同漏洞/同管理员机器横向排查 → 改强密码
↓
常规安全检查(跑 scripts/win-triage.ps1 + 对照 13~17 各检查文件):找出隐藏后门,防复发
关键规则
- 杀进程:先看父子关系——
wmic process where ProcessId=<pid> get ParentProcessId;taskkill /T杀树;有守护进程的恶意程序先杀守护(否则主程序复活)。线程级注入(附在正常业务进程里的恶意线程)慎杀,易搞崩业务,先与客户确认。 - 删文件:
del删不掉按顺序排查:①handle.exe <文件>查占用进程 ②attrib <文件>查隐藏属性 →attrib -s -h -r③ reg query 搜该文件全路径找持久化引用 ④ 还不行用PsExec64 -s提 SYSTEM 权限删。搜索到注册表引用不要急着删,先与各方确认。 - hosts 修改:诱捕/阻断时直接编辑
C:\Windows\System32\drivers\etc\hosts(GUI"无法保存"问题:先存桌面再覆盖)。 - 时间基准:事件日志/WMIC 里时间是 UTC(
2022-06-28T12:13:51Z= 北京时间 20:13:51),对时间线时 +8h,避免误判。 - 命令行工具字符集:中文系统下
findstr/日志文本多为 GBK;PowerShell 输出统一可加[Console]::OutputEncoding=[Text.Encoding]::UTF8。
图形化 → 命令行对照(本技能的核心改编)
| 原书 GUI 操作 | 命令行等价 |
|---|---|
| 任务管理器看 CPU/内存/网络占用排序 | Get-Process \| Sort CPU -Desc \| Select -First 10 Name,Id,CPU,Path;网络 Get-NetTCPConnection -State Established |
| 任务管理器看进程路径/命令行列 | wmic process get caption,executablepath,commandline /value |
| 资源监视器(resmon) | netstat -a -n -o -b / Get-NetTCPConnection / Get-NetUDPEndpoint |
| regedit 全局搜索 | reg query <键> /s /f "<关键字>"(HKEY_LOCAL_MACHINE\SAM 需 PsExec64 -s 提权) |
| 事件查看器筛选 4624/4625/4688 | wevtutil qe Security /q:"Event/System/EventID=4625" /f:text /rd:false /c:20 或 Get-WinEvent -FilterHashtable @{LogName='Security';Id=4625} |
| taskschd.msc 计划任务 | schtasks /query /fo LIST /v / Get-ScheduledTask;注册表 reg query HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks /s |
| services.msc / msconfig | sc queryex / sc qc <服务名> / Get-CimInstance Win32_Service / 注册表 Run 键 |
| lusrmgr.msc 查隐藏账户 | wmic useraccount get Name,SID,Status + reg query HKLM\SAM\SAM\Domains\Account\Users\Names(SYSTEM 提权) |
| msinfo32 / 系统属性 | systeminfo / wmic qfe list |
| Everything 搜文件 | es.exe "<语法>"(CLI 版)或 dir /s /b、forfiles、Get-ChildItem -Recurse -Filter |
| IObit Unlocker 解占用 | handle.exe <文件> 定位占用进程 → 结束进程后删除 |
| sigverif 系统文件签名验证 | Get-AuthenticodeSignature <文件> / sigcheck.exe <文件> |
| certmgr.msc 证书排查 | Get-ChildItem Cert:\LocalMachine\Root, Cert:\LocalMachine\CA, Cert:\LocalMachine\AuthRoot |
| LastActivityView / FullEventLogView | wevtutil qe 组合查询 + Prefetch/Amcache 解析器(PECmd / AmcacheParser,输出 csv) |
| Log Parser Lizard | Log Parser 命令行(LogParser.exe -i:EVT -o:DATAGRID "select ...") |
人工介入点:Agent 必须提醒用户操作的环节
本技能把手册的 GUI 流程尽可能转成了 CLI,但仍有部分环节命令行无法完成、或属于高风险授权决策。Agent 走到这些点时,必须停止自动执行,在回复中明确提醒用户操作——根据你接入的 agentic 工具能力选择"代做并验证"还是"转述给用户"。
判断原则(四类必须介入)
- 物理/带外操作:插拔 U 盘/USB 设备、机房断网、镜像备份、写保护 U 盘取样——只能人工。
- GUI-only 步骤:目标机无命令行通道(如仅 RDP 交互、深信服僵尸网络查杀工具内存检索、Process Explorer 杀线程等无 CLI 等价的功能)——人工,或由具备 GUI 自动化能力的 Agent 代做。
- 高风险授权决策:杀业务进程/线程注入处置、删除注册表引用、删隐藏账户、恢复服务权限、大范围改密——必须先向用户确认再执行,给出风险说明。
- 外部平台交互:威胁情报查询、沙箱上传、勒索解密工具获取——有浏览器/网络工具可代办,没有则给用户 URL 和操作指引并索要结果。
按处置阶段的介入点清单
| 阶段 | 介入点 | 给用户的提醒内容 |
|---|---|---|
| 通道建立 | 目标未开启 WinRM(5985/5986 不通) | 请用户经 RDP/本地控制台在目标机管理员 PowerShell 执行 Enable-PSRemoting -Force(工作组成员机另需 TrustedHosts,命令见 21-winrm.md),完成后回报;Agent 随后探测 5985 连通性确认 |
| 所有远程通道不可达 | 请用户在本地 shell 跑 scripts/win-triage.ps1 并把输出整体回传 | |
| 进程处置 | 判定为线程级注入(恶意线程附在业务进程内) | 无 CLI 杀线程手段且可能搞崩业务:给用户风险说明与三个选项(GUI 杀线程 / 重启业务进程 / 暂保留观察),等用户选择 |
| 确认目标进程是否恶意 | 可 CLI 暂停(pssuspend),但恢复/终止的时机请用户确认业务窗口 | |
| 恶意进程占用关键业务文件 | 提醒用户评估停机窗口后再杀 | |
| 删除清理 | reg query 发现恶意文件被业务配置引用(web.config、启动脚本等) | 删除前列出引用位置,请用户/运维确认哪些可删 |
| SAM 隐藏账户删除、SDDL 隐藏服务恢复 | 需 SYSTEM 权限且误删业务账户后果严重:先请用户确认账户归属(人名/用途)再动 | |
| 勒索 | 解密工具运行 | 必须提醒用户先备份加密文件(二次加密不可逆);ID Ransomware 网页识别给链接请用户上传或由 Agent 代做 |
| 是否交赎金 | 用户/管理层决策,Agent 只给技术评估 | |
| BadUSB | UUID 比对 / 设备分析 | 请用户保管恶意设备并交专业机构;同系统重复插拔比对需人工操作 |
| 样本/情报 | 上传沙箱(微步/VT/哈勃)、情报平台查询 | 无浏览器工具时:给出 URL + 上传物说明(文件 hash/样本),请用户操作并回报结论 |
| 善后 | 改密范围、横向机器清单 | 需用户提供资产台账(同密码/同管理员/同漏洞机器列表),Agent 不猜 |
提醒模板(直接用于回复,不得含糊)
⚠ 需要你人工操作(原因:GUI 步骤 / 物理操作 / 高风险确认)
1.【谁】在【哪台机器/哪个界面】执行【具体步骤或命令】
- 操作路径/命令:<完整给出>
- 预期结果:<…>
- 完成后请回报:<截图 / 命令输出 / 是否成功>
2. ……
我已自动完成:…;收到你的回报后我将继续:…
能力适配(按你接入的工具选择执行方式)
- 具备 GUI 自动化(computer-use 类工具且目标桌面可达):GUI 步骤可代做,完成后截图验证并把结果同步给用户;高风险决策(第 3 类)仍须用户点头。
- 仅 CLI / 远程通道(WinRM 客户端 / ssh / 云终端):所有 GUI 步骤按提醒模板转述给用户,并给出点击路径(参考原书对应页码的 GUI 章节)。
- 用户离线/批处理:把全部人工介入点汇总成一份"待人工操作清单"一次性输出,不要执行到一半反复阻塞等待。
远程处置通道(无法直接到目标 shell 时)
Windows 取证全部依赖命令行,拿到命令执行通道是第一步。统一走 Windows 自带 WinRM(TCP 5985/5986),无需任何第三方工具(详见 21-winrm.md):
- 目标开放 WinRM → 直连(首选零落地):有 WinRM 凭据时用
scripts/win-ir-console-web.py控制台一键排查,或用 pywinrm 等任意 WinRM 客户端逐条执行 references 里的命令。 - 目标未开 WinRM → 人工介入点:按提醒模板请用户经 RDP/本地控制台执行
Enable-PSRemoting -Force(及 TrustedHosts 配置),开启后走直连。 - 能直接开 CMD/PowerShell(本地控制台/云终端/已有跳板)→ 直接跑 references 里的命令。
检查时的注意事项
- 隐藏账户:
net user看不到以$结尾账户和克隆账户,必须wmic useraccount+ SAM 注册表(PsExec -s)交叉比对;删除时 Names 键和对应 000003EA 十六进制键都要删(13-checklist-accounts.md)。 - 计划任务机制(p737 实验):执行由注册表 TaskCache 决定而非 Tasks 目录文件;注册表修改需重启 Schedule 服务生效;
schtasks看不到的隐藏任务用注册表 + 日志排查(14-checklist-persistence.md)。 - 服务隐藏:SDDL 权限隐藏的服务
sc query报"拒绝访问",枚举法(reg 遍历 + sc query 交叉)可揪出;杀软/工具枚举同样失效(19-appendix.md§0x12)。 - RDP 爆破日志特征:4625 + 登录类型 3 + 源端口 0(SMB 爆破源端口非 0,这是区分点);RDP 成功登录才有类型 10(
06-brute-force.md)。 - MSSQL:登录失败默认不记成功;
xp_cmdshell启用会留配置变更日志;扩展存储过程/程序集按 modify_date 排序排查(11-mssql.md)。 - Defender 排除项:
Get-MpPreference查 ExclusionPath/ExclusionProcess——挖矿木马常给自己加白,处置时Remove-MpPreference解除。 - 威协情报/沙箱:微步在线、Virustotal、360/安恒/绿盟/腾讯/安天情报中心;沙箱:微步云沙箱、哈勃、奇安信情报沙箱、魔盾、360沙箱云。勒索解密:No More Ransom、ID Ransomware、各厂商解密工具——解密前先备份防二次加密。
