moya-raviraj/SOC-Analyst-Training-Simulation-Web-App
GitHub: moya-raviraj/SOC-Analyst-Training-Simulation-Web-App
一个基于 Flask + MySQL 的 SOC 培训与模拟平台,提供结构化学习、实时仪表盘与测验引擎,解决安全人员标准化训练与实战演练的痛点。
Stars: 0 | Forks: 0
```markdown
# CyberOps Simulator & SOC Training Portal
CyberOps 是一个基于 Flask + MySQL 的 SOC 培训与模拟平台,提供两种主要体验:
- **学习系统**:分等级引导式 SOC 培训(基础 -> 工作流 -> 日志 -> 检测 -> 响应 -> 模拟/测验/报告实验)
- **模拟控制台**:实时 SOC 风格仪表盘、告警、日志查看器、分析与报告
UI 针对实用 SOC 控制台体验进行了优化,前端具备实时事件模拟能力。
## 主要特性
### 1) 登录与访问流程
- 首页提供两个入口选项:
- 探索学习系统
- 登录使用工作控制台
- 基于会话的登录/注销
### 2) 引导式学习模块
- 结构化学习页面,支持逐步推进
- 交互式 SOC 工作流说明
- 实时日志模拟与点击分析面板
- 攻击检测练习
- 事件响应模块
- 顶点流程:
- 模拟 -> 测验 -> 报告撰写实验 -> 结果
### 3) 交互式 SOC 测验引擎
- 10 道聚焦 SOC 的问题(简单/中等/困难)
- 每次一道题目
- 上一题/下一题导航
- 实时分数追踪
- 每题答案后提供解释
### 4) SOC 报告撰写实验
- 完整培训表单:
- 事件标题
- 攻击类型
- 严重程度
- 影响系统
- IOC
- 时间线
- 根本原因
- 已采取的行动
- 最终建议
- 自动反馈质量评分
- 本地已提交培训报告历史记录
### 5) 模拟控制台
- 使用 Chart.js 的仪表盘可视化
- 按严重性分组的告警仪表盘
- 终端日志查看器
- 分析与报告页面
- 模式自适应的 SQL(支持不同表列名)
### 6) 实时前端事件流
- 每约 2–3 秒产生新事件(不存入数据库)
- 仪表盘/告警/日志查看器中的实时更新
- 新条目高亮显示
- 条目上限控制以避免界面过载
## 技术栈
- **后端**:Python Flask
- **数据库**:MySQL
- **数据库驱动**:`mysql-connector-python`
- **认证**:会话 + bcrypt 验证支持
- **前端**:HTML、CSS、JavaScript、Chart.js
## 项目结构
```
PROJECT/
├─ app.py
├─ schema.sql
├─ README.md
├─ static/
│ ├─ styles.css
│ └─ script.js
├─ templates/
│ ├─ landing.html
│ ├─ learning/
│ │ ├─ home.html
│ │ ├─ soc-workflow.html
│ │ ├─ log-analysis.html
│ │ ├─ attack-detection.html
│ │ ├─ incident-response.html
│ │ ├─ simulation-lab.html
│ │ ├─ quiz.html
│ │ └─ report-lab.html
│ └─ simulation/
│ ├─ login.html
│ ├─ dashboard.html
│ ├─ alert-dashboard.html
│ ├─ log-viewer.html
│ ├─ analysis.html
│ └─ report.html
└─ (legacy static html folders: learning/, simulation/)
```
## 数据库说明
本项目支持两种模式:
1. **使用提供的 schema(`schema.sql`)**
- 表包括:`users`、`alerts`、`logs`、`analyses`、`reports`
2. **使用现有的 SOC 数据集**
- 应用会动态检测现有表中的列,例如:
- `active_alerts`、`alerts`、`logs`、`incident_timeline`、`reports`、`users`
- 查询映射具备自适应能力,以减少列不匹配导致的失败。
## 本地环境搭建
### 安装依赖
```
pip install flask mysql-connector-python bcrypt
```
### 配置数据库
设置环境变量(推荐)或编辑 `app.py` 中的 `DB_CONFIG`。
PowerShell 示例:
```
$env:MYSQL_HOST="localhost"
$env:MYSQL_USER="root"
$env:MYSQL_PASSWORD="your_password"
$env:MYSQL_DATABASE="soc_training"
$env:MYSQL_PORT="3306"
```
### 初始化数据库结构(可选但推荐用于干净启动)
```
mysql -u root -p < schema.sql
```
### 运行应用
```
python app.py
```
访问:
- `http://127.0.0.1:5000`
## 认证机制
- 登录路由:`POST /login`
- 注销路由:`GET /logout`
- 仪表盘别名:`GET /dashboard`
如果 `users` 表中存储的是 bcrypt 哈希,系统会自动验证;明文形式的旧密码也受支持。
## 重要路由
### 学习与首页
- `/` -> 首页
- `/learning/home.html`
- `/learning/soc-workflow.html`
- `/learning/log-analysis.html`
- `/learning/attack-detection.html`
- `/learning/incident-response.html`
- `/learning/simulation-lab.html`
- `/learning/quiz.html`
- `/learning/report-lab.html`
### 模拟控制台
- `/simulation/login.html`
- `/simulation/dashboard.html`
- `/simulation/alert-dashboard.html`
- `/simulation/log-viewer.html`
- `/simulation/analysis.html`
- `/simulation/report.html`
- `/api/dashboard-metrics`
## UI/UX 说明
- SOC 风格玻璃拟态面板
- 严格的严重性配色系统
- 图表稳定性优化(`maintainAspectRatio: false`、固定图表容器)
- 更简洁的导航栏与一致的网格间距
- 平滑页面过渡/淡入效果
- 实时数据流行为,避免强制页面跳转
## 部署快速说明
### GitHub
```
git init
git add .
git commit -m "Initial CyberOps Simulator commit"
git branch -M main
git remote add origin
git push -u origin main
```
### Vercel
Vercel 非常适合静态/Node 应用。对于 Flask + MySQL:
- 使用支持 Python 的托管平台(Render/Railway/Fly.io)实现最简单部署,或
- 使用 Vercel 的无服务器 Python 适配器(需要高级配置)
如果仍希望使用 Vercel,请添加:
- `vercel.json`
- 正确的 Python 入口点与无服务器兼容结构
## 已知的实用注意事项
- 自行数据库中的某些表可能与 `schema.sql` 不同;核心页面已包含列自适应的查询逻辑。
- `__pycache__` 可忽略在 Git 提交中。
- 根目录下存在遗留静态 HTML 文件夹(`learning/`、`simulation/`),但活跃应用页面使用 `templates/`。
## 后续推荐改进
1. 添加用于部署可复现性的 `requirements.txt` 锁定文件
2. 添加使用 `python-dotenv` 的 `.env` 支持
3. 添加基于角色的路由保护(`analyst`、`senior`、`manager`)
4. 为报告撰写实验培训提交添加后端持久化支持
5. 添加认证与自适应 SQL 映射的单元测试
```
标签:Bcrypt, Chart.js, PFX证书, Python Flask, SOC 培训, SOC 模拟, 交互式学习, 仪表盘, 会话认证, 前端实时更新, 后端开发, 告警模拟, 多模态安全, 安全运营中心, 实战演练, 实时日志, 报告撰写, 攻击检测, 数据可视化, 测验引擎, 网络安全教育, 网络映射