G0NDAL/ai-siem-network-threat-detection

GitHub: G0NDAL/ai-siem-network-threat-detection

一个全栈 AI 驱动的 SIEM 平台,通过实时日志分析、事件关联和风险评分帮助安全团队集中检测和响应网络威胁。

Stars: 0 | Forks: 0

# AI SIEM 仪表盘 — 实时网络威胁检测系统 一个全栈的安全信息与事件管理 (SIEM) 平台,利用 AI 驱动的威胁检测和事件响应引擎,实时摄取、分析和可视化网络安全事件。 ## 问题陈述 现代网络基础设施持续面临网络安全威胁,包括暴力破解、端口扫描、未经授权的访问尝试和侦察活动。传统的监控工具缺乏实时智能、自动化的威胁分类和可操作的事件管理能力。安全团队需要一个集中式平台,结合自动化检测、AI 增强的分析以及直观的仪表盘,以实现快速响应。 ## 目标 - 从原始日志流中实时检测和分类网络威胁 - 通过外部 LLM 的可选 AI 分析增强基于规则的检测 - 自动化事件关联、评分和生命周期管理 - 提供用于安全运营可视化的现代化仪表盘 - 实施基于角色的访问控制和 JWT 身份验证 - 构建适用于 SOC 环境的生产级、安全的全栈应用程序 ## 系统架构 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ AI SIEM SYSTEM ARCHITECTURE │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────────┐ ┌───────────┐ │ │ │ Log │───▶│ Ingestion │───▶│ Pipeline │ │ │ │ Sources │ │ Layer │ │ Engine │ │ │ │ │ │ (JSONL) │ │ │ │ │ └──────────┘ └──────────────┘ └─────┬─────┘ │ │ │ │ │ ▼ │ │ ┌──────────┐ ┌──────────────┐ ┌───────────┐ │ │ │ AI │◀───│ AI Analyzer │ │ Incident │ │ │ │ (LLM) │ │ (Optional) │ │ Engine │ │ │ └──────────┘ └──────────────┘ └─────┬─────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ Storage │ │ │ │ (JSON File) │ │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ FastAPI │ │ │ │ REST API │ │ │ └──────┬───────┘ │ │ │ │ │ ┌──────┴───────┐ │ │ │ JWT Auth │ │ │ │ Middleware │ │ │ └──────┬───────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ Frontend │ │ │ │ (Next.js) │ │ │ └──────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ ``` ### 数据流 1. **日志源** — Wazuh、防火墙或 JSONL 格式的应用程序日志 2. **接入** — 文件监控器流式传输新的日志条目,并将其标准化为告警对象 3. **管道** — 将每个告警通过基于规则的及可选的 AI 分析进行路由 4. **事件引擎** — 根据源 IP 关联事件,计算风险评分,创建或更新事件 5. **存储** — 将事件及完整的事件历史记录持久化到 JSON 文件中 6. **API** — FastAPI 提供 REST 端点,并带有 JWT 保护的路由 7. **前端** — Next.js 仪表盘展示事件、分析数据和事件管理 ### 组件职责 | 组件 | 职责 | |-----------|---------------| | 接入 | 读取日志流,解析 JSON,标准化为结构化告警 | | AI 分析器 | 通过 OpenRouter 进行基于规则的分类及可选的 LLM 增强 | | 事件引擎 | 事件关联、风险评分、事件生命周期管理 | | 存储 | 带有错误处理和日志记录的事件数据 CRUD 操作 | | API | REST 端点、JWT 身份验证、CORS、请求验证 | | 前端 | 仪表盘 UI、实时轮询、事件操作、基于角色的视图 | ## 技术栈 ### 后端 - **Python 3.11+** — 核心运行时 - **FastAPI** — 高性能 REST API 框架 - **Uvicorn** — ASGI 服务器 - **python-jose** — JWT token 生成与验证 - **passlib[bcrypt]** — 密码哈希与校验 - **python-dotenv** — 环境变量管理 - **Pydantic** — 请求/响应验证 ### 前端 - **Next.js 16** — 带有 App Router 的 React 框架 - **TypeScript** — 类型安全的前端代码 - **Tailwind CSS v4** — 实用优先的样式 - **Lucide React** — 图标库 - **react-hot-toast** — 通知系统 ### DevOps 与基础设施 - **Render** — 后端 API 托管 - **Vercel** — 前端托管 - **Git** — 版本控制 ## 功能 ### 威胁检测 - 从 JSONL 文件实时摄取日志流 - 基于规则的事件分类(暴力破解、端口扫描、未知) - 通过 OpenRouter LLM 进行 AI 增强的威胁分析(可选,平滑降级) - 根据源 IP 自动关联事件 - 基于事件类型和严重程度的动态风险评分 ### 事件管理 - 事件创建、更新和生命周期跟踪 - 状态管理:active、resolved、escalated、false_positive - 事件计数跟踪和时间分析(first_seen、last_seen) - 生成人类可读的事件报告 ### 仪表盘与可视化 - 带有风险评分指示器的实时事件网格 - 带有颜色编码卡片的严重程度分类 - 带有聚合威胁统计数据的分析页面 - 带有完整事件历史和分析的事件详情视图 - 用于系统配置的设置页面 ### 身份验证与访问控制 - 基于带有自动 token 过期的 JWT 身份验证 - 通过 bcrypt 进行密码哈希(无明文存储) - 带有 token 验证中间件的受保护 API 路由 - 基于角色的访问:Admin(完全访问)和 Viewer(只读) ## 安全功能 ### 密码安全 - 所有密码均使用带有随机盐的 bcrypt 进行哈希处理 - 零明文密码存储或比较 - 哈希凭据存储在环境变量中,而不是源代码中 - `verify_password()` 通过 passlib 使用时间安全比较 ### 身份验证 - 带有可配置过期时间的 JWT token(默认:60 分钟) - 在每个受保护的 API 请求上验证 token - token 过期时自动使会话失效 - 通过 HTTP Authorization 标头进行 Bearer token 身份验证 ### API 安全 - CORS 限制为特定的前端域 - 对所有路由参数进行输入验证(事件 ID 正则表达式、IP 格式) - 通过在前端渲染时进行 HTML 转义来预防 XSS - 全局异常处理器防止堆栈跟踪泄露 ### 环境安全 - 所有密钥均从环境变量加载 - JWT 签名需要 `SECRET_KEY` — 生产环境中没有硬编码的降级方案 - `.env` 和 `.env.local` 被排除在版本控制之外 - 提供独立的 `.env.example` 文件作为配置参考 ## 用户角色 ### Admin - 完全的系统访问权限 - 通过登录页面进行身份验证 - 查看、解决和升级事件 - 访问分析仪表盘和设置 - 完全的 API 访问权限,包括对事件的 PATCH 操作 ### Viewer(只读) - 查看仪表盘和事件列表 - 查看事件详情和报告 - 查看分析页面 - 无操作能力(无法解决、升级或修改事件) - 只读 API 访问(仅限 GET 端点) ## 身份验证流程 ``` ┌──────────┐ POST /login ┌──────────┐ │ │ ───────────────────▶ │ │ │ Client │ │ Server │ │ │ ◀─────────────────── │ │ └──────────┘ {access_token} └──────────┘ │ ▼ ┌──────────────┐ │ Verify │ │ credentials │ │ (bcrypt) │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ Generate │ │ JWT token │ │ (exp: 60m) │ └──────────────┘ ``` ### 流程描述 1. 客户端发送带有 `{username, password}` 的 `POST /login` 请求 2. 服务器验证用户名,并与存储的 bcrypt 哈希进行密码比对 3. 成功后,服务器生成带有 payload `{sub: username, exp: }` 的 JWT 4. 客户端将 token 存储在 `localStorage` 中 5. 所有后续请求都包含 `Authorization: Bearer ` 标头 6. 服务器中间件在受保护的路由上解码并验证 token 7. 过期或无效的 token 返回 `401 Unauthorized`,触发客户端注销 ## 项目结构 ``` ai-siem-network-threat-detection/ ├── README.md ├── .gitignore ├── .env.example ├── .env.local # Frontend env (gitignored) ├── package.json ├── tsconfig.json ├── next.config.ts ├── tailwind.config.ts ├── postcss.config.js ├── next-env.d.ts ├── LICENSE │ ├── backend/ # Python SIEM backend │ ├── main.py # Entry point (uvicorn) │ ├── requirements.txt │ ├── .env.example │ │ │ ├── api/ # API layer │ │ ├── __init__.py │ │ ├── app.py # FastAPI app + routes │ │ └── schemas.py # Pydantic models │ │ │ ├── core/ # Core utilities │ │ ├── __init__.py │ │ ├── config.py # Logging, constants │ │ └── security.py # Auth, JWT, password hashing │ │ │ ├── services/ # Business logic │ │ ├── __init__.py │ │ ├── ai_analyzer.py # Rule-based + AI analysis │ │ ├── incident_engine.py # Incident correlation & scoring │ │ ├── ingestion.py # Log stream ingestion │ │ ├── pipeline.py # Alert processing pipeline │ │ ├── reporting.py # Report generation │ │ └── storage.py # Data persistence │ │ │ ├── data/ # Data files │ │ └── incidents.json │ │ │ └── tests/ # Backend tests │ ├── __init__.py │ ├── test_analyzer.py │ └── test_pipeline.py │ ├── frontend/ # Next.js frontend (source at root) │ ├── src/ │ │ ├── app/ # Next.js App Router pages │ │ │ ├── layout.tsx │ │ │ ├── page.tsx # Dashboard │ │ │ ├── globals.css │ │ │ ├── login/ │ │ │ ├── incidents/ │ │ │ ├── analytics/ │ │ │ └── settings/ │ │ ├── components/ # Reusable UI components │ │ │ ├── IncidentCard.tsx │ │ │ ├── Navbar.tsx │ │ │ └── Sidebar.tsx │ │ ├── lib/ # Utilities and API client │ │ │ ├── api.ts │ │ │ └── useAuth.ts │ │ └── hooks/ # Custom React hooks │ │ └── useAuth.ts # (symlink or copy from lib) │ └── .env.local.example │ └── docs/ # Documentation └── ARCHITECTURE.md # Detailed architecture guide ``` ## 设置说明 ### 前置条件 - Python 3.11 或更高版本 - Node.js 18 或更高版本 - npm 或 yarn ### 后端设置 ``` # 1. 导航至 backend 目录 cd backend # 2. 创建虚拟环境 python -m venv venv # 3. 激活虚拟环境 # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate # 4. 安装依赖 pip install -r requirements.txt # 5. 配置环境变量 cp .env.example .env # 使用你的值编辑 .env(参见 Environment Variables 部分) # 6. 启动服务器 python main.py # 或 uvicorn api.app:app --host 0.0.0.0 --port 8000 --reload ``` API 将在 `http://localhost:8000` 提供。 ### 前端设置 ``` # 1. 安装依赖(从项目根目录) npm install # 2. 配置环境变量 cp .env.local.example .env.local # 使用你的 backend API URL 编辑 .env.local # 3. 启动开发服务器 npm run dev ``` 仪表盘将在 `http://localhost:3000` 提供。 ### 默认凭据 | 用户名 | 密码 | |----------|----------| | admin | admin123 | ## 环境变量 ### 后端 (.env) | 变量 | 必填 | 默认值 | 描述 | |----------|----------|---------|-------------| | `SECRET_KEY` | 是 | — | JWT 签名密钥(请使用强随机字符串) | | `ALGORITHM` | 否 | `HS256` | JWT 算法 | | `ACCESS_TOKEN_EXPIRE_MINUTES` | 否 | `60` | Token 过期时间 | | `ADMIN_USERNAME` | 否 | `admin` | 管理员用户名 | | `ADMIN_PASSWORD_HASH` | 是 | — | 管理员密码的 bcrypt 哈希 | | `FRONTEND_URL` | 否 | `http://localhost:3000` | 允许的 CORS 源 | | `OPENROUTER_API_KEY` | 否 | — | 用于 AI 分析的 OpenRouter API 密钥 | | `PORT` | 否 | `8000` | 服务器端口 | ### 前端 (.env.local) | 变量 | 必填 | 默认值 | 描述 | |----------|----------|---------|-------------| | `NEXT_PUBLIC_API_URL` | 是 | — | 后端 API 基础 URL | ## 部署 ### 后端 (Render) 1. 在 Render 上创建一个新的 Web Service 2. 连接您的 GitHub 仓库 3. 配置构建和启动命令: - **构建命令:** `pip install -r backend/requirements.txt` - **启动命令:** `uvicorn api.app:app --host 0.0.0.0 --port $PORT` 4. 在 Render 仪表盘中设置环境变量: - `SECRET_KEY`(生成一个强随机字符串) - `ADMIN_PASSWORD_HASH`(您的管理员密码的 bcrypt 哈希) - `OPENROUTER_API_KEY`(可选,用于 AI 分析) - `FRONTEND_URL`(您的 Vercel 前端 URL) 5. 将根目录设置为 `backend` ### 前端 (Vercel) 1. 将您的仓库导入 Vercel 2. 配置构建设置: - **框架预设:** Next.js - **构建命令:** `next build` - **输出目录:** `.next` 3. 设置环境变量: - `NEXT_PUBLIC_API_URL`(您的 Render 后端 URL) 4. 部署 ### 部署后检查清单 - 验证 CORS 是否允许您的前端域 - 使用管理员凭据测试登录 - 确认 API 健康检查端点能正常响应 - 验证仓库中不存在 `.env` 文件 - 测试事件创建和仪表盘展示 ## 未来改进 ### 安全 - 在 API 中间件层面实施基于角色的访问控制 (RBAC) - 为登录和 API 端点添加速率限制 - 为更长的会话实施 refresh token 轮换 - 为所有管理员操作添加审计日志 - 用 PostgreSQL 或 MongoDB 替换 JSON 文件存储 - 添加 HTTPS 强制和安全标头 ### 检测 - 与真实的 SIEM 源集成(Wazuh API、Elastic SIEM、Splunk) - 添加更多检测规则(SQL 注入、XSS、DDoS 模式) - 利用统计模型实施异常检测 - 添加威胁情报源集成(MITRE ATT&CK 映射) ### 平台 - WebSocket 支持,用于实时事件流式传输 - 针对严重事件的邮件/Slack 通知 - 事件分配和团队协作功能 - 将报告导出为 PDF - 深色/浅色主题切换 - 移动端响应式仪表盘改进 ### DevOps - 使用 docker-compose 进行 Docker 容器化 - 带有自动化测试的 CI/CD 管道 - 用于监控的健康检查端点 - 带有关联 ID 的结构化日志 - API 版本控制策略 ## 核心经验总结 - **安全工程:** 在全栈应用程序中实施了 bcrypt 密码哈希、JWT 身份验证、CORS 配置、输入验证和 XSS 预防 - **威胁检测管道:** 构建了模块化的检测系统,具备基于规则的分类、可选的 AI 增强以及自动事件关联功能 - **API 设计:** 设计了具有适当错误处理、通过 Pydantic 进行请求验证以及基于中间件的身份验证的 RESTful API - **实时系统:** 通过 JSONL 解析和自动事件更新实现了基于文件的日志流式传输 - **全栈整合:** 将 Next.js 前端与 FastAPI 后端连接,管理身份验证流程和实时数据同步 - **生产就绪:** 采用基于环境的配置,构建项目以便在 Render 和 Vercel 上部署 ## 项目状态 | 领域 | 状态 | |------|--------| | 核心检测管道 | 完成 | | 事件管理 | 完成 | | REST API | 完成 | | JWT 身份验证 | 完成 | | 仪表盘 UI | 完成 | | AI 分析(可选) | 完成 | | 密码安全 (bcrypt) | 完成 | | 环境配置 | 完成 | | 基于角色的访问控制 | 已记录在文档(待实现) | | 数据库 (PostgreSQL/MongoDB) | 已规划 | | 实时 WebSocket | 已规划 | | CI/CD 管道 | 已规划 | **当前版本:** 1.0.0 **最后更新:** 2026-05-04 ## 许可证 本项目基于 MIT 许可证授权。有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:AMSI绕过, SIEM平台, 威胁检测, 安全运营中心, 库, 应急响应, 网络安全, 网络映射, 逆向工具, 隐私保护