基于CNN的异常流量监测系统的设计与实现
摘要
随着网络攻击手段的日益复杂,传统基于签名的入侵检测技术难以有效应对未知威胁。网络流量异常检测通过建立正常行为基线、识别偏离基线的异常流量,在主动防御方面具有重要价值。本文设计并实现了一套基于卷积神经网络(Convolutional Neural Networks,简称CNN)的异常流量监测系统。系统将数据包元数据转化为文本表征,经TF-IDF向量化后输入一维CNN进行二分类,实现了从流量采集、模型训练、模型评估到在线/离线检测的完整流程。系统采用PyQt5构建图形界面,支持PCAP解析、实时回放、合成流量等多种采集方式,具备模型训练与评估、单文件/批量/实时检测、检测报告导出、数据可视化、告警中心等功能。数据持久化采用MySQL存储,支持多用户与角色权限。功能测试表明,系统各模块运行稳定,能够满足网络运维场景下的异常监测需求。
关键词异常流量检测;卷积神经网络;PyQt5
1.3 研究内容
本课题的主要研究内容包括如下。
(1)网络流量特征表示方法研究。将数据包级元数据(协议、端口、长度等)转化为适合深度学习输入的文本化表征,并采用TF-IDF进行向量化。
(2)基于一维CNN的二分类模型设计。将TF-IDF特征向量视为一维信号,设计轻量级卷积网络结构,实现正常/异常流量的二分类。
(3)系统架构与功能模块设计。涵盖流量采集、模型训练、模型评估、在线/离线检测、实时监控、报告导出、告警中心等完整业务流程。
(4)基于PyQt5的图形界面开发。实现用户认证、角色权限、数据可视化、报告导出等人机交互功能。
(5)数据库设计与持久化存储。采用MySQL存储用户、模型元数据、检测记录、告警事件等,支持历史查询与审计。
2.1 网络流量异常检测概述
网络流量异常检测属于入侵检测系统(IDS)的一种实现方式,其核心思想是建立正常流量的行为基线,将偏离该基线的流量判定为异常。与误用检测不同,异常检测不依赖攻击样本库,理论上可识别未知攻击类型,但存在误报率较高、基线建立困难等问题。
流量异常检测的典型流程包括:数据采集、特征提取、特征表示、模型训练/推理、结果输出。数据采集阶段从网络接口或离线PCAP文件中获取原始数据包;特征提取阶段解析数据包头部与载荷,提取协议类型、端口、长度、时间戳等元数据;特征表示阶段将元数据转化为数值或文本向量。模型阶段利用机器学习或深度学习算法进行分类或聚类;结果输出阶段将检测结果呈现给用户或触发告警。
本系统采用有监督二分类范式,将流量划分为“正常”与“异常”两类,通过标注数据训练CNN模型,在推理阶段输出类别及置信度。
2.2 网络异常检测常用方法
2.2.1 基于规则的网络异常检测方法
基于规则的方法依赖专家经验或安全策略,通过预定义规则匹配流量特征。例如,若某源IP在短时间内向大量不同端口发起连接,可判定为端口扫描行为。此类方法实现简单、可解释性强,但规则维护成本高,难以应对新型攻击,且易被攻击者通过规则规避。
2.2.2 基于机器学习的网络异常检测方法
基于机器学习的方法从历史数据中学习统计规律,常见算法包括决策树、随机森林、支持向量机(SVM)、K近邻(KNN)等。此类方法可自动发现特征与标签之间的映射关系,减少人工规则编写,但在高维稀疏特征上往往需要额外的特征工程。传统机器学习模型对复杂非线性关系的建模能力有限,在面对大规模、高维流量数据时性能提升空间受限。
2.2.3 基于深度学习的网络异常检测方法
深度学习通过多层非线性变换自动学习层次化表征,在图像、语音、自然语言等领域取得了突破性进展。在网络流量分析中,自编码器、循环神经网络(RNN)、卷积神经网络(CNN)等结构被广泛应用。自编码器通过重构误差刻画异常程度。RNN/LSTM擅长建模时序依赖。CNN则适合从局部模式中提取特征。本系统采用一维CNN对TF-IDF特征进行建模,兼顾计算效率与检测效果。
2.2.4 模型选型
在明确上述三类方法的基础上,本课题的检测目标可概括为,在有监督二分类设定下,对由网络流量转化得到的特征向量进行正常/异常判别。数据形态为 CSV 中的 text 经向量化后的定长实数向量。模型选型即在该问题设定下,在效果、复杂度、可实现性与资源约束之间做权衡,依据如下。
(1)为何不采用纯规则或传统机器学习作为最终方案
规则方法依赖持续维护规则库,难以覆盖未知异常,且与本课题“数据驱动 + 可训练模型”的定位不一致。传统机器学习对表格特征有效,但在高维稀疏、特征组合复杂时往往依赖大量人工特征构造与模型集成;本课题希望端到端地完成从包元数据文本化到分类的流程,并统一纳入深度学习实验与系统实现,故以深度模型为主线,传统方法可作为后续对比基线而非本文核心。
(2)为何在深度模型中选择 CNN,而非自编码器或 RNN/LSTM
自编码器常用于无监督或弱监督异常检测,与本系统当前以 label 监督训练 的范式不一致;若引入需另建训练目标与系统流程,超出毕设主线范围。
RNN/LSTM 强项在于显式建模包序或流内时间依赖。本系统当前以包级(或经聚合后的行级)样本为主,单条样本已表示为固定长度 TF-IDF 向量,时序信息未以序列形式输入网络;在此表示下引入 LSTM 的收益与额外调参、推理成本相比,性价比有限。若未来改为“按流切片的多包序列”输入,可将序列模型作为自然延伸。
一维 CNN 将长度为 F 的 TF-IDF 向量视为一维信号,用局部卷积核捕获相邻维度上的共现模式(对应若干 token 或 n-gram 权重同时异常的局部组合),再通过池化与全连接整合为类别打分。其与当前定长向量输入高度契合,参数量相对可控,在 CPU 环境下即可训练与部署,且与 PyTorch 实现、本系统模型保存与加载方式一致。
(3)为何特征侧采用 TF-IDF 与 CNN 搭配
包元数据经拼接形成短文本后,本质是离散符号上的计数/权重问题。TF-IDF 将 text 映射为固定维度的数值向量,便于与 Conv1d 的输入形状衔接,并与 sklearn、PyTorch 工具链兼容。该组合在工程上路径短、可复现,适合作为毕设级系统的核心检测器。
综上,本课题模型选型的依据是:问题为有监督二分类 + 定长向量输入;需在有限开发周期与算力下完成可演示、可落地的完整系统;一维 CNN 与 TF-IDF 向量在表示形式与计算开销上与该设定匹配,故作为本文默认检测模型;其他结构可作为后续改进方向讨论,而不改变当前选型的合理性。
2.3 Python语言
Python是一种解释型、面向对象的高级编程语言,具有语法简洁、库生态丰富、跨平台支持良好等特点。本系统采用Python 3.x作为主要开发语言,利用其强大的科学计算与数据处理能力。NumPy、Pandas用于数值计算与表格操作;Scikit-learn提供TF-IDF、评估指标等机器学习工具;PyTorch负责深度学习模型的构建与训练。Python的模块化设计便于系统分层与模块解耦,有利于后续维护与扩展。
2.4 流量采集Scapy库
Scapy是Python环境下功能强大的数据包操作库,支持对IP、TCP、UDP等协议的数据包进行构造、发送、捕获与解析。本系统使用Scapy完成以下任务:(1)PCAP文件解析,通过PcapReader逐包读取并提取元数据;(2)实时流量捕获,通过AsyncSniffer在指定网卡上进行抓包。
Scapy的跨平台兼容性较好,在Windows环境下可配合Npcap使用,在Linux下可直接调用libpcap。本系统在PCAP回放模式下不依赖网卡抓包,通过读取离线文件读取实时流,降低了部署门槛。
2.5 PyQt框架
PyQt是Qt框架的Python绑定,提供丰富的GUI组件与跨平台支持。本系统采用PyQt5构建桌面应用,实现登录注册、多标签页导航、表格展示、图表绘制、文件选择、进度条等人机交互功能。PyQtChart用于绘制饼图(检测结果分布)与折线图(异常比例趋势),实现数据可视化。
PyQt5支持信号与槽机制,便于将用户操作与业务逻辑解耦。本系统使用QThreadPool与QRunnable实现异步任务执行,避免训练、检测等耗时操作阻塞主线程,保证界面响应流畅。
2.6 PyTorch
PyTorch是Facebook开源的深度学习框架,采用动态计算图设计,支持灵活的模型构建与调试。本系统使用PyTorch实现CNN模型的训练与推理,主要涉及以下组件:torch.nn用于定义网络层(Conv1d、ReLU、MaxPool1d、Linear、Dropout等)。torch.optim提供Adam优化器;torch.utils.data中的DataLoader与Dataset用于批量数据加载。torch.save与torch.load用于模型持久化。
模型以state_dict形式保存,同时将num_features等元信息一并存储,便于加载时正确初始化网络结构。推理阶段通过map_location参数支持CPU/GPU自适应,在无GPU环境下仍可正常运行。
2.7 卷积神经网络(CNN)
2.7.1 基本思想与结构特点
卷积神经网络(Convolutional Neural Network,CNN)是一类前馈神经网络,最初在图像领域取得突破,现已广泛用于序列、频谱及表格化向量等数据。其核心思想是:用少量可学习的局部滤波器(卷积核)在输入上滑动,逐位置提取局部模式,并通过堆叠多层形成从低级到高级的层次化表征。
与全连接网络相比,CNN 通常具备三方面特点。
(1)局部连接(Local connectivity)
每个神经元只与输入的一个局部邻域相连,而非与全部输入相连。对图像而言对应空间邻域;对一维信号而言对应连续的一段索引区间。这使得模型优先刻画“相邻位置上的组合关系”,符合许多物理与统计过程(包括本文中 TF-IDF 向量在维度轴上的局部共现结构)。
(2)权值共享(Weight sharing)
同一卷积核在输入的所有位置上共享同一组权重,即一套模板扫描全输入。可显著减少参数量,降低过拟合风险,并赋予网络平移不变性的归纳偏置:模式出现在不同位置时仍能被同一核检测到。在一维流量特征向量上,体现为:某种 token 组合模式在向量中略左或略右出现时,仍可能被同一卷积核捕获。
(3)层次化特征(Hierarchical features)
浅层卷积倾向于捕捉简单模式(如边缘、短序列片段);深层卷积在浅层响应之上组合成更复杂的模式。网络深度与卷积核大小、步长、池化共同决定了有效感受野(effective receptive field),即输出某一位置理论上能“看到”的输入范围。
2.7.2 卷积、池化与全连接层
CNN 的核心思想是通过卷积操作、池化操作和全连接层,逐层提取图像的层次化特征。
(1)卷积层
一维离散情形下,可将输入看作长度为 L 的序列(或长度为 L 的特征维),卷积核长度为 K。在第 i 个输出位置上,卷积响应通常是核与输入一段窗口的内积再加偏置,即对窗口内元素做加权求和。通过在整个序列上滑动窗口(步长可为 1 或更大),得到长度随填充(padding)与步长变化的新序列。多通道卷积中,输入有 Cin 个通道,每个输出通道由一组核与所有输入通道联合卷积后相加得到,从而组合多种前层特征。
(2)池化层
池化层对局部区域做下采样,常见有最大池化(取窗口内最大值)与平均池化。作用包括:降低特征图长度、增强对微小位移的容忍度、扩大后续层的有效感受野。在分类网络末端,常使用全局池化或自适应池化,将变长序列压缩为固定长度向量,再接入全连接层,从而适应不同长度的中间特征图。
(3)全连接层
经卷积—激活—(可选多次)池化堆叠后,特征已被映射为长度固定的向量(例如本系统在自适应池化后得到 128 维)。全连接层将这一向量中每一个分量与下一层每一个神经元相连,实质是执行线性变换 y=Wx+b(再接 softmax 或作为 logits 输出)。与卷积的局部连接不同,全连接在整段特征上进行全局加权组合,负责把“分布式”的局部特征整合为类别打分或中间判别表示。参数量随输入维与输出维乘积增长,因此通常放在网络后端、在维数已通过池化充分压缩之后;分类任务中最后一层全连接的输出维等于类别数(本文为 2,对应正常/异常)。训练时全连接与卷积层一同通过反向传播更新权重;常在全连接前使用 Dropout,减轻特征共适应导致的过拟合。
2.7.3 训练与目标函数
在有监督分类任务中,CNN 与全连接层共同构成可微分函数 y=f(x;θ)。给定训练集 {(xi, yi)},通过定义损失函数 L(如多类交叉熵)度量预测与真实标签的差异,利用反向传播计算 ∂L/∂θ,再采用 SGD、Adam 等优化器更新参数 θ。卷积层的权值共享使梯度对各位置共享核的用法累加,从而高效更新。正则化手段包括 Dropout、权重衰减以及数据增强等,用于抑制过拟合。
2.7.4 本文中的一维 CNN 与 TF-IDF 向量
本系统不处理二维图像,而是将每个样本的 TF-IDF 向量视为长度为 F 的一维信号:输入张量形状为 (B, 1, F),通道数为 1,在长度 F 维上做一维卷积。其直观解释是:TF-IDF 的每一维对应词典中的某个 token(或二元组),相邻维未必有严格“语义相邻”,但经过 ngram 与词典排序后,卷积仍可在局部窗口内刻画“多个 token 权重同时异常”的组合模式,池化与深层卷积进一步抽象为更高阶统计特征。
卷积神经网络通过卷积核在输入上滑动提取局部特征,经池化降维后由全连接层完成分类。本系统将TF-IDF特征向量视为长度为F的一维信号,输入形状为(B, 1, F),经三层一维卷积(kernel_size分别为7、5、3)与ReLU、MaxPool1d、AdaptiveMaxPool1d等操作,最终通过全连接层输出二分类logits。网络结构兼顾感受野与参数量,在保证检测效果的同时控制推理延迟。
2.8 数据集简介
2.8.1 NSL-KDD数据集
NSL-KDD是入侵检测领域的经典公开基准数据集。其以“网络连接”为基本记录单元,包含协议类型、服务类型、连接状态标志、源/目的字节统计等特征,并给出原始攻击类别标签以及难度等级。与本系统的二分类训练口径一致,本文在示例展示时将normal映射为0,将其余攻击类别映射为1,便于直观理解数据样本的关键特征与标注信息。
本研究采用“正常/异常”二分类而非按攻击类型细分的多分类,主要考虑,第一,异常流量监测系统在工程落地中的首要目标是快速发现可疑行为并触发告警,二分类更贴合“先发现、再研判”的运维流程。第二,公开数据集中不同攻击子类的样本规模差异明显,直接进行多分类容易导致类别不均衡和训练偏置,影响泛化能力。第三,系统当前特征表示与模型规模更适合稳定完成异常检出任务,若同时细分攻击类型,通常需要更大规模、更加均衡且持续更新的标注数据。第四,在本课题阶段先保证高召回、低漏报的异常检测能力,再由告警确认与人工分析环节补充攻击归因,有助于控制实现复杂度并提升整体可用性。
表中样例记录节选自NSL-KDD训练集的KDDTrain+_20Percent子集,并按normal与攻击类别进行二分类映射。
2.8.2 CIC-IDS2017数据库
CIC-IDS2017同样由加拿大网络安全研究所发布,涵盖多种攻击场景,流量规模更大、时间跨度更长。数据集提供CSV格式的流量特征,可直接用于训练。本系统要求训练CSV包含text与label两列,其中text为流量文本化表征,label为0(正常)或1(异常)。用户可将CIC-IDS2017的特征进行适当转换,生成符合格式要求的训练集。
表中样例记录节选自CIC-IDS2017的预处理Flow特征CSV(来自CICFlowMeter输出),并按BENIGN与攻击类别进行二分类映射(BENIGN=0,其他=1)。
2.9 MySQL
MySQL是广泛使用的关系型数据库管理系统。本系统采用MySQL存储业务数据,通过SQLAlchemy ORM进行访问。主要数据表包括:users(用户信息与角色)、model_meta(模型版本与路径)、detection_records(检测记录)、detection_reviews(审核标注)、alert_events(告警事件)、system_config(系统配置)、app_logs(操作日志)。数据库设计遵循规范化原则,通过外键关联用户与检测记录,支持按时间、来源、结果等条件查询。
3.1 系统需求概述
本系统面向网络运维与安全分析人员,需满足以下功能需求。
(1)支持从PCAP文件或实时接口采集流量。
(2)支持基于标注CSV训练CNN模型,并可对已训练模型进行评估。
(3)支持单文件、批量及实时模式的流量检测。
(4)支持检测结果的存储、查询、导出与可视化。
(5)支持异常告警的生成与确认。
(6)支持检测结果的审核标注,便于模型迭代。
非功能需求包括界面响应流畅、支持多用户与角色权限、数据持久化可靠、具备一定的跨平台兼容性。功能总体流程图如图3.1所示。
3.2 系统软件架构设计
采用典型三层架构。数据层,MySQL存储users、model_meta、detection_records等七张表,文件系统存放PCAP、CSV及模型文件(.pt、.joblib),路径由.env中的DATA_DIR、MODELS_DIR指定。
业务逻辑层,app/data负责pcap解析与向量化,app/ml负责训练、评估与推理,app/db/repo封装CRUD与配置读取,app/realtime提供抓包、回放与合成流量。
表现层,MainWindow内嵌QTabWidget,各功能对应独立页面类(TrainPage、RealtimePage、BatchPage等)。层间通过函数调用与PyQt信号槽通信,数据库访问统一经SessionLocal会话,避免连接泄漏,本文设计的系统架构如图3.2所示。
3.4 数据库设计
3.4.1 数据库概念设计
系统涉及的主要实体包括:用户(User)、模型元数据(ModelMeta)、检测记录(DetectionRecord)、审核记录(DetectionReview)、告警事件(AlertEvent)。用户与检测记录为一对多关系;检测记录与审核记录为一对一关系。告警事件可关联检测记录。系统ER总体关系,系统ER总体关系,如图3.14所示。
