APP下载

基于机器学习的网络异常流量分析系统

2020-04-14方洋李旗张瑞霞

电脑知识与技术 2020年4期

方洋 李旗 张瑞霞

摘要:该系统使用机器学习方法对异常流量进行判别,设计一个异常流量的检测模型,通过对HTTP请求头字段进行特征提取,形成多维特征库,应用到机器学习的高斯混合模型中,进行验证和评估。经过测试证明特征计算方法在高斯混合模型中有较好的准确率和召回率。

关键词:异常流量;特征计算;高斯混合模型;sklearn

中图分类号:TP393

文献标识码:A

文章编号:1009-3044(2020)04-0024-02

1 背景

恶意软件的传播数量越来越多。根据国家互联网应急响应中心[1](CNCERT)发布的安全报告,2018年,CNCERT全年捕获计算机恶意程序样本数量超过1亿个,涉及计算机恶意程序家族51万余个,较2017年增加8132个;全年计算机恶意程序传播次数日均达500万余次。在这背景下可以看出,恶意软件对当前社会带来了巨大的影响,在如此大的威胁下,恶意软件不仅对用户和企业带来直接的经济损失,它的快速变种能力也对研究人員和查杀技术带来很大的困扰。传统的通过静态规划匹配的网络异常检测方法在动态、复杂的网络环境中难以检测出未知异常和攻击类型,不能满足网络安全检测的要求,机器学习具有自学习、自演化的特性,可以适应复杂多变的网络环境,能够检测出未知的异常,满足实时准确检测的需求[2]。本课题可以通过使用机器学习的方法,利用其自学习的特性,对异常流量进行学习,通过使用合适的机器学习算法,可以发现未知的异常流量。

2 高斯混合模型和EM算法

高斯混合模型(Gaussian Mixed Model,简称GMM)是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数形成的模型。通俗地讲,无论观测数据集如何分布以及呈何种规律,都可以通过多个单一高斯模型的混合进行拟合。

高斯混合模型(GMM)就是指对样本的概率密度分布进行估计,而估计釆用的模型(训练模型)是几个高斯模型的加权和(具体是几个要在模型训练前建立好),每个高斯模型就代表了一个类(Cluster),对样本中的数据分别在几个高斯模型上投影,就会分别得到在各个类上的概率,然后我们可以选取概率最大的类所为判决结果[3]。

期望最大(Expectation Maximization,简称EM)算法,称为机器学习的十大算法之一。它是一种从不完全数据或有数据丢失的数据集中求解概率模型参数的最大似然估计方法。高斯混合模型由均值、协方差和混合系数共同决定,所以在进行迭代的过程之前,首先需要为均值、协方差以及混合系数选择一个初值,然后交替进行期望步骤和最大化步骤[4]。

与K-means算法相比,EM算法在达到收敛之前经历了更多次的迭代,每次迭代都需要更多的计算量,因此,通常在进行高斯混合模型训练时,用K-means算法找到高斯混合模型的一个合适的初始化值,接下来用EM算法进行迭代求解,可以方便地将协方差矩阵初始化为通过K-means算法找到的聚类样本协方差,混合系数可以被初始化为分配到相应聚类中的数据点所占的比例。

3 异常流量检测

3.1 数据预处理

3.1.1 样本收集

本课题使用的数据集UNSW-NB15[5]来自新南威尔士大学,数据集包含研究人员分析出的CSV标记集和数据集的PCAP原始流量,该数据集是在linux下使用tcpdump分别在2015年1月22日和2015年2月17日进行捕获,其中包含了许多正常的上网流量和异常流量。同时我们需要单独的恶意样本对训练模型进行验证。恶意样本主要来自MALWARE-TRAFFIC-ANALYSIS.NET,该网站上包含了自从2013年以来安全研究员分析的恶意软件样本,网络流量样本,以及恶意软件行为。

3.1.2 HTTP流量提取

根据课题的研究背景,本系统主要分析流量中的HTTP协议,因此在对数据集的提取过程中,只需要提取HTTP流量作为数据集,并根据需要对HTTP请求头部进行字段的提取。

目前需要的字段主要有:Method,URI,Version,Host,User-Agent,Accept,Connection,Content-type,共8个字段的信息以及一些标识字段:时间,源端口,源IP,目的端口,目的IP共5个字段的信息,并将这些字段信息保存在CSV(逗号分隔符)文件中。

3.1.3 数据集处理

UNSW-NB15数据集中提供了恶意流量标记集,该标记集中包含对原始流量中发生的恶意事件进行分析,包括HTTP的异常流量、恶意软件的产生的流量和各种0day漏洞的利用过程中产生的流量,分析的结果包含流量的开始时间,结束时间,攻击类别,协议,源IP,源端口,目的IP,目的端口,攻击名称,攻击参考等信息。

通过标记集给定的信息,对原始中的HTTP异常流量进行提取,按照所需字段存储在CSV格式文件中,并在最后新增字段,以数字1表示异常流量,并对其他HTTP流量也进行字段提取,以数字0表示正常流量,最终得到异常流量数据集25535条,正常流量数据集26215条。

3.1.4 数据集划分

根据2.6.3中提取出的数据集,将数据集中异常流量和正常流量以1:1的比例混合而成,这里将使用25000条异常流量和25000条正常流量组成数据集并将其划分为训练集和测试集,使用sklearn模块中的train_test_split()方法,将数据集的70%划分为训练集,30%划分为测试集。

3.2 机器学习算法应用

3.2.1 特征提取

通常异常流量在Host,URI,User-Agent这三个字段特异性较高,为了减少模板数量,需要对这三个字段进行泛化。对于URI字段,将字母部分用符号“#”代替,数字部分用符号“@”代替。

对于HTTP流量头部的每个字段,我们需要对出现的每个关键词分配一个分数,要获取关键词,需要对字段进行分词处理,这里将通过空格,符号符号“,”,符号“二”对字段进行分词,并通过计算关键词的条件概率作为分数,对于一个字段中包含多个关键词的处理方法,使用加权平均的方法对整个字段进行分数计算,加权平均使用的权值为关键词在字段值所处的位置。

通过对HTTP流量所需字段的分数计算,最终得到的是包含所有字段的分数组成的矩阵,该分数矩阵就是接下来高斯混合模型所需要的训练数据。

使用高斯混合模型对训练数据进行均值计算,发现该分数矩阵的均值,在URI,Host,User-Agent这三个字段区别很明显,因此初步认为,这三个字段是判断正常流量和异常流量的关键。

3.2.2 模型训练

使用sklearn中的GaussianMixture方法,对数据集进行高斯混合模型的训练,同时,使用sklearn中的LogisticRegression方法,对URI数据集进行训练,通过调整参数,将得分最好的模型保存起来,用于对新的未知数据进行测试。

3.2.3 参数设置

(1)对于GaussianMixture方法,将参数设置为以下:

① n_components=2,表示高斯模型个数,相当于分类中类别的数量

② init_paramS=,kmeans,,表示初始化参数的实现方法,这里使用默认值

③ covariance_type=,fuir,表示协方差类型,使用full表示使用完全协方差矩阵

④ random_state=0,表示随机数种子,使用默认值

⑵对于LogisticRegression方法将参数设置为如下:

① class_weight:(1:2*validCount/badCount,0:1.0),表2K恶意样本所占的权重为2*正常样本/恶意样本,而正常样本所占的权重为1,这样做是为了避免样本不均衡的问题,在后面章节会介绍对于样本不均衡问题时,可以通过设置权重来解决。

② 其他均使用默认参数

4 系统测试

通过训练的结果可以看到,在训练集上通过机器学习的模型评估依据可以看到准确率为86.62%,精确率为78.83%,召回率为87%,AUC的值为92.24%,说明该模型是可用的,通过对训练数据划分比例进行调整,发现即使训练数据划分为90%,得到的结果并没有明显的提升,此时判断模型为欠拟合,根据查阅相关资料得知,高斯混合模型为生成模型,对数据集要求比较大,数据集越大,越能很好的估计概率密度,而目前使用的数据集一共才5万条,对于网络流量来说,还远远不够,相信在拥有更丰富数据集的情况下,训练的效果会更好,而且分类效果也会更好。

5 总结

本课题主要是根据使现有的技术和算法,实现一个能对网络上数据包进行实时检测或对数据包文件进行检测的系统,通过提取HTTP流量中请求头的字段,经过模板自动化生成算法,将数据转换为高斯混合模型中使用的分数矩阵,之后使用高斯混合模型进行训练得到最终的评定模型,可以对异常流量做出判断因为训练数据量不够的问题导致对异常流量判断准确度不是很高的情况,只要拥有足够多的数据量进行训练,该系统的检测效果会更加准确。

参考文献:

[1] 国家计算机网络应急技术处理协调中心.2018年我国互联网网络安全态势综述[J].国家互联网应急响应中心,2019.04.

[2] 陈胜侏国胜,祁小云,等.基于机器学习的网络异常流量检测研究[J].信息通信,2017,30(12):39-42.

[3] 海沫,张游.Spark平台下聚类算法的性能比较[J].计算机科学,2017,44(81):414-418.

[4] 于冰洁.基于高斯模型的异常检测算法[D].徐州:中国矿业大学,2017.

[5] TheUNSW—NB15dataset.https://www.unsw.adfa.edu.au/un-sw—Canberra—cyber/cybersecurity/ADFA—NB15—Datasets/.

[通聯编辑:代影]