UnholyPresence/Offline-WinPersistTriage.ps1
GitHub: UnholyPresence/Offline-WinPersistTriage.ps1
一款用于应急响应场景的 PowerShell 离线取证甄别工具,对挂载的 Windows 磁盘执行只读持久化机制检查和 IOC 扫描。
Stars: 0 | Forks: 0
# Offline-WinPersistTriage.ps1
对已挂载为离线卷的 Windows 磁盘进行只读 PowerShell 甄别,用于检查常见的 Windows 持久化机制和实战失陷指标 (IOC)。
此脚本适用于蓝队应急响应、IR 甄别、恶意软件持久化审查、实验室分析以及 Windows 安装挂载为分析工作站离线卷的失陷后验证场景。
## 快速开始
powershell
# 基础表格输出至控制台
.\Offline-WinPersistTriage.ps1 -TargetPath E:\ -Format Table
# 将 JSON 报告写入分析工作站
.\Offline-WinPersistTriage.ps1
-TargetPath E:\Windows
-Format Json
-OutFile C:\Cases\host01_triage.json
# 包含事件日志解析的 CSV 报告
.\Offline-WinPersistTriage.ps1
-TargetPath E:\
-Format Csv
-OutFile C:\Cases\host01_triage.csv
-ParseEvents
# 更广泛的文件 IOC 扫描
.\Offline-WinPersistTriage.ps1
-TargetPath E:\
-Format Json
-OutFile C:\Cases\host01_deep_triage.json
-ParseEvents
-DeepFileScan
## 核心功能
* 检查离线 Windows 注册表 hive,无需加载原始证据 hive。
* 在加载注册表 hive 之前,将其复制到分析员的临时存储中。
* 检查常见的 HKLM 和 HKCU 持久化位置。
* 审查服务、驱动、计划任务、启动文件夹、PowerShell 产物、WMI 字符串、预读文件名、Amcache 条目、hosts 文件条目、端口代理 (PortProxy)、LSA 包、打印监视器以及 COM 劫持指标。
* 可选的离线 EVTX 解析。
* 可选的深度文件 IOC 扫描。
* 输出 Table、Json 或 Csv 格式。
* 拒绝将报告写入目标卷根目录下。
## 重要取证说明
此脚本在设计上不会写入目标磁盘,但最安全的工作方式依然是只读挂载磁盘或使用取证写保护器。尽管脚本本身会避免对目标进行写入,但在涉及证据处理时,存储层应强制执行只读访问。
## 参数
| 参数 | 必需 | 默认值 | 描述 |
| ------------ | ----: | ------- | ---------------------------------------------------------------- |
| `-TargetPath`| 是 | 无 | 已挂载的 Windows 卷根目录(例如 `E:\`)或 Windows 目录(例如 `E:\Windows`)。 |
| `-Format` | 否 | `Table` | 输出格式:`Table`、`Json` 或 `Csv`。 |
| `-OutFile` | 否 | 无 | 可选的报告路径。不能位于目标卷内。 |
| `-ParseEvents`| 否 | 禁用 | 解析选定的离线 EVTX 日志,以查找与持久化相关的事件。 |
| `-EventDaysBack`| 否 | `90` | 事件日志解析回溯的天数。 |
| `-DeepFileScan`| 否 | 禁用 | 递归扫描常见的可写/暂存路径以查找可疑文件。 |
| `-MaxFileResults`| 否 | `5000` | 深度扫描返回的最大文件结果数量。 |
| `-KeepTemp` | 否 | 禁用 | 保留复制的临时注册表 hive 用于调试。 |
## 输出架构
每条结果包含:
| 字段 | 描述 |
| ---------- | ----------------------------------------------------------------- |
| `TimeUtc` | 生成结果的时间。 |
| `Target` | 解析出的离线 Windows 路径。 |
| `Severity` | `Info`、`Low`、`Medium`、`High` 或 `Critical`。 |
| `Category` | 结果类别。 |
| `Artifact` | 特定的产物名称。 |
| `Location` | 注册表路径、文件路径或事件日志路径。 |
| `Value` | 相关的命令、值、文件名、事件消息或 IOC 文本。 |
| `Notes` | 上下文、指标、哈希、签名、时间戳或解析说明。 |
| `Source` | 来源上下文,通常为 `Offline disk`。 |
## 推荐工作流
1. 只读挂载目标 Windows 磁盘。
2. 在分析工作站上以管理员身份运行 PowerShell。
3. 将报告保存到由分析员控制的案例目录中。
4. 首先使用 JSON 输出进行保存和后续解析。
5. 优先审查 `High` 和 `Medium` 级别的结果。
6. 结合时间线、用户上下文、哈希、签名、路径和已知良好基线验证可疑项。
建议的首轮执行命令:
powershell
.\Offline-WinPersistTriage.ps1
-TargetPath E:\
-Format Json
-OutFile C:\Cases\host01\offline-persistence-triage.json
-ParseEvents
建议的扩展命令:
powershell
.\Offline-WinPersistTriage.ps1
-TargetPath E:\
-Format Json
-OutFile C:\Cases\host01\offline-persistence-triage-deep.json
-ParseEvents
-EventDaysBack 180
-DeepFileScan
-MaxFileResults 10000
## 限制
这是一个甄别收集器,不是完整的取证重建工具。
已知限制:
* WMI 存储库审查仅基于字符串。
* Prefetch 审查仅基于文件名。
* Amcache 结果因 Windows 版本和产物可用性而异。
* 事件日志解析取决于日志保留策略和审核策略。
* PowerShell 历史记录可能缺失、被清除、被禁用或特定于用户。
* 严重性判定是基于启发式的,不应视为最终结论。
* 某些机制需要使用专用的取证工具进行更深入的解析。
## 安全提示
* 除非磁盘以只读方式挂载或受写保护器保护,否则不要针对原始证据运行。
* 不要将输出保存到目标磁盘。
* 将结果视为线索,而非最终证据。
* 在做出遏制、清除或正式报告决定之前,使用其他工具进行验证。
标签:AI合规, API接口, IPv6, Libemu, PowerShell, Windows运维, 安全, 库, 应急响应, 数字取证, 自动化脚本, 超时处理