dedsechack-1337/soc-copilot
GitHub: dedsechack-1337/soc-copilot
一款基于本地开源大模型的安全运营 AI 助手,支持用自然语言查询日志、自动生成并验证 Sigma/YARA 规则,以及进行 MITRE ATT&CK 行为映射。
Stars: 1 | Forks: 0
# AI 威胁狩猎助手 (SOC Copilot)
一款本地优先的 AI 助手,专为安全分析师设计:使用自然语言查询日志,
生成经过验证的 Sigma 和 YARA 规则,并将行为映射到
MITRE ATT&CK —— 所有这一切都通过聊天界面完成,由通过 Ollama 运行的开源 LLM 提供支持,并在真实的 ATT&CK 语料库上使用检索增强生成 (RAG)。
## 架构
```
┌───────────────────┐
│ Streamlit Chat │
└─────────┬───────────┘
│
┌─────────▼───────────┐
│ LangChain Agent │ (agent.py — create_agent,
│ (Ollama chat model) │ langgraph tool-calling loop)
└──┬───────┬───────┬────┘
┌────────────┘ │ └────────────┐
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ query_security_ │ │ generate_sigma_ │ │ generate_yara_ │
│ logs │ │ detection_rule │ │ detection_rule │
│ (NL → ES DSL) │ │ (LLM + pySigma │ │ (LLM + yara-python │
│ │ │ validation) │ │ compilation check) │
└──────────────────┘ └──────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐
│ mitre_attack_ │
│ lookup │
│ (ChromaDB RAG over │
│ real ATT&CK STIX) │
└──────────────────┘
```
## 已实现功能与需要接入的功能
| 组件 | 状态 |
|---|---|
| MITRE ATT&CK 数据 | **真实** —— 从 `mitre/cti` GitHub repo 实时拉取,解析了 697 个技术/子技术 |
| ATT&CK 向量搜索 | **真实** —— 使用 ChromaDB + Ollama embeddings,已进行端到端逻辑测试 |
| Sigma 生成 + 验证 | **真实** —— pySigma 解析/验证每一条生成的规则;失败时自动重试 |
| YARA 生成 + 验证 | **真实** —— yara-python 编译每一条生成的规则;失败时自动重试 |
| 日志查询 | **内置 Mock backend** —— 将 `MockLogBackend` 替换为 `ElasticsearchBackend`(在 `tools/log_query.py` 中提供了存根),并指向你真实的 SIEM 索引 |
| LLM | 需要在本地运行 **Ollama**,并配置一个 chat 模型(默认为 `llama3.1`)和一个 embedding 模型(`nomic-embed-text`) |
## 设置
### 1. 安装 Ollama 并拉取模型
```
# https://ollama.com/download
ollama pull llama3.1 # chat/reasoning model
ollama pull nomic-embed-text # embedding model for ATT&CK RAG
ollama serve # if not already running as a service
```
### 2. 安装 Python 依赖项
```
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
```
### 3. 构建 ATT&CK 知识库(一次性)
```
# 获取 + 解析最新的 MITRE ATT&CK Enterprise matrix
curl -o data/enterprise-attack.json \
https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json
python ingest/parse_attack.py # -> data/techniques.json
python ingest/build_vectorstore.py # -> vectorstore/attack_chroma/
```
### 4. 运行
**Chat UI:**
```
streamlit run app.py
```
**CLI:**
```
python agent.py
```
**单个工具(用于测试):**
```
python tools/attack_lookup.py "dumping lsass memory to steal credentials"
python tools/sigma_generator.py "PowerShell downloading and executing a remote script"
python tools/yara_generator.py "Cobalt Strike beacon default config"
python tools/log_query.py "show failed logins in the last 6 hours"
```
## 连接真实的 SIEM
编辑 `tools/log_query.py`:
```
from tools.log_query import ElasticsearchBackend
_backend = ElasticsearchBackend(hosts=["https://your-es-host:9200"], index_pattern="security-logs-*")
```
更新同一文件中的 `SCHEMA_DESCRIPTION` 以匹配你实际的索引
字段映射 —— NL 到 DSL 转换的质量完全取决于
LLM 是否拥有准确的 schema 可供使用。对于 Splunk,请编写一个等效的
`SplunkBackend`,将查询转换为 SPL 而不是 ES DSL(NL2DSL 的 prompt 模板是一个很好的改编起点)。
## 设计说明
- **验证优先的规则生成**:LLM 总是能可靠地生成 *看似合理*
但存在细微错误的 Sigma/YARA 语法(错误的 UUID、缺失 `condition` 块、
不平衡的 YARA 字符串引用)。两个生成器在返回输出之前都会对其进行解析/编译,
并在失败时将错误信息反馈给模型并自动重试一次。
如果仍然失败,分析师将看到原始输出 *以及*
验证错误,而不是一条默默损坏的规则。
- **RAG 用于 ATT&CK,而不是用于查询每个规则的生成**:ATT&CK
映射是纯粹的检索(快速、确定性强、无幻觉风险)。
Sigma/YARA 生成目前不会为了风格定位而检索示例规则 —— 一个很好的下一步(见下文)是将
真实的 Sigma/YARA 规则语料库(例如 SigmaHQ 的规则集)像 ATT&CK 一样进行 embedding,并检索相似的示例以引导 LLM 的风格并
进一步减少验证失败。
- **本地优先**:一切皆通过 Ollama 运行,因此日志数据和
生成的检测规则永远不会离开你的基础设施。
## 下一步 / 扩展想法
- 将 [SigmaHQ ruleset](https://github.com/SigmaHQ/sigma) 和 YARA
规则语料库 embedding 到它们各自的 Chroma 集合中,以实现 few-shot 检索。
- 添加一个 `sigma-cli`/pySigma backend 转换步骤,以便可以将生成的规则
立即转换为你 SIEM 的原生查询语言。
- 添加对话记忆持久化(基于 SQLite 的 langgraph checkpointer),
以便分析师可以在不同会话之间恢复调查。
- 添加一个反馈循环:让分析师对生成的规则点赞/点踩,并
随着时间推移将接受的规则反馈到检索语料库中。
标签:AI风险缓解, Kubernetes, 逆向工具