CodeCrafter3-0-2/Team_Config_SecureSense-CC3H-162
GitHub: CodeCrafter3-0-2/Team_Config_SecureSense-CC3H-162
一个基于 XGBoost 机器学习模型的 AI 辅助 SOC 威胁情报仪表盘,整合实时流量分类、规则检测、异常评分和人机协同审查,为安全分析师提供端到端的威胁监控与研判平台。
Stars: 0 | Forks: 0
# SOC AI 威胁情报仪表盘
一个 AI 辅助的安全运营中心 (SOC) 仪表盘,用于接收 Web/网络日志,使用经过训练的 CICIDS2017 XGBoost 模型对流量进行分类,呈现未知威胁以供审查,并为分析师提供基于浏览器的实时监控 UI。
该项目结合了:
- 一个 FastAPI 后端,用于预测、日志接收、WebSocket 流传输、审查操作和聊天机器人响应。
- 一个位于 `ui.html` 中的单页仪表盘,包含图表、实时警报、示例日志提交、审查队列控制和 SOC 助手面板。
- 一个独立的 `login.html` 页面,通过浏览器的 `localStorage` 与仪表盘连接。
- 一个训练好的 XGBoost 模型工件、标签编码器和选定特征列表。
- 一个轻量级 pipeline,用于解析原始日志、创建流特征、应用规则、检测异常和广播结果。
## 项目结构
```
D:\CT_HACKS
|-- main.py # FastAPI backend and HTML serving routes
|-- login.html # Login page; redirects to ui.html after auth
|-- ui.html # Main SOC dashboard UI
|-- index.html # Older/simple dashboard page
|-- xgb_cicids2017.json # Trained XGBoost model artifact
|-- label_encoder.pkl # Label encoder used by model outputs
|-- selected_features.json # Feature order expected by the model
|-- model_train.py # Full model training pipeline
|-- model1.py # Alternate/experimental model script
|-- model.md # Short model-training notes
|-- confusion_matrix.png # Training/evaluation artifact
|-- feature_importance.png # Training/evaluation artifact
|-- training_curve.png # Training/evaluation artifact
|-- pipeline\
| |-- parser.py # Converts raw logs into normalized fields
| |-- flow.py # Aggregates logs into per-IP/endpoint flows
| |-- features.py # Builds CICIDS-like feature dictionaries
| |-- rules.py # Rule-based detections
| |-- anomly.py # Statistical anomaly scoring
| |-- blocker.py # Optional iptables-based blocking helper
| `-- chatbot.py # SOC assistant response generation
|-- tools\
| |-- local_rules.py # Additional local rule helpers
| `-- virustotal.py # VirusTotal integration helper
`-- soc-dashboard\ # Separate React/Vite dashboard experiment
```
## 核心功能
- **前端登录流程**
- 打开 `/` 或 `/login.html`。
- 使用当前的演示凭据登录:`admin` / `admin123`。
- 成功登录后,会将 `auth=true` 存储在 `localStorage` 中并打开 `ui.html`。
- `ui.html` 会将未经身份验证的用户重定向回 `login.html`。
- **实时仪表盘**
- 显示日志总数、检测到的攻击、已拦截/模拟拦截的事件以及正常流量。
- 显示最近的流量和警报卡片。
- 连接到 `ws://localhost:8000/ws/logs` 以获取实时检测更新。
- 当无法访问 WebSocket/API 时回退到模拟数据。
- **ML 检测 pipeline**
- 解析原始日志。
- 构建流级别特征。
- 首先应用基于规则的检测。
- 运行经过训练的 XGBoost CICIDS2017 模型。
- 增加针对未知或低置信度行为的统计异常检测。
- 将可疑的未知事件排入队列以供人工审查。
- **人机协同审查**
- 未知威胁被添加到 `suspicious_queue`。
- 仪表盘轮询 `/review-queue`。
- 分析师可以通过 `/review-action` 允许或拦截队列中的项目。
- **SOC 助手**
- `/chat` 使用最近的检测上下文来回答分析师的问题。
- 旨在提供简洁的安全摘要、指标和建议的操作。
## 要求
推荐的运行时:
- Python 3.10+
- pip
- 现代浏览器
后端/训练脚本使用的 Python 包包括:
```
fastapi
uvicorn
numpy
pandas
joblib
xgboost
pydantic
scikit-learn
matplotlib
seaborn
groq
langchain-core
python-dotenv
requests
```
如果您还没有 `requirements.txt`,请手动安装运行时依赖:
```
python -m pip install fastapi uvicorn numpy pandas joblib xgboost pydantic scikit-learn groq langchain-core python-dotenv requests
```
对于模型训练和图表生成,还需安装:
```
python -m pip install matplotlib seaborn
```
## 配置
为外部集成创建或更新 `.env`:
```
GROQ_API_KEY="your-groq-api-key"
VIRUS_TOTAL_API="your-virustotal-api-key"
ABUSE_IPDB="your-abuseipdb-api-key"
```
重要的安全提示:不要提交真实的 API 密钥。如果密钥已经被提交或共享,请从提供商的仪表盘中轮换它们。
## 运行应用程序
从项目根目录:
```
cd D:\CT_HACKS
python main.py
```
或者直接运行 Uvicorn:
```
uvicorn main:app --reload
```
然后打开:
```
http://localhost:8000/
```
后端提供:
- `/` -> `login.html`
- `/login.html` -> 登录页
- `/ui.html` -> 仪表盘页
- `/api/status` -> JSON 健康检查/状态响应
## 登录流程
当前的演示凭据:
```
Username: admin
Password: admin123
```
这仅是用于前端演示的身份验证。它对项目演示很有用,但不是生产级身份验证。对于生产环境,请将其替换为后端会话、签名 token、密码哈希、HTTPS 以及对 API/WebSocket 端点的访问控制。
## API 参考
### GET /
提供登录页面。
### GET /login.html
直接提供登录页面。
### GET /ui.html
提供 SOC 仪表盘。
### GET /api/status
返回模型/服务器状态和模型类别标签。
示例响应:
```
{
"status": "ok",
"classes": ["BENIGN", "DDoS", "PortScan"]
}
```
实际类别取决于 `label_encoder.pkl`。
### POST /predict
对特征 payload 运行直接的模型预测。
示例请求:
```
{
"Flow Duration": 1.2,
"Total Fwd Packets": 5,
"Flow Bytes/s": 1200,
"Flow Packets/s": 4,
"Average Packet Size": 240
}
```
示例响应:
```
{
"predicted_class": "BENIGN",
"confidence": 0.9821,
"all_probabilities": {
"BENIGN": 0.9821,
"DDoS": 0.0179
}
}
```
### POST /logs/ingest
仪表盘使用的主要 SOC 接收端点。接收原始日志,进行解析,更新流状态,运行规则/ML/异常逻辑,存储最近的上下文,将未知威胁排入队列,并通过 WebSocket 广播结果。
示例请求:
```
{
"raw_log": "192.168.1.10 GET /index.html 200 1024"
}
```
示例响应:
```
{
"ip": "192.168.1.10",
"final_prediction": "Normal Traffic",
"confidence": 0.94,
"blocked": "Not Blocked",
"anomaly": false
}
```
### POST /chat
使用最近的检测上下文向 SOC 助手提问。
示例请求:
```
{
"question": "Summarize the current suspicious IPs."
}
```
示例响应:
```
{
"response": "..."
}
```
### GET /review-queue
返回等待分析师审查的可疑或未知项目。
示例响应:
```
{
"items": [
{
"ip": "10.10.0.21",
"raw_log": "...",
"features": {},
"score": 0.99
}
]
}
```
### POST /review-action
对排队的项目应用分析师操作。
示例请求:
```
{
"ip": "10.10.0.21",
"action": "block"
}
```
UI 当前支持的操作值:
- `allow`
- `block`
- `remove`
### WebSocket /ws/logs
向仪表盘流式传输实时检测更新。
示例消息:
```
{
"ip": "10.0.0.55",
"prediction": "Suspicious / Unknown Threat",
"confidence": 0.99,
"blocked": "Simulated Block",
"anomaly": true,
"needs_review": true
}
```
## 检测 Pipeline
主要的 `/logs/ingest` 路由遵循以下顺序:
1. **原始日志验证**
- 需要 `raw_log`。
- 如果缺失则返回 HTTP 400。
2. **基于规则的检测**
- 检查已知的特征,例如 SQL 注入和 ARP 异常/MITM 风格的日志。
- 规则匹配优先于 ML 预测。
3. **解析**
- `pipeline/parser.py` 提取:
- 时间戳
- 源 IP
- 方法
- endpoint
- 状态
- 字节数
4. **流追踪**
- `pipeline/flow.py` 按 `(src_ip, endpoint)` 聚合重复事件。
- 追踪数据包数量、总字节数、开始时间和结束时间。
5. **特征提取**
- `pipeline/features.py` 将流状态转换为特征字典。
- `main.py` 将特征与 `selected_features.json` 对齐。
6. **XGBoost 预测**
- 加载 `xgb_cicids2017.json`。
- 使用 `label_encoder.pkl` 获取可读的类名。
- 返回预测的类别、置信度和所有类别的概率。
7. **异常覆盖**
- `pipeline/anomly.py` 计算基于简单 z-score 的异常分数。
- 极端的字节数、服务器错误、未知标记和低置信度的预测可以被标记为 `Suspicious / Unknown Threat`。
8. **审查队列和广播**
- 未知威胁被附加到 `suspicious_queue`。
- 检测结果通过 WebSocket 推送到已连接的仪表盘客户端。
## 模型训练
训练流程在 `model.md` 中有简要记录,主要在 `model_train.py` 中实现。
训练 pipeline 亮点:
- 加载并清理 CICIDS2017 风格的流数据。
- 使用 `LabelEncoder` 编码标签。
- 使用样本权重处理类别不平衡。
- 训练 XGBoost 分类器。
- 使用正则化:
- L1:`reg_alpha`
- L2:`reg_lambda`
- `gamma`
- `max_depth`
- `min_child_weight`
- `subsample`
- `colsample_bytree`
- `colsample_bylevel`
- `learning_rate`
- 提前停止
- 导出:
- `xgb_cicids2017.json`
- `label_encoder.pkl`
- `selected_features.json`
- `training_curve.png`
- `confusion_matrix.png`
- `feature_importance.png`
要重新训练,请确保训练脚本中预期的 CICIDS2017 数据集路径存在,然后运行:
```
python model_train.py
```
## 仪表盘使用
1. 启动后端。
2. 打开 `http://localhost:8000/`。
3. 使用演示凭据登录。
4. 使用示例日志按钮提交正常、类 DDoS、类扫描或类暴力破解的日志。
5. 观察卡片、图表、最近的流量和警报源的更新。
6. 在审查队列中审查未知威胁。
7. 向 SOC 助手询问有关最近活动的问题。
## 手动测试示例
健康/状态:
```
Invoke-RestMethod http://localhost:8000/api/status
```
提交一条看起来正常的日志:
```
Invoke-RestMethod `
-Uri http://localhost:8000/logs/ingest `
-Method Post `
-ContentType "application/json" `
-Body '{"raw_log":"192.168.1.10 GET /index.html 200 1024"}'
```
提交一条异常日志:
```
Invoke-RestMethod `
-Uri http://localhost:8000/logs/ingest `
-Method Post `
-ContentType "application/json" `
-Body '{"raw_log":"10.0.0.55 GET /api/v1/data 200 1500000"}'
```
获取审查队列:
```
Invoke-RestMethod http://localhost:8000/review-queue
```
## 故障排除
### `/login.html` 或 `/ui.html` 的 `404 Not Found`
确保您从项目根目录运行更新后的 FastAPI 应用:
```
cd D:\CT_HACKS
uvicorn main:app --reload
```
路由在 `main.py` 中定义;通过其他服务器打开原始文件可能不会使用这些路由。
### 仪表盘重定向回登录页
`ui.html` 检查:
```
localStorage.getItem("auth") === "true"
```
首先通过 `login.html` 登录,或者清除浏览器存储并再次登录。
### 仪表盘显示模拟数据
当 WebSocket 无法连接时,仪表盘会回退到模拟。确认后端正在运行,并且浏览器可以访问:
```
ws://localhost:8000/ws/logs
```
### `/chat` 失败
检查 Groq API 密钥是否已配置且有效。当前的 `pipeline/chatbot.py` 应该更新为从 `.env` 读取,而不是将密钥直接嵌入源代码中。
### 模型加载失败
确认项目根目录中存在以下文件:
- `xgb_cicids2017.json`
- `label_encoder.pkl`
- `selected_features.json`
从 `D:\CT_HACKS` 运行服务器,因为当前的路径是相对的。
### `iptables` 在 Windows 上拦截失败
`pipeline/blocker.py` 使用 Linux `iptables`。在 Windows 上,除非您用 Windows 防火墙实现替换该拦截器,否则拦截将由仪表盘/后端逻辑模拟。
## 已知问题和清理建议
- `pipeline/chatbot.py` 当前包含硬编码的 API 密钥。请将其移至 `.env` 并使用 `os.getenv` 加载。
- `main.py` 有两个名为 `ingest_log` 的函数映射到不同的路由。FastAPI 仍然可以注册这两个路由,但唯一的函数名会更清晰。
- `pipeline/rules.py` 两次定义了 `rule_based_detection`;第二个定义覆盖了第一个。将这两个规则集合并到一个函数中。
- `pipeline/anomly.py` 拼写错误。考虑将其重命名为 `anomaly.py` 并更新导入。
- 登录系统仅是前端演示身份验证。在超出受控演示范围使用之前,请添加真正的后端身份验证。
- 此工作区中的 `cicids2017_cleaned.csv` 当前为空。重新训练需要真实的数据集文件。
- `soc-dashboard` 中的 React/Vite 应用似乎与活跃的 `ui.html` 仪表盘相互独立。决定是将其作为实验保留,还是将 UI 完全迁移到 React。
## 安全提示
本项目适用于演示、实验和受控的实验室环境。在生产使用之前:
- 从源文件中移除硬编码的密钥。
- 轮换任何暴露的密钥。
- 添加后端身份验证和授权。
- 保护 WebSocket 和 API 路由。
- 添加请求验证和速率限制。
- 将审查队列和日志存储在持久化数据库中,而不是内存列表中。
- 使用 HTTPS。
- 避免在没有强大安全防护和审计日志的情况下执行防火墙命令。
## 许可证
目前未包含许可证文件。在分发或发布项目之前,请添加 `LICENSE` 文件。
标签:Apex, AV绕过, CICIDS2017, DevSecOps, FastAPI, IP 地址批量处理, Python, Sysdig, WebSocket, XGBoost, 上游代理, 人工智能, 仪表盘, 依赖分析, 单页应用, 后端开发, 安全运营中心, 异常检测, 数据流处理, 无后门, 机器学习, 机器学习模型训练, 流量分类, 用户模式Hook绕过, 网络威胁情报, 网络安全, 网络日志分析, 网络映射, 逆向工具, 隐私保护