gtamir02-png/cve-ai-agent

GitHub: gtamir02-png/cve-ai-agent

CVE AI Agent 是一个自动化漏洞情报管道,利用AI生成可审计的威胁报告,提升安全运营效率。

Stars: 4 | Forks: 0

# CVE AI 代理 🛡️ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Python: 3.10+](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://python.org) [![LLM: Multi-Provider](https://img.shields.io/badge/LLM-Multi--Provider-purple.svg)](#-llm-providers) ## 🎯 这是什么 **CVE AI Agent** 是一个自主的网络安全数据管道,专为 **SOC 级别、可审计的漏洞情报** 而设计。 它持续在后台运行,从权威来源(NVD、CISA KEV、EPSS)获取最新的漏洞数据,根据您配置的风险阈值评估每个 CVE,并将 AI 生成的威胁评估分派到您选择的工作流中。 ### ⚡ 高效的 Token 架构 与传统 AI 代理将原始数据"倾倒"给 LLM 不同,CVE AI Agent 使用 **确定性最小化逻辑** 来过滤噪声: * **平均 1K Token**:提示经过严格修剪,保持在大约 1,000 个 token(约 4,000 个字符)。 * **节省资源**:最小化 API 使用量,在降低延迟的同时节省资金和计算资源。 * **精确上下文**:仅发送相关的元数据、引用和 CVE 特定上下文,消除导致幻觉的"上下文窗口噪声"。 CVE AI Agent **与 LLM 无关**。可以通过扩展 `config.json` 中的提供者定义来添加额外的 LLM 提供者。 该代理遵循严格的 **双遍架构**: - **第一遍(确定性)**:所有可测量的数据——CVSS、EPSS、KEV 状态、CWE、MITRE ATT&CK 映射、CAPEC——从 API 和策划的数据集中提取。不涉及 LLM。产品名称使用健壮的正则表达式启发法推导。 - **第二遍(LLM 增强)**:LLM 仅填充明确标记的定性部分(执行摘要、影响、检测、修复、升级、CWE 分析),使用确定性上下文作为基础。如果 LLM 不可用,代理会生成一个高可见性的失败通知和一个"纯静态"报告,以确保审计透明度。 ## 🔄 工作原理 ``` ┌─────────────────────────────────────────────────────────────┐ │ PASS 1: DETERMINISTIC ENGINE (Layer 1 & 2) │ │ layer1_fetcher.py ──► Fetches NVD, EPSS, KEV, CWE, MITRE │ │ layer2_engine.py ──► Generates 'static_json' │ └──────────────────────────────┬──────────────────────────────┘ │ ┌──────────────────────────────▼──────────────────────────────┐ │ PASS 2: LLM ENRICHMENT (Layer 3) │ │ layer3_enricher.py ──► Processes 'static_json' target keys │ │ (Gemini / OpenAI / Claude / Groq / Ollama) │ │ Outputs: 'enriched_json' │ └──────────────────────────────┬──────────────────────────────┘ │ ┌──────────────────────────────▼──────────────────────────────┐ │ OUTPUT (Layer 4) │ │ layer4_report_generator.py → PDF report │ │ agent_core.py → Slack / Jira / n8n / Splunk dispatch │ │ app_gemini.py → Web Dashboard at http://localhost:8080 │ └─────────────────────────────────────────────────────────────┘ ``` ## 📊 输出示例 以下是 CVE AI Agent 管道生成的输出示例: ### 📄 AI 增强的威胁报告 (PDF) ![威胁报告示例](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3b3838bb44214848.png) ### 💾 结构化 CVE 情报 (JSON) ![结构化情报示例](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/d1a166242d214848.png) ## 🚀 快速开始 ### Windows (推荐) | 脚本 | 功能 | |---|---| | `start.bat` | 启动 **完整应用**(代理 + 位于 `http://localhost:8080` 的 Web 仪表盘) | | `start_agent.bat` | **仅启动代理**(无头后台管道) | | `test.bat` | 使用模拟数据运行 **3 个 CVE 的冒烟测试** 以验证管道完整性 | 这两个启动器都会: 1. 如果不存在,则创建一个 Python 虚拟环境 (`.venv`) 2. 从 `requirements.txt` 安装所有必需的依赖项 3. 提示您选择 LLM 提供者 4. 如果缺少必需的 API 密钥,则发出警告 5. 启动应用程序 ### Docker(一键部署) **Windows**:`.\docker-start.bat` **Linux / macOS**:`chmod +x docker-start.sh && ./docker-start.sh` 仪表盘位于 `http://localhost:8080`。 ### Linux / macOS / 手动安装 ``` git clone https://github.com/gtamir02-png/cve-ai-agent.git && cd cve-ai-agent python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt export GEMINI_API_KEY="your_key_here" python app_gemini.py ``` ## 🧠 分析管道 — 文件映射 | 文件 | 层级 | 作用 | |---|---|---| | `pipeline_v2.py` | 协调器 | **主要执行管道。** 按顺序运行第 1 到第 4 层。CLI:`python pipeline_v2.py --cve CVE-2026-0300` | | `layer1_fetcher.py` | 第 1 层 | 获取原始 API 数据(NVD、EPSS、KEV、CWE CSV、MITRE 数据集)并处理回退值。 | | `layer2_engine.py` | 第 2 层 | 确定性逻辑引擎。推导分数,应用风险公式,构建带有 `[LLM NEEDED]` 占位符的 `static_json`。 | | `layer3_enricher.py` | 第 3 层 | 识别 `[LLM NEEDED]` 标签,构建最小提示,并在 `enriched_json` 中填充定性部分。 | | `layer4_report_generator.py` | 第 4 层 | 使用 ReportLab 生成 PDF 报告,根据 `enriched_json` 模式设置组件样式。如果 LLM 增强失败,包含故障警报框。 | | `layer3_attack_enricher.py` | 支持 | (已停用)原第 3b 层 AI 推导的 ATT&CK 映射。已移除以优先确保确定性完整性。 | | `mitre_attack_mapper.py` | 支持 | 三级 CWE→ATT&CK 映射器(种子数据集 → CAPEC 桥接 → LLM 回退)。 | | `llm_core.py` | 支持 | 与提供者无关的 LLM 调度器。 | | `agent_core.py` | 代理 | 自主循环。轮询 CVE,触发管道,并发送 webhook。 | | `app_gemini.py` | Web UI | Flask/Waitress Web 仪表盘和 REST API。 | ## 📊 MITRE ATT&CK 映射 — 层级优先级 `MitreAttackMapper` 严格按优先级顺序将 CWE ID 解析为 ATT&CK 技术: | 层级 | 来源 | 报告中显示的置信度 | |---|---|---| | **0** (最高) | `CWE_and_ATTACK.json` — 包含真实按技术评分的策划数据集 | 实际值,例如 `82%` | | **1** | 基于 MITRE STIX 构建的 CAPEC 桥接 (`data/attack_capec_cache.json`) | 固定 `60%` | | **2** (最低) | LLM 综合(仅在上述未找到 CWE 时作为回退) | 固定 `40%` | 报告的 **MITRE ATT&CK 映射** 部分显示一个带颜色编码的 **置信度** 列:🟢 ≥70% · 🟡 40–69% · 🔴 <40%。 ## 📄 PDF 报告结构(12 个部分) CVE 代理生成专业的 PDF 报告,并具有 **可配置的报告类型**(v2.2+)。可选择: - **`full`** — 包含静态数据和 AI 生成分析部分的完整报告(默认) - **`short`** — 仅包含关键部分的 AI 生成洞察的精简报告(针对快速决策优化) ### 完整报告模式 (`"report_type": "full"`) | # | 部分 | 静态数据 | AI 分析 | 来源 | |---|---|---|---|---| | 0 | 记分板(风险评分 · CVSS · EPSS 评分 · KEV · 行动) | ✓ | — | 确定性 | | 1 | 元数据(产品 · 触发 · 攻击面 · CWE · 补丁状态) | ✓ | — | 确定性 | | 2 | 执行摘要 | ✓ NVD 描述 | ✓ AI 分析 | LLM | | 3 | 业务与技术影响 | ✓ CVSS 指标 | ✓ AI 分析 | LLM | | 4 | SOC 分诊与可利用性 | ✓ | — | 确定性 | | 5 | 漏洞时间线 | ✓ | — | 确定性 | | 6 | 影响范围(基于 CVSS + CPE) | ✓ | — | 确定性 | | 7 | 检测指导 | ✓ 日志源 | ✓ AI 分析 | LLM | | 8 | 修复 | ✓ 补丁状态 | ✓ AI 分析 | LLM | | 9 | 升级程序 | ✓ 触发器 | ✓ AI 分析 | LLM | | 10 | MITRE ATT&CK 映射 | ✓ | — | 确定性 | | 11 | 风险分解公式 | ✓ | — | 确定性 | | 12 | 附录(CVSS 定义) | ✓ | — | 确定性 | ### 精简报告模式 (`"report_type": "short"`) 针对速度和 SOC 快速分诊优化。移除冗余的静态部分,并用 AI 生成的洞察填充关键区域: | # | 部分 | 内容 | 来源 | |---|---|---|---| | 0 | 记分板 | ✓ 所有指标 | 确定性 | | 1 | 元数据 | ✓ 所有字段 | 确定性 | | 2 | 执行摘要 | **仅 AI 分析**(替代 NVD 描述) | LLM | | 3 | 业务与技术影响 | **仅 AI 分析**(替代 CVSS 指标) | LLM | | 4 | SOC 分诊与可利用性 | ✓ 所有指标 | 确定性 | | 5 | 漏洞时间线 | ✓ 所有事件 | 确定性 | | 6 | 影响范围 | ✓ 所有数据 | 确定性 | | 7 | 检测指导 | **仅 AI 分析**(替代日志源) | LLM | | 8 | 修复 | **仅 AI 分析**(替代补丁状态) | LLM | | 9 | 升级程序 | **仅 AI 分析**(替代触发器) | LLM | | 10 | MITRE ATT&CK 映射 | ✓ 完整映射 | 确定性 | | 11 | 风险分解公式 | ✓ 完整公式 | 确定性 | | 12 | 附录 | ✓ CVSS 定义 | 确定性 | **主要区别:** - 精简报告在保留所有 LLM 洞察的同时,将页面数量减少约 30–40% - 静态确定性数据被压缩到记分板/元数据/SOC/时间线/范围部分 - 所有 5 个 LLM 部分(2、3、7、8、9)完全由 AI 生成的叙述填充 - 非常适合以 AI 建议为主要决策依据的自动化分诊工作流 ## 📁 数据文件与配置 | 文件 | 格式 | 用途 | |---|---|---| | `config.json` | JSON | 运行时配置:LLM 提供者、模型、阈值、集成、输出控制 | | `CWE_and_ATTACK.json` | JSON | **主要的 MITRE 映射和 CWE 来源。** 综合的 CWE 参考和策划的 ATT&CK 映射。 | | `CVSS_v4.0.json` | JSON | 用于报告 CVSS 附录表的 CVSS v4.0 指标缩写定义。 | | `assets.json` | JSON | 资产/产品过滤列表。当 `use_assets_filtering: true` 时,只有匹配这些资产的 CVE 才会触发分析。 | | `data/attack_capec_cache.json` | JSON | 自动生成的 MITRE ATT&CK ↔ CAPEC 桥接(首次运行时从 STIX 下载,缓存 30 天)。 | | `schema.sql` | SQL | SQLite 数据库模式定义。 | | `cves.db` | SQLite | 实时漏洞数据库(已添加到 .gitignore)。 | ## ⚙️ 配置参考 (`config.json`) ``` { "llm_provider": "gemini", // Active provider: gemini | openai | groq | claude | ollama | none "llm_models": { ... }, // Per-provider model lists and API key env vars "agent_cvss_value": 10, // Minimum CVSS score to trigger analysis "agent_min_severity": "Critical", // Severity filter "agent_cvss_operator": ">=", // Comparison operator for CVSS threshold "preferred_cvss_version": "4.0", // Prefer v4.0, fallback to v3.1/v3.0 "agent_auto_export": true, // Auto-export PDF to Exported_CVE_Reports/ "export_format": "pdf", // pdf "report_type": "short", // full | short "use_assets_filtering": false, // Filter by assets.json product list "agent_sleep_seconds": 3600, // Polling interval in seconds "dashboard_password": "change-me", // Dashboard login password (admin user) "slack_enabled": false, // Enable Slack notifications "slack_bot_token": "xoxb-...", // (Optional) Bot Token for file uploads "slack_channel_id": "C0...", // (Optional) Channel ID for file uploads "jira_enabled": false, // Enable Jira ticket creation "n8n_enabled": false, // Enable n8n webhook dispatch "splunk_enabled": false, // Enable Splunk HEC ingestion "splunk_hec_url": "", // Splunk HEC endpoint "splunk_hec_token": "", // Splunk HEC token "output_files": { // Per-run output artifact toggles "static_json": true, "enriched_json": true }, "risk_score_weights": { // Deterministic scoring weights "cvss_multiplier": 7, "epss_multiplier": 10, "kev_bonus": 15, "exploit_bonus": 5 } } ``` ### `report_type` 配置 (v2.2+) | 值 | 行为 | 使用场景 | |---|---|---| | `"full"` | **默认。** 在 LLM 区域中分别显示静态数据和 AI 分析部分。为存档/合规提供最大细节。 | 详细分诊、SOC 文档、审计跟踪 | | `"short"` | 在第 2、3、7、8、9 部分中,AI 分析替代静态数据。精简布局以加快决策。减少约 30–40% 的页面。 | 快速分诊、执行摘要、实时仪表盘 | ## 🔧 风险评分公式 ``` risk_score = min(100, cvss_base (CVSS × 7) + epss_bonus (EPSS_raw × 10) + kev_bonus (15 if KEV listed, else 0) + exploit_bonus (5 if EPSS_raw > 0.10, else 0) ) ``` ## 🤖 LLM 提供者 | 提供者 | 推荐模型 | 关键环境变量 | |---|---|---| | **Google Gemini** *(默认)* | `gemini-3-flash-preview`, `gemini-2.5-flash`, `gemini-2.5-pro` | `GEMINI_API_KEY` | | **OpenAI** | `gpt-4o`, `gpt-4o-mini` | `OPENAI_API_KEY` | | **Anthropic Claude** | `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-3-5` | `ANTHROPIC_API_KEY` | | **Groq** | `llama-3.3-70b-versatile`, `llama-3.1-70b-versatile`, `llama-3.1-8b-instant` | `GROQ_API_KEY` | | **Ollama** *(离线)* | `gemma2`, `llama3.2`, `mistral` | *(无)* | 代理会按配置列表中的顺序尝试每个模型,如果失败则回退到下一个。如果全部失败,则回退到基于规则的报告(无 LLM 部分)。 *注意:虽然推荐使用环境变量存储 API 密钥,但您也可以通过将密钥放在相应提供者下的 `"custom_key": ""` 字段中,直接在 `config.json` 中进行配置。* ## 📤 集成输出 | 集成 | 配置键 | 说明 | |---|---|---| | **Slack** | `slack_enabled` | 发送警报消息并上传 PDF/JSON 文件(需要 Bot Token)或纯文本(Webhook) | | **Jira** | `jira_enabled` | 创建带有 PDF 附件的票据 | | **n8n** | `n8n_enabled` | 向 webhook 发送完整的 JSON 载荷 | | **Splunk** | `splunk_enabled` | 向 Splunk HEC 发布结构化事件 | | **PDF 导出** | `agent_auto_export` | 自动保存到 `Exported_CVE_Reports/` | ## 🔁 重检功能 该代理包含一个自动化的重检工作流,当权威信号(NVD、EPSS、CISA KEV 或补丁状态)发生变化时,会定期重新评估先前处理过的 CVE。重检管理器执行廉价的仅第一层获取,与上次存储的快照进行差异比较,然后: - 写入新快照并重新安排 CVE 调度, - 如果低于阈值,则记录更改(不生成报告),或 - 当更改满足配置的阈值(例如,KEV 新增列表或 CVSS/EPSS 超过滤波器)时,以增量模式触发现有管道。 配置(在 `config.json` 的 `recheck` 下): - `recheck.enabled`(布尔值,默认值:`true`) - `recheck.max_age_days`(整数,默认值:`90`) - `recheck.recheck_cvss_threshold`(浮点数,默认值:`8.0`)— 控制哪些先前处理过的 CVE 被监控以进行重检,独立于主报告阈值。 - `recheck.epss_delta_threshold`(浮点数,默认值:`0.05`) - `recheck.kev_always_triggers`(布尔值,默认值:`true`) - `recheck.schedule` — 控制按风险类别重检 CVE 的频率。 实现: - `recheck_manager.py` — 独立的重检逻辑,在 `agent_core.py` 的每个轮询周期调用。它将快照写入 `cve_snapshots`,更新 `cve_recheck_queue`,并将事件记录到 `agent_events`。 - 首次在队列为空时运行,管理器会对 `cves` 表执行 CVSS 过滤扫描,并将匹配的 CVE 排队等待重检。 - 然后,队列在后续周期中处理,待处理项通过 `next_recheck` 获取,并根据观察到的变化重新安排。 ## 🔒 认证 Web 仪表盘需要密码。在首次启动前设置: ``` $env:DASHBOARD_PASS="YourSecurePass123" # Windows export DASHBOARD_PASS="YourSecurePass123" # Linux/macOS ``` 或在 `config.json` 中设置 `dashboard_password`。 ## 📋 更新日志(近期) - **v2.3 — 管道加固与高保真提取**(新功能):在 PDF 报告中添加了高可见性的红色故障警报,并包含详细的 LLM 提供者错误原因(例如 429 速率限制)。加固了用于 WordPress/Perl/Frameworks 的产品提取正则表达式。停用了第 3b 层 AI 推导的 ATT&CK 映射,以确保 MITRE 部分 100% 的确定性完整性。 - **v2.4 — 自动化重检工作流**(新功能):添加了可配置的重检管理器,当权威信号(NVD/EPSS/KEV/补丁状态)发生变化时,定期重新评估先前处理过的 CVE。详情请参阅下方的 **重检功能** 部分。 - **v2.2 — 报告类型配置**:添加了 `report_type` 配置参数(`full` | `short`)以控制 PDF 报告结构。精简报告将 5 个关键 LLM 部分压缩为仅 AI 内容,减少约 30–40% 的页面。 - **v2.1 — 稳定性与加固**:修复了第 1 层获取器中 CWE ID 为 null 时的 `NoneType` 错误;解决了长描述导致的 PDF `LayoutError`;修复了手动分析循环中的 NameError。 - **报告**:MITRE ATT&CK 部分中的"相关性"列被替换为带颜色编码的 **置信度 %** - **EPSS**:修复了分数与百分位数的分离问题;SOC 分诊现在显示 3 行(分数、百分位数、评估) - **时间线**:KEV 修复截止日期现在是一个专用的红点时间线条目 - **风险分解**:简化了公式显示;乘法器使用正确的 `×` 符号 - **LLM 配置**:更新到最新的稳定 Gemini 模型;从 Groq 列表中移除了已停用的 Mixtral
标签:AI代理, API集成, C2, CVE处理, GPT, LLM集成, Python编程, SOC级, Token优化, 两阶段架构, 可审计, 可观测性, 威胁情报, 威胁评估, 安全运营中心, 开发者工具, 数据管道, 漏洞数据, 漏洞管理, 网络安全, 网络映射, 网络调试, 自动化, 请求拦截, 软件工程, 逆向工具, 隐私保护