Iqtam/Side-Channel-Attack
GitHub: Iqtam/Side-Channel-Attack
基于深度学习的网站指纹识别系统,通过对网络流量轨迹进行分类来识别用户访问的目标网站。
Stars: 0 | Forks: 0
# 网站指纹识别分类系统
一个使用神经网络进行网站指纹识别分类的综合机器学习系统。本项目实现了多种深度学习架构,通过对网络流量轨迹进行分类,根据流量模式识别网站。
## 🎯 项目概述
本系统使用网络流量轨迹进行网站指纹识别分类。它可以对以下三个特定网站的流量进行分类:
- **https://cse.buet.ac.bd/moodle/** - 教育平台
- **https://google.com** - 搜索引擎
- **https://prothomalo.com** - 新闻网站
该系统使用包括 CNN、LSTM 以及混合 CNN-LSTM 架构在内的深度学习模型,实现了约 84% 的分类准确率。
## 📁 项目结构
```
├── app.py # Flask web application for model serving
├── collect.py # Data collection script using Selenium
├── train.py # Model training script
├── database.py # Database operations for trace storage
├── test.py # Testing utilities
├── requirements.txt # Python dependencies
├── chromedriver.exe # Chrome WebDriver executable
├── train.sh # Training automation script
├── data_and_model_link.txt # Google Drive links to datasets and models
├── report.pdf # Project report
│
├── data/ # Dataset directory
│ ├── dataset_2005028_3k.json # Personal dataset (3k samples)
│ ├── dataset_merged_70k.json # Merged dataset (70k samples)
│
├── saved_models/ # Trained models directory
│ ├── CNNLSTM_70k/ # CNN-LSTM model (70k dataset)
│ ├── CNNLSTM_3k/ # CNN-LSTM model (3k dataset)
│ ├── Complex_70k/ # Complex CNN model
│ ├── Simple_70k/ # Simple CNN model
│ ├── Complex_3k/ # Simple CNN model
│ ├── Simple_70k/ # Simple CNN model
│
├── static/ # Web application static files
│ ├── index.html # Main web interface
│ ├── index.js # Frontend JavaScript
│ ├── warmup.js # Warmup functionality
│ └── worker.js # Web worker for background tasks
│
└── db/ # Database files
└── webfingerprint.db # SQLite database for traces
```
## 🛠️ 安装
### 前置条件
- Python 3.8+
- Chrome 浏览器
- NVIDIA GPU(可选,用于加速训练)
### 设置说明
1. **克隆仓库:**
```
git clone
cd template
```
2. **安装依赖:**
```
pip install -r requirements.txt
```
3. **下载数据集和预训练模型(可选):**
完整的数据集和预训练模型可在 Google Drive 上获取。请查看 `data_and_model_link.txt` 获取下载链接:
```
# 查看 Google Drive 链接
cat data_and_model_link.txt
```
**可用下载内容:**
- **完整数据集**:`dataset_merged_70k.json`(70,000 个样本)
- **预训练模型**:所有模型变体(CNNLSTM、Complex、Simple)
- **模型检查点**:表现最佳的模型权重
- **评估结果**:训练曲线和分类报告
**注意**:您可以:
- 从 Google Drive 下载完整的数据集/模型以供立即使用
- 或者使用 `collect.py` 收集您自己的数据并从头开始训练模型
4. **初始化数据库:**
```
python -c "from database import Database; db = Database(['test']); db.init_database()"
```
## 🚀 使用说明
### 1. 数据收集
从网站收集网络流量轨迹:
```
python collect.py
```
**配置:**
- 修改 `collect.py` 中的 `WEBSITES` 列表以添加目标网站
- 调整 `TRACES_PER_SITE` 以设置每个网站的轨迹数量
- 确保 Flask 服务器正在 `http://localhost:5000` 上运行
### 2. 模型训练
在收集的数据上训练神经网络模型:
```
python train.py
```
**可用模型:**
- **Simple**:基础全连接神经网络
- **Complex**:带 batch normalization 的多层 CNN
- **CNNLSTM**:混合 CNN-LSTM 架构(推荐)
**训练配置:**
```
BATCH_SIZE = 64
EPOCHS = 50
LEARNING_RATE = 1e-4
INPUT_SIZE = 1000
HIDDEN_SIZE = 128
```
### 3. Web 应用程序
启动 Flask Web 服务器进行实时分类:
```
python app.py
```
在 `http://localhost:5000` 访问 Web 界面
**功能:**
- 实时网站分类
- 交互式轨迹可视化
- 模型置信度分数
- 结果历史管理
### 4. 模型评估
在特定示例上测试模型性能:
```
python test.py
```
## 🧠 模型架构
### 1. Simple 指纹分类器
```
class FingerprintClassifier(nn.Module):
# Basic CNN architecture
# Conv1D → ReLU → MaxPool → FC → Dropout → Output
```
### 2. Complex 指纹分类器
```
class ComplexFingerprintClassifier(nn.Module):
# Advanced CNN with batch normalization
# Multiple Conv1D layers → BatchNorm → Residual connections
```
### 3. CNN-LSTM 分类器
```
class CNN_LSTM_Classifier(nn.Module):
# Hybrid architecture combining CNN and LSTM
# Conv1D → LSTM → Attention → FC layers
```
## 📊 数据集信息
### 数据集统计
- **总样本数**:70,000 条轨迹
- **类别**:3 个网站
- **分布**:均衡(每个类别约 23,333 个样本)
- **输入大小**:每条轨迹 1000 个特征
- **特征类型**:网络时序和数据包大小数据
### 数据预处理
1. **轨迹填充/截断**:将所有轨迹标准化为 1000 个特征
2. **标准化**:使用 sklearn StandardScaler 进行 Z-score 标准化
3. **标签编码**:将网站 URL 转换为整数标签
## 🔧 配置
### 模型配置 (`app.py`)
```
INPUT_SIZE = 1000 # Input feature size
HIDDEN_SIZE = 128 # Hidden layer size
MODELS_DIR = "./saved_models/CNNLSTM_70k" # Model directory
```
### 采集配置 (`collect.py`)
```
WEBSITES = [
"https://cse.buet.ac.bd/moodle",
"https://google.com",
"https://prothomalo.com"
]
TRACES_PER_SITE = 1 # Traces to collect per site
```
## 📈 性能
### 模型准确率
- **CNN-LSTM(70k 数据集)**:约 84% 准确率
- **Complex 模型**:约 82% 准确率
- **Simple 模型**:约 79% 准确率
### 分类报告
```
precision recall f1-score support
https://cse.buet.ac.bd/moodle/ 0.82 0.79 0.81 4699
https://google.com 0.78 0.80 0.79 4700
https://prothomalo.com 0.89 0.90 0.89 4700
accuracy 0.83 14099
macro avg 0.83 0.83 0.83 14099
weighted avg 0.83 0.83 0.83 14099
```
## 🐛 故障排除
### 常见问题
1. **Chrome Driver 问题**:
```
# 下载兼容的 ChromeDriver
# 将 chromedriver.exe 放置在项目根目录
```
2. **模型加载错误**:
```
# 检查模型文件路径
# 确保所有模型文件 (.pt, .pkl) 存在
```
3. **Flask 服务器未运行**:
```
# 在数据收集前启动服务器
python app.py
```
4. **训练期间的内存问题**:
```
# 在 train.py 中减小 batch size
BATCH_SIZE = 32 # Instead of 64
```
## 📋 API 端点
### Flask Web 应用程序
- `GET /` - 主 Web 界面
- `POST /api/predict` - 根据轨迹预测网站
- `GET /api/get_results` - 获取存储的结果
- `POST /api/clear_results` - 清除所有结果
- `GET /api/model_info` - 获取模型信息
## 🔬 技术细节
### 特征提取
- 网络轨迹包含时序和数据包大小信息
- 特征经过标准化处理,以适应不同的网络状况
- 轨迹被填充/截断为固定大小(1000 个特征)
### 数据存储
- 使用 SQLite 数据库存储轨迹 (`webfingerprint.db`)
- 提供 JSON 导出功能以便共享数据集
- 采集过程中会自动备份
### 模型训练
- 分层 train-test split (80/20)
- 早停机制,patience=5
- 学习率调度
- 模型检查点
## 📝 许可证
本项目是 CSE 406 - 计算机安全实验课程学术作业的一部分。
## 👥 作者
- **学号**:2005028
- **课程**:CSE 406 - 计算机安全实验
- **机构**:孟加拉国工程技术大学 (BUET)
## 📚 参考文献
- 网站指纹识别研究论文
- PyTorch 文档
- Selenium WebDriver 文档
- Flask 框架文档
**注意**:本系统专为教育和研究目的而设计。在收集数据时,请确保遵守网站的服务条款和隐私政策。
标签:Apex, CNN-LSTM, Flask, 凭据扫描, 机器学习, 深度学习, 网站指纹识别, 网络流量分类, 逆向工具