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绕过, 逆向工具