观成科技:基于自监督学习技术的恶意加密流量检测方案
1.前言
当前,随着加密协议技术的广泛应用,互联网用户的个人流量隐私得到了有效保护,但与此同时也衍生出一系列安全问题。由于加密流量在传输过程中无法被解密,导致传输信息呈现“黑盒化”特征,这为恶意攻击者利用加密流量实施网络攻击创造了条件——攻击者可借助加密通道隐蔽开展攻击行为,而防御者难以通过传统手段察觉。加密流量的不可见特性使得传统针对明文流量的防御技术面临失效困境,安全研究领域开始探索引入新兴技术手段,其中机器学习检测技术近年来备受关注。该技术通过提取协议字段、时序信息等专家特征,收集现网已知的正常流量与异常流量样本,利用随机森林等算法训练检测模型来进行检测。然而,在实际应用中,该方法的检测能力受到两类因素制约:
- 特征提取依赖研究人员手工筛选自认为可区分恶意与非恶意流量的信息,但恶意流量来源广泛且成分复杂,手工提取的特征难以有效表征流量差异;
- 训练集需由数量相近的恶意与非恶意流量构成,但现实中恶意流量收集难度大、样本量少,导致数据集存在严重的不平衡问题,进而影响检测效果。
针对上述挑战,我们提出基于自监督学习的检测方案:首先采集充足的白流量样本,借助计算机视觉领域成熟的VIT-Transformer架构,将流量包抽象为图像形式,通过模型自动完成特征提取与预训练;随后利用少量恶意流量对预训练模型进行微调,构建流量检测模型。现网环境验证表明,该方案具备优异的检测性能,对现实场景下的加密流量安全检测具有重要实用价值。
2.方案原理与设计
2.1 方案背景
自监督学习作为一种创新的机器学习范式,致力于挖掘数据自身蕴含的内在结构与语义信息,有效缓解有监督学习面临的标注数据稀缺困境。该技术通过设计精心构造的代理任务,从海量未标注数据中自动学习特征表示,最终结合少量标注数据完成模型微调,实现数据价值的最大化利用。
在计算机视觉领域,自监督学习通过数据增强策略构建正负样本对:对原始图像样本进行随机裁剪、颜色抖动等操作生成语义相似的正样本,代表同一目标的不同观察视角;同时将其他图像样本定义为负样本。通过优化对比学习目标函数,不断拉近正样本间特征距离,推远负样本间特征距离,从而学习到具有鲁棒性的图像浅层表征。
自然语言处理领域中,以BERT为代表的预训练模型则采用独特的代理任务设计:通过掩码语言模型(MLM)随机遮蔽句子中的部分单词,训练模型基于上下文预测被掩盖词汇;结合下一句预测(NSP)任务判断句子间逻辑连贯性,从而深度捕捉自然语言的上下文语义信息。
反观现有的加密流量检测模型,大多依赖有监督学习框架。这类模型依赖人工标注数据构建训练集,不仅耗费大量人力与时间成本,且在实际应用中面临诸多挑战:现实场景中存在海量未标注流量数据,而恶意流量样本的标注难度大、获取成本高,导致标注数据难以满足模型训练需求;同时,当模型面临新任务、新领域或新场景时,需重新收集并标注数据进行训练,这不仅显著增加训练成本与时间开销,还可能引发模型泛化能力不足的问题,难以适应动态变化的网络安全环境。
2.2 MoCo架构介绍
MoCo(Momentum Contrast)是由何恺明团队于2019年提出的一种基于对比学习的无监督视觉表示学习方法。其核心目标是通过构建动态字典和大规模负样本,解决计算机视觉领域无监督学习中特征一致性不足和字典规模受限的难题,最终在多个下游任务中超越有监督模型的性能。
MoCo采用采用对比学习的思想来利用大量无标签数据的信息,具体来说是通过对同一个样本进行数据增强为正样本,而不同样本之间为负样本,其数据增强的结果具有相似性,通过拉进正样本之间的距离,拉远负样本间的距离来进行浅层表征的学习。MoCo一共有两个编码器f_q(Query Encoder),f_k(Key Encoder)其中f_q在训练的过程中进行梯度更新,f_k不进行梯度更新,而是通过对f_q的参数进行动量更新。对于编码器的训练将其视为一个字典查询的任务,。假设有一个编码的查询q以及一组编码的样本{K0,K1,K2...}即字典中的键值,字典通过一个先进先出的队列来维护,具体来说每次训练结束,最早batch所在的样本出队列,而最近的batch所在的样本入队,正样本x_q经过编码器f_q得到特征向量q=f_q(x_q),另外一个正样本x_k经过编码器f_k得到另一个特征向量K+=f_k(x_k),其为与query所匹配的键值(Positive key),而队列中其他样本为负样本,其为与query不匹配的键值(Negative key)。通过计算对比损失函数InfoNCE如下所示,用梯度下降算法来更新编码器f_q,用动量更新来更新编码f_k的参数
采用MoCo模型具体优势在于以下几点:
- 动态字典
MoCo将字典视为一个队列,以往的方法中字典的大小通常与batch_size相等使得负样本数量规模有限,而MoCo将字典大小设置成为一个超参数,每一次将batch_size大小的样本送入到字典中,当队列满时,会将队列中最旧的批次淘汰掉,来扩展字典的大小。
- 动量更新
MoCo通过动量更新来保持字典中样本的一致性,具体来说通过设置动量m的值来保证字典解码器的缓慢更新
2.3 具体方案
- 将流量按照五元组进行划分,五元组主要指(source IP,source Port,destination IP,destination Port, transport-level protocol), 通过按照五元组划分来区分不同的网络通信会话。
- 对数据集进行数据清洗,去除与流量识别无关的协议如DNS协议,去除一些无效的状态包,其没有携带任何的payload信息,例如TCP的三次握手,其主要作用在于建立连接,并没有携带任何信息。
- 对于一个给定的flow我们选取其前n个packet,每一个packet我们进行如下预处理,去除packet的前38个字节,主要用来去除一些强干扰特征,例如MAC地址受到采集环境的影响,而IP地址在给定的数据集下是有限的,训练集和现网中差异很大,如果没有将IP地址去除,可能会导致在训练中效果很好,而在现网中效果差,在去除无关信息之后选取前1500个字节,不够1500字节的进行补0,对于flow的表示是[n,1500]的矩阵,对矩阵进行归一化操作,最后flow的表示如图5-1所示。
图5-1 Flow的数据表示
- 对于样本flow记为x我们进行如下数据增强,示意图如图5-2所示。
图5-2 数据增强示意图
随机重传:随机选择flow序列中的某个packet将其随机复制多次,以模拟现网中的数据包重传如图5-3所示。
图5-3 TCP重传
随机丢包:随机选择flow序列中的某个packet进行删除,以模拟现网中的数据包丢包,最后结果如图5-4所示。
图5-4 数据包丢包
- 选取resnet50作为编码器来进行预训练,预训练任务为一个分类任务,两个正样本x_q=aug(x),x_k=aug(x), x_q和x_k在语义上是相似的为正样本,通过训练编码器区分正样本和负样本学习流量的浅层表征,预训练pipe-line如图5-5所示。
图5.5 预训练Pipe-line
- 在微调阶段,冻结预训练模型线性层之前的参数,在少量有标签的数据集下进行有监督学习进行微调,采用的交叉熵损失函数计算loss,来进行梯度更新,从而更好的适应不同的任务。
3.实验结果
在现网场景下,收集现网正常加密业务TLS协议流量约2000万条,进行预训练,然后使用公司积累的加密恶意攻击流量约100万条进行模型微调。在实验验证环节,对现网中约2天的白流量约480万条进行检测以及使用非微调使用的黑流量验证集约20万条进行验证,结果如下。
真 实 预 测 | 白流量 | 黑流量 |
白流量 | 4770000 | 30000 |
黑流量 | 5000 | 195000 |
这里用两个指标来评判模型效果,即准确率以及误报率。经计算,准确率:(4770000+195000)/5000000=99.3%,误报率为(30000+5000)/5000000=0.7%,从结果来看模型检测效果可以满足现网环境。
4.结论
针对传统机器学习算法检测恶意加密流量能力有限的问题,引入视觉领域的MoCo模型,采用对比学习的思路进行流量自监督学习方法,收集大量的无标记数据进行训练,而后仅采用少量恶意流量进行模型微调达到检测效果。这种方法的优点在于无需大量的标记数据,符合目前国内的安全流量场景,是一种加密流量破局的有效方法。观成科技团队将持续深入运用自监督学习技术,争取在未来能够检测出更多的未知威胁。