Windows 主机应急排查工具:基于 PowerShell 的只读安全初筛与处置建议生成器

Windows 主机应急排查工具:基于 PowerShell 的只读安全初筛与处置建议生成器
Windows 主机应急排查工具基于 PowerShell 的只读安全初筛与处置建议生成器作者ddmd123在 Windows 主机出现异常进程、弹窗、网络连接、远程登录或安全软件告警时现场技术人员通常需要快速回答几个问题当前是否存在可疑进程或持久化对象哪些服务、计划任务或启动项需要重点核实是否存在异常 RDP 登录或外部连接Defender 是否被关闭或配置了危险排除项如何保留证据避免误删业务文件客户电脑没有 Python 环境时能否直接运行排查工具针对这些场景我整理并开源了一个基于Windows PowerShell 5.1的只读安全初筛工具Windows IR TriageGitHubGitHub - dmd777/windows-ir-triage: Read-only Windows security triage, persistence evidence collection, and remediation guidance. Public Beta. · GitHub当前版本v4.1.1-beta Public Beta / 公开测试版一、为什么使用 PowerShell这个项目没有使用 Python也没有使用 Bash 或 Shell而是选择 Windows PowerShell主要原因是它更适合 Windows 主机现场排查。标准 Windows 10/11 通常已经内置 Windows PowerShell 5.1客户不需要额外安装Python pip Node.js Git Bash 数据库 第三方运行库PowerShell 可以直接调用 Windows 原生管理接口例如Get-CimInstance Get-ScheduledTask Get-WinEvent Get-NetTCPConnection Get-MpPreference Get-LocalGroupMember Get-BitsTransfer Get-AuthenticodeSignature这些接口可以直接访问进程 服务 计划任务 注册表 Windows 事件日志 Defender WMI/CIM 网络连接 本地用户和高权限组 组策略 BITS NTFS ADS如果使用 Python通常还需要确认客户电脑是否安装 Python、pip 和依赖包。使用 Shell则不适合直接访问 Windows 注册表、Defender、计划任务和事件日志。因此这个项目的部署方式比较简单复制 PowerShell 脚本 以管理员身份运行 生成扫描报告 交给技术人员分析二、项目定位Windows IR Triage 是一个Windows 主机只读安全初筛工具 持久化线索采集工具 证据文件生成工具 人工处置建议生成工具它不是杀毒软件 EDR 自动清除工具 恶意软件最终判定工具 主机安全证明工具扫描结果中的PASS只表示当前规则没有命中不代表主机绝对安全。如果检查受权限、模块或系统策略影响报告会记录INCOMPLETE LIMITED UNSUPPORTED这些状态必须由技术人员单独查看不能解释为“没有风险”。三、扫描范围当前版本主要检查以下内容运行进程 系统服务 计划任务 注册表 Run/RunOnce 启动目录 IFEO 映像劫持 Hosts 文件 用户代理和 WinHTTP 代理 TCP 网络连接 WMI 事件订阅 Web 目录脚本 Temp 目录时间线 BITS 任务 Defender 配置和排除项 Winlogon 自动登录 高级注册表持久化 NTFS 备用数据流 ADS RDP 外部连接和登录事件 组策略脚本 组策略注册表参数 本地账户和高权限组重点关注的典型线索包括系统程序名称伪装 用户可写目录中的可执行文件 LocalSystem 服务指向 Temp/AppData 编码 PowerShell 计划任务 异常 rundll32 DLL 参数 WMI 命令行或脚本消费者 Defender 危险排除项 外部 RDP 成功登录 IFEO Debugger 或 VerifierDlls 异常组策略脚本 启用的异常本地高权限账户四、如何运行下载仓库后使用 Windows PowerShell 5.1以管理员身份进入项目目录cd .\windows-ir-triage运行主扫描器Set-ExecutionPolicy -Scope Process Bypass -Force .\scripts\Invoke-WindowsIRTriage.ps1也可以直接运行中文文件名版本.\scripts\一键全盘深度扫描排查v4.1.1.ps1扫描结果默认保存到C:\temp\IR_Scan_YYYYMMDD_HHMMSS\主要报告文件包括high_risk_findings.csv scan_check_status.csv process_risk.csv service_risk.csv all_scheduled_tasks.csv scheduled_task_risk.csv network_connections.csv rdp_activity.csv rdp_logon_events.csv defender_preferences.txt group_policy_scripts.csv local_users.csv local_group_members.csv scan_transcript.txt context.json五、如何生成处置建议扫描完成后可以使用处置建议生成器.\scripts\New-WindowsIRRemediation.ps1 -ScanReportDir C:\temp\IR_Scan_YYYYMMDD_HHMMSS会生成Remediation\ ├─ 客户处置说明.txt ├─ 证据采集命令.ps1 ├─ 确认后处置命令.ps1 └─ 处置对象清单.csv其中客户处置说明.txt面向客户或一线技术人员说明发现对象、风险等级和处理步骤。证据采集命令.ps1用于采集哈希、签名、服务配置、任务 XML、事件日志、注册表和其他证据。确认后处置命令.ps1用于输出人工确认后的处置建议。重要的是处置命令默认全部注释例如# Stop-Process ... # Remove-Item ... # sc.exe stop ... # sc.exe delete ... # Disable-ScheduledTask ... # Unregister-ScheduledTask ... # Set-MpPreference ... # Remove-MpPreference ... # logoff SessionId生成器不会执行这些命令。只有技术人员核对证据、确认业务影响并确认对象确实恶意或未授权后才可以按流程手工取消注释。六、证据采集的安全设计证据命令使用以下形式保存查询结果 { 查询命令 } 21 | Out-String -Stream | Out-File ...这样可以同时保留正常输出 错误输出 权限不足信息 命令不存在信息 查询失败信息查询失败不能被当成空结果也不能被解释为“没有风险”。例如 IFEO 对象会额外采集IFEO 实时注册表值 GlobalFlag Debugger VerifierDlls Verifier DLL 文件属性 Verifier DLL SHA-256 Verifier DLL 数字签名这比单纯读取扫描 CSV 更适合现场复核。七、测试和质量控制项目包含 PowerShell 回归测试.\tests\Invoke-ScannerContractRegression.ps1 .\tests\Invoke-RemediationRegression.ps1 -Root $env:TEMP\IR_Remediation_Regression通过时输出SCANNER CONTRACT: PASS REGRESSION: PASS测试覆盖计划任务风险分类 编码 PowerShell 参数识别 ClipRenew.exe -e 系统任务降噪 同名计划任务路径匹配 32/64 位 IFEO 路径匹配 RDP Review 和 High 分级 进程与网络对象合并 核心 CSV 损坏处理 组策略注册表路径转换 Defender 空排除项 处置命令默认注释 恶意报告字段换行注入防护GitHub Actions 会在代码推送或 Pull Request 时自动执行PowerShell 语法检查 扫描器契约测试 处置生成器回归 运行报告产物检查当前 CI 已经通过。八、当前版本的已知限制这是一个规则型安全初筛工具仍然存在以下限制可能产生误报可能漏报未知持久化方式不替代杀毒软件或 EDR不替代完整内存取证不替代磁盘镜像分析不替代域控和集中式日志分析Web 目录和 ADS 检查有资源上限RDP 判断依赖安全日志是否可读取企业代理、Hosts、组策略、Office IFEO 和安全软件配置需要结合业务基线GitHub Actions 不能替代真实 Windows 10 主机验收。当前主要验证目标是Windows 10 22H2 Windows PowerShell 5.1兼容目标包括Windows 11 Windows Server 2016 Windows Server 2019 Windows Server 2022 Windows Server 2025九、隐私注意事项扫描报告可能包含主机名 用户名 域名 IP 地址 文件路径 文件哈希 本地账户 进程命令行 事件日志内容 注册表信息因此绝对不要把以下内容上传到公开 GitHub IssueIR_Scan_* 原始报告 RemediationEvidence scan_transcript.txt context.json EVTX/ETL 日志 注册表导出 内存转储 恶意样本 客户内部 IP 客户主机名和用户名如果需要提交 Bug应使用合成数据和文档地址192.0.2.0/24 198.51.100.0/24 203.0.113.0/24不要直接把客户真实报告发到公共平台。十、项目下载GitHub 仓库https://github.com/dmd777/windows-ir-triage当前公开测试版本Release Windows IR Triage v4.1.1 Public Beta · dmd777/windows-ir-triage · GitHubRelease 附件包括Invoke-WindowsIRTriage.ps1 New-WindowsIRRemediation.ps1 SHA256SUMS.txt下载后建议校验 SHA-256Get-FileHash .\Invoke-WindowsIRTriage.ps1 -Algorithm SHA256 Get-FileHash .\New-WindowsIRRemediation.ps1 -Algorithm SHA256然后与SHA256SUMS.txt中的值比对。十一、总结如果客户主机主要是 Windows 10而现场电脑不一定安装 Python那么 PowerShell 是更合适的技术选择。这个项目的特点是无需安装 Python 无需安装 Node.js 无需安装第三方运行库 基于 Windows PowerShell 5.1 适合 Windows 现场排查 只读扫描 证据可保存 处置命令默认注释 支持回归测试和 GitHub Actions它的目标不是替代专业安全平台而是让 Windows 主机现场能够更快地完成初步发现 证据保留 风险分级 人工复核 处置建议生成欢迎在 GitHub 提交合成数据复现的问题和改进建议。发布时建议使用以下标签Windows PowerShell Incident Response DFIR Cybersecurity Threat Hunting Endpoint Security文章末尾最好保留这句免责声明本工具用于安全初筛和证据采集不构成主机安全或无感染证明。任何删除、停止、禁用、注销和配置修改操作都必须由具备相应权限和经验的技术人员在保存证据、确认业务影响后执行。