mohammadfarooquerahi/ShieldSourceFYP
GitHub: mohammadfarooquerahi/ShieldSourceFYP
面向中小企业的全栈网络安全应急响应平台,结合角色化工作流与机器学习日志分析,支持事件上报、专家研判和自动化攻击分类。
Stars: 0 | Forks: 0
# Shield-Source 🛡️
### 网络安全应急响应系统
**毕业设计 (FYP) — 计算机科学学士**
## 📌 项目概述
Shield-Source 是一个全栈网络安全应急响应平台,支持以下功能:
- **用户**报告网络安全事件(黑客攻击、恶意软件、勒索软件、网络钓鱼、数据窃取、未经授权的访问)并上传可疑的日志文件。
- **网络安全专家**审查分配的事件,分析证据并编写取证记录。
- **管理员**管理用户、分配专家并监控整体事件仪表板。
- **ML 微服务**自动将上传的日志文件分类为攻击类别(SQL Injection、Brute Force、DDoS、Path Traversal、Normal),并提供置信度分数和严重性评级。
### 系统架构
```
┌─────────────────┐ HTTP/REST ┌─────────────────────┐
│ React Frontend │ ◄─────────────────► │ Node.js/Express API│
│ (Port 3000) │ │ (Port 5000) │
└─────────────────┘ └────────┬────────────┘
│ HTTP POST /analyze
▼
┌─────────────────────┐
│ Python ML Service │
│ Flask + sklearn │
│ (Port 8000) │
└────────┬────────────┘
│
┌────────▼────────────┐
│ MySQL 8 Database │
│ shield_source DB │
└─────────────────────┘
```
## 👥 团队信息
| 角色 | 职责 |
|-------------------|-----------------------------------------|
| 团队负责人 | 系统架构与 Node.js 后端 |
| 前端开发 | React UI 与仪表板 |
| ML 工程师 | Python ML 服务与日志分析 |
| 数据库工程师 | MySQL schema 与查询优化 |
## ✅ 前置条件
在设置项目之前,请确保已安装以下所有工具:
| 工具 | 版本 | 下载链接 |
|--------------|----------|-----------------------------------------------|
| Node.js | 18.x LTS | https://nodejs.org |
| Python | 3.9+ | https://python.org |
| MySQL Server | 8.0+ | https://dev.mysql.com/downloads/mysql/ |
| Git | 最新版 | https://git-scm.com |
## 🗂️ 项目结构
```
shield-source/
├── client/ # React frontend (Vite/CRA)
│ ├── src/
│ └── package.json
│
├── server/ # Node.js Express backend API
│ ├── controllers/
│ ├── routes/
│ ├── middleware/
│ └── package.json
│
├── ml-service/ # Python Flask ML microservice
│ ├── app.py # Flask application entry point
│ ├── requirements.txt # Python dependencies
│ ├── utils/
│ │ └── log_parser.py # Log file feature extractor
│ └── model/
│ ├── train_model.py # Model training script
│ ├── classifier.pkl # Trained model (generated)
│ └── label_encoder.pkl# Label encoder (generated)
│
├── database/
│ └── schema.sql # MySQL schema (run once)
│
└── README.md
```
## ⚙️ 设置说明
### 步骤 1 — 克隆代码库
```
git clone https://github.com/your-team/shield-source.git
cd shield-source
```
### 步骤 2 — 设置 MySQL 数据库
1. 打开 MySQL Workbench 或 MySQL CLI。
2. 运行 schema 脚本:
```
mysql -u root -p < database/schema.sql
```
3. 验证数据库是否已创建:
```
USE shield_source;
SHOW TABLES;
```
预期表:`users`、`incidents`、`files`、`expert_notes`、`ml_predictions`
**由 schema 脚本生成的默认账户:**
| 邮箱 | 密码 | 角色 |
|-------------------------------|-----------|--------|
| admin@shieldsource.local | admin123 | admin |
| expert@shieldsource.local | expert123 | expert |
### 步骤 3 — 设置 Node.js 后端
```
cd server
npm install
```
在 `server/` 目录中创建 `.env` 文件:
```
# 服务器
PORT=5000
NODE_ENV=development
# Database
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_mysql_password
DB_NAME=shield_source
# JWT
JWT_SECRET=your_super_secret_jwt_key_change_this_in_production
JWT_EXPIRES_IN=7d
# ML Service
ML_SERVICE_URL=http://localhost:8000
# 文件上传
UPLOAD_DIR=./uploads
MAX_FILE_SIZE_MB=50
```
启动后端:
```
npm run dev # Development (nodemon auto-reload)
# 或
node server.js # Production
```
API 将在以下地址可用:`http://localhost:5000`
### 步骤 4 — 设置 Python ML 微服务
```
cd ml-service
```
#### 4a. 创建 Python 虚拟环境(推荐)
```
# Windows
python -m venv venv
venv\Scripts\activate
# Linux / macOS
python3 -m venv venv
source venv/bin/activate
```
#### 4b. 安装依赖项
```
pip install -r requirements.txt
```
#### 4c. 训练 ML 模型(启动服务前必须完成)
```
python model/train_model.py
```
预期输出:
```
============================================================
Shield-Source ML Model Training
============================================================
[1/5] Generating synthetic training data …
Dataset shape : (700, 8)
[2/5] Encoding labels …
[3/5] Splitting data …
[4/5] Training RandomForestClassifier (200 trees) …
[5/5] Evaluating on test set …
Accuracy : 0.9929 (99.29%)
✔ Saved classifier → model/classifier.pkl
✔ Saved label encoder → model/label_encoder.pkl
============================================================
```
#### 4d. 启动 ML 服务
```
python app.py
```
ML 服务将在以下地址可用:`http://localhost:8000`
**生产环境(Linux/macOS — 使用 Gunicorn):**
```
gunicorn -w 4 -b 0.0.0.0:8000 app:app
```
**生产环境(Windows — 使用 Waitress):**
```
pip install waitress
waitress-serve --port=8000 app:app
```
### 步骤 5 — 设置 React 前端
```
cd client
npm install
npm run dev # Development server on http://localhost:3000
```
## 🌐 API Endpoints
### Node.js 后端(端口 5000)
| 方法 | Endpoint | 鉴权 | 描述 |
|--------|-----------------------------------|----------|------------------------------------|
| POST | `/api/auth/register` | 无 | 注册新用户 |
| POST | `/api/auth/login` | 无 | 登录,获取 JWT token |
| GET | `/api/incidents` | JWT | 列出所有事件(按角色过滤) |
| POST | `/api/incidents` | JWT | 创建新事件 |
| GET | `/api/incidents/:id` | JWT | 获取事件详情 |
| PUT | `/api/incidents/:id/status` | Expert | 更新事件状态 |
| POST | `/api/incidents/:id/assign` | Admin | 为事件分配专家 |
| POST | `/api/incidents/:id/files` | JWT | 上传日志文件 |
| GET | `/api/incidents/:id/files` | JWT | 列出事件的相关文件 |
| POST | `/api/incidents/:id/notes` | Expert | 添加专家取证记录 |
| GET | `/api/incidents/:id/notes` | JWT | 获取事件的所有记录 |
| GET | `/api/incidents/:id/predictions` | JWT | 获取事件的 ML 预测结果 |
| GET | `/api/admin/users` | Admin | 列出所有用户 |
| PUT | `/api/admin/users/:id/role` | Admin | 更改用户角色 |
### Python ML 服务(端口 8000)
| 方法 | Endpoint | 描述 |
|--------|-------------------|------------------------------------------|
| GET | `/health` | 服务存活检查 |
| POST | `/analyze` | 分析日志文件,返回预测结果 |
| POST | `/analyze/batch` | 一次性分析多个日志文件 |
#### POST `/analyze` — 请求体
**选项 A — 以字符串形式发送日志内容:**
```
{
"log_content": "192.168.1.1 GET /index.php?id=1 UNION SELECT...",
"file_id": 42
}
```
**选项 B — 发送服务器端文件路径:**
```
{
"file_path": "/absolute/path/to/server/uploads/abc123.log",
"file_id": 42
}
```
#### POST `/analyze` — 响应
```
{
"file_id": 42,
"threat_type": "SQL_Injection",
"confidence_score": 0.9750,
"severity": "high",
"features": {
"total_lines": 120,
"error_lines": 15,
"sql_keywords": 45,
"auth_failures": 2,
"unique_ips": 3,
"high_freq_ip_lines": 8,
"path_traversal": 0
}
}
```
#### 严重程度级别
| 威胁类型 | 严重性 | 含义 |
|----------------|----------|------------------------------------------|
| Normal | low | 未检测到攻击 |
| Brute_Force | medium | 凭据填充 / 密码喷洒 |
| SQL_Injection | high | 数据库数据泄露风险 |
| Path_Traversal | high | 文件系统暴露风险 |
| DDoS | critical | 服务可用性受到攻击 |
## 🧪 测试 ML 服务
使用 `curl` 或 Postman 手动测试 endpoints:
```
# 健康检查
curl http://localhost:8000/health
# 分析日志内容
curl -X POST http://localhost:8000/analyze \
-H "Content-Type: application/json" \
-d "{\"log_content\": \"GET /page?id=1 UNION SELECT username FROM users-- \nSELECT * FROM admin\nDROP TABLE users\", \"file_id\": 1}"
```
## 🔒 安全提示
1. **切勿提交 `.env` 文件** — 将其添加到 `.gitignore` 中
2. **密码**以 bcrypt 哈希值(成本因子 10)存储 — 绝不使用明文
3. **文件上传**会重命名为 UUID 以防止文件名注入
4. 为每个上传的文件存储 **SHA-256 哈希值**以进行完整性验证
5. **JWT token** 默认在 7 天后过期
6. **ML 服务**不应暴露在公共互联网中 — 通过 Node.js 后端进行代理
## 📊 ML 模型详情
| 参数 | 值 |
|------------------|-----------------------------------------------|
| 算法 | Random Forest Classifier |
| 树数量 | 200 estimators |
| 训练样本 | 700(合成的、均衡的) |
| 类别 | Normal, SQL_Injection, Brute_Force, DDoS, Path_Traversal |
| 特征数量 | 7 |
| 预期准确率 | ~99%(合成数据) |
| 序列化 | joblib (classifier.pkl) |
### 特征向量
| 特征 | 描述 |
|---------------------|----------------------------------------------|
| `total_lines` | 日志总行数 |
| `error_lines` | 包含 ERROR/CRITICAL/FATAL 关键词的行数 |
| `sql_keywords` | 包含 SQL injection 关键词的行数 |
| `auth_failures` | 包含登录失败/认证失败文本的行数 |
| `unique_ips` | 日志中不同的 IP 地址数量 |
| `high_freq_ip_lines`| 来自出现超过 10 次的 IP 的行数 |
| `path_traversal` | 包含 `../` 或 `..\` 序列的行数 |
## 🚀 运行所有服务(快速开始)
打开三个终端窗口:
**终端 1 — 数据库:**(如果 MySQL 服务已启动,则已在运行)
**终端 2 — 后端 API:**
```
cd server && npm run dev
```
**终端 3 — ML 服务:**
```
cd ml-service
venv\Scripts\activate # Windows
python app.py
```
**终端 4 — 前端:**
```
cd client && npm run dev
```
在浏览器中打开:**http://localhost:3000**
## 📝 许可证
本项目作为毕业设计的一部分,仅用于学术目的。
*Shield-Source — 通过智能应急响应保护数字资产*
标签:Apex, MITM代理, 事件响应系统, 库, 应急响应, 机器学习, 网络安全, 自定义脚本, 逆向工具, 隐私保护