恶意流量检测系统

作品简介

一、项目概述

1.1 项目名称

基于深度学习的恶意流量检测平台 v3.0

1.2 项目简介

本项目是一个基于Python开发的恶意网络流量检测系统,采用深度学习(CNN、LSTM)与传统机器学习(随机森林、逻辑回归)相结合的混合架构,通过PyQt5构建可视化操作界面,支持离线数据检测和实时网卡流量捕获分析。

1.3 开发背景

随着网络攻击手段的日益复杂化和加密流量的普及,传统的基于规则的安全防护手段已难以满足需求。本项目旨在构建一个智能化、可视化的流量检测平台,为网络安全防护提供技术支撑。

二、v3.0 升级说明(相对于 v2.0)

2.1 实时检测准确率大幅提升

问题背景:v2.0 实时检测误报率极高,正常流量被大量误判为攻击。

根本原因修复

  1. 特征提取对齐 CICFlowMeter
  • 修复标志位统计方式:从"计数"改为"二值化"(0/1),与 CICFlowMeter 训练数据提取逻辑一致
  • 修复 Flow Byts/sFlow Pkts/s 等速率特征:除数从 pkt_count 改为 flow_duration,与训练数据一致
  • 修复 Active/Idle 时间计算:流过期时结束最后一个活跃期,短流不再全为 0
  1. 特征预处理一致性
  • 检测引擎 _prepare_features 新增 np.clip(X, -3, 3) 截断,防止实时特征分布偏移导致极端值误判
  • 统一所有模型的归一化策略为 StandardScaler 单步归一化(v2.0 的 train_all_models.py 使用 StandardScaler+MinMaxScaler 双重归一化,与 GUI/实时检测不一致)
  1. 流成熟度门槛提升
  • MIN_PACKETS 从 5 提高到 10,PACKET_INCREMENT 从 5 提高到 10
  • 避免不成熟流的统计特征不稳定导致的误判
  1. 增量重新检测机制
  • 新增 detected_flow_packet_counts 跟踪每个流上次检测时的包数
  • 同一流在包数显著增长(≥10 个新包)后重新检测,让早期误判在特征稳定后有机会被纠正
  • 表格中同一 flow_id 的多次检测结果更新到现有行,而非不断追加新行
  1. 恶意流统计修复
  • 修复 malicious_flows 重复累加 bug:同一流被多次检测时不再重复计数
  • 新增 malicious_flow_ids 集合跟踪已标记为恶意的流,流从恶意变为正常时自动 -1
  1. 三色展示体系
  • 绿色Benign(正常流量)
  • 红色:非 Benign 且置信度 ≥ 阈值(高置信度攻击)
  • 黄色:非 Benign 但置信度 < 阈值(低置信度疑似攻击)
  • 恶意流统计只计红色行,阈值滑块同时控制标红/告警,避免低置信度预测造成视觉误报

2.2 训练数据集与训练流程修复

  1. 统一特征选取方式
  • 所有训练方法(GUI 4个模型 + train_all_models.py + retrain_rf_logistic.py)统一使用 FEATURE_COLUMNS 按列名选取特征
  • v2.0 使用 df.iloc[:, :-1] 按位置选取,CSV 列顺序不同时会导致特征错位
  1. RF 训练/推理一致性
  • GUI _train_rf 新增 StandardScaler 并保存 scaler.pkl
  • 检测引擎 load_rf_model 新增加载 scaler.pkl,推理时做 scaler 变换
  • v2.0 RF 训练不做归一化、不保存 scaler,但检测引擎逻辑已准备加载 scaler,导致不一致
  1. load_all 默认包含 Benign
  • IDS2018DataLoader.load_all 增加 include_benign=True 默认参数
  • v2.0 load_all 只加载攻击类不含 Benign,误用会导致模型无法识别正常流量
  1. ICNN 维度检查
  • GUI _train_icnn 新增 X.shape[1] != 78 检查,与 LSTM 保持一致
  1. 分层采样
  • 所有 train_test_split 调用添加 stratify=y,确保各类别在训练/测试集中比例一致
  1. 模型文件分别保存 scaler 和 label_encoder
  • train_all_models.py 中 CNN/LSTM/RF 训练完成后分别保存 scaler.pkllabel_encoder.pkl 到各自模型目录
  • v2.0 CNN/LSTM 模型未保存 scaler,推理时检测引擎找不到 scaler 不做归一化

2.3 模型重训练

  • 随机森林:重新训练后测试准确率从 ~70% 提升至 89.81%
  • 逻辑回归:重新训练后测试准确率从 ~70% 提升至 85.97%
  • 使用修复后的正确标签(消除标签覆盖 bug 后的 CSE-CIC-IDS2018 数据)
  • 每类最多采样 50,000 条,使用 class_weight='balanced' 处理类别不平衡

三、技术架构

3.1 核心技术栈

技术领域

使用技术

版本要求

深度学习框架

PyTorch

≥1.12.0

GUI开发

PyQt5

≥5.15.0

机器学习

scikit-learn

≥1.0.0

数据处理

pandas, numpy

≥1.3.0, ≥1.21.0

数据可视化

matplotlib

≥3.5.0

网络抓包

scapy

≥2.4.5

数据库

SQLite3


三、功能模块

3.1 流量检测模块

  • 随机样本检测:从数据集中随机抽取样本进行快速检测
  • 文件导入检测:支持CSV格式数据文件导入检测
  • 多模型选择:可同时选择多个模型进行检测对比
  • 集成学习:支持多模型软投票/硬投票的集成预测
  • 结果可视化:检测结果实时显示,支持置信度展示

3.2 批量检测模块

  • 多文件处理:支持同时选择多个CSV文件进行批量检测
  • 进度显示:实时显示检测进度
  • 结果统计:批量检测结果汇总统计(总样本数、正常/恶意样本数、恶意率)
  • 详情查看:支持查看单个文件的详细检测结果
  • 报告导出:支持检测结果导出为CSV格式

3.3 模型训练模块

  • 多模型支持:支持ICNN、LSTM、随机森林、逻辑回归四种模型训练
  • 参数配置
  • 深度学习模型:训练轮数、批次大小、学习率
  • LSTM特有:层数、Dropout率
  • 随机森林:树的数量、最大深度
  • 逻辑回归:最大迭代次数
  • 特征选取一致性(v3.0):所有模型训练统一使用 FEATURE_COLUMNS 按列名选取特征,确保训练/推理特征顺序一致
  • 归一化一致性(v3.0):所有模型统一使用 StandardScaler 单步归一化,RF 训练后也保存 scaler
  • 分层采样(v3.0)train_test_split 自动按类别分层,确保测试集类别分布均衡
  • 维度检查(v3.0):ICNN/LSTM 训练前检查特征维度是否为 78
  • 实时日志:训练过程实时显示,包含每轮损失和验证准确率
  • 训练控制:支持开始/停止训练
  • 自动保存:训练完成后自动保存模型、scaler 和 label_encoder

3.4 模型对比模块

  • 多模型并行:同时运行多个模型进行性能对比
  • 指标对比:样本数、推理时间、平均置信度、检测结果预览
  • 可视化图表:生成对比图表直观展示模型性能差异

3.5 可视化分析模块

  • 饼图:检测结果分布展示
  • 柱状图:各类别数量统计
  • 直方图:置信度分布分析
  • 图表导出:支持PNG、PDF格式导出

3.6 历史记录模块

  • 检测日志:自动保存所有检测记录到SQLite数据库
  • 数据查询:支持按时间、模型等条件查询
  • 统计分析:历史数据统计报表(总检测次数、总样本数、正常/恶意流量统计)
  • 数据导出:支持历史记录导出为CSV
  • 记录管理:支持删除单条记录

3.7 实时检测模块 ⭐(v3.0 大幅优化)

  • 网卡捕获:实时捕获网卡数据包(基于Scapy)
  • BPF过滤:支持Berkeley Packet Filter过滤规则
  • 流特征提取:实时提取78维流特征(与CICFlowMeter对齐)
  • 流成熟度控制:只检测包数≥10的成熟流,避免早期特征不稳定导致的误判
  • 增量重新检测:同一流在新增≥10个包后自动重新检测,让早期误判有机会被纠正
  • 三色展示体系
  • 绿色 = Benign(正常流量)
  • 红色 = 高置信度攻击(置信度≥阈值)
  • 黄色 = 低置信度疑似攻击(置信度<阈值)
  • 告警通知:只对高置信度攻击触发实时告警
  • 统计信息:实时显示捕获包数、检测流数、恶意流数(恶意流计数去重,不再重复累加)

3.8 攻防演练模块 ⚔️

  • 多种攻击场景:支持16种网络攻击场景模拟(DDoS、DoS、僵尸网络、端口扫描、暴力破解、Web攻击等)
  • 自定义演练:可选择特定攻击场景进行专项演练
  • 多模型对比:同时使用多个检测模型进行演练,对比检测效果
  • 演练报告:自动生成演练报告,包含检测准确率、置信度、综合评分等指标
  • 数据导出:支持导出演练结果为CSV格式,方便后续分析
  • 可视化评估:提供演练概览、详细结果、综合报告等多个视角的展示

四、模型说明

4.1 ICNN(改进卷积神经网络)

  • 模型类型:一维卷积神经网络
  • 输入维度:78维特征向量
  • 输出类别:15类(正常+14种攻击)
  • 网络结构
  • 4层卷积层(通道数:1→32→64→64→128)
  • 2层最大池化层
  • 3层全连接层(2304→64→64→15)
  • 特点:适合提取流量数据的局部特征

4.2 LSTM(长短期记忆网络)

  • 模型类型:循环神经网络
  • 输入维度:78维特征向量
  • 隐藏层维度:64
  • 层数:2层(可配置)
  • Dropout:0.2(可配置)
  • 输出类别:15类
  • 特点:适合捕捉流量时序特征

4.3 随机森林(Random Forest)

  • 模型类型:集成学习(决策树)
  • 树的数量:100(可配置)
  • 最大深度:无限制(可配置)
  • 特点:训练速度快,可解释性强

4.4 逻辑回归(Logistic Regression)

  • 模型类型:线性分类器
  • 求解器:lbfgs
  • 最大迭代:1000(可配置)
  • 特点:简单高效,适合作为基线模型











创作时间: