ilurulokesh/soc-triage-agent
GitHub: ilurulokesh/soc-triage-agent
一款结合规则引擎、机器学习与 LLM 的 SOC 警报自动化分诊 Agent,解决安全告警疲劳与人工研判效率问题。
Stars: 0 | Forks: 0
# SOC 警报分类 Agent
这是一款 AI Agent,它的警报分类方式与 SOC(安全运营中心)二级分析师如出一辙:它接收连接日志,通过混合检测引擎(确定性规则 + 机器学习)进行处理;对于任何可疑情况,它会调用 LLM 用通俗易懂的英语解释风险、分配优先级,并建议具体的下一步操作。
本项目作为 B.Tech 毕业设计开发——将经典的 IDS/日志监控技术与基于 LLM 的 Agent 层及 n8n 自动化工作流相结合。
## 为什么开发这个项目
大多数学生 IDS 项目仅停留在“标记异常,打印标签”的阶段。而真正的 SOC 分析师的实际工作是分类:决定每天数百个警报中*哪些*是重要的,解释*为什么*,并决定*做什么*。本项目正是将这一推理步骤自动化,而不仅仅是检测步骤。
## 架构
```
Connection log → Rule Engine ─┐
├─→ is_suspicious? ─→ AI Triage Agent (Claude) → Dashboard / Slack / Sheet
Connection log → ML Models ──┘
```
- **规则引擎** (`src/rule_engine.py`) — 确定性启发式规则,镜像了经典 IDS 签名:暴力登录尝试、端口扫描扇出、SYN 洪泛模式、提权、批量文件创建、LAND 攻击。
- **ML 检测** (`src/train_model.py`, `src/pipeline.py`) — 在 NSL-KDD 上训练的 RandomForest 分类器,用于预测攻击类别(正常 / DoS / probe / R2L / U2R),外加一个用于无监督/新型异常检测的 IsolationForest。
- **AI 分类 Agent** (`src/triage_agent.py`) — Claude Sonnet,被设定为 SOC 分析师副驾驶。仅在规则引擎或 ML 模型已标记的事件中被调用,以控制成本/延迟——这与真实 SOC 在一级自动化告警和二级人工分析之间使用的升级模式相同。
- **仪表盘** (`dashboard/app.py`) — Streamlit UI,显示实时警报源、严重性颜色编码、AI 解释和处理指标。
- **API** (`src/api.py`) — FastAPI 封装,使流水线可被仪表盘、n8n 或任何外部系统调用。
- **n8n 工作流** (`n8n/soc_triage_workflow.json`) — webhook 接入 → 检测 API → 条件性 AI 分类 → 针对严重事件的 Slack 警报 → Google Sheets 审计日志。可直接导入 n8n。
## 数据集
[NSL-KDD](https://www.unb.ca/cic/datasets/nsl.html) — 经典 KDD Cup 1999 IDS 数据集的改进版本,在学术 IDS 研究中被广泛使用。选择它而不是原始 KDD'99 是因为它移除了重复记录并重新平衡了难度,从而得出更真实的评估数据。
## 设置
```
git clone
cd soc-triage-agent
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# 获取 dataset
bash scripts/download_data.sh
# 训练 models(需要 ~1-2 分钟)
python3 src/train_model.py
# 设置你的 API key
cp .env.example .env # then edit .env with your ANTHROPIC_API_KEY
export $(cat .env | xargs)
```
## 运行说明
**仪表盘:**
```
streamlit run dashboard/app.py
```
**API 服务器(用于 n8n / 外部调用):**
```
cd src && uvicorn api:app --reload --port 8000
```
**n8n 工作流:** 在你的 n8n 实例中,选择 Import from File → `n8n/soc_triage_workflow.json`。添加 Anthropic 凭据以及(可选的)`SLACK_WEBHOOK_URL` / `ALERT_LOG_SHEET_ID` 环境变量,然后将连接记录 POST 到 n8n 提供的 webhook URL。
## 模型性能
在 NSL-KDD 官方的训练集/测试集划分上进行训练(测试集刻意包含了训练集中未出现的攻击子类型——这是该数据集一个已知且被引用的挑战,比原始的 KDD'99 划分更能反映真实的零日泛化能力):
- 整体准确率:**73.9%**
- DoS 检测:96% 精确率 / 77% 召回率
- 正常流量:64% 精确率 / 97% 召回率
- 有关哪些特征驱动预测,请参见 `models/feature_importances.csv`。
## 项目结构
```
soc-triage-agent/
├── data/ # NSL-KDD dataset (downloaded, not committed)
├── models/ # trained models (generated, not committed)
├── src/
│ ├── preprocess.py # dataset loading, encoding, attack categorization
│ ├── rule_engine.py # deterministic IDS-style heuristics
│ ├── train_model.py # trains RandomForest + IsolationForest
│ ├── triage_agent.py # Claude-based AI triage logic
│ ├── pipeline.py # ties it all together
│ └── api.py # FastAPI wrapper
├── dashboard/app.py # Streamlit dashboard
├── n8n/soc_triage_workflow.json
├── scripts/download_data.sh
└── docs/ # project report, diagrams
```
## 未来改进
- 实时数据包捕获 (Scapy/Zeek),而不是静态数据集重放
- 针对特定组织的日志格式进行 fine-tuning
- 反馈循环:分析师的修正覆盖操作会随着时间的推移重新训练模型
- 多 Agent 设置:分离的分类 Agent + 响应建议 Agent
## 作者
I. Sai Lokesh Iluru — B.Tech CSE, SVR Engineering College
[GitHub](https://github.com/ilurulokesh) · [LinkedIn](https://linkedin.com/in/iluru-sai-lokesh-78a657351)
标签:Apex, DLL 劫持, Kubernetes, 告警分诊, 大语言模型, 安全运营, 扫描框架, 机器学习, 逆向工具