mym0us3r/WAZUH-Process-Tree-Viewer
GitHub: mym0us3r/WAZUH-Process-Tree-Viewer
面向 Wazuh 的取证可视化工具,将 Windows 进程创建日志转换为交互式进程树图谱并关联 Sysmon 遥测数据,辅助安全分析师进行威胁狩猎和应急响应。
Stars: 8 | Forks: 3
# WAZUH Process Tree Viewer (WPTV)
WAZUH Process Tree Viewer (WPTV) 是一款专为 Wazuh 生态系统设计的高性能取证可视化工具。它将原始的 Windows 安全日志(Event ID 4688)转换为可交互、可拖拽的关系图谱,使分析师能够在 Threat Hunting 和 Incident Response (IR) 期间追踪进程谱系(父-子进程)——现在还引入了相关的 Sysmon 遥测数据(EventID 1, 3, 7, 11),以丰富有关哈希值、网络连接、已加载 DLL 和释放文件的信息。

## 2.0 版本新特性
- **多模式 agent 查找**:支持通过 Agent ID、主机名(Hostname)或 IP 进行搜索 - 这些字段互斥,每次查询仅使用其中一个。
- **基于 `data.win.system.computer` 匹配主机**,而不是 `agent.name` - 因为当终端重命名但未重新注册 agent 时,后者会失效。
- **灵活的时间范围**:提供从 5 分钟到 30 天的预设选项,以及完全自定义的开始/结束时间范围。
- **Sysmon 关联**:每个基于 4688 的节点都会被丰富(绝不重复),数据来源于 Sysmon EventID 1(哈希值、ProcessGuid、完整性级别、产品/公司)、EventID 3(网络连接,仅限 TCP/UDP)、EventID 7(已加载 DLL)和 EventID 11(创建的文件)。侧边栏中的每个丰富信息部分都标注了其来源的 EventID。
- **完全按日志记录显示 PID/PPID**(原始十六进制,例如 `0x235c`)- 不进行十进制转换。屏幕上显示的内容在分流期间与 Wazuh Discover 查询一一对应。十六进制到十进制的转换仅在内部使用,用于在关联 Sysmon 时桥接 PID 格式(其自身事件报告中的 PID 为十进制)。
- **每个节点提供一键 Discover 深度链接**,使用 Lucene 查询语法(已根据经验证实对 KQL 无效,在生产环境中返回零结果),并自动预填该进程的确切规则/事件/PID。
- **弹簧/波浪拖拽动画**:拖拽父节点会使其子树以基于深度的级联缓动效果跟随移动,而不是僵硬地同步移动。
- **自定义缩放至适屏(zoom-to-fit)**:根据实际的节点布局计算理想比例,而不是依赖 `vis-network` 原生的 `fit()`,因为后者上限为 1:1,无法放大查看小型/紧凑的树形图。
## 项目架构与文件结构
1. `server.py`:入口点。处理 Web 路由(`/api/process-tree`、`/api/process-tree/expand`)并提供前端服务的 Flask 服务器。
2. `logic.py`:后端逻辑。解析 `alerts.json`(4688 和 Sysmon EventID 1/3/7/11),处理 UTC 时区标准化,并构建/丰富进程树。
3. `public/index.html`:前端。由 `vis-network.js` 驱动的交互式 UI,包含径向布局、波浪拖拽动画和 Dark Mode 支持。
4. `requirements.txt`:依赖项。环境所需的 Python 库。
5. `wazuh-process-tree.service`:用于后台服务管理的 SystemD 配置模板。
## 配套的 Sysmon 规则集
WPTV 的 Sysmon 关联功能仅展示 Wazuh 实际写入 `alerts.json` 的数据 - 如果您的 Sysmon 规则集在源处抑制了某种事件类型,或者从未将其提升至 0 级以上,WPTV 将无法进行关联。本项目是基于 [Native Sysmon Rewrite by m0us3r](https://github.com/mym0us3r/Unified-Sysmon-Configs) 开发和验证的,该文章还记录了在验证过程中发现并修复的两个规则集错误(这两个错误同样存在于 Wazuh 4.14.4 原生规则集中):
- PowerShell Base64 编码命令检测中缺少 `-enc` 缩写(规则 `92057`/`92059`/`92071`),这导致最常见的实际场景无法越过低严重性的通用规则被提升。
- 规则 `92213`(“在恶意软件常用的文件夹中释放可执行文件”)中缺少字符串结束锚点,这导致合法的 `.json` 文件被错误分类为可执行文件。
## 技术报告
详细记录开发过程、Sysmon 关联架构、用于验证的对抗模拟方法以及上述规则集错误的完整技术报告,可在 `docs/WPTV_Relatorio_Tecnico_PT.docx`(巴西葡萄牙语)中查看。
🛠️ 安装与设置
## 1. 目录结构
我们建议在 Wazuh dashboard 目录中部署此插件:
* mkdir -p /usr/share/wazuh-dashboard/plugins/process_tree_api
* cd /usr/share/wazuh-dashboard/plugins/process_tree_api
## 2. 虚拟环境
隔离依赖项以防止系统冲突:
* python3 -m venv venv
* source venv/bin/activate
* pip install -r requirements.txt
## 3. 关键权限
该服务必须能够读取 Wazuh 日志,并由 dashboard 用户执行:
* chown -R wazuh-dashboard:wazuh-dashboard /usr/share/wazuh-dashboard/plugins/process_tree_api
* chmod -R 755 /usr/share/wazuh-dashboard/plugins/process_tree_api
## 4. Discover 链接的 Base URL
`public/index.html` 会从页面自身的主机名(`window.location.hostname`)自动检测 Wazuh Dashboard 主机。当 WPTV 与 Dashboard 反向代理在同一主机上(只是端口不同)时,此功能开箱即用。如果您的 Dashboard 与此插件运行在不同的主机上,请直接在 `