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, 凭据扫描, 机器学习, 深度学习, 网站指纹识别, 网络流量分类, 逆向工具