yuvikax/VulnIQ
GitHub: yuvikax/VulnIQ
VulnIQ 是一个 AI 驱动的漏洞优先级排序引擎,通过聚合多安全工具的发现并构建跨层攻击图来识别和排序真正关键的安全风险。
Stars: 0 | Forks: 1
# VulnIQ — 统一的多层攻击链关联与优先级排序引擎
每一个安全工具都在孤立地发出警报。SAST 发现了一个 SQL injection。DAST 发现了一个暴露的 admin endpoint。基础设施扫描器发现了一个未打补丁的库。IAM 扫描器发现了一个具有过高权限的 service account。如今,四位不同的工程师将它们视为四个互不相关的“中危”发现进行分类处理——而没有一个被紧急修补。
**一旦串联在一起,它们就是一条严重的违规路径。**
VulnIQ 摄取来自每一个 OSI 层和每一个工具的发现,构建一个**攻击图**,找到将低严重性发现连接成高影响违规路径的**攻击链**,并对那些*能解锁最危险攻击链*的发现进行优先级排序。
## AI 架构 — 一个模型,四个 Agent 角色
**模型:`claude-opus-4-7`** (Anthropic)。用于四个不同的 Agent 角色,每个角色都有其专属的 system prompt、作用域和确定性后备方案。
| # | 角色 | 文件 | 功能描述 | Agent 模式 |
|---|---|---|---|---|
| 1 | **提取与标准化 Agent** *(最关键)* | `backend/app/ingestion/extraction_agent.py` | 深入读取以**任何格式** (JSON、XML、CSV、XLSX、PDF) 和**任何文档风格**上传的发现,并将它们分别映射到统一的 schema 中。推断 OSI 层、发现类型以及每个发现授予攻击者的**能力** —— 这是所有攻击链的基础。通过推理填补缺失字段,分配提取置信度,并标记低置信度项目以供人工审查。 | 深度阅读提取 + schema 映射 + 置信度评分 |
| 2 | **边推断 Agent** | `backend/app/graph/edge_agent.py` | 对于每一对候选发现,判断 A 授予的能力是否在合理情况下**启用 (ENABLES)** 了 B 的利用。返回置信度 + 依据。构建攻击图的语义层。 | 批量 (12 对/次调用) 带有依据的语义分类 |
| 3 | **攻击链叙述 Agent** | `backend/app/agent/chain_narrator.py` | 为每个排序的攻击链编写一个 2-3 句话的、从攻击者视角出发的违规故事,显示在每个攻击链卡片下方。 | 结构化 prompt → 自然语言 |
| 4 | **仪表盘 Copilot Agent** | `backend/app/agent/dashboard_agent.py` | 真正的 ReAct 风格的 tool-calling agent,支持“Ask VulnIQ”。拥有六个工具、有界循环,并运行反事实模拟 (`simulate_patch`)。 | 真正的 tool-calling agent |
**为什么只用一个模型而不是多模型?** 对于这四项任务,仅靠 Claude 本身就已经足够强大。多模型架构会增加集成成本、密钥管理、延迟和故障面,而在这些任务上却无法带来明显的质量提升。正确的答案是使用一个强大的模型,并将其置于四个定义良好的 Agent 角色中,每个角色都带有确定性的后备方案,这样即使离线,pipeline 也能端到端运行。
## 文件摄取 — 关键的前门
团队以不同的格式和风格提交发现。流程如下:
```
upload (JSON/XML/CSV/XLSX/PDF)
→ extractors.py format → LLM-readable records
→ Extraction Agent (Role 1) records → normalized Findings + confidence + review queue
→ engine.ingest_uploads() merge + recompute graph/chains/priorities
→ new findings chain immediately alongside everything else
```
模棱两可/混乱的输入(例如,没有 CVE 或严重性级别的手写观察结果)**不会**被拒绝 —— Agent 会推断缺失的字段,降低置信度分数,并将该条目添加到仪表盘中展示的**人工审查队列**中。通过 **Upload Findings** 选项卡 (`POST /api/upload`) 上传。
有关如何获取 Anthropic 密钥并运行整个程序的信息,请参见 **`docs/SETUP.md`**。
## 此原型中的可用功能
- **统一的发现 schema**,标准化了 11 个模拟工具 (Semgrep, Checkmarx, OWASP ZAP, Burp, Qualys, Nessus, Wiz, Trivy, Snyk, Prowler, ScoutSuite) 跨越 7 个 OSI 层的输出
- **两阶段攻击图**
- 第一阶段 — 确定性边:`EXPLOITS`,`EXPOSES`,`CORRELATES` (相同根本原因),`REACHES` (asset 依赖)
- 第二阶段 — LLM 推断的 `ENABLES` 边(语义能力传递),带有确定性的启发式后备方案,以便演示可以离线运行
- **ChainRisk 评分** = EntryExposure × ExploitLikelihood × PathFeasibility × CrownJewelValue × ControlGap
- **基于中心性的发现优先级** — 一个发现的层级反映了它位于多少高风险链上,而不是原始的 CVSS 分数
- **实时威胁情报** — NVD,FIRST.org EPSS,CISA KEV (带有数据集中针对真实 CVE 的缓存离线后备)
- **嵌入式对话 Agent** — 带有 6 个工具 (读取 + 操作) 的 Claude,包括 `simulate_patch` 决定性工具
- **执行简报生成器**,映射到 SEBI CSCRF,ISO 27001 A.8.8,RBI 网络弹性
- **交互式仪表盘**,包含优先级列表、攻击链叙述、力导向图可视化、安全态势统计以及嵌入式 Agent
## 在合成数据集上的验证结果
| 指标 | 结果 |
|---|---|
| 摄取的发现总数 | **153** |
| 跨越 OSI 层 | **7** |
| 来源工具 | **11** |
| 发现的跨层攻击链 | **11** |
| 被正确作为噪音延迟处理的发现 | **144 (94.1%)** |
| 顶级的阻断攻击链关键发现 (F-00003) | **存在于 11 条链中的 7 条上** |
| 修补那一个发现 | **使 7 条链崩溃,将组织风险降低 74.8%** |
| 顶级攻击链风险 | **78.0** (Spring Actuator → Spring4Shell → hardcoded creds → ledger write) |
## 仓库结构
```
vulniq/
├── README.md ← this file
├── backend/
│ ├── requirements.txt
│ ├── data/
│ │ ├── assets.json
│ │ ├── synthetic_findings.json ← 153 findings with 4 planted golden chains
│ │ └── generate_data.py
│ └── app/
│ ├── main.py ← FastAPI server (10 endpoints)
│ ├── models.py ← Finding / Asset / AttackChain / enums
│ ├── engine.py ← orchestrator (build pipeline + state)
│ ├── ingestion/
│ │ └── loader.py
│ ├── context/intel/
│ │ └── threat_intel.py ← NVD / EPSS / KEV with cache + fallback
│ ├── graph/
│ │ ├── builder.py ← deterministic edges + candidate ENABLES
│ │ ├── cwe_capability_map.py ← CWE / finding-type → capability table
│ │ ├── edge_agent.py ← LLM semantic edge inference (Pass 2)
│ │ └── chains.py ← path-finding, ChainRisk, prioritization
│ ├── agent/
│ │ └── dashboard_agent.py ← Claude agent + 6 tools + offline router
│ └── reports/
│ └── brief.py ← executive brief w/ control mapping
├── frontend/
│ ├── dashboard.html ← standalone, runs in a browser
│ ├── dashboard_shell.html ← HTML + CSS scaffold
│ ├── app.js ← dashboard logic, graph viz, agent
│ ├── data.js ← embedded data bundle
│ ├── bundle.json ← compact data
│ └── snapshot.json ← full engine snapshot
└── docs/
├── PROPOSAL.md
├── ARCHITECTURE.md
├── ROADMAP.md
└── DEMO_SCRIPT.md
```
## 运行原型
### 前端 (零设置 — 用于演示)
只需在任何现代浏览器中打开 `frontend/dashboard.html` 即可。它是完全自包含的:数据是内嵌的,Agent 和 patch 模拟器在 JS 中本地运行。演示不需要后端。
### 后端 (用于实时、真实数据模式)
```
cd backend
pip install -r requirements.txt # fastapi, networkx, anthropic, httpx
export ANTHROPIC_API_KEY=... # optional — enables LLM edge inference + agent
uvicorn app.main:app --reload --port 8000
```
Endpoints:
- `GET /api/health` · `GET /api/stats` · `GET /api/findings[?priority=&layer=]`
- `GET /api/findings/{id}` · `GET /api/chains[?limit=]` · `GET /api/chains/{id}`
- `GET /api/graph[?top_chains=]` — 可视化 payload
- `POST /api/agent` `{message, history}` — 嵌入式对话 Agent
- `POST /api/simulate-patch` `{finding_ids: []}` — 决定性工具
- `GET /api/brief` — 执行简报
引擎在启动时构建。如果没有 API key,它会使用确定性启发式方法来处理语义边 —— 整个 pipeline 依然会运行,只是边的置信度会更简单。
## 为什么这具有差异化优势
1. **这是唯一能够看到跨工具攻击链的方法。** 每一个现有的扫描器都在自己的孤岛内进行排名。CVSS、EPSS、KEV —— 它们全都不了解你的其他发现或你的 asset 图。VulnIQ 是工具之间缺失的环节。
2. **这个图是真实的,而不是 LLM 凭空想象的。** 确定性边(来自透明的 CWE 表的能力传递,以及来自 CMDB 风格数据的 asset 可达性)构成了骨架。LLM 仅在确定性阶段已经给出“合理可连接”结论的地方对语义边进行细化。每一条链都是完全可审计的 —— 没有黑盒。
3. **它产生的是行动,而不仅仅是排名。** 嵌入式 Agent 可以模拟补丁并告诉 CISO:“修复 F-00003 —— 能使 7 条链崩溃,组织风险 −74.8%。” 这是在几秒钟内交付的董事会级别的洞察。
4. **合规性是内置的。** 每一个优先级排序决策都映射到 SEBI CSCRF、ISO 27001 A.8.8、RBI 网络弹性控制。该简报默认就是监管就绪的。
标签:AI安全, Chat Copilot, GPT, LLM多智能体, Web报告查看器, XXE攻击, 后端开发, 多模态安全, 威胁情报, 开发者工具, 攻击图分析, 数据可视化, 漏洞管理, 特权检测, 逆向工具