基于卷积神经网络的Android流量分类方法*
2020-03-26郭益民张爱新
郭益民,张爱新
(上海交通大学 信息安全工程学院,上海 200240)
0 引 言
智能手机应用程序已成为访问电子邮件、银行等个性化计算服务的主要手段。然而,这种快速部署和广泛可用的移动应用已经使它们成为各种恶意网络流量的目标。恶意流量数据通常利用移动应用的更新机制,用恶意代码感染现有的移动应用程序,从而危及智能手机的安全。最近的统计数据显示,基于Android平台的恶意流量占移动恶意流量的97%。用户的私有数据如IMEI、联系人列表和其他特定于用户的数据是攻击者的主要攻击目标,对移动用户的安全和隐私构成了严重威胁。因此,迫切需要识别和处理Android平台的恶意流量数据。
流量分类在网络流量工程中具有重要意义。通过将流量准确分类,可以实现服务质量保证(Quality of Service,QoS)、资源合理化使用、恶意软件检测以及入侵检测等目的[1]。近年来,对于流量分类工作的研究在不断发展。最初的方法是基于端口的流量分类方法,虽然简单高效,但由于出现了很多应用程序伪装端口号或不使用标准注册端口号的情况,使得这种分类方法的准确度不断下降[2]。文献[3]提出使用深度包检测机制(Deep Packets Inspection,DPI)进行流量分类的研究方法,解决了基于端口的分类方法带来的问题。然而,这种基于数据包中载荷信息进行流量分类的方法只适用于未加密流量且计算开销很高。因此,基于统计特征的新一代方法应运而生。这种分类方法依赖于统计特征或时间序列特性,能够处理加密和未加密流量。基于统计特征的分类方法通常采用经典的机器学习(Machine Learning,ML)算法,如文献[4]提出使用无监督聚类算法(K-means)进行流量分类,取得了90%的分类准确度。后来的文献相继使用监督式分类算法(如C4.5、随机森林(Random Forest))与半监督式分类算法进行流量分类,取得了较高的分类准确度[5]。基于机器学习的流量分类方法由于依赖特征的选取,限制了它们的可推广性。
随着人工智能和大数据时代的到来,深度学习算法在图像识别、自然语言处理以及情感分析等各大领域都取得了很好的应用。这种学习算法通过训练过程自动选取特征,可以用来解决使用机器学习算法进行网络流量分类的特征选取问题。文献[6]使用多层感知机(Multilayer perceptron,MLP)进行流量分类,并与传统机器学习算法的流量分类效果作比较,但是由于文中各分类器使用的分类数据集并不相同,其最终结果无法比较深度学习算法与机器学习算法对于流量分类的准确度。文献[7]首次提出一种端到端的流量分类模式,使用传统一维卷积神经网络结构将数据处理为特定的文件形式,通过卷积神经网络构造特征空间,然后使用分类器进行分类,取得了较好的分类结果。本文在其研究基础上重新设计了一维卷积神经网络模型,从神经网络结构、数据预处理方式、代价函数以及梯度优化方面,提高了一维卷积神经网络对于加密应用程序的流量分类效果。
1 基于卷积神经网络的Andriod恶意流量分析
本节提出将卷积神经网络直接应用在原始流量数据上进行恶意流量分类,而不需要进行流量特征提取。该方案包括Android流量数据处理和卷积神经网络训练两个关键流程。
1.1 Android流量数据处理
数据预处理是指将采集到的流量数据文件从原始流量(pcap格式)转换至CNN输入数据(idx格式)的处理流程。本文运用文献[8]提出的数据处理流程,将数据处理过程分流量切分、流量清理、图片生成和IDX转换4个部分。
1.1.1 流量切分
将一份原始流量数据切分为多个流量数据,输入格式为pcap。如果输出形式为“会话数据+所有协议层数据”或“流数据+所有协议层数据”,则输出流量数据格式还是pcap;如果输出形式为“会话数据+应用层数据”或“流数据+应用层数据”,则输出流量数据格式为bin。
1.1.2 流量清理
该步骤将经切分后的数据流量进行流量清理。首先进行流量匿名处理,分别在数据链路层和IP层的数据中随机分配MAC地址和IP地址;由于bin格式的流量数据中只有应用程序层,没有数据链路层和IP层数据,所以经匿名处理后的结果文件是空。另外,内容相同的流量切分信息包经流量清理后会生成相同的文件,而重复的数据在训练CNN时会产生偏差,因此需要删除空的和重复的文件。
1.1.3 图片生成
将流量数据进行可视化处理,并以位图格式存储、显示。具体地,将清理过的流量数据文件按照28×28=784 Bytes进行统一长度处理。如果文件长度大于784 Bytes,则截取其前784 Bytes数据,小于784 Bytes的文件在后面补充0x00。统一长度后的文件转换为bmp图像,即一个字节对应一个像素,如0x00表示黑色,Oxff为白色,输出位图为png格式。本文对恶意广告产生的流量、恶意勒索软件产生的流量、恶意恐吓信息流量以及恶意短信SMS流量进行可视化处理。在这4类流量中随机选取一幅图片,如图1所示。试验表明,不同种类流量的图片区分度均较为明显,使用图片分类的方法可以取得良好效果。
图1 流量数据位图可视化效果
1.1.4 IDX格式转换
应将上文所述的位图格式文件成功转换为IDX格式。IDX格式是大多数CNN格式输入文件的标准格式,因为在每一个IDX文件中都包含一个图片集的像素信息和统计信息。
1.2 CNN网络结构
卷积神经网络的特点主要表现在3个方面[9]。
(1)在生物视觉神经系统局部感受野的启发下,提出各层神经元的部分连接或稀疏连接思路。下一层的某个神经元只与上一层的部分神经元连接,而不是传统的全连接方式,极大地减少了连接数量。这表现在图像上,即为每个像素只与周边若干像素的关系是最紧密的。
(2)权值共享或参数共享。即每个神经元与前一层的所有连接都采用相同的权重值,进一步减少了要训练的参数数量。每一组相同的连接常被称为一个过滤器或卷积核,用以生成一个特征映射,对应一种特征的提取。实际应用中,通常会使用多个过滤器,可以提取多个特征,生成多个特征映射。
(3)池化或下采样。池化的作用是为了得到更具代表性的特征值。对于卷积层获得的特征映射,通常会将其分割成多个相邻小区域并进一步简化为一个单值,这个简化过程即为池化。
通过上述过程,卷积神经网络可以大幅度减少训练参数的使用,并且其产生的图像在性能上有所改善。经过上述过程生成的图像具有3个特性,分别为位移不变、尺度不变以及旋转不变。
流量数据的实际概念是按层次结构组织的一维字节流。这类数据主要由字节、数据包、会话和结构信息组成。这类序列类型数据非常适合采用卷积神经网络进行流量分类。进一步地,预处理后的流量数据规模和每张图片的尺寸都类似于MNIST手写体识别数据信息,因此本文采用LeNet-5[10]的CNN结构,模型结构如图2所示。
图2 Android流量数据处理的卷积神经网络结构
流量数据处理的具体过程如下。首先输入层接收IDX格式的流量图像信息,并适当调整像素值,让其由0~255直接转换为0~1,实现归一化。在卷积层C1运算处理时,流量数据经过卷积层C1,由尺寸为5×5的卷积核进行处理。由于C1层共具有32个通道,所以最终会生成32个尺寸为28×28的特征图。经过处理的特征图进入池化层P1,该层会对特征图进行一次2×2的最大值池化处理,最终生成为32个尺寸为14×14的特征图。经过池化操作的特征图进入第二个卷积层C2,该卷积层的卷积核尺寸与C1相同,都是5×5,但是该层共具有64个通道,所以最后会生成64个尺寸为14×14的特征图。然后进入第二个池化层P2,在此层会对特征图进行2×2的最大值池化操作,与P1层操作相同,所以共生成64个7×7的特征图;接着会被两个全连接层处理,最后输出数据其输出节点数分别为1 024和10。最后,使用一个Softmax函数将输出结果转换为0~1的概率值。CNN各层输入、输出及参数设置如表1所示。
表1 恶意流量分类CNN结构及参数设置
2 仿真与分析
对上述基于卷积神经网络的Andriod恶意流量分析方案进行仿真测试与分析。仿真实验平台采用TensorFlow深度学习框架,运行在Ubuntul6.04,64位操作系统上;实验数据集为CICAndmal2017[11]。训练时,应将步长调整参数mini-batch调整为50,其损失函数应该采用交叉熵函数,具体优化方法应采用梯度下降分析法。由于本文主要是将网络流量区分为恶意流量和正常流量,因此进行2分类实验。
实验结果数据如表2和表3所示,其中表2为基于本文方案在样本数据与实验数据在不同比值下的恶意流量分类识别效果,表3则将本文方案与传统机器学习方案支持向量机(Support Vector Machine,SVM)、逻辑回归(Logistic Regression,LR)、朴素贝叶斯(Naive Bayes,NB)以及深度信念网络(Deep Belief Network,DBN)[12]进行了对比分析。
表2 基于卷积神经网络的恶意流量分类测试结果
表3 与传统机器学习提取特征算法对比
本文采用以下标准评价卷积神经网络的流量分类方法:精确度(Accuracy,A)、查准率(Precision,PRE)、查全率(Recall,REC)、F1值(F1-Score,F1)。精确度A被用来检测实践方法的整体应用效果,查准率P、查全率R以及F1值被用来分析某一种流量的识别效果。表4为预测分类与实际分类正例负例的混淆矩阵。
表4 正例负例混淆矩阵
查准率是指测试集提取出的正确信息与训练集和测试集提取出的信息比值:
查全率是指测试提取的正确信息数与训练样本中信息数的比值:
F1值是指预测准确率与查准率的调和平均值:
准确率是指正确信息数占所有训练集以及测试集的数目:
正常流量与恶意流量的各种形式的效果有一定差别。恶意流量产生的4种效果与正常流量产生的4种效果相比更加均匀,正常流量产生的4种效果差别较大。产生这种现象的主要原因是两种流量的来源不同:通常正常流量的来源为部分设备的仿真,而恶意流量来自于真实的网络环境。这个差别产生的具体原因至今未知,相信未来会有进一步的探究。
分析结果可知:CNN与支持向量机的分类方法相比具有更好的效果,其查准率和查全率与之前最好结果相比分别提高2.13%和5.87%;CNN在与朴素贝叶斯的流量分类方案相比也取得了非常好的效果,查准率和查全率分别提高了2.93%和11.87%;CNN在与DBN的流量分类方案中的实施结果也比以往的方法有所提高,其查准率和查全率分别比以往提高了2.9%和0.9%;但是,CNN在与逻辑回归的流量分类方案中,流量分类方面表现并不突出,即使查全率提高了9.8%,但是应用效果并不好,查准率下降0.7%。由此可知,在逻辑回归方面的方案的实施效果并不好,其流量分类效果一般,这与流量的性能大幅度提高形成了鲜明对比。经过查看最后生成的图片发现,本次生成图片的区分度比以往生成图片的区分度效果好,具体原因还未可知,需要进一步探究分析。
综上所述,本次的4个实验基本上都已经取得较好的实验效果,可以验证本文提出的观点,即基于CNN的端到端的加密流量分类方法具有有效性。
3 结 语
本文主要研究分析传统的流量分类技术,并且根据实际应用情况做适当改进,提出新的使用卷积神经网络学习方法。该方法可以将恶意流量进行分类,在实际应用中可以将其直接运用到移动端(Android)领域。这种方法打破常规,可以不需提前得知流量特征,在应用中直接将原始流量看作数据输入,使卷积神经网络模型自动学习流量特征并执行分类,达到了自动学习流量特征的目的,更有可能获得全局最优解。实验结果表明,本方法在公开数据集CICANDMAL2017上改进了目前的最好结果,验证了本方法的有效性。
现实生活中,可以对网络流量进行异常检测的方法有很多,常见的方法可以分为4类,分别为基于分类、基于统计、基于聚类和基于信息论。本文应用的是基于分类的检测方法,是最常见的一种方式。这种对网络流量的恶意检测方法属于机器学习中有监督学习的一种。实验过程中,有监督学习的一个难点是训练数据必须为有标签数据。但是,在现实应用过程中,带有标签的网络流量数据是不常见的,所以其采集具有一定难度,有时无法采集有标签的网络流量数据。在实际采集过程中,多数情况获取的流量都是无标签流量[13],不具备应用价值。部分传统对网络流量进行异常检测的方法,如基于聚类方法更加适合现实生活的应用。因此,在充分借鉴传统方法的基础上,如何采用少量有标签流量数据和大量无标签流量数据进行半监督的训练模型,甚至完全不采用带有标签的流量数据,只采用无标签流量数据进行无监督的训练模型[14],是基于深度学习的网络流量异常检测方法在实际应用过程中急需破解的难题。因此,后续工作将利用其他机器学习的方法解决使用少量标签的数据问题。