bpmorris22/SrumECmd-Wrapper
GitHub: bpmorris22/SrumECmd-Wrapper
封装 SrumECmd 的单文件 HTA 图形界面,用于快速分析和可视化 Windows SRUM 数据库以追踪数据外泄活动。
Stars: 0 | Forks: 0
# SrumECmd Wrapper
一个单文件、可双击运行的 GUI,用于使用 [Eric Zimmerman's SrumECmd](https://ericzimmerman.github.io/) 对 **Windows 系统资源使用监视器 (SRUM)** 数据库进行快速分析 —— 专为 DFIR 案件工作构建,主要用例是**数据外泄追踪**。
无需安装,无需依赖,无需框架:一个 `.hta` 文件,可通过内置的 `mshta.exe` 在任何 Windows 机器上运行。将其指向已收集的 `SRUDB.dat`(或 KAPE / Velociraptor 收集目录树),它就会为你运行 SrumECmd,并将多 CSV 输出转换为交互式的、带有可疑评分的分析视图。


## 为什么选择 SRUM
SRUM 是唯一原生 Windows 取证痕迹,能够**量化每个应用程序的网络数据量** —— 包括发送和接收的字节数,大致按小时进行分桶,保留期约为 30–60 天。这使得它在回答 prefetch 和事件日志无法解决的两个 DFIR 问题时具有独特价值:
- **多少数据离开了机器,以及何时离开的?** 每个应用程序的 `BytesSent` 是 Windows 所保留的最接近外泄测量仪的数据。
- **一个 SYSTEM 启动服务到底做了什么?** 在启动时运行的服务通常不会留下每个可执行文件的 prefetch,但它们的执行和网络活动会记录在 SRUM 中的 `systemprofile` (S-1-5-18) 账户下 —— 这正是植入物隐藏的地方。
## 功能
- **为你运行 SrumECmd** —— 目录模式(`-d`,递归收集目录树并自动定位 `SRUDB.dat` 和 `SOFTWARE` hive),或单文件模式(`-f` 带有可选的 `-r SOFTWARE` hive)。在可见的控制台中异步运行,因此 UI 永远不会冻结。支持处理经过 URL 编码的收集路径(来自 Velociraptor 的 `C%3A…`)。
- **自我管理的工具** —— 在 `.hta` 旁边(或在 `C:\ZimmermanTools` 中)查找 `SrumECmd.exe`,检查 ericzimmerman.github.io 上的最新实时版本,并可通过一键下载/更新独立副本。自动设置 `DOTNET_ROLL_FORWARD=Major`,使得针对 .NET 9 构建的版本能在更新的 runtime 上运行。
- **脏数据库处理** —— 从原始收集中提取的 `SRUDB.dat` 通常处于 ESE-dirty(脏)状态,或者带有来自较新 Windows 内部版本的 transaction logs。该封装器能识别此类失败,提供一键式**在副本上进行修复**(仅复制 `.dat` 文件,运行 `esentutl /p /o`,重新处理 —— 原始证据保持不变),并如实报告唯一无法在本地修复的情况(即数据库*格式*比分析主机的 ESE 引擎更新 —— 需在同等或更新版本 Windows 内部版本的系统上解析,或改用 Velociraptor 的 SRUM artifact 进行收集)。
- **每个 SRUM 表对应一个标签页** —— NetworkUsages、AppResourceUseInfo、AppTimelineProvider、NetworkConnections、vfuprov、PushNotifications、EnergyUsage(以及 SrumECmd 将来添加的任何表)。表在首次打开时分块延迟解析,因此 13 万行的表也不会导致应用程序白屏。
- **两种按可执行文件的汇总视图**(每个可执行文件 + SID 占一行):
- **网络汇总** —— 总发送 / 接收量、记录数、首次/最后一次出现时间、接口、网络配置文件。按发送字节数排序:发送量最大的排在最前面。
- **应用程序资源汇总** —— 前台+后台读取 / 写入的总字节数:执行证据以及通常发生在外泄之前的本地磁盘暂存数据。
- **可疑度评分**(针对 SRUM 调整,见下表)。可疑的聚合数据会被着色;原始表行继承其聚合项的标签;每个标签在悬停时都会显示具体含义。
- **IOC / 关键词列表** —— 粘贴或加载词条;针对可执行文件路径、SID、用户、接口和网络配置文件名称进行不区分大小写的匹配,并实时重新评分(每次匹配 +3 分)。
- **过滤器** —— 带有实时计数的类别按钮(全部 / 可疑 / SYSTEM / 用户路径 / LOLBIN / 高数据量 / IOC 命中),跨所有列的自由文本搜索,以及 UTC 日期范围(也会将汇总视图重新聚合到该时间窗口内)。
- **概览仪表板** —— 数据集统计信息,以及发送量排行、按评分排序的可疑项列表,和 SYSTEM 网络活动热点列表;所有这些都在当前过滤器下重新计算,且均可点击。
- **详细信息面板** —— 点击任意行可查看完整路径、附带推理过程的标签、在每个表中的出现情况(网络发送/接收、磁盘读取/写入、其他位置的行数),以及一个**每小时活动的迷你时间轴**,可一目了然地显示外泄时间窗口和 Beacon 通信节奏。
- **报告** —— 将任何已过滤的视图(表或汇总)导出为 CSV,将**单个进程的每小时活动**(网络和磁盘系列合并)导出为 CSV,或者将格式化的案件记录文本复制到剪贴板。
## 快速开始
1. 将 `SrumECmd-Wrapper.hta` 下载到**本地磁盘**上的一个空文件夹中(请参阅下面关于网络驱动器的注意事项)。
2. 双击它。如果在它旁边找不到 `SrumECmd.exe`,应用程序会提示下载最新的官方构建版本。
3. 将输入指向 SRUM 源并点击 **Process → analyze**:
- **目录模式** —— 一个已收集的 `…\Windows\System32` 文件夹(因此 `System32\sru\SRUDB.dat` 和 `System32\config\SOFTWARE` 都包含在该目录树内),或任何 KAPE / Velociraptor 收集根目录;
- **单文件模式** —— 一个特定的 `SRUDB.dat`,以及用于解析网络配置文件的可选 `SOFTWARE` hive。
4. 或者跳过处理步骤,直接选择 **Load existing CSV…** 来分析你已有的 SrumECmd CSV 文件 —— 加载运行中的任何一个 CSV 即可打开所有同级的表。
## 可疑度启发式规则
评分 ≥ 2 表示该聚合项可疑。评分按可执行文件 + SID 计算;原始表行继承其聚合项的标签。
| 标签 | 触发条件 | 评分 |
|---|---|---|
| `USERPATH` | 可执行文件从用户可写路径(`\Users\`、`\AppData\`、`\Temp\`、`\Downloads\`、`\ProgramData\`、`\Windows\Temp\`、`$Recycle.Bin`、`\Public\`;排除 Defender 的平台目录)运行。支持设备路径(`\device\harddiskvolumeN\…`)。 | +2 |
| `LOLBIN` | 双用途二进制文件(node、java、powershell、cmd、wscript、mshta、rundll32、regsvr32、certutil、bitsadmin、curl、python、psexec、wmic 等) | +1(如果同时也是用户路径,则再 +1) |
| `MASQ` | OS 二进制文件名(svchost、lsass、explorer 等)运行在 `\Windows\` **之外** | +3 |
| `SYS-NET` | SYSTEM (S-1-5-18) 来自用户可写路径的**网络**活动 —— 即引导服务植入模式(例如位于 `\windows\system32\config\systemprofile\appdata\` 下的 RAT) | +2 |
| `VOL` | 聚合发送字节数 ≥ 100 MB (+1) 或 ≥ 1 GB (+2) | +1 / +2 |
| `UPLOAD` | 发送字节数 ≥ 10 MB **且** 发送量 ≥ 接收量的 3 倍(常见的同步/备份/AV 代理已被列入白名单) | +1 |
| `IOC` | 用户 IOC/关键词列表在聚合项的任何位置命中 | +3 |
| `RANDOM` | 看起来像十六进制数据块或高熵的可执行文件名 | +1 |
| `NEW` | 在数据集的最后 14 天内首次出现 —— 作为过滤辅助,不评分 | 0 |
## 注意事项与局限性
- 所有的时间戳都**以 SrumECmd 输出时的格式显示:UTC**。故意不进行本地时间转换。
- SRUM 的 `Timestamp` 列是一个**每小时刷新的存储桶**,而不是事件发生时间:SRUM 大约每小时(以及在关机时)将数据从内存提交到 ESE 数据库,因此一个事件的发生时间可能会比其 Timestamp 早最多约 1 小时,并且在硬关机时会丢失最后一个未刷新的小时数据。
- `ExeInfo` 并不总是路径 —— SRUM 存储的是设备路径、纯粹的可执行文件名、UWP 包 ID、service-host 数据块以及不透明的 token。基于路径的启发式规则仅在值看起来像路径时才适用。
- SRUM **按接口、按小时**记录字节计数;跨越多个接口的可执行文件会产生多行记录,汇总视图会按可执行文件+SID 对其进行总计。Loopback/本地流量也会被计算在内。
- 在服务器和某些配置了 SSD 策略的机器上,SRUM 可能缺失或很稀疏。没有记录并不代表没有发生。
- **网络驱动器:** 从映射驱动器或 UNC 路径启动的 HTA 会在受限的安全区域内运行,在此区域内 UTF-8 文件读取器 (`ADODB.Stream`) 会被阻止。应用程序会检测到这一点并自动回退到 ANSI 文件 IO —— 所有功能仍然正常工作,但罕见的非 ASCII 字符(带重音的用户名、某些 Wi-Fi 配置文件名)可能会显示不正确。为了获得完全的保真度,请从本地磁盘运行 `.hta`。
- **ESE 引擎版本:** SrumECmd 通过主机本地的 ESE 引擎进行解析。如果 `SRUDB.dat` 的磁盘格式比分析主机的 Windows 内部版本更新,则无法在本地打开,并且 `esentutl` 修复也会以同样的方式失败 —— 请在同等或更新的 Windows 内部版本上解析它(虚拟机也可以),或者使用与引擎无关的工具收集 SRUM。可以通过 `esentutl /mh SRUDB.dat`(“attached by”)来对比主机。
- 为了保证响应速度,表格显示上限为 6,000 行;导出操作始终会写入完整的已过滤数据集。
## 致谢
- [Eric Zimmerman](https://ericzimmerman.github.io/) 创建了 SrumECmd 和 EZ Tools 套件 —— 这是一个非官方的针对其解析器的封装器;所有的解析功劳都归功于他。
## 许可证
MIT —— 请参阅 [LICENSE](LICENSE)。
标签:GUI, HTA, HTTPS请求, MSSQL, Windows取证, 后端开发, 多人体追踪, 数字化取证, 调试辅助