emerygiles/nex
GitHub: emerygiles/nex
NEX 是一款基于安全微调 LLM 的 Splunk 自主紫队工具,自动发现、证明并修复安全检测覆盖盲区。
Stars: 1 | Forks: 0
# 用于 Splunk 的 NEX 自主紫队
NEX 是一款为 **Splunk Agentic Ops 黑客松(安全赛道)** 打造的智能体安全解决方案。它会像漏洞赏金猎人一样攻击你*自己的* Splunk 数据,**证明**存在检测覆盖盲区(运行 SPL,获得零命中),接着运行自我怀疑机制以抑制误报,然后**编写并部署**填补该盲区的检测规则——同时生成 SPL 保存搜索和可移植的 Sigma 规则。
它不是一个仅仅*描述*问题的聊天机器人。它闭环了整个流程:**发现 → 证明 → 修复 → 验证。**
## 为什么它很重要
每个 SOC 都有检测盲区。发现这些盲区是一个缓慢、手动的,且高度依赖分析师具备攻击者思维的过程。NEX 通过以下方式实现了该闭环的自动化:
- **Splunk MCP Server** — 智能体的双手:枚举知识对象、运行 SPL、部署保存搜索。
- **Splunk 托管模型** (`Foundation-sec-1.1-8b-instruct`) — 智能体的大脑:针对攻击者 TTP 和检测逻辑进行安全微调的推理。
- **MITRE ATT&CK** — 智能体用于推理的覆盖图。
## 智能体闭环
1. **侦察** — 通过 MCP 枚举索引、sourcetype 和现有检测规则。
2. **攻击思考** — Foundation-sec 选择一个极可能绕过当前覆盖范围的 ATT&CK 技术。
3. **证明盲区** — 通过 MCP 生成并运行候选 SPL;**0 命中 = 确认的盲区**。
4. **怀疑机制关卡** — 第二轮尝试*反驳*该盲区(已有现成规则?缺失数据?)。以此消除误报。
5. **发布修复** — 输出 SPL + Sigma + 严重程度 + ATT&CK ID,并通过 MCP 部署保存搜索。
## 可见性覆盖 —— “盲区之下的盲区”
规则覆盖范围仅对那些你确实收集了遥测数据的技术有意义。NEX 还会运行
**数据源覆盖**检查:它将高价值的 ATT&CK 技术映射到甚至*观察*它们所需的数据源上,
并标记出你**完全没有遥测数据**的那些技术 —— 这些技术不会显示为“未覆盖”,
它们显示为*一片空白*。检测覆盖范围 = 规则覆盖范围 × 数据源覆盖范围。
(包含 `GET /visibility`、**Visibility** 视图以及闭环中的一个侦察步骤。)
## 生产安全性
- **SPL 命令白名单** — 任何由智能体运行或部署的 SPL,如果包含写入/窃取/执行命令
(`delete`、`outputlookup`、`sendemail`、`script`、`collect` 等),都将被拒绝。
检测工具只读取遥测数据;它永远不会执行删除或通过 shell 调用。
- **人工介入部署** — 设置 `AUTO_DEPLOY=false`,NEX 会*提议*检测规则并
等待分析师批准(`POST /deploy` 或 **Approve & deploy** 按钮),而不是自行部署。
模型负责提议;分析师负责决定。
- **有据可查的证明** — 盲区是通过该技术在真实遥测数据中的存在情况来证明的,
而不是通过模型的候选规则,因此孱弱的 SPL 永远不会被判定为“无盲区”。
## 两种运行模式
| 模式 | 数据平面 | 用途 |
|---|---|---|
| **Sandbox** | 内置的 mock MCP + 捆绑的 APT 数据集 | 评委可在**零 Splunk 配置**的情况下运行 |
| **Live** | 官方 Splunk MCP Server (`:8089/services/mcp`) | 在你的实例上进行真实的检测盲区分析 |
相同的智能体代码;仅通过配置切换 MCP 端点。
## 快速开始
### Sandbox(无需 Splunk)
```
# Backend
cd backend
python -m venv .venv && . .venv/Scripts/activate # Windows; use bin/activate on *nix
pip install -r requirements.txt
cp .env.example .env # MODE=sandbox is the default
uvicorn app:app --reload --port 8800
# Frontend (新终端)
cd frontend
npm install
npm run dev # http://localhost:5173
```
### Live(通过 REST 连接真实 Splunk) — `MODE=splunk_rest`
这会针对真实的 Splunk 实例运行智能体:真实的知识对象枚举、
真实的 SPL 搜索,以及真实部署的保存搜索。
1. **摄取演示攻击数据集**(通过 HEC 创建 `nex` 索引数据):
python scripts/ingest_demo_data.py --token
2. **创建基线 'existing detections'**(覆盖 T1110/T1059.001/T1078.004,但不包含数据窃取):
python scripts/setup_detections.py --user --password
3. 在 `backend/.env` 中:
MODE=splunk_rest
SPLUNK_REST_URL=https://localhost:8089
SPLUNK_USER=
SPLUNK_PASSWORD=
SPLUNK_INDEX=nex
AI_PROVIDER=foundation_sec # 通过本地 Ollama 使用 Foundation-Sec-8B;或使用 'scripted'
4. 启动后端。`POST /reset` 会在多次演示运行之间重新打开盲区。
### Live(Splunk MCP Server) — `MODE=mcp`
通过位于 `:8089/services/mcp` 的官方 **Splunk MCP Server** (#7931) 进行等效传输。
需要加密的 MCP token,这需要一个健康的 KV Store。(在 Splunk Enterprise 10.4
上,内置的 MongoDB/OpenSSL-3 组合可能无法读取其 TLS 密钥,从而阻止 token 创建;
上述 REST 数据平面在功能上是等效的,且不受此影响。)
### AI 大脑选项
`foundation_sec`(Cisco Foundation-Sec-8B-Instruct,本地 Ollama),`anthropic`(开发中)或
`scripted`(确定性,零依赖)。实时模型调用具有确定性的安全底座和
grounding 防护机制,因此小模型也不会产生偏离目标或幻觉的结果。
## 架构
请参阅 [ARCHITECTURE.md](ARCHITECTURE.md) 和 [docs/architecture.mmd](docs/architecture.mmd)。
## 技术
React + TypeScript + Vite + Tailwind + shadcn/ui + React Flow + Framer Motion · Python + FastAPI · Splunk MCP Server · Foundation-sec-1.1-8b · SPL + Sigma。
## 许可证
[MIT](LICENSE)。
标签:AI安全智能体, AI风险缓解, DLL 劫持, SIEM自动化, 大语言模型, 检测规则生成, 紫队, 逆向工具