标题:基于Python的加密恶意流量检测系统

文档介绍:

1 绪论

1.1 研究背景与意义

当下处于数字化时期,互联网深入到社会生产生活各个角落,成了支撑全球经济运行以及人际交流的重要基础设施,不论是金融交易,政务办公,还是医疗健康,社交娱乐,网络空间的稳定和安全都同国家安全,经济发展和个人隐私休戚相关。要想保证数据传送时的机密性与完整性,便大范围采用了加密技术,HTTPS,TLS这些加密协议已是现代网络通信的标配,可以有效阻止数据被偷听,篡改或者拦截,从而筑牢创建可信互联网的根基。

技术发展永远是把双刃剑,加密技术给合法通讯赋予了保护层,也给了网络恶意行为一种天然的“隐身”手段。不少施害者开始利用加密通道掩盖自己的不良企图,于是,加密流量里潜在的风险变得越发严重,高级持续威胁,勒索病毒,僵尸网络操控,数据盗窃等各种破坏行为,都把自己有关命令与控制的通信,重要资料流出之类的流量混入到普通的 HTTPS 和 TLS 加密流当中,这种现象引发了极为棘手的安全难题:我们越是想要保护通信的私密性和安全性,就越可能无意间给不法行为创造机会,令自身安全屏障陷入到“看得见的敌人跑进看不见的隧道”的尴尬境地。

传统网络安全检测手段,特别是深度包检测技术,在明文流量时期收获了突出成果,该技术深入探究网络数据包的应用层内容,并与预先设定的破坏特征库展开比对,以此精确判断潜在风险。但是,一旦流量被端到端加密,数据包的有效载荷就会成为无法读取的密文,深度包检测技术便像是盲人摸象,检测效率大幅下滑,虽然依靠黑名单,端口以及协议分析的检测手段仍然有一定效果,但由于其具有迟缓反应和易于规避的特性,无法有效对付那些快速变化而且经过精心伪装的加密破坏性流量。 诸多权威网络安全组织所出具的报告表明,当下全球网络流量里有超过七成属于加密流量,而且其中含有恶意目的的加密流量份额也在增长,过半的恶意软件家族开始利用 TLS 来隐匿自身的通信活动,“加密形式日益普及”和“恶意行为不断隐匿踪迹”这两种现象相互交织在一起,给既有的安全防护系统带来了空前巨大的考验。

在此种背景之下,依靠机器学习的加密流量分析技术就出现了,该技术被当作打破这一僵局的重点,其核心观点为:虽然不能直接得知加密流量的内容,但是恶意通信行为在外部特征以及行为模式上,常常会遗留难以彻底清除的“指纹”,相比于正常的合法加密通信来说,恶意加密流量在统计特征方面一般会有不少反常之处,数据包的长度分布,传送的时间间隔,流的维持时长等都是如此,这些差别纵使很小,不过经由科学的特征工程和高效的机器学习算法,就可以做到有效地识别并扩大这些差别,进而变成判定恶意行为的有效按照。

本文期望规划并完成一个依靠 Python 的加密恶意流量检测系统,此系统不会试图破解任何加密协议,严格依照隐私保护准则,而是经由剖析和挖掘加密流量的统计特性与行为模式来形成一个高效又精准的智能检测模型,其意义体现在:一方面,该系统可给企业,政府机关等组织的网络安全运维人员赋予一种强大的手段,促使他们在不触犯用户隐私的情况下,很好地察觉隐藏在加密通道中的安全风险,进而大幅优化整体网络安全防护水平,另一方面,该系统具备针对离线流量数据执行回溯分析的能力,有益于安全研究人员展开威胁狩猎以及重建破坏链。 而且,该系统以 Python 为达成语言,并利用图形化界面,具备很强的可移植性,易于操作和维持,适合在中小规模场景下快速部署并推广应用,有着较好的应用前景。

1.2 国内外研究现状

近年来,加密恶意流量检测成了网络安全领域的一股研究热潮,国内外学者针对它展开全面且细致的研究。

早期的研究大多依靠从加密流量里获取统计特征,研究人员察觉,即便不能解密,数据包长度序列,包到达时间间隔,流持续时间,字节分布等统计信息在正常流量和恶意流量之间有明显差别。Y. Xiaodu等人提出的PETNet模型,经由分析明文可感知的加密流量特征,有效地识别出了Cobalt Strike的 HTTPS 流量,这些研究显示出依靠统计特征的检测方法具有有效性,伴随研究不断推进,研究者开始探寻更为深层的元数据特征,比如 TLS 握手过程里的密码套件,证书信息,协议版本等,这些特征给辨别恶意流量带来了更多途径。

研究中的检测算法经历了由传统机器学习发展到深度学习再进一步到融合学习这样的进程,以前大多用随机森林,支持向量机这些传统的机器学习算法。比如吴燕等就把随机森林和 SHAP 方法结合,创建起一个带有解释性的恶意加密流量预测模型,近年来,深度学习因为自身具备很强的特征自行获取能力而广受瞩目,Zihao W.等全面对比了深度学习和传统机器学习在特征识别方面的应用情况。 Gang L. 提出了依托并行自动特征获取的深度学习异常检测框架,杨明芬等人经由有监督自编码器来做 TLS 加密异常流量检测,效果挺好,而且,多模型融合被证实是优化检测性能的一条有效道路,高锐在他的硕士论文里探究了依靠多模型融合网络的加密流量破坏检测技术,Kondaiah C.等人也提议用 TLS 特征和多分类器整合去加强检测能力。

当下研究虽已有明显进程,但仍碰上诸多挑战,其一,怎样既维持检测精度又缩减误报率,依旧是关键难点。其二,模型的即时性和计算复杂度之间的兼顾问题,在实际网络环境下表现得更为突出,其三,模型针对新出现,新变种的恶意流量缺乏自适应能力,极易陷入概念漂移状况,对于前面这些问题,本文打算依托当前的研究成果来规划出一个综合大量机器学习模型的加权合成检测系统,而且给予一个具备全面性,实用性可供执行的平台。

1.3 本文主要工作

本文意在规划并创建起依靠 Python 的加密恶意流量检测系统,其主要研究内容涵盖以下方面:

数据采集与预处理环节要形成起一套面向模型训练的数据集处理流程,此流程具备加载公开数据集(比如CICIDS2017),清理其中污数据以及对数据加以标注的能力,还要能处理离线PCAP文件和即时采集到的数据,并把这些数据转变成适合模型分析的会话级数据形式。

特征提取与选择环节,要从加密流量会话当中获取立体度的统计特征,数据包长度,时间间隔,流速等等都包含在内。还要规划好特征选择机制,凭借随机森林对特征重要性予以评定,从高维特征空间里挑选出最有代表性的一组特征,从而改善模型的训练效率以及泛化能力。

检测模型的形成与加强:形成并训练随机森林,LightGBM,1D - CNN 和 LSTM 这四个检测模型,在比较各类模型性能之后,给出一个依靠验证集 F1 分数加权的整合学习模型,把各个基模型的预测结果结合起来,目标是做到检测准确率更高,误报率更低。

系统设计与达成部分,采取前后端分离架构来开发完整加密恶意流量检测系统,系统后端依靠 Python 的 FastAPI 框架并给出 RESTful API 接口,这个接口承担流量解读,特征获取以及模型推断这些核心任务,系统前端则凭借 Vue.js 框架给予功能的图形界面,用以执行任务管理,成果表现以及可视化分析相关事务。

实验评定与剖析方面,要在CICIDS2017数据集当中全方位考量所提出的检测模型及系统的表现情况,经由准确率,精确率,召回率,F1分数以及误报率这些指标,来证实系统对于加密恶意流量检测任务是否有效且具有优势,并详细剖析各个模型之间存在的性能差别。

2 相关技术与理论基础

2.1 加密流量概述

加密流量在网络通信过程中经由加密算法对原始数据执行编码转换而生成的数据流,目的在于保障数据传送时的机密性与完整性,当下,主要的网络加密协议为安全套接层协议及其继承者传输层安全协议,SSL/TLS协议被全面运用在HTTPS,SMTPS,FTPS等安全服务当中,给上层应用创建起端到端的加密通道,它的工作流程大致包含握手机构,密钥交换阶段以及加密数据传送阶段,握手机构所交互的诸如协议版本,加密套件,证书信息之类的基础数据,便是加密流量分析的关键特征所在。

恶意加密流量指的是不法分子采用加密技术来隐匿自身不良企图,其做法就是把恶意软件的控制指令传递,数据窃取过程以及勒索软件触发之类的操作装进看似正常的加密对话框里头,从而避开传统安全检查手段,目前存在多种此类不良加密流量类别,其中涉及恶意软件的主控中心(C&C)联络,数据泄漏情况,加密挖矿相关流量还有高级可持续性风险事件等等,这些恶意流量的行为特点往往与合法的加密流量有着明显的差别,譬如说发送消息的速率,数据包体积占比,持续运行时延以及对话期限等因素,这就给依靠行为分析展开的监测办法赋予了理论根基。

2.2 流量特征工程

特征工程可把原始网络流量数据转为成适合机器学习算法加以有效学习的特征向量,它是整套检测系统的关键部分之一,就加密恶意流量检测来说,其特征大多源自流量的统计特性和行为模式,并非出自加密内容自身。

基本统计特征是用来表现网络流基本属性的,可以说是最直观的特征来源,包含以下几项(并不限于):流的持续时延,总前向/后向的数据包数量,总前向/后向的字节数量,平均包长,包长的方差,最大/最小的包长等,这些特征可以较好地体现出流量整体的“轮廓”,恶意C&C流往往数据包小但是交互频繁,而视频流则正好相反,其数据包大而且是成串出现的。

时序特征重点放在数据包于时间轴上的分布规律上,目的在于把握流量的动态行为,其中涵盖:数据包抵达的间隔时间,其均值,方差,最大值,最小值以及前后向包的间隔统计量等。恶意流量的时序模式常常具备突发性,周期性或者异常的低频/高频特点,这和正常的人机交互流量存在较大差异。

TLS/SSL元数据具备如下特性,针对TLS加密流量而言,在握手阶段以未加密形式传送的元数据包含诸多可用来实施监测的信息,譬如说,双方所选定的TLS版本,包含的加密套件集合,服务器名称标识(SNI),证书链数据等等,不法分子也许会利用较为陈旧的TLS版本,非主流的加密套件或者自签证书之类的要素,此类特点可当作识别恶意流量的关键依照。

流行特征包含对流间交互关系及网络行为模式的重视,流的数据包方向比例(上行比或者下行比),流的形成模式(是否有完整的三次握手),流与流的关联性等等均属于此类特征,部分恶意软件的行为模式(诸如心跳包,定时重连)可经由这些特征得到有效识别。

特征选择属于特征工程中非常关键的阶段,它致力于从原始特征集合当中挑选出最有助于预测目标变量的特征子集,这么做主要是要去除多余的以及无关的特征,缩减模型的复杂程度,加快训练进程,规避过拟合情况出现,常见的特征选择手段包含过滤法,包装法以及融合法,本文利用融合法里的随机森林来评定特征的重要等级,按照特征创建决策树时对于减小不纯度所作贡献大小实施排序,选取其中Top - N个最为重要的特征用于后面的模型训练之中。

2.3 机器学习与深度学习算法

机器学习算法是达成加密恶意流量智能检测的关键所在,文章着重关乎如下几类算法:

随机森林属于依托决策树的整合学习算法,其利用自助法重采样技术,从原始数据集里有放回地获取大量样本,针对每个样本生成一棵决策树,在树的各个节点划分时,随机选取部分特征执行最适划分,最终经由投票或者求和的方式融合所有树的预测结果。随机森林存在诸多优势,譬如抗过拟合能力较强,能够应对高维数据,可以评判特征的重要程度,因而适合做表格型数据的分类任务。

LightGBM属于依托梯度加强决策树的一种高效执行方案,它采用单边梯度采样以及互斥特征绑定等新技术,在保留原有精度的情况下大幅加快了训练进程,缩减了内存占用量,在应对大规模数据集的时候,LightGBM有着较好的效果,它的直方图算法可以有效地处理连续型特征,很符合诸如网络流量这样数据量庞大且具备高维数特点的数据类型。

卷积神经网络属于深度神经网络的一种,特别适合处理网格状的数据,在图像处理领域成果颇丰,针对加密流量检测而言,可以把各会话的特征向量当作一维序列,经由一维卷积层自行找出局部特征之间存在的空间关系。CNN让卷积核在序列上面滑动,获取局部特征的合成形式,接着借助池化层完成降维操作,最后凭借全连接层给出分类结论,此方法可自行识别特征之间的非线性合成效果,免去了人工设计繁杂特征的必要。

长短期记忆网络属于一种特别的循环神经网络,它被专门设计来应对传统 RNN 在处理长序列数据的时候发生的梯度消失或者梯度爆裂现象。LSTM 经由采用输入门,遗忘门和输出门这三种门控机制再加上一个细胞状态,可以有效地学会序列数据当中的长远依赖关系,在网络流量分析当中,数据包的时序序列本身就具备时间上的依赖性,而 LSTM 能够察觉到这种动态变化的规律,所以针对检测依靠时间模式的不良行为(诸如定期心跳信号,突然传出大量数据之类的情况)来说有着天然的优势所在。

加权融合模型属于把众多基学习器的预测结果加以整合的策略,其核心观念在于,各类模型在不同的特征空间或者样本空间当中也许会有自己的长处,经由恰当的融合就能彼此弥补不足,从而得到比单个模型更为稳定而且更具泛化能力的性能。本文所用的加权融合手段如下:第一,在验证集里面逐一考量各个基模型的 F1 分数,并把它们当作权重;第二,在针对新样本执行预测的时候,要对各个模型输出的概率实施加权求和操作,按照经过加权处理后的概率来确定最终的类别,该方法的好处就是可以根据各个模型实际的表现状况随时调整权重,使得融合模型更多地倾向于那些性能较好的基模型。

3 系统总体设计

3.1 设计目标与原则

本系统设计主要围绕创建依托 Python 的智能检测系统展开,此系统要精准识别加密恶意流量,其核心目的在于提升检测精度,即系统检测的准确率和召回率要较高,并牢牢把控误报率,保证检测结果可信可靠,防止给正常业务带来太多干扰。系统要有良好的可用性,也就是得有用户界面,界面要便于用户上传待检文件,查看检测结果,管理过往任务并导出报表,而且操作流程要清晰简便,具备扩展性,系统应采用模块化设计,各个模块彼此低耦合,高内聚。 模型训练模块和检测模块被分开设置,这利于后续更换或者升级检测算法,特征获取模块要具备灵活的配置功能,从而可以满足新的特征需求。系统要具备稳定性与高效性,系统应该能够平稳地处理一定量的数据,针对离线PCAP文件的分析而言,一定要在合理的时间内做完检测工作,在即时抓包的情况下,也要有基本的即时响应能力,隐私保护方面,系统的核心设计理念就是“不碰加密内容”,所有的检测都是依靠流量的外部元数据以及统计特征来开展,绝对不会去尝试解开或者窥探用户的数据负载,要严格按照隐私保护准则行事。

要达成前面的目标,系统设计按照模块化原则,把系统拆解成数据输入,特征获取,检测引擎,结果输出等独立模块,各个模块职责清晰,这样做利于开发,考察和维持。而且采用配置化管理,模型路径,特征列表,数据目录,设备选取这些关键参数,都是靠配置文件或者环境变量来控制,以此提升系统的灵活性,最后是数据激发,检测模型是依照实际网络流量数据去训练得到的,这样才能切实体现现实世界当中流量分布情况以及进攻形式。

3.2 系统总体架构

本系统采取前后端分离这种架构模式,把用户界面同核心业务逻辑脱离开来,从而提升系统的可守护性与可扩展性,系统的整体架构见图3 - 1,大致包含数据层,服务层,业务逻辑层以及表现层这四个层级。

数据层负责全部数据的持久化存储,其覆盖原始数据,中间数据及结果数据,其中涉及:用以保存上传的PCAP文件,模型文件与报表文件的文件系统;适于保存任务信息,检测结果,模型元数据等结构化数据的SQLite数据库;还有存放模型训练所需原始CSV数据集的目录。

服务层包含许多个独立的服务模块,这些模块给上层的业务逻辑赋予基本的功能支撑,其核心服务涵盖:

流量分析服务经由Scapy库来解析PCAP文件,按照五元组执行会话切割,创建出会话级别的数据结构。

特征获取服务:从已分析的会话里获取立体度统计特征,对齐训练时所用的特征列,创建可用于模型输入的特征向量。

模型推理服务负责加载所指定的机器学习模型,并针对输入的特征向量展开预测,其会给出分类标签以及恶意概率作为输出结果。

模型训练服务会从数据层获取训练数据,接着展开数据清洗,特征工程,模型训练以及评价工作,而且会把训练成果(包含模型文件,指标,特征列表等)存入到数据层之中。

报告生成服务按照用户的要求,从数据库里获取检测结果,并形成成PDF或者 CSV 格式的分析报告。

实时抓包服务调用系统底层接口,并在指定网卡上执行短时抓包操作,由此生成临时PCAP文件。

业务逻辑层属于整个系统的重心所在之处,该层借助对服务层各构件的调动来达成具体业务流程,其主要包含两大关键流程,其一为离线检测流程,此流程接收前端所传来的PCAP文件路径信息,然后先后调用流量分析,特征获取以及模型推断等相关服务,把所得结果存储于数据库之中,并反馈回给前端部分;其二便是模型训练流程,当接收到训练请求以后,便会启动数据加载,清洗,特征挑选,模型训练以及评定等一系列服务,进而更新数据库内关于模型元数据和特征清单的数据内容。

表现层也就是前端用户界面,依靠Vue.js框架搭建而成,它凭借HTTP协议同后端API展开交互。其包含的主要页面有:概览仪表板,检测中心,结果列表,结果详情以及模型信息页,用户经由这些页面来执行文件上传,创建任务,查看结果和导出报表等相关操作。

图3-1 系统架构图

3.3 功能模块设计

根据系统总体架构和业务需求,本文将系统划分为四个核心功能模块,每个模块对应一组特定的功能职责。

图3-2 功能结构图

数据采集与预处理模块充当系统数据的入口处,该模块着重要接收到不同源头所来的原始流量数据,然后把这些数据转成成统一格式的会话数据,它的核心职责在于,一是允许用户经由前端界面上传已脱离线的PCAP文件;二是从服务器事先设定好的显示目录当中选取示例PCAP文件;三是可在指定的网卡上执行短暂的即时抓包操作,当这个模块拿到PCAP文件的时候,会去唤起底层的流量分析服务,按照五元组把数据包整合进双向流会话里,还要针对每个会话算出基本的统计资料,这个模块产生的结果就是一种结构化的会话对象集合,其中的每一个会话都包含了自身的五元组,包序列以及一些初步的统计指标,这样就为后面的特征获取创造了条件。

特征工程模块起到关联原始数据与检测模型的重要桥梁作用,其功能包含两个子部分,在模型训练期间,此模块需从训练数据集里获取高维特征,其中涵盖识别像 CICIDS2017 这种 CSV 数据中的特征列和标签列,并执行数据清洗,归一化以及特征选择任务,特征选择利用依靠随机森林特征重要性评定的插入法,从全部数值特征当中挑选出最为关键的前 N 个特征,从而形成一个特征列列表,在线检测时,该模块接受预处理模块传来的会话对象,遵照训练环节留存下来的特征列列表,依照会话的统计信息来比对并创建特征向量。 特征列清单中有某些特征,在会话统计信息里面查无此物,针对这种情况,这个模块会用0来填补空白,以保证传递给模型的数据维度总是相同的。

检测模型模块属于系统的关键算法部分,其中包含很多机器学习模型的训练及推断逻辑,执行训练的时候,这个模块依靠经过清洗并且筛选过特征的训练集,针对随机森林,LightGBM,1D - CNN和LSTM这四个基础模型实施单独训练,等到各个模型训练完毕之后,在验证集当中考量它们各自的性能指标,然后把相应的模型文件存放在事先指定好的路径里面,这个模块还会塑造起一个加权整合模型,按照各基础模型在验证集里面得到的 F1 分数来当做权重,对这四个基础模型所给出的预测概率执行加权累加计算,在执行推断的时候,该模块会从数据库里面取出最新的模型相关参数信息,从而找到相应的整合模型或者默认的随机森林模型文件,然后依照给定的特征向量来做预测,给出二分类的结果标签以及对应的预测概率,再遵照这个概率值去判断属于哪一级别的风险等级。

可视化与交互模块要以直观,好懂的形式把检测结果展现在用户面前,这个过程靠前后端交互来完成。后端给出RESTful API,用以返回任务列表,检测结果,模型指标之类的结构化数据,前端的Vue.js应用则承担数据可视化的渲染工作,还要处理用户交互事宜,其主要功能涵盖如下几个页面:一是任务综述页面,可显示近来的任务以及系统的状态;二是检测中心页面,设有文件上传,演示文件挑选和即时抓包相关的表单;三是结果列表页面,用表格形式表现全部检测任务并显示其总体风险;四是结果详情页面,针对具体任务里的各个会话给出详细的特征和预测结果;五是模型信息页面,显示当下采用的模型,训练时耗以及其在验证集上的各种性能指标。 该模块具备检测结果导出功能,可以生成 CSV 或 PDF 格式的报告,这样用户就能轻松存档或者做后续分析。

4 系统详细设计与实现

4.1 数据采集与预处理实现

数据采集与预处理属于系统的根基部分,其完成的质量会直接左右后面特征获取以及模型评价的精准度,这个系统主要要应对两类数据源,一类是用来做模型培训的 CSV 文件,另一类则是用来实施检测的 PCAP 文件。

PCAP文件的解读属于这个模块的关键功能,它靠PcapParserService类来达成,该类包含的主要逻辑在于利用Scapy库去执行数据包的解读,而且按照网络流的界定来做会话聚合,所谓会话就是指那些拥有相同五元组的双向数据包组合,鉴于TCP/UDP端口十分关键,所以其他协议的端口号一律设定为0,为了把双向流量纳入同一个会话当中,算法采取了一种反向键机制,即针对每一个数据包都要生成一个标准化的键,并且还要查看它的反向键是否已经位于会话字典里面。如果存在,就把它加进已有的会话;如果不存,在创建一个新的会话,这样处理就能保证不论通讯方向怎样,所有的相关数据包都能够被准确地归入同一个会话之中。

会话统计起到了联系原始PCAP数据与特征向量的桥梁作用,在完成会话聚合之后,SessionStats类承担起计算各个会话统计特征的责任,其包含的特征有:总的前向/后向数据包数;总的前向/后向字节数;流的持续时延;流速率;包长的均值/标准差/最大值/最小值;前向/后向包长的相关统计量;还有数据包到达间隔的均值/标准差,这些特征包含了会话最初的特征表述,给后续与训练特征对齐形成了根基,依靠这样的机制,系统把非结构化的网络数据包序列有效地转换成了结构化且可供计算的会话特征向量。

训练数据的加载和清洗属于模型训练的前置步骤,由DatasetLoader和DataCleaningService协同完成,DatasetLoader的任务是从datasets/MachineLearningCVE这个目录里递归地获取所有的CSV文件,接着把这些文件融合进单个的DataFrame当中,在此期间,它还会把每个样本源自哪个文件的信息留存下来,这样方便日后回溯问题,而DataCleaningService则执行一系列的清理流程,其具体步骤如表4-1所示。

表4-1  数据清洗步骤说明表

步骤

实现方式

说明

列名规范化

cleaned.columns = [c.strip() for c in cleaned.columns]

去除列名首尾空格,避免因空格导致的特征识别错误

异常值处理

replace([np.inf, -np.inf], np.nan) → dropna(axis=0, how="any")

将无穷值转换为NaN后删除包含NaN的行,确保数据质量

去重

loc[:, ~cleaned.columns.duplicated()]

删除重复的列名,避免特征冗余

常量列剔除

_drop_columns():nunique() <= 1 的列

移除所有样本值相同的无信息量列

标签映射

normalize_label()

将原始标签统一映射为二分类标签

标签映射规则如表4-2所示。这一处理将原始的多分类问题转化为本系统所需的二分类问题,简化了模型训练的复杂度。

表4-2  标签映射规则

原始标签

映射后标签

BENIGN(大小写不敏感)

benign

其他任意值(包括各类攻击)

malicious

4.2 特征工程实现

特征工程模块的主要职责在于把经预处理过的流量数据转化为成可供模型学习的特征矩阵,而且要在训练和推断阶段维持特征一致,这个模块主要是靠FeatureSelectorService 和 InferenceFeatureService 这两个核心类来达成的。

在训练阶段,FeatureSelectorService承担着特征选择的任务,它的输入是一份经清洗过且包含全部数值特征以及标签列的数据集,特征选择的关键算法依靠随机森林来评定特征的重要性,其具体落实流程如下:第一,从数据集当中分开特征列与标签列,并且保证特征列全是数值型,接着,初始化一个随机森林分类器,设定 n_estimators = 100且 class_weight = 'balanced'从而解决样本不均衡的情况,然后让这个分类器针对整套训练数据执行拟合操作,等到拟合结束以后,经由模型的 feature_importances_ 属性得到各个特征的重要性分值,按照特征重要性得分由高到低排列顺序,挑选位于前列的 top_feature_count (按照设置,默认数值为30)个特征当作最终采用的特征子集,入选的特征清单会被存储成 feature_columns.json 文件,留给后面的操作和推断环节使用,此方法既缩减了特征维度又加快了模型训练的速度,更为关键的是,去除多余的和无关的特征有益于加强模型的泛化能力及其稳定性。

检测阶段由InferenceFeatureService负责对齐训练期间的特征,从PCAP执行结果得到的每个会话都会被算入一个带有基本统计量的特征字典当中。但是这个字典里的特征键名及数量未必完全符合训练时feature_columns.json中保留的特征列表,所以,InferenceFeatureService的关键任务就是达成一种映射并执行填充的机制,其首先会读取feature_columns.json文件以得到训练时的特征列名清单,针对每一个会话的特征字典来说,它会依次对训练特征列表中的各个特征名执行操作,从会话字典去找到相应的值。 训练特征也许源于CSV里较为复杂的统计量(诸如Fwd Packet Length Min),会话字典的键名(就像total_fwd_packets)也许存在不相符情况,所以得要有一个键名标准化函数_normalize_key,把训练特征名转成会话字典也许存在的键名,若经过此种转换能找到对应值就予以填充;若找不到就填充0.0,依靠这样的对齐机制,可保障在线检测时的特征向量维度与模型训练时期完全一样,进而保证模型能准确执行推理。

4.3 模型构建与训练实现

模型塑造与训练属于系统的核心部分,其中涵盖了随机森林,LightGBM,1D - CNN,LSTM以及加权融合模型的达成和训练过程,所有的模型无论是训练还是考量,其全程均经由统一的接口来执行管理。

model_trainer.py脚本中的一些函数负责训练传统机器学习模型(随机森林和LightGBM),特征挑选结束之后,数据集会被切成训练集,验证集和考察集。这种切割采用分层策略,从而保证各个类别在子集中保留原来的分布情况,针对随机森林模型,其超参数设定如下:n_estimators = 240, max_depth = 18, min_samples_split = 4, min_samples_leaf = 2, class_weight = 'balanced_subsample'。就LightGBM模型而言,其超参数设置为:n_estimators = 240, learning_rate = 0.08, num_leaves = 64, subsample = 0.8, colsample_bytree = 0.8, class_weight = 'balanced',这两个模型会在验证集和考察集上执行评价,计算准确率,精确率,召回率,F1分数以及误报率,训练结束后,利用joblib库把模型存放在artifacts / models目录当中。

在 deep _ learning . py 文件中,1D - CNN 和 LSTM 深度学习模型分别被定义成两个独立的类,即 CNNBinaryClassifier 类和 LSTMBinaryClassifier 类,它们的输入都是经过标准化处理过的特征向量。就 1D - CNN 而言,它的网络架构包含两层一维卷积层,第一层的输入通道数为1,输出通道数为16,核大小设为3,填充值为1,接着是16个输出通道变换成32个输出通道,之后紧跟一个自适应平均池化层,而后与全连接层(Linear(32 * 16, 64))相接,最后以输出维度为1的线性层结束。而 LSTM 网络则只有一层 LSTM 层,该层的输入特征维度为1,隐藏层大小为32,属于单层类型,其输出需经过一次全连接层(Linear(32, 32)),再经由 ReLU 激活及 Dropout 层,才可由 Linear(32, 1) 层产生输出结果。 两个模型均采用 BCEWithLogitsLoss 作损失函数,Adam 作为更新器,系统预先设定 deep_learning_max_train_samples 和 deep_learning_max_valid_samples 参数,它们的默认值分别是 60000 和 12000,这样就能按照类别从训练集里执行分层采样。当模型处于训练阶段时,每个 epoch 会显示训练集和验证集的损失,准确率,精确率,召回率,F1 值以及误报率,从而方便监测训练情况,等到训练结束以后,表现最优的模型权重就会被保存成 .pt 格式的文件。

加权整合模型的达成对于优化整体检测性能十分关键,本系统形成起加权整合模型,把验证集F1分数当作权重来整合四个基模型。在训练阶段,要分别算出随机森林,LightGBM,1D - CNN和LSTM在验证集上的F1分数,把这些分数当做原始权重,并利用_normalize_weights函数执行归一化处理,保证所有权重之和等于1,在推断的时候,整合模型会调用各个基模型的predict - proba方法,得到每个样本属于恶意类别的概率,再依照归一化后的权重执行加权求和,从而得出最终的整合概率。 如果这个概率大于0.5,就判断它是恶意的;否则就是良性的,这种加权融合策略很好地发挥了各个基模型的优点,特别给那些表现良好的传统机器学习模型赋予了较高的权重,于是,整个模型在测试集上的性能要比单个模型更为稳定。

4.4 后端服务与API实现

后端服务依靠FastAPI框架形成,给出RESTful API接口,这个是整个系统业务逻辑的核心所在,各类API均被定义在app/api 目录里面的模块当中,再由main.py 文件完成向应用实例的登记流程。

以检测任务为核心业务流程为例来说,用户经由 POST /api/tasks创建任务的时候,后端先收到一条带有任务信息的请求,系统按照 input_type 和 source_path找到要检测的 PCAP 文件。接着,利用 FastAPI 的 BackgroundTasks 这个后台任务来执行耗时的检测步骤,防止影响 API 的响应,这个后台任务里,系统先后调用 PcapParserService 去分析 PCAP,InferenceFeatureService 创建特征向量,PredictorService 展开模型推断,而且,把每个会话的检测结果(会话标识,预测标签,风险等级,概率分数)借助 SQLAlchemy ORM 写入 DetectionResult 数据表,还要更新 Task 数据表的状态为“已完成”,前端靠定时查询 GET /api/tasks/{task_id}来掌握任务状态,等到任务结束以后,再去请求结果列表予以显示。

数据库设计选用SQLite,并借助SQLAlchemy ORM加以管理,主要规定了三个核心的数据模型,Task用以保存检测任务的相关信息,其中涵盖任务名称,生成时间,输入类型,源文件路径,任务状态等等。DetectionResult用以保留各会话的检测成果,包含任务ID,会话五元组,预测标签,风险等级,预测概率以及会话的统计特征(其为JSON格式),ModelMeta则用来保存模型元数据,涉及模型版本,训练时间,模型文件路径,特征列清单以及在验证集上的性能指标(同样为JSON格式),该模型可帮助系统在启动或者执行检测之时找到最新的模型文件。

表4-3  关键API接口说明

API端点

方法

作用

关键要点

/health

GET

健康检查

返回服务状态,用于监控系统可用性

/api/upload/

POST

上传PCAP文件

接收multipart文件,存入artifacts/uploads目录

/api/tasks

GET

获取任务列表

按创建时间倒序返回所有检测任务

/api/tasks

POST

创建检测任务

接收任务名称、输入类型、源文件路径等参数

/api/tasks/demo-files

GET

获取演示文件列表

返回服务器预设的样例PCAP文件名

/api/tasks/interfaces

GET

获取网卡列表

返回系统可用网卡,供实时抓包使用

/api/tasks/capture

POST

短时抓包并检测

指定网卡和时长,抓包后自动进入检测流程

/api/results

GET

获取结果列表

按任务ID返回会话级检测结果

/api/results/{id}

GET

获取结果详情

返回单个会话的详细特征和预测信息

/api/models

GET

获取模型信息

返回当前模型的元数据和性能指标

/api/reports

GET

生成报告

导出CSV或PDF格式的检测报告

取核心业务流程来说,拿检测任务作例子,用户经由POST/api/tasks创建任务的时候,后端先得到一个带有任务信息的请求,系统遵照input_type和source_path找到要检测的PCAP文件。接着,利用FastAPI的BackgroundTasks这个后台任务去执行耗时的检测流程,免除阻塞API的响应,在后台任务里面,系统依次调用PcapParserService来分析PCAP,InferenceFeatureService来生成特征向量,PredictorService来做模型推理,把每个会话的检测结果(会话标识,预测标签,风险等级,概率分数)用SQLAlchemy ORM写进DetectionResult数据表,并且把Task数据表里的状态改成“已完成”,前端依靠轮询GET/api/tasks/{task_id}来得知任务的状态,等到任务结束以后,再去请求结果列表来做显示。

数据库设计选用SQLite,并利用SQLAlchemy ORM执行管理,着重规定了三个核心数据模型。

存储检测任务信息包含诸多方面,其涉及任务名称,创建时间,输入类型,源文件路径以及任务状态等等。

DetectionResult包含各个会话的检测结果,涉及任务ID,会话五元组,预测标签,风险等级,预测概率以及会话的统计特征(该特征以JSON格式表现)。

ModelMeta: 存储模型的元数据,其包含模型版本,训练时间,模型文件路径,特征列清单以及在考量集上的表现指标(以JSON格式体现),该模型用以系统启动或者检测之时确定最新的模型文件所在。

4.5 前端界面实现

前端界面经由Vue 3框架和 Vite 构建工具而形成,目的是给用户供应一个直观且好用的图形化操作界面,前端应用借助与后端 API 进行交互,达成了用户和检测系统之间的紧密衔接。

概览仪表板用来表现系统整体状态,其包含已检测任务的数量,模型信息概要以及近期检测任务清单,此页面期望给用户给予一个立即掌握系统运行情况的途径。

图4-1 概览仪表板图

检测中心是用户执行检测操作的主要页面,该页面包含三项检测方式的上传界面,第一,文件上传区域,此区域可供用户从本地选取PCAP文件并实施上传,第二,演示文件选择下拉框,用户能够在此直接挑选服务器上预先设定好的样例PCAP文件,第三,即时抓包设置区域,用户可在此选定网卡并设置抓包历时,之后点击按钮便能开始抓包并自动执行检测,所有的操作均经由调用相应的后端API来达成,在操作进程中还会给予加载状态提示。

图4-2 检测中心图

结果列表:以表格形式展示所有检测任务。每一行代表一个任务,包含任务名称、创建时间、任务状态以及一个“查看详情”按钮。用户可以快速筛选和查找历史检测任务。

图4-3 结果列表图

结果详情部分显示,当用户在结果列表页点击“查看详情”之后,系统将会跳转到另一个页面,这个页面会显示出所选任务的详细信息,其中涵盖任务概览(文件名,检测时间),而且还有会话级别的检测结果列表。对于每一个会话而言,它的源IP,目的IP,端口,协议,预测标签,风险等级以及概率分数都会被列出来,用户如果点击“查看特征”这个按钮,就可以看到该会话的详细统计特征。

图4-4 任务结果图

模型信息:此页面展示了当前部署在系统中的检测模型的详细信息。包括模型的名称、版本、训练时间,以及在测试集上评估得到的准确率、精确率、召回率、F1分数和误报率等关键指标。这些信息有助于用户理解当前模型的性能和置信度。

图4-5 模板信息图

前后端交互经由axios库执行封装,各类API请求皆定义于src/api/modules.js文件当中,按照功能模块(譬如 tasks,results,upload 等)加以组织,前端应用在初始化之际,会从环境变量里获取后端服务地址,并把它当作 API 请求的基本 URL,各个 API 函数均会返回一个 Promise 对象,利于在 Vue 组件内部开展异步操作,在检测中心页面上,当用户选定文件并单击上传按钮时,就会调用 uploadApi.uploadPcap(file)来上传文件,倘若上传完毕,便会得到文件路径,接着再调用 tasksApi.createTask()去创建检测任务,然后得到任务 ID。 前端凭借此任务ID开始定时轮询,持续检查任务状态直至任务结束或者失败,此类异步交互模式保障了用户界面的顺畅性。

5 系统测试与结果分析

5.1 实验环境与数据集

若要全方位考量该系统的性能,则需创建专属的实验环境,并且选用权威的公开数据集来执行模型的训练及考察。

硬件环境方面,CPU采用的是Inte rCore i7 -12700K,内存为32GB DDR4,显卡则是NVIDIA GeForce RTX 3060,其具备12GB显存,该显卡可用来加快深度学习模型的训练速度。

软件环境方面,操作系统采用Windows 11,编程语言为Python 3.12,其核心依赖库包含FastAPI, PyTorch 2.0, scikit - learn, lightgbm, pandas, numpy, scapy等,数据库则使用SQLite 3。

网络环境方面,模型的训练和考察均在本地隔绝环境中展开,并未牵涉实际的网络访问。

实验采用CICIDS2017数据集,此数据集出自加拿大网络安全研究机构之手,属于当下入侵检测领域中颇具代表性并广受认可的公开数据集之一,它源于实际网络架构的数据收集,其中融合了摹拟正常网络流量以及各类别(诸如DDoS,Web进攻,暴力破解,僵尸网络等等)的破坏流量。该数据集以两种形式予以公布,分别是PCAP文件和经预先处理过的CSV文件,当前这个系统用处于MachineLearningCVE目录下的这种CSV格式的数据来做模型训练,该CSV文件具备超过80个统计数据特性,而且存在一个标签列,其中包含的样本量高于280万,完成数据清洗及预处理之后,数据集摘要如表5-1所示。

表5-1  数据集摘要表

指标

数值

总样本数

2,827,876

原始特征数

70

benign样本

2,271,320

malicious样本

556,556

类别比例

约4.08 : 1(良性居多)

从表5-1可以看出,数据集中良性样本数量约为恶意样本的4倍,存在一定的类别不平衡性。这种不平衡性更贴近真实网络环境,也对模型提出了更高的要求。

5.2 评价指标

为了全方位,客观地考量模型的性能,本文运用了如下标准的分类评价指标。

准确率指正确预测的样本数占总体样本数的百分比,计算公式为 (TP + TN) / (TP + TN + FP + FN),准确率可体现模型整体判断的正确程度,不过在类别不均衡时,其评价结果也许不太完善。

精确率指的是被预测为恶意(正类)的样本当中,实际属于恶意的比例,其计算公式为 TP / (TP + FP),精确率较高表明该模型产生误报的可能性较小,也就是不太会把正常的流量错误地判断成恶意流量。

召回率指在实际属于恶意的样本当中,被正确判断为恶意部分所占的比例,其计算公式为 TP / (TP + FN),召回率较高表明模型的漏报现象较少,也就是可以有效地察觉大部分恶意流量。

F1分数即精确率和召回率的调和平均值,是衡量模型性能的一项综合性指标,其计算公式为:2 × (Precision × Recall) / (Precision + Recall),此分数可协调精确率与召回率之间的关系,格外适合类别分布不均的情况。

误报率指的就是那种本是良性却误判为恶意的样本占到真正良性样本总量当中所占的百分比,这个概念可用公式表示成 FP / (FP + TN),就安全检测系统来讲,其误报率越小越好,否则若误报现象频繁发生,就会占用安全运维人员大量的精力,引发“报警疲劳”这种状况。

5.3 模型训练结果与分析

在CICIDS2017数据集上,对随机森林、LightGBM、1D-CNN、LSTM以及加权集成模型进行了训练和评估。通过特征选择,最终筛选出的Top 30特征包括:Average Packet Size、Destination Port、Init_Win_bytes_forward、Packet Length Variance、Packet Length Mean、Fwd Packet Length Min、Bwd Packet Length Mean、Max Packet Length、Packet Length Std、Init_Win_bytes_backward、Bwd Packet Length Std、Bwd Packet Length Min、Fwd Packet Length Max、Fwd Packet Length Mean、Bwd Packet Length Max、Fwd Header Length、Total Length of Bwd Packets、Avg Bwd Segment Size、Min Packet Length、Total Length of Fwd Packets、Subflow Fwd Bytes、Subflow Bwd Bytes、URG Flag Count、Bwd Header Length、Avg Fwd Segment Size、Total Backward Packets、Subflow Bwd Packets、Fwd IAT Min、Subflow Fwd Packets等。测试集上的性能指标汇总如表5-2所示。

表5-2  各模型测试集性能指标表

模型

准确率

精确率

召回率

F1分数

误报率

随机森林

99.86%

99.37%

99.95%

99.66%

0.16%

LightGBM

99.89%

99.50%

99.97%

99.73%

0.12%

1D-CNN

97.04%

90.28%

95.21%

92.68%

2.51%

LSTM

92.78%

81.20%

82.39%

81.79%

4.67%

加权集成

99.85%

99.49%

99.75%

99.62%

0.13%

从表5-2的实验结果可以得出以下结论:

传统机器学习模型性能良好,随机森林和LightGBM模型在各个指标上均表现良好,其准确率逼近100%,F1分数大于99. 6%,误报率处于较低水平(0. 12%-0. 16%),这表明从CICIDS2017数据集获取的统计特征对于辨别正常与恶意加密流量较为有效,而且显示出依靠决策树的合成学习方法很契合此类表格型数据的分类任务。

深度学习模型的效果未达预期,1D-CNN和LSTM模型的表现远逊于传统机器学习模型,究其原因大概存在两个方面,其一,当深度学习模型应对结构化且特征清晰的数据时,其自动获取特征的优势难以完全体现出来,而且由于模型复杂度较高,参数量庞大,所以往往要借助大量的数据实施训练,但是本实验所采用的采样策略缩减了它的训练样本数量;其二,CICIDS2017的特征本身就是统计值,并不具备 CNN 和 LSTM 所长于的局部空间联系或者长时间序依赖关系,因而模型无法掌握到有用的模式。

加权集成模型能够进一步优化鲁棒性,该模型融合了四个基模型的预测结果,其F1分数达到99. 62%,误报率为0. 13%,这些成绩很不错,尽管比LightGBM单模型的峰值稍低一些,但要比随机森林好,而且远胜深度学习模型。更为关键的是,集成模型利用融合不同种类的模型来改善系统的学习能力和稳定性,减小单一模型因特定数据分布而失效的可能性,在实际场景当中,这样的鲁棒性十分难得。

集成模型当中各个模型的权重分布情况如下:随机森林的权重为0.997,LightGBM的权重也是0.997,1D - CNN的权重为0.927,LSTM的权重为0.816,可以明显看出,那些性能较好的传统机器学习模型有着更大的权重,深度学习模型的权重比较小一些,这种情况和它们在验证集上的表现相符。

5.4 系统功能测试

对系统整体功能的考察并未局限于模型性能本身,而是全方位展开,目的在于保证其符合设计初衷,该考察包含前端交互,后端API以及关键检测环节等方面。

前端交互执行了对用户界面各项功能性的验证,检测中心针对文件上传功能展开测试,此功能可选取本地PCAP文件并执行上传,而且在上传时显示出进程。文件选择下拉框能正确显现服务器所含全部样例文件,此下拉框可达成任务创建的目的,处于管理员权限环境下时,即时抓包功能能够正常启动并抓取预定时长的流量,还会自动形成相关任务,结果列表以及详情页面能够表现任务及会话数据,风险等级标签(分别对应高,中,低三个层级)亦可依循预测概率来显现。

后端 API 测试利用 Postman 工具考察了全部接口,POST / api / upload 可以正确接收文件,而且给出存储路径,POST / api / tasks 能按照不同的输入类型创建任务,并把状态记入数据库。GET / api / tasks 和 GET / api / results 能够返回正确的数据结构与 HTTP 状态码,如果指定无效的任务 ID 或文件路径,接口会返回 400 或 404 等标准错误码,并带有详细的错误信息。

核心检测流程的考量包含从PCAP剖析直至最终成果入库的整个过程,选取含有正常及恶意流量的混合PCAP文件实施考量。系统可以准确把文件里的原始包转换为会话,并获取相关特征,经由模型推导之后,能给每个会话产生预测标签,而且可以把结果正确地存进数据库,在数据库当中查到的检测结果大致和人工分析所期待的一致,这个整体的考量流程所花费的时间在可接受之列,就拿100MB左右这种中等规模的PCAP文件来说,其解析加考量一共所要的时间不到几分钟。

综上来看,本系统在检测模型的核心性能方面达到了较高水准,其系统功能与用户体验也都符合设计要求,具备成为一款实用的网络安全检测工具的潜质。

6 总结与展望

6.1 工作总结

本文以基于Python的加密恶意流量检测系统为题,鉴于当下网络安全领域存在加密流量中恶意行为难被传统方法检测这样的问题,做了许多研究,设计以及完成相关工作。

深度剖析加密恶意流量检测的背景与难点:文章表明,网络加密技术日益普及之际,攻击者开始用加密通道匿恶意举动,现存依靠深度包检测的办法,在加密环境下存在不足,依托流量行为特征的机器学习检测方法便具备了研究价值和意义,于是,经由设计与开发,形成起一套完备的加密恶意流量检测系统,此系统采取前后端分离的架构,其功能包含数据收集,预先处理,特征塑造,模型训练及检测,可视化交互等各个环节,经由模块化设计,创建起高内聚,低耦合的软件体系,进而提升系统的可守护性和可拓展性。

创建高效流量特征获取及特征挑选机制,该机制可从PCAP文件里分析出网络会话,还可以获取立体度统计特征,采用随机森林的特征重要性评价方法做到了特征挑选,这样就有效地缩减了特征维度,改进了模型训练的速度及其泛化能力。

对比了若干种机器学习模型的性能,包含随机森林,LightGBM,1D - CNN以及LSTM这四个模型,它们都是针对加密恶意流量检测任务的表现展开探讨,依照实验所得的结果来看,在CICIDS2017这个数据集里面,传统机器学习模型所具有的检测性能要远远好于深度学习模型,其F1分数甚至达到了近99.7%这样的高度。

文章给出了加权整合模型,并对其有效性予以证实,为优化模型的鲁棒性和泛化能力,本文形成起依靠验证集F1分数加权的整合模型,此模型融合了四个基模型的预测成果,在测试集上达成99.85%的准确率以及0.13%的误报率,这表明整合学习在加强检测系统稳定性方面颇具优势。

提供了友好图形化的用户界面,依靠Vue.js框架创建前端应用,给用户带来直观又易用的操作界面。用户经由这个界面可以上传PCAP文件,查看检测结果以及管理历史任务,明显减小了系统的使用难度。

6.2 未来展望

本系统已有初步成果,但仍存有改进及深入探究之处,日后的作可从如下几方面开展:

加强针对新型打击的自适应能力,当下模型凭借静态数据集执行训练,由于打击手法一直在变,模型的检测能力也许会随时间下降,日后可以探究采用增量学习或者在线学习机制,使得模型能够持续从新数据当中汲取知识,从而顺应新的流量模式以及打击变种,维持检测能力的前沿地位。

提升特征的深度和广度,当前所用的特征大多源于CICIDS2017的统计特征,日后可采用更为细致的特征,TLS握手中包含的元数据(密码套件,证书信息,SNI等),DNS请求信息,流量的时间序列模式等等,从而改善针对特定种类打击的监测能力。

改良深度学习模型应用于加密流量检测时:当前实验中,深度学习模型并未取得理想效果,但这并不表明它在该领域毫无潜力,后续可考察更为复杂的网络架构,诸如Transformer或者图神经网络之类,用以把握流量里愈加复杂的时空联系及互动情形,而且,也要探究怎样更为妥善地把统计特性同原始序列资料融合起来,进而制订出更具效力的深度学习输入形式。

改进系统时需注意其即时性,当下该系统对于离线文件的检测表现尚佳,不过针对即时流量的处理力却不强,日后可以经由改良特征获取算法,采用更为轻量化且占用资源少的模型,运用多级检测机制等途径来加强系统的吞吐量并缩减处理时延,进而适应高速网络环境里随时检测的需求。

加强系统解释性,安全运维人员需知晓模型做决策所依循的准则,日后可融合SHAP或者LIME这类模型解释方法,针对各项检测结果阐述特征重要性考量因素,使得分析人员明确哪些因素促使了“恶意”判定,进而提升对报警信息的信赖程度并优化溯源速度。

更多推荐