02William/ai-soc-triage
GitHub: 02William/ai-soc-triage
一个开源的 AI 驱动 SOC 告警分诊引擎,结合行为分析和本地 LLM 对安全告警进行富化、优先级排序和威胁解释,帮助分析师从海量噪音中精准聚焦真实威胁。
Stars: 0 | Forks: 0
# AI-SOC-Triage
一个开源的、AI 驱动的 SOC 告警分诊引擎。它位于海量原始安全告警与人类分析师之间,对于每一条告警,它会进行富化,应用行为分析,要求 LLM(或透明的启发式逻辑)来判断这是否是真正的威胁以及其紧急程度,然后对结果进行关联和排名,从而让真正的威胁浮出水面,同时抑制噪音。
最危险的攻击者不会触发特征签名告警,他们使用合法凭证,缓慢移动,并融入其中。该项目应用行为分析和 AI 推理来精准发现此类活动,使分析师免于每天手动处理成千上万条无差别的告警。
## 为什么开发这个项目
基于规则的检测只能找到已经被描述过的内容。此工具在原始告警的基础上添加了两样东西:
1. **行为分析(UEBA-lite)** — 单个告警无法揭示的信号:暴力破解、**密码喷洒**(单一来源,多个用户名)、**惯犯** IP、暴力破解后成功(凭证泄露)、不可能的旅行以及非工作时间的 service-account 使用。其中一些直接根据在 honeypot 项目中观察到的真实攻击者模式编码而成。
2. **AI 分诊** — LLM 对每条告警进行评分(真阳性 / 假阳性 / 良性),分配优先级,*用通俗易懂的英文解释其推理过程*,并推荐分析师应对措施,同时映射到 MITRE ATT&CK。
一旦作为开源发布,检测方法论就能帮助每个面对相同攻击手法的防御者。无论是地区医院的 SOC 分析师、市政供水设施的工程师,还是中型银行的检测工程师。
## 架构
```
cloud-honeypot-soc-lab ──KQL export──▶ sentinel_to_alerts.py ──▶ AI-SOC-Triage
(real Sentinel telemetry) (tools/, normalizes) (this project)
AI-SOC-Triage internals:
alerts ─▶ enrich ─▶ behavioural baseline ─▶ AI triage ─▶ correlate ─▶ rank
│ │ │ │
GeoIP brute force / LLM or campaigns by IP,
IP rep password spray / heuristic identity anomalies
asset crit impossible travel / + MITRE by account →
(CIDR) svc-account misuse ATT&CK incidents
```
| 阶段 | 文件 | 作用 |
|-------|------|--------------|
| 接入 | `data/sample_alerts.json` | 归一化的告警(基于你的 honeypot 或公共数据集建模) |
| 桥接 | `tools/sentinel_to_alerts.py` | 将 Sentinel KQL 导出转换为告警 schema |
| 富化 | `src/enrich.py` | 真实的 CIDR GeoIP (`data/geoip.csv`)、IP 信誉、资产关键性、MITRE 映射 |
| 基线 | `src/baseline.py` | 跨告警行为信号 (UEBA-lite) |
| 分诊 | `src/triage.py` | 启发式 + LLM 决策引擎 |
| 后端 | `src/llm_backends.py` | 本地 Ollama / 兼容 OpenAI,自动检测 |
| 编排 | `src/pipeline.py` | 运行所有阶段,进行关联、排名并计算指标 |
| CLI | `run.py` | 终端中的优先级队列 |
| 仪表板 | `app.py` | Streamlit 分析师视图 |
## 快速开始
```
# 1. 立即运行 — 核心无需任何依赖:
python run.py --no-llm
# 2. 添加 AI 大脑(免费、本地、私有 — 日志永远不会离开您的机器):
# 从 https://ollama.com 安装 Ollama,然后:
ollama pull llama3.1:8b
python run.py
# 3. 可视化 Dashboard:
pip install -r requirements.txt
streamlit run app.py
```
### 可选配置(均为免费层级)
| 变量 | 用途 |
|----------|---------|
| `OLLAMA_MODEL` | 本地模型名称(默认为 `llama3.1:8b`) |
| `OPENAI_API_KEY` / `OPENAI_BASE_URL` / `OPENAI_MODEL` | 任何兼容 OpenAI 的 endpoint(包括 Groq 免费层级) |
| `ABUSEIPDB_API_KEY` | 通过 AbuseIPDB 免费层级获取实时 IP 信誉 |
## 导入你自己的数据
该原型内置了模拟真实 honeypot 遥测数据的合成告警(暴力破解、密码喷洒、凭证泄露、不可能的旅行、service-account 滥用)。要在**真实**数据上运行它:
**来自 Microsoft Sentinel(honeypot pipeline)。** 在 Logs 中运行以下命令,并将结果导出为 CSV 或 JSON:
```
SecurityEvent
| where EventID in (4625, 4624)
| summarize count = count(), TimeGenerated = max(TimeGenerated)
by IpAddress, Account, EventID, Computer
| where isnotempty(IpAddress)
| project TimeGenerated, EventID, Account, Computer, IpAddress, count
```
然后将其桥接到分诊 schema 并运行:
```
python tools/sentinel_to_alerts.py sentinel_export.csv --out data/real_alerts.json
python run.py --alerts data/real_alerts.json
```
**其他来源。** 任何匹配 `data/sample_alerts.json` 的 JSON 数组都可以使用 —— 公共数据集(Security-Datasets/OTRF、EVTX-ATTACK-SAMPLES)或归一化为相同字段的 Wazuh/Elastic 导出。
**真实 GeoIP。** 富化过程会对 `data/geoip.csv`(`network,latitude,longitude,cityname,countryname`)进行真实的 CIDR 查找。repo 中附带了一个小样本;只需放入来自
[cloud-honeypot-soc-lab](https://github.com/02William/cloud-honeypot-soc-lab)
的完整 5.5 万行观察列表,或导出为相同列的 MaxMind GeoLite2,每个攻击者 IP 就能被成功解析 —— 无需更改任何代码。
**真实 IP 信誉。** 设置 `ABUSEIPDB_API_KEY` 即可使用 AbuseIPDB 的实时数据进行富化,而不是使用内置的演示列表。
## 路线图
- [x] 真实的基于 CIDR 的 GeoIP 富化(直接插入观察列表 / GeoLite2)
- [x] Sentinel 接入桥接 (`tools/sentinel_to_alerts.py`)
- [ ] Sigma 规则接入(使用开放检测规则将原始日志转化为告警)
- [ ] 用训练好的模型(IsolationForest)替换启发式异常钩子
- [ ] 实时 API 连接器:Microsoft Sentinel、Wazuh、Elastic
- [ ] 反馈循环:分析师判定结果微调分诊阈值
- [ ] 将分诊后的事件导回 SIEM / 工单系统
## 许可证
MIT。
标签:AI风险缓解, Elastic, Kubernetes, Petitpotam, UEBA, 人工智能, 告警分诊, 安全运营, 扫描框架, 用户模式Hook绕过, 逆向工具