ayansk11/Agentic-Cybersec-Threat-Analyst
GitHub: ayansk11/Agentic-Cybersec-Threat-Analyst
基于多Agent架构的威胁情报分析平台,自动聚合多源CVE数据并通过RAG映射到MITRE ATT&CK框架,生成事件响应Playbook和Sigma检测规则
Stars: 0 | Forks: 0
# 智能网络安全威胁分析师
一个多 Agent 网络安全威胁分析系统,该系统摄取 CVE/威胁情报源,通过 RAG(检索增强生成)将其映射到 MITRE ATT&CK 技术,并生成包含 Sigma 检测规则的事件响应 Playbook。
使用 LangGraph 进行 Agent 编排,使用 Qdrant 进行向量搜索,并运行一个本地安全专用 LLM。
## 架构
```
flowchart LR
User(["User"]) --> Frontend["React Dashboard"]
Frontend -->|"SSE"| Backend["FastAPI"]
Backend --> A1["Agent 1: CVE Extractor"]
A1 --> A2["Agent 2: ATT&CK Classifier"]
A2 --> A3["Agent 3: Playbook Generator"]
NVD[("NVD")] & KEV[("CISA KEV")] & OTX[("OTX")] & TFox[("ThreatFox")] -.-> A1
A2 -->|"Hybrid Search"| Qdrant[("Qdrant")]
Qdrant -.-> MITRE["ATT&CK v18.1"]
A2 & A3 -->|"Inference"| LLM["Foundation-Sec-8B"]
style User fill:#58a6ff22,stroke:#58a6ff,color:#e6edf3
style Frontend fill:#58a6ff22,stroke:#58a6ff,color:#e6edf3
style Backend fill:#3fb95022,stroke:#3fb950,color:#e6edf3
style A1 fill:#bc8cff22,stroke:#bc8cff,color:#e6edf3
style A2 fill:#bc8cff22,stroke:#bc8cff,color:#e6edf3
style A3 fill:#bc8cff22,stroke:#bc8cff,color:#e6edf3
style NVD fill:#d2992222,stroke:#d29922,color:#e6edf3
style KEV fill:#d2992222,stroke:#d29922,color:#e6edf3
style OTX fill:#d2992222,stroke:#d29922,color:#e6edf3
style TFox fill:#d2992222,stroke:#d29922,color:#e6edf3
style Qdrant fill:#39d2c022,stroke:#39d2c0,color:#e6edf3
style LLM fill:#39d2c022,stroke:#39d2c0,color:#e6edf3
style MITRE fill:#39d2c022,stroke:#39d2c0,color:#e6edf3
```
### Agent Pipeline
| Agent | 角色 | 输出 |
|-------|------|--------|
| **CVE Extractor** | 解析 CVE ID,通过 NVD/CISA KEV/OTX/ThreatFox 进行富化,提取结构化威胁信息 | 严重程度、攻击向量、CWEs、IOCs |
| **ATT&CK Classifier** | 对 19K+ MITRE ATT&CK 分块进行 RAG,将漏洞映射到技术并附带置信度分数 | 技术 ID、战术、理由 |
| **Playbook Generator** | 生成 NIST SP 800-61 Playbook 和 Sigma YAML 检测规则 | Markdown Playbook + Sigma 规则 |
## 功能特性
- **Multi-Agent Pipeline** — 具有用于实时进度的 SSE 流式传输的顺序 LangGraph Agent
- **Hybrid RAG Search** — 在 MITRE ATT&CK 上使用 Reciprocal Rank Fusion 融合的稠密 (BGE-M3) + 稀疏向量搜索
- **Multi-Source Enrichment** — NVD API, CISA KEV 目录, AlienVault OTX Pulses, abuse.ch ThreatFox IOCs
- **Structured Output** — NIST SP 800-61 Playbook + 可直接复制使用的 Sigma 检测规则
- **Threat Feed Dashboard** — 浏览最近的 CVE、OTX Pulses 和 ThreatFox IOCs,支持严重程度过滤
- **Authentication & RBAC** — JWT + OAuth2 (Google/GitHub),具有 admin/analyst 角色和速率限制
- **Observability** — Prometheus 指标、带有请求 ID 跟踪的结构化日志、Webhook 通知
- **Local LLM** — 使用 Ollama 完全在您的机器上运行(核心功能无需 API 密钥)
## 环境要求
- **Python** 3.11+
- **Node.js** 18+ with pnpm
- **Docker** (用于 Qdrant 向量数据库)
- **Ollama** (用于本地 LLM 推理)
- 约 8 GB 磁盘空间 (用于模型 + ATT&CK 数据)
## 快速开始
### 1. 克隆并安装
```
git clone https://github.com/ayansk11/Agentic-Cybersec-Threat-Analyst.git
cd Agentic-Cybersec-Threat-Analyst
# Backend
pip install -e "backend/.[dev]"
# Frontend
cd frontend && pnpm install && cd ..
```
### 2. 启动 Qdrant
```
make qdrant
```
### 3. 拉取 LLM 模型
```
make pull-model
```
这将下载 Foundation-Sec-8B-Reasoning 模型(约 5 GB)。如果您的硬件无法运行 8B 模型,请编辑 `.env` 使用更小的模型。
### 4. 摄取 MITRE ATT&CK 数据
```
make ingest
```
下载 MITRE ATT&CK STIX v18.1 并将 19,233 个分块(技术、缓解措施、软件、组织、关系)以混合稠密+稀疏向量的形式摄取到 Qdrant 中。
### 5. 启动应用
从项目根目录打开 **3 个终端**:
```
# 终端 1:Backend
make dev
# 终端 2:Frontend
make frontend
# 终端 3:Qdrant 已在步骤 2 中运行
```
### 6. 使用应用
在浏览器中打开 **http://localhost:5173**。输入 CVE ID(例如 `CVE-2021-44228`)并点击 **Analyze**。实时观察 3-Agent Pipeline 的处理过程。
## 配置
将 `.env.example` 复制到 `.env` 并进行自定义:
**核心**
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `OLLAMA_HOST` | `http://localhost:11434` | Ollama 服务器 URL |
| `OLLAMA_MODEL` | `hf.co/fdtn-ai/Foundation-Sec-8B-Reasoning-Q4_K_M-GGUF` | 模型名称 |
| `LLM_PROVIDER` | `ollama` | LLM 提供商 (`ollama` 或 `groq`) |
| `QDRANT_HOST` | `localhost` | Qdrant 主机 |
| `QDRANT_PORT` | `6333` | Qdrant 端口 |
| `QDRANT_COLLECTION` | `mitre_attack` | Qdrant 集合名称 |
**API Keys** *(均为可选)*
| 变量 | 描述 |
|----------|-------------|
| `NVD_API_KEY` | NVD API 密钥,用于更高速率限制 |
| `OTX_API_KEY` | AlienVault OTX API 密钥(免费,启用 OTX Feed) |
| `GROQ_API_KEY` | Groq API 密钥(如果使用 Groq 提供商) |
**认证与安全** *(可选 — 若无 `JWT_SECRET`,API 将以开放访问模式运行)*
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `JWT_SECRET` | — | JWT Token 密钥(设置后启用认证) |
| `JWT_ALGORITHM` | `HS256` | JWT 签名算法 |
| `GOOGLE_CLIENT_ID` / `_SECRET` | — | Google OAuth2 凭据 |
| `GITHUB_CLIENT_ID` / `_SECRET` | — | GitHub OAuth2 凭据 |
| `COOKIE_SECURE` | `false` | 在 HTTPS 后的生产环境中设置为 `true` |
**通知** *(可选)*
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `WEBHOOK_URL` | — | 用于分析通知的 Webhook URL |
| `WEBHOOK_SEVERITY_THRESHOLD` | `HIGH` | 触发 Webhook 的最低严重程度 |
## 数据源
所有数据源均为**免费**且公开可用:
| 来源 | 提供内容 | 是否需要认证 |
|--------|-----------------|---------------|
| [NVD API 2.0](https://services.nvd.nist.gov) | CVE 详情、CVSS 评分、CWEs、参考资料 | 可选 API 密钥(更高速率限制) |
| [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) | 已知被利用漏洞及修复截止日期 | 无 |
| [MITRE ATT&CK](https://attack.mitre.org/) | 19K+ 对手战术、技术及缓解措施 (STIX v18.1) | 无 |
| [AlienVault OTX](https://otx.alienvault.com/) | 社区威胁 Pulses、IOCs、恶意软件样本 | 免费 API 密钥 |
| [abuse.ch ThreatFox](https://threatfox.abuse.ch/) | 恶意软件 IOCs (IPs, domains, URLs, hashes) | 无 |
## API 参考
| 方法 | 端点 | 描述 |
|--------|----------|-------------|
| `GET` | `/` | API 信息 |
| `GET` | `/api/health` | 服务连接状态 |
| `GET` | `/api/stats` | Qdrant 知识库统计 + 服务状态 |
| `GET` | `/api/cve/{cve_id}` | 从 NVD 获取 CVE 详情 |
| `POST` | `/api/analyze` | 运行完整分析(返回完整结果) |
| `POST` | `/api/analyze/stream` | 通过 SSE 流式传输运行完整分析 |
| `GET` | `/api/feed/recent` | 来自 NVD 的最新 CVE |
| `GET` | `/api/feed/otx` | 最新 OTX 威胁 Pulses |
| `GET` | `/api/feed/threatfox` | 最新 ThreatFox IOCs |
| `GET` | `/api/analysis/history` | 分析历史(分页) |
| `GET` | `/api/analysis/{id}` | 按 ID 获取分析 |
| `POST` | `/api/auth/register` | 注册新用户 |
| `POST` | `/api/auth/login` | 使用邮箱/密码登录 |
| `POST` | `/api/auth/refresh` | 刷新访问令牌 |
| `POST` | `/api/auth/logout` | 登出并撤销令牌 |
| `GET` | `/api/auth/me` | 当前用户资料 |
| `GET` | `/api/auth/providers` | 可用的认证提供商 |
| `GET` | `/api/auth/oauth/{provider}/login` | OAuth2 登录重定向 |
| `GET` | `/api/auth/admin/users` | 列出用户(仅限管理员) |
| `PATCH` | `/api/auth/admin/users/{id}` | 更新用户角色/状态(管理员) |
## 运行测试
```
# 运行所有 150 个 Backend 测试
make test
```
测试覆盖:
- Agent Pipeline(状态、JSON 解析、带有模拟 LLM 的所有 3 个 Agent)
- 端到端 Pipeline 集成(带有模拟外部服务的完整 3-Agent 流程)
- 数据摄取(NVD, CISA KEV, OTX, ThreatFox 解析器)
- RAG Pipeline(所有实体类型的分块器)
- API 端点(带有模拟依赖项的所有路由)
- 认证(JWT, OAuth2, 密码哈希, Token 管理)
- 数据库持久化(SQLite CRUD, 历史, 聚合)
- 缓存层(TTL 缓存命中/未命中)
- Webhooks(阈值过滤、HTTP 分发)
- 速率限制、日志、指标
- Schema 验证(Pydantic 模型)
## Docker 部署
使用 Docker Compose 部署完整技术栈:
```
# 构建并启动所有服务 (Qdrant + Backend + Frontend)
make docker-up
# 将 ATT&CK 数据导入容器化的 Qdrant
make docker-ingest
# 查看日志
make docker-logs
# 停止所有服务
make docker-down
```
Frontend 通过 nginx 在 80 端口提供服务,并将 API 请求代理到 Backend。Ollama 在主机上运行 — Backend 容器通过 `host.docker.internal` 连接到它。
## 项目结构
```
Agentic-Cybersec-Threat-Analyst/
├── backend/
│ ├── main.py # FastAPI entry point
│ ├── config.py # Settings (Pydantic BaseSettings)
│ ├── db.py # SQLite persistence (analyses)
│ ├── db_users.py # User/token/settings CRUD
│ ├── cache.py # In-memory TTL caching
│ ├── webhooks.py # Severity-based webhook dispatch
│ ├── mailer.py # Async SMTP email (verification, reset)
│ ├── metrics.py # Prometheus counters + histograms
│ ├── logging_config.py # Structured logging + request IDs
│ ├── agents/
│ │ ├── state.py # LangGraph shared state (TypedDict)
│ │ ├── graph.py # LangGraph StateGraph wiring
│ │ ├── cve_extractor.py # Agent 1: CVE extraction + enrichment
│ │ ├── attack_classifier.py # Agent 2: ATT&CK mapping via RAG
│ │ └── playbook_generator.py # Agent 3: Playbook + Sigma generation
│ ├── rag/
│ │ ├── embedder.py # BGE-M3 dense+sparse encoding
│ │ ├── retriever.py # Hybrid search with RRF fusion
│ │ ├── qdrant_store.py # Qdrant client + upsert
│ │ └── chunker.py # Entity-level chunking
│ ├── ingestion/
│ │ ├── ingest_attack.py # MITRE ATT&CK STIX ingestion
│ │ ├── mitre_loader.py # STIX bundle parser
│ │ ├── nvd_fetcher.py # NVD API 2.0 client
│ │ ├── cisa_kev.py # CISA KEV catalog
│ │ ├── otx_fetcher.py # AlienVault OTX client
│ │ └── abusech_fetcher.py # abuse.ch ThreatFox client
│ ├── api/
│ │ ├── routes.py # REST + SSE endpoints
│ │ ├── schemas.py # Pydantic request/response models
│ │ ├── auth.py # JWT + API key auth dependency
│ │ ├── auth_routes.py # Auth endpoints (register, login, OAuth)
│ │ ├── oauth.py # Google + GitHub OAuth2 providers
│ │ └── rate_limit.py # Per-user/IP rate limiting
│ └── tests/ # 150 tests
│ ├── conftest.py
│ ├── test_agents.py
│ ├── test_api.py
│ ├── test_auth.py
│ ├── test_cache.py
│ ├── test_db.py
│ ├── test_e2e.py
│ ├── test_ingestion.py
│ ├── test_logging.py
│ ├── test_metrics.py
│ ├── test_rag.py
│ ├── test_rate_limit.py
│ └── test_webhooks.py
├── frontend/
│ └── src/
│ ├── App.tsx # Main app with routing
│ ├── components/
│ │ ├── Dashboard.tsx # System status + KB stats + charts
│ │ ├── ThreatFeed.tsx # NVD/OTX/ThreatFox feed tabs
│ │ ├── AnalysisView.tsx # CVE analysis + results display
│ │ ├── LoginPage.tsx # Auth UI (login/register/OAuth)
│ │ ├── AdminUsersPage.tsx # User management (admin)
│ │ ├── SettingsPage.tsx # Webhook + SMTP configuration
│ │ ├── Layout.tsx # App shell with sidebar
│ │ └── UserMenu.tsx # User info + logout
│ ├── contexts/AuthContext.tsx # Auth state + token management
│ ├── api/client.ts # API client with token refresh
│ ├── hooks/useSSE.ts # SSE streaming hook
│ └── types/index.ts # TypeScript interfaces
├── .github/workflows/ci.yml # CI pipeline (lint, test, build)
├── docker-compose.yml # Qdrant + Backend + Frontend + Prometheus
├── Dockerfile.backend
├── Dockerfile.frontend
├── nginx.conf # Nginx reverse proxy + SSE support
├── prometheus.yml # Prometheus scrape config + alerts
├── alert_rules.yml # Prometheus alerting rules
├── Makefile # Dev + Docker commands
└── data/ # Downloaded STIX bundles
```
## 安全
- **JWT Authentication** — 访问令牌(15 分钟)+ 刷新令牌(7 天),支持轮换
- **OAuth2** — Google 和 GitHub SSO,具有 CSRF 状态保护
- **RBAC** — Admin 和 Analyst 角色,具有按端点访问控制
- **Rate Limiting** — 按用户/IP 限制(5 次分析/分钟,30 次 Feed 请求/分钟)
- **Password Security** — bcrypt 哈希、邮箱验证、安全密码重置流程
- **API Key Fallback** — 支持传统的 `X-API-Key` Header 以保持向后兼容性
当未配置 `JWT_SECRET` 时,API 以开放访问模式运行,并使用合成 Admin 用户以方便开发。
## 技术栈
**Backend:** Python 3.13, FastAPI, LangGraph, LangChain, Qdrant, BGE-M3, Pydantic
**Frontend:** React 19, TypeScript, Vite, Tailwind CSS 4, Recharts, Lucide Icons
**Infrastructure:** Ollama (Foundation-Sec-8B-Reasoning), Qdrant (Hybrid 向量 DB), Docker, nginx, Prometheus
标签:AI风险缓解, API接口, AV绕过, CISA项目, Cloudflare, CSV导出, CVE分析, DNS 反向解析, FastAPI, FTP漏洞扫描, GitHub, GPT, HTTP工具, IP 地址批量处理, LangGraph, MITRE ATT&CK, Modbus, Mr. Robot, PE 加载器, Playbook生成, PyRIT, Qdrant, RAG, React, Sigma规则, StruQ, Syscalls, Web报告查看器, 人工智能, 后渗透, 向量数据库, 多智能体系统, 威胁情报, 子域名变形, 安全编排, 实时处理, 密码管理, 开发者工具, 数据包嗅探, 数据集, 无线安全, 模拟器, 漏洞管理, 用户模式Hook绕过, 目标导入, 知识库安全, 网络信息收集, 网络安全, 网络安全审计, 自动化响应, 自定义请求头, 请求拦截, 逆向工具, 隐私保护