aadarshkadam067/prod-siem

GitHub: aadarshkadam067/prod-siem

一个本地部署的 AI 驱动 SOC SIEM 平台,利用 LLM 实现告警自动分诊与 SOAR 响应。

Stars: 1 | Forks: 0


``` ██████╗ ██████╗ ██████╗ ██████╗ ███████╗██╗███████╗███╗ ███╗ ██╔══██╗██╔══██╗██╔═══██╗██╔══██╗ ██╔════╝██║██╔════╝████╗ ████║ ██████╔╝██████╔╝██║ ██║██║ ██║█████╗███████╗██║█████╗ ██╔████╔██║ ██╔═══╝ ██╔══██╗██║ ██║██║ ██║╚════╝╚════██║██║██╔══╝ ██║╚██╔╝██║ ██║ ██║ ██║╚██████╔╝██████╔╝ ███████║██║███████╗██║ ╚═╝ ██║ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝╚══════╝╚═╝ ╚═╝ ``` ### AI 驱动的安全运营中心 — 本地部署,一键启动 *摄入告警 → 跨 MITRE ATT&CK 杀伤链关联 → LLM 分类与理由 → 自动 SOAR 响应 → 关闭案例。全部无需人工介入。*
[![Python](https://img.shields.io/badge/Python-3.11%2B-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://python.org) [![FastAPI](https://img.shields.io/badge/FastAPI-0.115-009688?style=for-the-badge&logo=fastapi&logoColor=white)](https://fastapi.tiangolo.com) [![React](https://img.shields.io/badge/React-18-61DAFB?style=for-the-badge&logo=react&logoColor=black)](https://react.dev) [![Elasticsearch](https://img.shields.io/badge/Elasticsearch-8.13-005571?style=for-the-badge&logo=elasticsearch&logoColor=white)](https://elastic.co) [![Docker](https://img.shields.io/badge/Docker-Compose-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https://docker.com) [![Groq](https://img.shields.io/badge/Groq-LLaMA_3.3_70B-F55036?style=for-the-badge)](https://console.groq.com) [![License](https://img.shields.io/badge/License-MIT-22c55e?style=for-the-badge)](LICENSE)
## 目录 - [问题与挑战](#the-problem) - [截图展示](#screenshots) - [架构设计](#architecture) - [为何选择此技术栈](#why-this-stack) - [数据管道如何工作](#how-the-pipeline-works) - [AI 实际返回内容](#what-the-ai-actually-returns) - [核心功能](#features) - [前置条件](#prerequisites) - [快速开始](#quick-start) - [API 参考](#api-reference) - [攻击场景](#attack-scenarios-32-total) - [项目结构](#project-structure) - [常见问题](#troubleshooting) - [已知限制](#known-limitations) - [路线图](#roadmap) - [关于项目](#about-the-project) ## 问题与挑战 典型的企业 SOC 每天接收 **数千条告警**。其中大多数是误报或低优先级噪声。初级分析师将 70% 的时间用于第一轮分类:阅读上下文、关联事件、判断严重性、选择响应剧本。这一过程重复、规则化且令人疲惫。它正是 LLM 擅长处理的任务。 **prod-siem** 自动化了完整的首轮分类流程: 1. **摄入**:通过 REST API 接收任意来源的原始安全事件 2. **关联**:使用基于 Redis 的有状态规则实时与 MITRE ATT&CK 杀伤链模式关联 3. **发送**:将每个 HIGH/CRITICAL 告警提交给 Groq 的 LLaMA 3.3 70B 模型,附带结构化的三级 SOC 分析师提示 4. **接收**:返回严重性判定、置信度分数、自然语言推理、MITRE 技术映射、提取的 IOC 以及待执行的 SOAR 动作列表 5. **执行**:自动执行这些动作 — 在 TheHive 中创建案例、通过 Cortex 丰富 IOC、推送威胁情报至 MISP、生成 PDF 事件报告,并关闭或升级案例 6. **流式传输**:通过 WebSocket 实时将全部内容推送到 10 页的 React 仪表板 打开仪表板的分析师会看到已预分类的案例,并附带完整的 AI 推理。他们只需关注真正需要人工判断的 5% 告警。 ## 截图展示 | 运营仪表板 | 告警管理 | |:---:|:---:| | ![仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c3762c6f91124034.png) | ![告警](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/067f28c608124035.png) | | 实时指标、严重性分布、24 小时告警时间线、AI 决策计数。 | 实时告警流,带严重性标签、源 IP、状态跟踪与一键 AI 触发。 | | AI 决策引擎 | MITRE 杀伤链时间线 | |:---:|:---:| | ![AI 引擎](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/37e9c2e8da124036.png) | ![时间线](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/8974e20c71124037.png) | | 每个告警的完整 LLM 推理 — 决策、置信度仪表、MITRE 映射、IOC、遏制步骤。 | 跨全部 12 个 ATT&CK 阶段的交互式杀伤链可视化。点击任意阶段可深入查看事件。 | | IOC 情报 | 系统指标 | |:---:|:---:| | ![IOC](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/657209bc65124038.png) | ![指标](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/060a71a972124039.png) | | 跨所有 AI 分析聚合的 IP、域名、文件哈希、URL。 | 全部 6 个服务加上 Elasticsearch 集群状态的实时健康状态。 | ## 架构设计 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ INGESTION LAYER │ │ │ │ Continuous Generator APT Simulator External Sources │ │ (32 attack scenarios) (7-stage kill-chain) (any HTTP source) │ │ │ │ │ │ │ └──────────────────────┴──────────────────────┘ │ │ │ │ │ POST /api/v1/alerts/ingest │ └─────────────────────────────────┬───────────────────────────────────┘ │ ┌─────────────────────────────────▼───────────────────────────────────┐ │ FASTAPI BACKEND │ │ │ │ ┌─────────────────┐ ┌──────────────────┐ ┌────────────────┐ │ │ │ Correlation │ │ AI Engine │ │ Case Manager │ │ │ │ Engine │───▶│ (Groq LLaMA │───▶│ (ES + TheHive)│ │ │ │ (MITRE + │ │ 3.3 70B) │ │ │ │ │ │ kill-chain) │ │ │ │ │ │ │ └─────────────────┘ └──────────────────┘ └────────────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ Redis Alert Queue Action Executor PDF Generator │ │ ├─ TheHive (cases) (ReportLab) │ │ ├─ Cortex (IOC enrich) │ │ └─ MISP (threat intel) │ └──────────────────────────────────┬──────────────────────────────────┘ │ WebSocket broadcast on every event │ ┌──────────────────────────────────▼──────────────────────────────────┐ │ REACT DASHBOARD (10 Pages) │ │ │ │ Dashboard │ Alerts │ Cases │ AI Engine │ Kill Chain │ IOC Intel │ │ Activity Log │ Live Logs │ Reports │ System Metrics │ └─────────────────────────────────────────────────────────────────────┘ ``` ## 为何选择此技术栈 每个关键技术选型都旨在解决特定问题。此处无意引入供应商锁定。 | 组件 | 选择原因 | |------|----------| | **FastAPI + Uvicorn** | **原生 WebSocket 支持**,实现无需轮询的实时仪表板更新。异步运行时使单个工作进程可同时维持数百个 WebSocket 连接,同时继续服务 REST 请求。自动生成的 Swagger 文档位于 `/docs`。 | | **Groq + LLaMA 3.3 70B** | **推理速度**。在 Groq 上,三级 SOC 分析师提示可在 2 秒内返回结构化 JSON — 比 GPT-4 或 Claude API 快数个数量级。免费额度提供每日 14,400 次请求,足以应对真实 SOC 的 HIGH/CRITICAL 队列。 | | **Elasticsearch** | **对原始日志和案例笔记的全文搜索** 是本项目不可或缺的数据库功能。ES 同时处理告警索引、案例索引与事件索引,语义一致且客户端统一。 | | **Redis** | **在单个进程中完成三项任务**:AI 工作队列(`BLPOP siem:alerts:pending`)、有状态关联窗口(认证失败计数、横向移动主机集合)以及 WebSocket 发布/订阅骨干。替换它需要三个独立系统。 | | **React 18 + Vite + Tailwind** | **Vite 的热重载** 使仪表板迭代近乎即时。Tailwind 避免了通常困扰 10 页管理 UI 的 CSS 膨胀。Zustand 处理全局状态而无需 Redux 的仪式感。 | | **TheHive 5 + Cortex 3** | **行业标准事件响应平台**。使用真实的 TheHive(而非模拟)意味着案例流程、可观测类型、TLP 级别与分析器执行均符合真实 SOC 预期,而非概念验证外壳。 | | **独立的 AI 守护进程** | **隔离性**。AI 引擎作为独立进程(`ai_engine/decision_engine.py`)在 Redis 上阻塞。若其崩溃,FastAPI 后端仍可继续服务告警与仪表板。若后端重启,队列等待。各组件可独立扩展。 | | **Docker Compose(非 k8s)** | **一键启动完整堆栈**。招聘人员应能运行 `./setup.sh` 并在 10 分钟内看到效果 — 无需配置集群。生产部署可替换为 Helm。 | ## 数据管道如何工作 每个进入系统的告警按以下精确顺序流转: 1. **摄入**:告警到达 `POST /api/v1/alerts/ingest`。API 分配唯一 `ALERT-{hex}` ID 并写入内存缓存(200 项 LRU),以便仪表板即时可见。 2. **关联**:`CorrelationEngine` 在基于 Redis 的有状态计数器上评估事件: - `auth_fail` × 20+(5 分钟内同 IP)→ `BRUTE_FORCE` - SMB/RDP/WMI 在 1 小时内访问 ≥4 不同主机 → `LATERAL_MOVEMENT` - `large_upload` 事件 → 立即 `DATA_EXFILTRATION` 每个关联告警附加 MITRE 技术 ID。 3. **持久化**:通过 FastAPI `BackgroundTasks` 将告警索引至 Elasticsearch — 非阻塞,确保仪表板速度不受 ES 负载影响。 4. **排队供 AI 分析**:`HIGH` 与 `CRITICAL` 告警推入 Redis 列表 `siem:alerts:pending`。 5. **广播**:`new_alert` WebSocket 事件在约 50 毫秒内送给所有连接的仪表板。 6. **AI 分析**:独立守护进程(`ai_engine/decision_engine.py`)阻塞读取 Redis 队列。对每条告警,调用 `ClaudeSOCAnalyst.analyze_alert()` 将完整告警上下文提交至 Groq,附带结构化的三级 SOC 分析师提示(温度 0.1,最大 2048 令牌,强制 JSON 输出)。 7. **动作执行**:`ActionExecutor.execute_all()` 顺序执行 AI 返回的每个动作: - `create_thehive_case` → TheHive v5 API - `enrich_ioc_cortex` → Cortex 分析器(AbuseIPDB、VirusTotal、URLhaus) - `push_misp` → MISP 威胁事件创建 - `generate_report` → ReportLab PDF 生成 每个动作失败时优雅降级,不阻塞其他动作。 8. **持久化与广播结果**:Elasticsearch 中的告警记录更新为完整的 AI 分析结果。广播 `ai_decision` WebSocket 事件至所有仪表板。 **降级行为**:若 Groq API 不可用或返回格式错误的 JSON,`_fallback_analysis()` 返回模拟的 `escalate` 决策,置信度为 0 并标记为需人工审查。管道绝不会静默丢弃任何告警。 ## AI 实际返回内容 每次分析均返回以下精确的 JSON 架构: ``` { "severity": "CRITICAL", "confidence": 92, "decision": "escalate", "mitre_techniques": ["T1003.001", "T1055"], "attack_phase": "Credential Access", "threat_actor": "Unknown — consistent with commodity RAT operator", "iocs": { "ips": ["10.10.1.42"], "domains": [], "hashes": ["a3f1c2b4..."], "urls": [], "emails": [] }, "investigation_notes": "LSASS process accessed with 0x1fffff rights by powershell.exe. This matches Mimikatz sekurlsa::logonpasswords execution pattern. Source host has prior indicators of compromise in this session.", "business_impact": "Full domain credential compromise possible. All accounts on this host should be considered compromised.", "recommended_containment": [ "Isolate WORKSTATION-42 from network immediately", "Force password reset for all accounts on affected host", "Revoke Kerberos tickets issued in last 4 hours" ], "actions": ["create_thehive_case", "enrich_ioc_cortex", "generate_report"], "escalation_reason": "Active credential theft in progress with lateral movement history" } ``` **提示词强制执行的决策逻辑:** | 严重性 | 决策 | 动作 | |--------|------|------| | `CRITICAL` / `HIGH` | `escalate` | 全部四项(案例 + Cortex + MISP + PDF) | | `MEDIUM` | `monitor` 或 `escalate` | 案例 + PDF | | `LOW` | `close` 并附带 `close_reason` | 无 | 这意味着低优先级噪声将被自动分类并关闭,无需分析师参与,显著降低队列深度。 ## 核心功能 ### 核心数据管道 - 通过 REST API 实时摄入告警 — 接受任意 JSON 载荷 - 基于 Redis 的时间窗口有状态 MITRE ATT&CK 关联 - LLM 分类 — LLaMA 3.3 70B 判定与置信度、推理、MITRE 映射 - 自动 SOAR — 案例创建、IOC 丰富、威胁情报推送、PDF 报告、案例关闭 - WebSocket 流式传输 — 每个事件在约 50 毫秒内广播至所有仪表板 - 内存缓存 — 即使在 Elasticsearch 负载下,仪表板仍保持响应 - 优雅降级 — 所有集成均为可选;若 FastAPI/Redis 存活,系统仍可运行 ### 仪表板(10 页) | 页面 | 显示内容 | |------|----------| | **运营仪表板** | 实时指标、严重性分布、24 小时告警时间线、攻击类型分布 | | **告警管理** | 完整告警表格、筛选器、严重性徽章、一键 AI 触发、注入测试告警 | | **案例管理** | 案例生命周期 — 查看、添加备注、更改状态、手动关闭 | | **AI 决策引擎** | 每个告警的推理卡片、置信度仪表、MITRE 标签、IOC 列表、遏制步骤 | | **杀伤链时间线** | 交互式 MITRE ATT&CK 阶段可视化 — 点击任意阶段可深入查看事件 | | **IOC 情报** | 跨所有 AI 分析聚合的指标(IP、域名、哈希、URL) | | **活动日志** | 全系统审计追踪 — 每个告警、AI 决策、案例动作的时间线视图 | | **实时日志** | 实时日志流,带级别筛选与搜索 | | **事件报告** | AI 生成的 PDF 报告 — 按案例查看与下载 | | **系统指标** | 全部 6 个集成服务的实时健康状态 + Elasticsearch 集群状态 | ### 攻击模拟 - **持续生成器** — 32 种攻击场景,按真实世界频率加权(40% 低危、35% 中危、18% 高危、7% 严重),每 45–120 秒生成一批 - **APT 杀伤链模拟器** — 完整 7 阶段攻击序列(初始访问 → 执行 → 持久化 → 凭据访问 → 横向移动 → 收集 → 泄密) ### 集成(可选) - **TheHive 5** — 完整案例生命周期:创建、添加可观测对象、任务日志、关闭 - **Cortex 3.1** — 通过 AbuseIPDB、VirusTotal、URLhaus 分析器丰富 IOC - **MISP** — 将提取的 IOC 作为结构化威胁情报事件推送 ## 前置条件 | 要求 | 最低要求 | 说明 | |------|----------|------| | 操作系统 | Kali Linux / Ubuntu 22.04+ | 已在两者上测试 | | 内存 | 4 GB | 推荐 8 GB 以完整 SOAR 堆栈 | | 磁盘 | 20 GB | Elasticsearch 数据 | | Python | 3.11+ | 已测试 3.11、3.12、3.13 | | Node.js | 18+ | 用于前端开发服务器 | | Docker | 24+ 且 Compose v2 | 使用 `docker compose` 而非 `docker-compose` | | Groq API 密钥 | 免费 | [在此获取](https://console.groq.com/keys) — 每日 14,400 次请求免费 | ## 快速开始 ### 1. 克隆 ``` git clone https://github.com/aadarshkadam067/prod-siem.git cd prod-siem ``` ### 2. 配置 ``` cp .env.example .env nano .env ``` 唯一必需的值是 `GROQ_API_KEY`。其余内容均有可用默认值: ``` # 必需 — 在 https://console.groq.com/keys 获取免费密钥 GROQ_API_KEY=gsk_your_key_here # 默认 — 本地设置无需更改 ELASTICSEARCH_URL=http://localhost:9200 ELASTICSEARCH_USER=elastic ELASTICSEARCH_PASSWORD=changeme REDIS_URL=redis://localhost:6379 # 可选 — 仅适用于完整的 SOAR 栈 THEHIVE_API_KEY= CORTEX_API_KEY= MISP_API_KEY= ``` ### 3. 安装 ``` chmod +x setup.sh run.sh health_check.sh stop.sh ./setup.sh ``` `setup.sh` 处理全部流程:预检、端口冲突检测、Docker 权限、Elasticsearch 的 `vm.max_map_count`、Python 虚拟环境、pip 安装、Docker 镜像、堆栈启动、ES 索引初始化。 ### 4. 打开 | 服务 | URL | |------|-----| | **仪表板** | http://localhost:5173 | | **API 文档** | http://localhost:8000/docs | | **Kibana** | http://localhost:5601(可选) | | **TheHive** | http://localhost:9000(仅 `--full`) | | **Cortex** | http://localhost:9001(仅 `--full`) | 告警自动生成。点击 **“注入测试告警”** 可手动触发完整管道。 ### 5. 验证 ``` ./health_check.sh ``` 预期输出: ``` ✔ Elasticsearch container ✔ Redis container ✔ Elasticsearch API ✔ FastAPI backend ✔ FastAPI health status ✔ Redis ping ✔ Groq AI responding ✔ Index: siem-alerts ✔ Index: siem-events ✔ Index: siem-cases ✔ All systems operational ``` ### 6. 停止 ``` ./setup.sh --stop ``` ### 完整 SOAR 堆栈(可选) ``` ./setup.sh --full # adds TheHive + Cortex + Cassandra (~8 GB RAM) ``` ## 手动触发 AI 分类 ``` # 对队列中的所有 HIGH/CRITICAL 告警运行 AI 分析 source venv/bin/activate python3 - << 'EOF' import httpx, time alerts = httpx.get("http://localhost:8000/api/v1/alerts?limit=50").json().get("alerts", []) critical = [a for a in alerts if a.get("severity") in ("CRITICAL", "HIGH")] for a in critical: httpx.post(f"http://localhost:8000/api/v1/ai/analyze/{a['id']}", timeout=10) print(f" Queued: {a['id']} [{a['severity']}]") time.sleep(2) EOF ``` 或运行 APT 模拟器以注入完整的多阶段攻击: ``` python3 soc_simulation/apt_simulator.py --verbose ``` ## API 参考 完整的交互式 Swagger 文档位于 **http://localhost:8000/docs** | 方法 | 端点 | 描述 | |------|------|----------| | `GET` | `/health` | 活跃度 + 组件状态 | | `WS` | `/ws` | WebSocket 流 — `new_alert`、`ai_decision`、`case_updated` | | `POST` | `/api/v1/alerts/ingest` | 摄入安全告警 | | `GET` | `/api/v1/alerts` | 列出告警(可选状态过滤) | | `POST` | `/api/v1/ai/analyze/{alert_id}` | 触发 AI 分类(异步) | | `GET` | `/api/v1/cases` | 列出所有事件案例 | | `GET` | `/api/v1/cases/{id}` | 案例详情(含 AI 分析) | | `POST` | `/api/v1/cases/{id}/notes` |分析师调查备注 | | `POST` | `/api/v1/cases/{id}/close` | 关闭案例并附带解决说明 | | `GET` | `/api/v1/cases/{id}/report` | 下载 PDF 事件报告 | | `GET` | `/api/v1/cases/{id}/iocs` | 该案例提取的 IOC 列表 | | `GET` | `/api/v1/stats` | 仪表板聚合计数 | | `GET` | `/api/v1/metrics` | 系统性能指标 | | `GET` | `/api/v1/activity` | 最近系统活动日志 | | `GET` | `/api/v1/system/status` | 全部 6 个集成服务的健康状态 | ### 示例:摄入 + 分类 ``` # 摄入 ALERT_ID=$(curl -s -X POST http://localhost:8000/api/v1/alerts/ingest \ -H "Content-Type: application/json" \ -d '{ "source": "edr", "event_type": "credential_dump", "severity": "CRITICAL", "source_ip": "10.10.1.42", "raw_log": "procdump.exe -ma lsass.exe detected on WORKSTATION-42" }' | python3 -c "import sys,json; print(json.load(sys.stdin)['alert_id'])") # 触发 AI 分诊 curl -X POST http://localhost:8000/api/v1/ai/analyze/$ALERT_ID ``` ## 攻击场景(总计 32 种)
初始访问(6) | 场景 | 技术 | |------|------| | `email_phishing` | T1566 — 钓鱼 | | `auth_fail` / `auth_success` | T1078 — 有效账户 | | `rdp_external` | T1021.001 — 远程桌面协议 | | `vpn_connect` | T1133 — 外部远程服务 | | `impossible_travel` | T1078.004 — 云账户 | | `usb_connect` | T1200 — 硬件添加 |
执行(3) | 场景 | 技术 | |------|------| | `powershell_exec` | T1059.001 — PowerShell | | `macro_blocked` | T1204.002 — 恶意文件 | | `malware_detected` | T1204 — 用户执行 |
持久化(3) | 场景 | 技术 | |------|------| | `scheduled_task_abuse` | T1053.005 — 计划任务 | | `persistence_registry` | T1547.001 — 注册表运行键 | | `software_install` | T1574 — 执行流程劫持 |
凭据访问(6) | 场景 | 技术 | |------|------| | `credential_dump` | T1003.001 — LSASS 内存 | | `password_spray` | T1110.003 — 密码喷洒 | | `brute_force` | T1110 — 暴力破解 | | `kerberoasting` | T1558.003 — Kerberoasting | | `golden_ticket` | T1558.001 — Golden Ticket | | `dcsync_attack` | T1003.006 — DCSync |
权限提升与发现(3) | 场景 | 技术 | |------|------| | `new_local_admin` | T1136.001 — 本地账户 | | `port_scan` | T1046 — 网络服务发现 | | `scheduled_scan` | T1518 — 软件发现 |
横向移动(3) | 场景 | 技术 | |------|------| | `lateral_movement` | T1021 — 远程服务 | | `wmi_lateral_movement` | T1021.006 — Windows 远程管理 | | `rdp_session` | T1021.001 — 远程桌面协议 |
收集、C2、泄密与影响(8) | 场景 | 技术 | |------|------| | `data_staging` | T1074 — 数据暂存 | | `sensitive_file_access` / `file_access` | T1005 — 来自本地系统的数据 | | `dns_query`(隧道) | T1071.004 — DNS | | `data_exfiltration` | T1041 — 通过 C2 通道泄密 | | `ransomware_indicator` | T1486 — 数据加密以影响 | | `certificate_expiry` | (运行态) |
## 项目结构 ``` prod-siem/ │ ├── main.py # FastAPI app — 15 endpoints, WebSocket, lifespan │ ├── ai_engine/ │ ├── claude_analyst.py # Groq LLM client — structured JSON SOC analysis │ ├── decision_engine.py # Redis-polling autonomous AI daemon │ ├── action_executor.py # Executes AI decisions: TheHive + Cortex + MISP + PDF │ └── prompts.py # Tier-3 SOC analyst system prompt │ ├── detection_engine/ │ ├── correlation.py # Stateful MITRE ATT&CK correlation (Redis-backed) │ ├── sigma_rules/ # Sigma rule directory (extensible) │ └── yara_rules/ # YARA rule directory (extensible) │ ├── soc_workflow/ │ └── case_manager.py # Elasticsearch case lifecycle: create → escalate → close │ ├── soc_simulation/ │ ├── continuous_generator.py # 32-scenario weighted realistic alert stream │ └── apt_simulator.py # Multi-stage APT kill chain injector │ ├── integrations/ │ ├── thehive_client.py # TheHive 5 API: cases, observables, task logs │ ├── cortex_client.py # Cortex 3.1: submit IOC → poll → extract verdict │ └── misp_client.py # MISP: create events with attributes from IOCs │ ├── incident_response/ │ └── report_generator.py # ReportLab PDF: summary, MITRE table, IOC table, containment │ ├── frontend/ │ ├── src/ │ │ ├── pages/ # 10 pages (Dashboard, Alerts, Cases, AI, Timeline...) │ │ ├── components/ # Sidebar (live service dots), Topbar (WS indicator) │ │ ├── services/api.js # All 15 API calls in one place │ │ ├── store/index.js # Zustand global state │ │ └── hooks/ │ │ ├── usePolling.js # Generic polling hook with configurable interval │ │ └── useWebSocket.js # WS connection with auto-reconnect + event routing │ ├── tailwind.config.js │ └── vite.config.js │ ├── scripts/ │ └── setup_indexes.py # Create ES indexes with proper field mappings │ ├── docker-compose.yml # ES + Redis + (--full: TheHive + Cortex + Cassandra) ├── setup.sh # Full automated setup — idempotent, retry logic ├── run.sh # Start backend + AI daemon ├── health_check.sh # Component-by-component verification ├── stop.sh # Graceful shutdown ├── requirements.txt # Pinned Python dependencies └── .env.example # Environment template with comments ``` ## 端到端工作流示例 ``` 1. Alert ingested → ALERT-A9B641D5 created, cached, broadcast 2. Correlation evaluated → No multi-event rules triggered (single event) 3. AI queue → Pushed to siem:alerts:pending 4. AI analysis complete → CRITICAL / ESCALATE / 94% confidence 5. TheHive case created → CASE-A1B2C3D4 (status: New) 6. Task log added → AI investigation notes written to case 7. IOC enriched → 10.10.1.42 → AbuseIPDB → MALICIOUS (confidence 100) 8. PDF generated → reports/INCIDENT_ALERT-A9B641D5_20260325_174245.pdf 9. Case status → escalated / InProgress 10. WebSocket event → ai_decision broadcast to all frontend clients ``` 总耗时通常不到 5 秒,从摄入到仪表板更新。 ## 常见问题
Elasticsearch 无法启动 / 连接超时 ``` # ES 必需的内核设置 sudo sysctl -w vm.max_map_count=262144 # 永久生效 echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf # 如果 RAM 不足 (<8GB),请降低 ES 堆内存 sed -i 's/ES_JAVA_OPTS=.*/ES_JAVA_OPTS=-Xms512m -Xmx512m/' docker-compose.yml docker compose restart elasticsearch sleep 30 curl -u elastic:changeme http://localhost:9200/_cluster/health ```
FastAPI 健康检查失败 ``` # 检查实际错误 tail -30 logs/backend.log # 测试 main.py 是否无错误加载 source venv/bin/activate python3 -c "import main" # 干净重启 ./setup.sh --stop && ./setup.sh ```
Groq AI 无响应 ``` source venv/bin/activate python3 -c " from groq import Groq; import os; from dotenv import load_dotenv; load_dotenv() c = Groq(api_key=os.getenv('GROQ_API_KEY')) print(c.chat.completions.create( model='llama-3.3-70b-versatile', max_tokens=10, messages=[{'role':'user','content':'ping'}] ).choices[0].message.content) " ```
TheHive 返回 401 或连接拒绝 ``` docker logs thehive --tail=30 # TheHive 在 Cassandra 启动后需要 2-3 分钟 watch -n 10 'curl -s http://localhost:9000/api/status | python3 -m json.tool' # 从 UI 获取 API 密钥:http://localhost:9000 → 头像 → 设置 → API 密钥 → 创建 ```
完整重置 — 清除所有数据 ``` ./setup.sh --stop docker compose down -v # WARNING: deletes all Elasticsearch data ./setup.sh --reset ```
## 已知限制 本节说明边界问题,坦诚比营销话术更重要。 | 限制 | 说明 | |------|------| | **无认证** | 所有 API 端点开放。仅限本地主机使用 — 不要暴露至网络。 | | **单租户** | 单一组织、单一 ES 索引。无多租户支持。 | | **无 AI 限流** | 紧密循环调用 AI 端点可能耗尽 Groq 免费配额。 | | **内存活动日志** | 重启后端会丢失活动日志。告警与案例仍保留在 ES 中。 | | **单一提示模板** | 所有告警类型共用同一系统提示。尚未支持微调或 RAG。 | | **前端为开发服务器** | 通过 `vite dev` 运行,未构建生产版本或反向代理。 | | **TheHive/Cortex 可选** | AI 分类与 PDF 报告可在无 TheHive/Cortex 情况下运行。SOAR 动作可优雅降级。 | | **无测试覆盖** | `tests/` 目录为占位符。 | | **仅 Sigma/YARA 框架** | 规则目录存在,但尚未实现规则评估引擎。 | ## 路线图 - [ ] 增加 JWT 认证 + RBAC(分析师 / 管理员 / 访客角色) - [ ] 生产前端构建并使用 nginx 反向代理 - [ ] Sigma 规则评估引擎(集成 `pySigma`) - [ ] Wazuh API 集成以拉取真实代理告警 - [ ] 分析师反馈闭环 — 正确/错误判定 → 提示优化 - [ ] 使用 Redis Streams 持久化活动日志 - [ ] 在 `tests/` 中添加实际测试套件 - [ ] 全链路 OpenTelemetry 追踪(从后端 → Groq → 执行剧本) - [ ] Kubernetes 的 Helm 图表 ## 关于项目 本项目旨在回答一个实际问题:**在不牺牲决策质量与审计追踪完整性的前提下,当前工具链能自动化多少 Tier-1 与 Tier-2 SOC 工作量?** 基于此实现,答案是“大量”。AI 引擎在常见告警类型(暴力破解、端口扫描、常规认证失败)上始终做出可辩护的分类,并能正确升级多阶段攻击序列,且具备准确的 MITRE 技术映射。每个决策均被记录,每个动作均可追溯,每个案例均生成报告 — 这些正是人工分析师应交付的产物。 技术栈有意选择以反映真实企业部署:Elasticsearch 用于日志存储,TheHive 用于案例管理,Cortex 用于自动化增强。Groq 的选择基于其推理速度 — 分析延迟通常在 2 秒以内,这对于需要比人类更快响应的系统至关重要。 作为个人作品集项目 — 并非生产级硬化(参见已知限制),但每个组件均按设计工作,通过一条命令即可在本地运行,并展示了真实 SIEM/SOAR 堆栈的架构模式。 ## 许可证 MIT — 参见 [LICENSE](LICENSE)。
由 **[Aadarsh Kadam](https://github.com/aadarshkadam067)** 构建 *若此项目对您有帮助,请考虑给予 ⭐*
标签:AI安全, AMSI绕过, AV绕过, Chat Copilot, Cloudflare, DLL 劫持, Docker, Elasticsearch, FastAPI, FTP漏洞扫描, GitHub, LLM, MITRE ATT&CK, Modbus, Python, React, SOAR, Syscalls, Triage, Unmanaged PE, 企业安全, 告警收敛, 响应自动化, 大语言模型, 威胁检测, 安全编排, 安全运营中心, 安全防御评估, 密码管理, 开源, 异常检测, 搜索分析引擎, 搜索引擎查询, 攻击链关联, 无后门, 日志可视化, 日志聚合, 时间线生成, 智能研判, 网络映射, 网络资产管理, 自动化响应, 自定义脚本, 自托管, 误配置预防, 请求拦截, 逆向工具, 配置审计