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平台, 威胁检测, 安全运营中心, 库, 应急响应, 网络安全, 网络映射, 逆向工具, 隐私保护