Base4Security/GraphHunter

GitHub: Base4Security/GraphHunter

GraphHunter 是一款基于时序知识图谱的威胁狩猎引擎,通过假设驱动的模式匹配从异构安全日志中发现完整攻击路径。

Stars: 0 | Forks: 0

Graph Hunter

基于图谱与假设驱动的威胁狩猎

[![Status](https://img.shields.io/badge/status-active-success.svg)]() [![Documentation Status](https://readthedocs.org/projects/graphhunter/badge/?version=latest)](https://graphhunter.readthedocs.io/en/latest/?badge=latest) [![DOI:10.13140/RG.2.2.22035.54564](https://img.shields.io/badge/DOI-10.13140/RG.2.2.22035.54564-0D72C2.svg)](https://doi.org/10.13140/RG.2.2.22035.54564)
[![Rust](https://img.shields.io/badge/Rust-2024_Edition-orange)](https://www.rust-lang.org/) [![Tauri](https://img.shields.io/badge/Tauri-v2-blue)](https://v2.tauri.app/) [![React](https://img.shields.io/badge/React-19-61dafb)](https://react.dev/) [![License](https://img.shields.io/badge/License-GPLv3-green)](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 加速**。 Exploring nodes on map *截图:在地图上探索节点* ## 为什么选择基于图谱的狩猎? 传统的 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,扩展节点邻域,检查元数据和异常评分,通过事件视图、热力图和时间轴进行透视。 Ingesting data *截图:数据获取* ## 主要功能 | 领域 | 功能 | |------|----------| | **引擎** | 时间模式匹配(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)。
## 隐私与数据 所有处理都是**本地**的。日志从您选择的文件中读取;不会向外部服务发送任何数据。会话和笔记存储在您的操作系统应用程序数据目录中。不包含任何遥测或分析。 ## 核心引擎详情 引擎提供时间模式匹配(DFS 与因果单调性)、时间窗口过滤、5 组件内生化异常评分(可选 GNN)、用于路径约束的 k-简单性、并行解析(Rayon)以及实体/关系去重。实体和关系类型以及完整的模块描述在文档中。 **完整详情:** [架构](https://graphhunter.readthedocs.io/en/latest/reference/architecture.html)(核心模块和数据流);[假设与目录](https://graphhunter.readthedocs.io/en/latest/user-guide/hypothesis-and-catalog.html)(DSL, k-简单性);[日志格式](https://graphhunter.readthedocs.io/en/latest/user-guide/log-formats.html)(实体和关系类型)。 ## HTTP API 与 MCP (AI 集成) 当桌面应用运行并加载会话时,它会在 **127.0.0.1:37891** 上暴露一个 **HTTP API**(可通过 `GRAPHHUNTER_API_PORT` 配置)。这允许外部工具在不使用 UI 的情况下查询图谱(实体类型、搜索、扩展节点、运行狩猎、创建笔记)。API 受**令牌认证**保护:启动时,应用会在控制台打印 `GRAPHHUNTER_API_TOKEN=`;客户端(例如 MCP 服务器)必须发送此令牌(例如通过 `Authorization: Bearer ` 或 `GRAPHHUNTER_API_TOKEN` 环境变量),否则请求将返回 **401 Unauthorized**。 **graph-hunter-mcp** 包是一个 **MCP (Model Context Protocol) 服务器**,它将这些操作转化为 AI 助手(例如 Claude Code)的工具。当应用持有会话和图谱时,您可以要求 AI 搜寻恶意路径、扩展节点或总结发现。 | 前置条件 | 描述 | |--------------|-------------| | 应用运行中 | 启动 Tauri 应用并加载或创建一个包含数据的会话。 | | API 令牌 | 将应用启动日志中的 `GRAPHHUNTER_API_TOKEN` 复制到您的 MCP 配置 `env` 中,以便 MCP 进行认证。 | | MCP 配置 | 将 `graph-hunter-mcp` 服务器添加到您的 MCP 客户端,指向应用的 API URL。 | **使用示例** — 一旦 MCP 连接,您可以用自然语言要求 AI 助手运行狩猎并探索图谱。例如: - *"使用 Graph Hunter 查找任何登录到 Host 然后运行了写入 System32 文件夹的可疑进程的用户。"* 助手会将您的请求转化为不同的搜索,构建适当的假设(例如带有过滤器的 `User -[Auth]-> Host -[Execute]-> Process -[Write]-> File`)并运行狩猎。 **演示** ![Graph Hunter + MCP 演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/bc7c944bab105657.gif) **快速设置:** 请参阅 **[graph-hunter-mcp/README.md](graph-hunter-mcp/README.md)** 了解安装、`mcp.json` 示例、工具列表和故障排除(防火墙、端口、401、需要会话)。 ## 截图 | 描述 | 链接 | |-------------|-------------| | **Hunt mode(狩猎模式)** — 假设构建器、DSL 和带有图谱及路径表的狩猎结果 | ![Hunt mode](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/88a9360b77105700.png) | | **Explorer + graph(探索器 + 图谱)** — IOC 搜索、邻域扩展和图谱画布 | ![Explorer and graph](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4f2be2f835105702.png) | | **Hypothesis & ATT&CK catalog(假设与 ATT&CK 目录)** — 步骤构建器和一键目录模板 | ![Hypothesis and catalog](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1a7a2693bd105705.png) | | **Events, Heatmap, Timeline(事件、热力图、时间轴)** — 事件列表、实体/关系热力图、时间视图 | ![Events, Heatmap, Timeline](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8e55793a6b105714.png) | | **GNN Threat Model(GNN 威胁模型)** — ONNX 模型加载、k-hop 配置、Compute Scores(可选) | ![GNN Threat Model](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/25907f3424105732.png) | | **AI Analysis(AI 分析)** — AI 辅助威胁狩猎;自然语言狩猎 | ![AI Analysis](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/760f946c85105736.png) | ## 许可证 本项目根据 GNU General Public License v3.0 授权——详情请参阅 [LICENSE](LICENSE) 文件。
标签:APT 检测, Cloudflare, CNCF毕业项目, GNN, MITRE ATT&CK, Mutation, ONNX, PE 加载器, React, Rust, SIEM 集成, Syscalls, Tauri, 不可变基础设施, 假设驱动, 可视化, 可视化界面, 因果分析, 图神经网络, 安全日志分析, 实体关系图, 攻击路径分析, 时序知识图谱, 构建工具, 模式匹配, 网络安全, 网络流量审计, 自动化资产收集, 通知系统, 隐私保护