基于机器学习的加密流量的特征工程方法研究和系统设计

2021-07-26 01:19郑玉谦陈晓璠
网络安全技术与应用 2021年5期
关键词:数据包分类器加密

◆郑玉谦 陈晓璠

(1.江西电信政企(信产)分公司 江西 330000;2.南昌航空大学经济管理学院 江西 330063)

1 引言

当前,基于SSL/TLS 的网络应用的流量呈现不断增长的趋势。据Gartner 的预测,到2019年底,加密流量占整个网络应用流量的80%[1]。使用加密流量对于用户来说,能够很好地保护用户的个人隐私,比如Google 倡导的网站提供的https 服务,并对不提供https 服务的网站在其Chrome 浏览器中提示网站存在风险。然而,这种加密流量使得基于深度包检测(Deep Packet Inspection,DPI)的网络安全设备无法有效地通过检测数据包内的载荷(payload)信息来发现恶意流量,因为DPI 技术需要通过基于关键特征字符串匹配的形式来识别恶意软件,这使得很多恶意软件也借助这一方式来躲避网络安全设备的检测。恶意软件通过加密的通道与服务器之间构建命令与控制(Command and Control,C&C or C2)信道,并通过这种加密信道来执行连接外网服务器,下载木马程序,对外传播窃取的机密文件等行为。为了能够实现对加密流量的检测,在通信链路中间卸载https显然并不是一种具有普遍适用性的方式,该方式仅适用于银行等特殊业务应用场景,对于绝大多数应用来说,一方面是增加额外的计算开销,另外一方面也有侵犯用户隐私的风险。

随着近几年人工智能技术的发展,让使用机器学习或深度学习来对加密流量进行直接检测的这一方法变为可能。就如同机器视觉可以通过提取人走路的步态特征来识别一个人一样,机器学习方法通过对加密流量中的数据包、会话、流(flow)信息的特征进行提取,也能够实现对加密流量中载荷(payload)内容的分类和识别。通常用在这里可以使用的机器学习算法如随机森林(Radom Forest)、最近K邻居(k-nearest neighbor,k-NN)、逻辑回归(Logistics Regression,LR)、支持向量机(Support Vector Machine,SVM)等。机器学习方法对特征工程的性能有较高依赖,也就是说当特征选取合理的时候,机器学习模型训练的性能较好,而反之则性能较低。尤其在加密流量分类这个应用场景中,特征的选取与机器学习的主流应用之间处理方式不同,往往需要资深的安全专家来归纳有效的特征。这就使得面向加密流量分类应用场景中,使用机器学习建模,很难达到较高的性能,换句话说,很难达到较高的准确性和识别率。

深度学习是一种在训练过程中自动选择和构建特征的机器学习方法。卷积神经网络(Convolutional Neural Network,CNN)[2]在计算机视觉领域已经取得了很大的成功。CNN 通过卷积层提取特征,并通过多层神经网络训练对不同特征的反馈和权值。但在加密流量分类的应用场景中,无论是数据包还是会话或flow 信息都没有办法直接应用CNN 来构建识别分类网络。

本文将讨论应用机器学习和深度学习方法构建加密流量分类的特征数据集的方法,在第二部分将回顾加密流量的特征工程方法和深度学习方法在信息安全领域的相关应用,在第三部分提出一种结合人工特征工程和深度学习构建特征数据集的方法,在第四部分设计了一种对加密流量进行检测的完整的系统框架,最后给出对此问题进一步研究的讨论。

2 文献综述

通常情况下,可以使用两种方法来检测基于SSL/TLS 加密的流量,一种是基于重签名证书技术,另一种需要能够获取服务端的私钥和证书。在文献[3]中对这一问题进行了讨论,并指出这两种方法跟检测设备的部署位置也具有高度的关联性。赛门铁克(Symantec)公司推出的加密流量管理(Encrypted Traffic Management,ETM)产品和解决方案就是基于这一思路,通过使用高性能的SSL 认证和解密模块以及相应的管理工具来实时卸载和管理加密流量以达到对加密流量内载荷的可见和可检测[4]。思科(Cisco)公司在2018年推出了一项名为加密流量分析(Encrypted Traffic Analytics,ETA)的技术和产品[5],并声称通过此技术无须解密SSL/TLS 流量即可获得很高的恶意流量检测性能。在文献[6]中,通过对flow 提取特征,实现了一种基于神经网络的恶意代码检测方法。在文献[7]中,作者提出了一种基于KNN 的流量分类策略,并声称在一些特定的环境中,能够准确地在HTTPS 流量中发现恶意流量。文献[8]研究了加密的Skype 流量的检测方法,通过投票的方式,从决策树分类器、逻辑回归分类器和贝叶斯网络分类器中选出最终的流量分类。文献[9]首次提出了基于图像纹理对恶意代码进行识别的方法,通过将恶意代码二进制文件转换为图像,进而比较图像的相似度,并对恶意代码文件进行分类。文献[10]在文献[9]的基础上使用了基于深度卷积神经网络的方法,利用深度学习方法来自动完成特征工程。文献[11]将深度学习的方法应用在了流量数据上,通过将流量数据转变为图片,再使用深度神经网络方法来自动提取流量数据的特征并构建相应的分类器。

3 基于集成学习和深度学习的加密流量特征工程方法研究与设计

3.1 传统方法比较

基于文献[12]中提出的方法,将网络流量转换为图片需要经过三个处理步骤。这三个步骤分别是:

步骤1 流量字段提取,即需要将多个的字段从原始流量数据中提取出来。这里的原始流量数据根据需要表示的类型不同,可以是PCAP 格式的完整流量数据包,也可以是应用层的载荷数据。将提取出的字段拼接成一个二进制文件作为输出文件。

步骤2 流量数据清理,包括两个操作,操作一是将介质访问控制(Media Access Control,MAC)地址和IP 地址随机化,操作二是进行数据包的去重和去空。操作一的作用是当流量在同一个网络中产生时,MAC 和IP 将失去对模型提供分类识别的贡献度,因此将其随机化。操作二将不带有应用层载荷的数据包和完全相同的数据包清除,避免在深度神经网络学习特征时引入偏差。

步骤3 生成图像数据,对所有上一步骤的输出文件进行按照784 字节统一长度,即对超过784 字节的文件进行截断,对不足784字节的文件在后面补上0x00。这一步骤能够统一生成28x28 像素大小的图片。

文献[12]中直接使用了卷积神经网络对于流量生成的图片训练分类器,来识别各种恶意流量,这种方法虽然能够很好地利用CNN自动抽取特征的性质,但是同时也丢失了一定的信息,比如SSL/TL S 会话的统计特性,协议头特性等。在文献[13]中详细分析了这些特性,证明了一些特征字符串和会话统计特性能够很好地区分恶意流量,比如几乎100%的非恶意流量TLS 会话使用0x002f 作为TLS_RSA_WITH_AES_128_CBC_SHA 的密钥算法套件(ciphersuite),而使用0 x0035 作为TLS_RSA_WITH_AES_256_CBC_SHA 的密钥算法套件,而对于恶意TLS流量会话,则几乎100%使用以下三种密钥算法套件:0x000a(TLS_RSA_WITH_3DES_EDE_CBC_SHA)、0x0005(TLS_RSA_WITH_RC4_128_SHA)、0x0004(TLS_RSA_WITH_RC4_128_MD5)。

文献[13]通过加入大量的统计特性,增加了特征的维度,这种方式在一定程度上能够有效地提高模型的性能,减小偏差的发生,但是过多的特征维度会带来过拟合的风险,而且很多统计特性具有较高的应用场景依赖性,即只在特定场景下才存在特定的统计规律性。或者说在不同的应用场景下不同特征对模型目标的贡献度是不同的,即不存在所有应用场景都通用的特征集合,因此需要根据真实的应用场景的数据对特征集合进行筛选,选择出一个对模型目标具有高贡献度的特征子集。

集成学习是通过数据训练一组弱分类器,再通过集成策略将所有基分类器组合成一个强分类器,再通过强分类器得到相对最优的分类结果的一种机器学习方法。集成学习往往比使用单个分类模型具有更好的性能[14]。集成学习方法除了可以用于分类问题,也能够用于特征选择,可以从特征中挑选出对模型结果具有较高贡献度的特征,从而提高模型的稳定性和性能[15]。

3.2 数据集构建

综合上述方法的优缺点,我们采用将自动特征提取与特征工程方法结合的方式,再通过扩维和随机森林特征选取来构建整个用于训练的数据集。具体的方法包括以下步骤:

步骤1 采用卷积神经网络从流量图片中自动提取特征向量。采用的CNN 结构的第一层为卷积层,采用32 个通道的5x5 的卷积核进行特征提取,第二层是一个2x2 的max pooling 层,第三层为一个采用64 个通道的5x5 卷积核的卷积层,第四层是一个2x2 的max pooling 层,第五层为一个具有1024 个节点的全连接层,作为特征向量的输出,最后将输出一个1024 维的特征向量。

步骤2 通过特征工程选取特征:1)一个会话流的metadata 信息,包括入方向字节数、出方向字节数、入方向包数、出方向包数、源/目的端口、会话的总时长(秒),并将这些特征进行标准化处理;2)会话前50 个数据包的长度和到达间隔的转换概率矩阵;3)字节分布向量,使用一个长度为256 的数组,用来存储每个数据包中每个字节对应的值出现的概率,该概率值等于每个字节值出现的次数除以该数据包中的总字节数。4)未加密部分的TLS 协议头信息,包括从客户端的TLS hello 消息中获取的TLS 版本号、密钥算法套件的序列等信息、从服务器端的TLS hello 消息中获取的TLS 扩展信息(TLS extensions)、客户端公钥长度、RSA 加密算法文本或DH/ECDH 公钥等信息。

步骤3 基于随机森林的特征选择:1)用前两个步骤生成的特征数据集构建随机森林;2)计算每个决策树的袋外误差err1,对于第i 个特征,随机改变其在所有样本中的值,并再次计算该决策树的袋外误差err2,求得第i个特征的重要性权值这里n 是决策树的个数;3)对计算出的特征重要性权值进行排序,删除重要度最低的t 个特征;4)重复2-3 步,直到剩余m 个特征。

通过以上的三个特征工程的步骤能够使得生成的特征数据集合具有较高的应用场景适应能力和模型泛化能力。该特征数据集合对协议特征和会话统计特征都具有较好的覆盖度,并且以深度学习方法实现的自动特征提取还能够增加更多不可直接观测和直观选取的具有隐藏规律的特征,通过随机森林方法进行特征选择后,有效地将这两部分特征工程中不适应场景的特征数据去除,从而降低过拟合的风险,并且提高了特征对模型稳定性和性能的贡献度。

4 基于机器学习的加密流量系统设计——加密恶意流量检测系统

基于以上深度学习的特征工程算法,笔者及所在团队构建了加密恶意流量检测系统。

4.1 系统模块架构

加密恶意流量检测是一种基于监督学习的检测方法,在机器学习中,监督学习模型的泛化能力决定了模型的可用性。加密恶意流量是由恶意代码样本产生,而恶意代码也在不断地自我进化,因此在设计加密恶意流量检测系统时,除了特征工程外,原始数据本身也对最终的检测结果起到关键作用。为了能够让模型可以不断学习和进化,需要设计一种能够自动通过更新的恶意代码样本并使得模型的准确度不断进化的自动化学习引擎。

如图1所示,加密恶意流量检测系统主要包括威胁情报引擎、恶意代码家族库、沙箱、恶意代码家族流量库、流量分析引擎、流量探针、机器学习引擎几个模块。威胁情报引擎会周期性地爬取最新发布的恶意代码样本和该样本的相关情报,并通过分类算法对威胁情报提供的对恶意代码样本的描述进行分类,形成恶意代码样本的家族分类,并存入恶意代码家族库中;恶意代码家族库将其中的恶意代码样本放入沙箱进行动态执行,让恶意代码样本被激活并与外部服务器产生连接,从而生成恶意代码的流量数据,并将该数据按照不同的恶意代码家族分类后保存到恶意代码家族流量库中;恶意代码家族流量库将正样本(已标记的恶意代码流量样本)送入流量分析引擎进行特征提取,同时通过在企业侧部署的流量探针从企业内部捕获的负样本(标记为非恶意的正常业务流量)也送入流量分析引擎进行特征提取;流量分析引擎通过传统特征工程和基于CNN 的深度神经网络特征工程提取正负样本的流量特征后,将生成的特征数据集送入机器学习引擎,机器学习引擎会在特征数据集上使用支持向量机等机器学习算法进行分类器的训练,最终学习出恶意流量的分类器。

图1 系统模块架构

4.2 系统功能

整个系统能够通过威胁情报引擎和流量探针不断采集正负样本,通过增加样本空间来强化机器学习引擎所产生的模型的性能,即不断提高模型的准确率,将使用机器学习方法来识别和分类恶意流量的过程流水线化,能够快速地应用和不断调优各类基于机器学习的检测算法和模型。

5 结束语

文章对基于机器学习的加密流量检测方法进行了讨论,分析了当前主要的两种基于特征工程和基于深度学习的方法的优缺点,并提出一种结合的特征工程方法来优化特征工程的效果,从而够获得比原来单独应用两种方法更好的性能,但会产生较多的特征向量,在计算时具有较高的计算代价,因此进一步还可以考虑应用主成分分析(Principal component analysis,PCA)的方法对最终生成的特征进行降维,之后再用来进行分类器训练,这样能有效降低计算量并且进一步降低过拟合风险。本文所提出的加密恶意流量检测系统的框架能够有效地以流水线的方式生产恶意流量的分类器,具有较高的应用参考价值,下一步工作将考虑结合日志分析等多引擎交叉验证技术来进一步提高恶意流量分类器的分类结果的可信度。

猜你喜欢
数据包分类器加密
二维隐蔽时间信道构建的研究*
一种新型离散忆阻混沌系统及其图像加密应用
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
一种基于熵的混沌加密小波变换水印算法
SmartSniff
基于差异性测度的遥感自适应分类器选择
基于实例的强分类器快速集成方法
加密与解密
认证加密的研究进展
基于层次化分类器的遥感图像飞机目标检测