Flora1003Xu/Network-Traffic-Triage-System
GitHub: Flora1003Xu/Network-Traffic-Triage-System
一个基于 LLM 的两层告警分级流水线,用于自动化分类网络入侵告警并生成结构化事件报告,以减轻 SOC 误报疲劳。
Stars: 1 | Forks: 0
# LLM 辅助 SOC 告警分级与报告系统
## 概述
现代 SOC 团队面临着来自 Zeek 和 Suricata 等工具的高量 IDS 告警。分析师每天手动处理数千条告警,其中许多是误报,导致告警疲劳以及对真实威胁的响应延迟。
本项目构建了一个两层 LLM 辅助告警分级流水线:
1. 摄取原始 Zeek 和 Suricata 日志
2. 并行运行两个专用分级代理,独立对每个数据源进行分类
3. 使用置信度阈值过滤良性流量
4. 将可疑/恶意发现上报至中央代理进行跨源关联
5. 生成结构化事件报告并保存到磁盘
## 架构
```
Webhook (POST /soc-triage)
│
▼
Split Logs (Code)
┌────┴────┐
│ │
▼ ▼
Zeek Suricata
Triage Triage
Agent Agent
(Gemini) (Gemini)
│ │
└────┬────┘
▼
Parse + Merge
(confidence threshold)
│
▼
IF ──── benign ──► discard
│
▼ suspicious / malicious
Central Analyst Agent
(Gemini — cross-source correlation)
│
▼
Incident Report
(structured JSON + saved to disk)
```
每个分级代理独立将其数据源分类为 `良性`、`可疑` 或 `恶意`,并附带置信度分数。置信度阈值节点可阻止低置信度判决的上报。中央代理对两个来源的发现进行关联,以生成最终严重性评估和可追溯的证据链。
## 评估结果
基于 **100 个已标注测试用例** 和 **16 个攻击类别** 进行测试。
| 指标 | 得分 |
|--------|-------|
| 判决准确性(恶意/良性) | **100%**(100/100) |
| 假阳性率 | **0%** |
| 假阴性率 | **0%** |
| 严重性精确匹配 | **53%** |
| 严重性在 ±1 级内 | **91%** |
| 严重性在 ±2 级内 | **100%** |
### 涵盖的攻击类别
| 类别 | 数量 | 类别 | 数量 |
|---|---|---|---|
| C2 通信 | 5 | SQL 注入 | 5 |
| 端口扫描 | 5 | XSS 注入 | 5 |
| 数据外泄 | 10 | CC 攻击 | 5 |
| SSH 暴力破解 | 5 | DDoS | 5 |
| DNS 隧道 | 5 | 恶意软件 C2 回调 | 5 |
| 横向移动 | 7 | 暴力破解 | 5 |
| 权限提升 | 7 | Web Shell | 7 |
| 侦察 | 14 | 正常流量 | 5 |
### 关键发现
该 LLM 流水线表现出明显的 **保守偏差** —— 倾向于高估严重性而非低估。在 SOC 上下文中,这是可取的故障模式:宁可过度分级,也不要遗漏真实事件。91% 的严重性 ±1 级准确率优于运营 SOC 研究中报告的 70–80% 分析师间一致性比率。
## 技术栈
- **n8n** — 工作流编排(通过 Docker 自托管)
- **Google Gemini Flash** — 三个代理的 LLM 骨干
- **Zeek** — 网络流量分析日志
- **Suricata** — IDS 告警日志
- **Python** — 评估脚本
## 仓库结构
```
NEtwork-Traffic-Triage-System/
├── README.md
├── n8n/
│ └── n8n-workflow.json # n8n workflow (import directly into n8n)
├── evaluation/
│ ├── test_cases.json # 100 labelled test cases
│ ├── 100_eval_results_20260406_114050.json # testing results
│ ├── run_evaluation.py # automated evaluation script
│ └── analyze_severity.py # severity ±1 analysis script
└── docs/
```
## 快速开始
### 前置条件
- Docker 和 Docker Compose
- 自托管的 n8n
- Google Gemini API 密钥
### 1. 启动 n8n
```
docker-compose up -d
```
你的 `docker-compose.yml` 应包含:
```
services:
n8n:
image: n8nio/n8n
ports:
- "5678:5678"
environment:
- NODE_FUNCTION_ALLOW_BUILTIN=fs,path
volumes:
- ~/.n8n:/home/node/.n8n
- ~/n8n-reports:/home/node/reports
```
### 2. 导入工作流
1. 在 `http://localhost:5678` 打开 n8n
2. 前往 **Workflows** → **Import from file**
3. 选择 `n8n/workflow_export.json`
4. 在 **Credentials** 中添加你的 Google Gemini API 凭证
5. 点击 **Publish** 以激活
### 3. 运行评估
```
pip3 install requests
cd evaluation/
python3 run_evaluation.py
python3 analyze_severity.py
```
评估脚本会将每个测试用例发送到 Webhook,并针对真实标签对管道的判决和严重性进行评分。
### 4. 手动测试
直接将日志负载发送到 Webhook:
```
curl -X POST http://localhost:5678/webhook/soc-triage \
-H "Content-Type: application/json" \
-d '{
"chatInput": "{\"zeek\": \"\", \"suricata\": \"\"}"
}'
```
事件报告会自动保存到 `~/n8n-reports/`。
## 示例事件报告输出
```
🚨 INCIDENT REPORT — INC-2026-04-05T22:21:24Z
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Severity : Critical
Verdict : malicious
Confidence: 97%
📋 Summary
A host at 192.168.1.105 is beaconing to known CobaltStrike C2
infrastructure at 185.220.101.45 at precise 60-second intervals.
Both Zeek and Suricata independently confirm the pattern. Immediate
isolation of the affected host is recommended.
🔍 Indicators of Compromise
• 185.220.101.45:80 — known C2 IP
• Beacon interval: 60.0s ±0.5s (highly regular)
• ET MALWARE Win32/CobaltStrike Beacon (Suricata rule 2025901)
• JA3 fingerprint matches known Cobalt Strike profile
✅ Recommended Actions
• Isolate 192.168.1.105 from network immediately
• Capture full memory dump for forensic analysis
• Review all outbound connections from this host in past 72h
• Check for lateral movement to adjacent hosts
```
## ViGYL 分级仪表板
一个基于 React 的安全分级仪表板演示,用于查看示例事件、检查事件详情以及查看支持的 Zeek 和 Suricata 日志证据。
### 功能特性
- **概览页面**
- 流量汇总指标
- 判决分布
- 严重性分级
- **发现页面**
- 事件列表
- 按判决过滤
- 按严重性过滤
- **事件详情页面**
- 事件元数据
- 完整事件报告
- 解析的 Zeek 连接日志视图
- 解析的 Suricata 告警视图
- **内置示例数据集**
- C2 通信
- Tomcat exploitation
- DNS 隧道
- 端口扫描
- 正常 HTTPS 流量
### 技术栈
- React
- Vite
- JavaScript (JSX)
### 环境要求
请先安装以下内容:
- Node.js 18 或更高版本
- npm 9 或更高版本
检查版本:
```
node -v
npm -v
```
## 项目背景
本项目作为一门大学安全课程的一部分开发,旨在证明基于 LLM 的推理能够显著减少 SOC 告警疲劳,同时保持高检测准确性。
**局限性:**
- 在合成日志数据上评估;真实环境中的性能可能有所不同
- 严重性校准需要根据组织风险阈值进行调整
- 当前原型中未集成实时 Wazuh(计划作为扩展)
## 许可证
MIT
标签:AMSI绕过, DLL 劫持, Gemini, JSON报告, LLM, Metaprompt, Rootkit, Suricata, Unmanaged PE, Zeek, 交叉关联, 人工智能安全, 合规性, 告警优先级, 告警分流, 大语言模型, 威胁情报, 威胁检测, 安全运营中心, 开发者工具, 日志解析, 智能分类, 现代安全运营, 结构化报告, 网络入侵, 网络映射, 自动化报告, 自定义脚本, 证书伪造, 误报过滤, 逆向工具