Base4Security/GraphHunter
GitHub: Base4Security/GraphHunter
GraphHunter 是一款基于时序知识图谱的威胁狩猎引擎,通过假设驱动的模式匹配从异构安全日志中发现完整攻击路径。
Stars: 0 | Forks: 0
基于图谱与假设驱动的威胁狩猎
[]()
[](https://graphhunter.readthedocs.io/en/latest/?badge=latest)
[](https://doi.org/10.13140/RG.2.2.22035.54564)
[](https://www.rust-lang.org/)
[](https://v2.tauri.app/)
[](https://react.dev/)
[](LICENSE)
获取安全日志,构建具有因果顺序的实体关系图谱,并使用模式匹配(支持 MITRE ATT&CK 对齐的检测模板)搜寻攻击路径。通过 ONNX 模型集成基于 GNN 的威胁分类,并支持可选的 NPU/GPU 加速。
## 目录 - [关于](#about) - [为什么选择基于图谱的狩猎?](#why-graph-based-hunting) - [工作原理](#how-it-works) - [主要功能](#key-features) - [支持的日志格式](#supported-log-formats) - [SIEM 集成](#siem-integrations) - [假设 DSL 与 ATT&CK 目录](#hypothesis-dsl--attack-catalog) - [GNN 威胁评分](#gnn-threat-scoring) - [架构](#architecture) - [HTTP API 与 MCP (AI 集成)](#http-api--mcp-ai-integration) - [安装](#installation) - [使用](#usage) - [演示数据与试用](#demo-data--try-it) - [隐私与数据](#privacy--data) - [截图](#screenshots) - [核心引擎详情](#core-engine-details) - [更新日志](CHANGELOG.md) - [贡献](CONTRIBUTING.md) - [许可证](#license) ## 关于 Graph Hunter 是一个**基于图谱的威胁狩猎引擎**,它将异构的安全遥测数据(Sysmon、Microsoft Sentinel、通用 JSON、CSV)转化为单一的**知识图谱**。分析师将**假设**定义为实体类型和关系类型的链条(例如,*User →[Auth]→ Host →[Execute]→ Process*)。引擎查找所有匹配该模式的路径,并强制执行**因果单调性**:每个步骤发生的时间等于或晚于前一个步骤。结果可以通过交互式图谱画布、IOC 搜索、时间轴和热力图视图,以及可选的 ATT&CK 映射假设模板进行探索。 该引擎包含一个由五个部分组成的**内生化异常评分系统**——实体稀有度、边缘稀有度、邻域集中度、时间新颖性和 **GNN 威胁**——自动对最可疑的路径进行优先级排序。GNN 组件集成 ONNX 模型(例如,从 GraphOS-APT 导出),将 k-hop 子图分类为威胁类别(Benign、Exfiltration、C2 Beacon、Lateral Movement、Privilege Escalation),并通过 DirectML 支持可选的 **NPU/GPU 加速**。
*截图:在地图上探索节点*
## 为什么选择基于图谱的狩猎?
传统的 SIEM 风格查询是僵化且受模式限制的。攻击链跨越多个数据源和事件类型;关联它们通常需要自定义规则和手动透视。而 Graph Hunter 则:
- **归一化**:将多种日志格式转化为统一的模型(实体 + 类型化关系 + 时间戳)。
- **搜索**:通过*模式*(谁执行了什么,谁连接到哪里,什么写入了哪个文件)而不是字段名称进行搜索。
- **呈现**:展示满足时间顺序的多跳攻击路径,因此您看到的是完整的链条,而不是孤立的事件。
## 工作原理
```
Security Logs ──► Parser ──► Knowledge Graph ──► Hypothesis Search ──► Hunt Attack Paths
```
1. **获取** —— 加载任何支持格式的日志。引擎自动检测格式,或者您也可以指定格式。解析器提取实体(IP、Host、User、Process、File、Domain、Registry、URL、Service)和关系(Auth、Connect、Execute、Read、Write、DNS、Modify、Spawn、Delete)及其时间戳。
2. **构建图谱** —— 实体成为节点,关系成为有向边。重复的实体被去重;元数据被合并。
3. **狩猎** —— 将假设定义为类型化步骤的链条(例如,`User →[Auth]→ Host →[Execute]→ Process`)。引擎查找所有匹配该模式并具有**因果单调性**(每个步骤发生在前一个步骤之时或之后)的路径。可选的 **k-简单性** 允许一个顶点在每条路径中最多重复 *k* 次。
4. **探索** —— 搜索 IOC,扩展节点邻域,检查元数据和异常评分,通过事件视图、热力图和时间轴进行透视。
*截图:数据获取*
## 主要功能
| 领域 | 功能 |
|------|----------|
| **引擎** | 时间模式匹配(DFS + 因果单调性),5 组件内生化异常评分(ER, EdgeR, NC, TN, GNN Threat),并行解析(Rayon),实体/关系去重 |
| **GNN 评分** | 用于 k-hop 子图分类的 ONNX 模型推理(5 个威胁类别),DirectML NPU/GPU 加速,批量评分,可配置的 k-hop 深度,特性开关(`ml-scoring`) |
| **格式** | Sysmon, EVTX, Microsoft Sentinel, 通用 JSON(80+ 字段变体), CSV; |
| **假设** | 可视化步骤构建器或 **DSL**(`User -[Auth]-> Host -[Execute]-> Process`);任意类型的通配符(`*`);支持一键加载的 **ATT&CK 假设目录** |
| **UI** | **会话**(多图谱,持久化);**Hunt(狩猎)** 与 **Explorer(探索)** 模式;**Events(事件)**、**Heatmap(热力图)**、**Timeline(时间轴)** 视图;**Path Nodes(路径节点)**(固定节点);**Notes(笔记)**(独立或链接节点);**GNN Threat Model(GNN 威胁模型)** 面板;针对大量路径集的分页狩猎结果 |
| **数据** | 可配置的通用解析器(字段 → 实体类型映射);获取前预览;每个会话的数据集列表(移除/重命名) |
| **SIEM 集成** | **Azure Sentinel** (Log Analytics):KQL 查询,工作区 + 租户/客户端/密钥(环境变量或 UI)。**Elasticsearch**:索引 + 查询 JSON,API 密钥或用户/密码(环境变量或 UI)。通过网关或 CLI 进行基于查询的获取;结果加载到图谱中。 |
## 支持的日志格式
Graph Hunter 支持 **Sysmon**、**Microsoft Sentinel**、**通用 JSON**(80+ 字段变体)和 **CSV**。使用 **Auto-detect(自动检测)** 让引擎根据内容启发式选择解析器,或手动选择格式。
**完整详情**(事件 ID、Sentinel 表、三元组、通用字段映射、CSV):文档中的 [支持的日志格式](https://graphhunter.readthedocs.io/en/latest/user-guide/log-formats.html)。
## SIEM 集成
Graph Hunter 可以通过 API 直接从 **Azure Sentinel** (Log Analytics) 和 **Elasticsearch** 提取数据——运行查询,然后将结果获取到您的会话中。
| SIEM | 认证 | 用法 |
|------|------|--------|
| **Azure Sentinel** | Tenant ID, Client ID, Client Secret(环境变量或 UI) | Workspace ID + KQL 查询;默认:SecurityEvent,最近 24 小时 |
| **Elasticsearch** | API key 或 User/Password(环境变量或 UI) | 集群 URL,索引,查询 JSON,大小 |
可在 **带有网关的 Web 应用**(Datasets → Data Ingestion)或通过网关 API(`POST /api/ingest/query`)中使用。无网关的桌面应用:使用 **From file** 并先从您的 SIEM 导出。请参阅文档中的 **[SIEM 基于查询的获取](https://graphhunter.readthedocs.io/en/latest/user-guide/siem-ingest.html)** 了解环境变量和分页。
## 假设 DSL 与 ATT&CK 目录
**DSL** —— 使用带有可选通配符的箭头链构建假设:
```
User -[Auth]-> Host -[Execute]-> Process
Process -[DNS]-> Domain -[Connect]-> IP
* -[Execute]-> Process -[Spawn]-> Process
```
**目录** —— 映射到 MITRE ATT&CK 的预构建假设(例如,Valid Accounts T1078、Credential Dumping T1003、RDP Lateral Movement T1021.001、C2 T1071)。从目录加载或将其用作自定义链的模板。
## GNN 威胁评分
Graph Hunter 可以通过 ONNX 模型(例如来自 GraphOS-APT)使用 **基于 GNN 的威胁分类**:引擎提取 k-hop 子图,运行推理(DirectML/GPU 或 CPU),并将 5 类威胁评分(Benign, Exfiltration, C2 Beacon, Lateral Movement, Privilege Escalation)作为权重 **W5** 注入异常评分器。狩猎结果随后按综合评分排名,因此高威胁路径会优先显示。GNN 评分是可选的,默认关闭;在 GNN Threat Model 面板中加载模型并点击 **Compute Scores** 以启用它。
**预训练 ONNX 模型:** 从 [Hugging Face](https://huggingface.co/base4security/gnn-threat-scoring) 下载。
**完整详情**(流水线、威胁类别、UI 工作流、训练):文档中的 [GNN 威胁评分](https://graphhunter.readthedocs.io/en/latest/user-guide/gnn-threat-scoring.html)。
## 架构
Graph Hunter 分为 **Rust 核心**(领域逻辑、解析、图谱、搜索)、**Tauri + React** 桌面应用(UI 和持久化)以及可选的用于 AI 助手的 **graph-hunter-mcp**。核心包含所有业务逻辑;应用暴露命令、会话状态和 HTTP API。
**完整详情**(目录布局、核心模块、应用结构、数据流):文档中的 [架构](https://graphhunter.readthedocs.io/en/latest/reference/architecture.html)。
## 安装
您需要 Rust、Node.js 和 [Tauri v2 前置条件](https://v2.tauri.app/start/prerequisites/)——不需要额外的服务或账户。请按照以下步骤操作;首次运行可能需要几分钟来构建依赖项。
1. **安装前置条件(如果尚未安装):**
- [Rust](https://rustup.rs/)(2024 版本)
- [Node.js](https://nodejs.org/)(v18+)
- 特定平台的构建工具:参见 [Tauri 前置条件](https://v2.tauri.app/start/prerequisites/)
2. **克隆并在开发模式下运行:**
cd app
npm install
npm run tauri dev
3. **验证:** 应用窗口打开。创建一个会话,使用 **Auto-detect** 加载 `demo_data/apt_attack_simulation.json`,然后运行狩猎(例如 **Hunt Mode** → 添加步骤 `User -[Auth]-> Host` → Run)。如果您看到路径和图谱,就说明准备就绪了。
**运行测试:**
```
cd graph_hunter_core
cargo test
```
**为生产环境构建:**
```
cd app
npm run tauri build
```
## 使用
最小运行:启动应用,加载日志文件,然后狩猎。
```
cd app && npm run tauri dev
```
然后在 UI 中:创建或选择一个会话 → **Select Log File** → 从 `demo_data/`(或您自己的)中选择一个文件 → **Auto-detect** → 加载。切换到 **Hunt Mode**,构建一个假设(或从 ATT&CK 目录中选择一个),然后点击 **Run**。当存在许多路径时,结果会显示在图谱和狩猎表中。
## 演示数据与试用
`demo_data/` 中包含三个攻击模拟数据集:
| 文件 | 格式 | 场景 |
|------|--------|----------|
| `apt_attack_simulation.json` | Sysmon | APT 杀伤链:鱼叉式网络钓鱼、发现、Mimikatz、PsExec、C2、渗出 |
| `sentinel_attack_simulation.json` | Sentinel | 云到本地:暴力破解 DC、Azure AD 滥用、横向移动、信标、渗出 |
| `generic_csv_logs.csv` | CSV | 防火墙/代理日志:正常 + C2、SMB 横向、渗出尝试 |
**快速运行:**
1. 启动应用:`npm run tauri dev`(从 `app/` 目录)。
2. 创建或选择一个会话;选择 **Auto-detect**(或特定格式),然后加载一个演示文件。
3. 打开 **Hunt Mode** 并构建一个假设,例如:
- `User →[Execute]→ Process →[Write]→ File`(恶意软件投放)
- `User →[Auth]→ Host`(横向认证)
- `Host →[Connect]→ IP(C2)
- `Process →[Spawn]→ Process`(父子链)
- 或从 **ATT&CK 目录** 中选择一个模式。
4. 切换到 **Explorer Mode** 以搜索 IOC 并扩展邻域;使用 **Events**、**Heatmap** 和 **Timeline** 了解上下文。
真实世界数据集 (OTRF/Mordor, Splunk attack_data)
对于使用真实攻击遥测数据进行大规模测试,请参阅 [demo_data/DOWNLOAD_REAL_DATA.md](demo_data/DOWNLOAD_REAL_DATA.md) 了解下载和转换说明(OTRF Security-Datasets, Mordor, Splunk attack_data)。标签:APT 检测, Cloudflare, CNCF毕业项目, GNN, MITRE ATT&CK, Mutation, ONNX, PE 加载器, React, Rust, SIEM 集成, Syscalls, Tauri, 不可变基础设施, 假设驱动, 可视化, 可视化界面, 因果分析, 图神经网络, 安全日志分析, 实体关系图, 攻击路径分析, 时序知识图谱, 构建工具, 模式匹配, 网络安全, 网络流量审计, 自动化资产收集, 通知系统, 隐私保护