杨 姣,高仲合,王来花
(曲阜师范大学 软件学院,山东 曲阜 273100)
随着网络时代的到来、科技的不断发展以及数据每时每刻的不断产生,使得对数据的挖掘分析变得尤为重要。面对如此数量巨大和不断变化的数据,原来对于静态数据异常检测的算法已经不再适用于动态数据流。因此,网络数据流的异常检测技术要结合网络数据流的特点,实现对流式数据的异常检测[1]。虽然中内外很多专家对异常检测做了研究,但是目前的检测系统还不能简单推广用于面向大规模网络的数据流异常检测。所以,有学者提出将数据挖掘算法应用到数据流异常检测中。虽然这样已经达到了较好的效果,但因为网络数据流具有数据量大、时间连续、无限不可知、到达快速、随时间改变的特性[2],所以不可能对每一秒钟产生的新数据都及时存储和处理,会导致新的数据不断产生且不断覆盖旧的数据,每次处理的仅仅是新数据,旧数据则将被全部遗漏,成为当前数据挖掘用于网络数据流检测需要解决的问题。面对网络流量实时数据规模不断扩张的趋势,如何使用有限的存储空间和较好的时间复杂度,快速处理这些流式数据,并及时获取有用信息,实现对数据流异常情况的及时监测,是解决大数据环境下实时处理数据的时效性问题的关键。
网络流量数据采集于实际的网络流量,反映了网络流量在时间上的特征,并且是按时间的先后顺序形成的序列,也就是典型的时间连续序列[2]。因此,可以将时间序列分析用在研究网络数据流的异常流量检测问题上。目前,学者大多采用静态阈值进行监测。这个方法易懂也易于实现,但是并不适合不断变化的动态数据流,且不能保证能够每一秒钟产生的数据都可以采集到,从而不能获得高的实用性。为此,本文提出一种基于DT-KNN的网络数据流异常检测方法。这是因为网络流量是典型的时间序列,将网络数据流异常检测用时间序列的分析表示出来,能够成功解决动态数据流的诸多问题。
在网络流量时间序列分析中,通过均值表示一组数据的集中趋势,通过方差表示一组数据的波动[3]。在一段时间序列中,用两个采集值的差值表示这一条链路流量值的平均距离(Mean Distance),平均距离表示这网络流量段时间序列的距离集中趋势,可以作为检测的基准。平均距离的计算公式如下:
式中,v1,v2…,vn为链路流量值集合。
根据平均距离的概念,本文提出累计距离(Cumulative Distance),并将其应用在KNN算法中,最终得到DT-KNN算法。累计距离反映了待检测点的变化趋势,具体计算
公式如下:
式中,x1,x2…,xk为未贴标签点的k个最近邻点的集合;vx1,vx2…,vxk是每个时间点对应的数据流值的集合,根据距离的远近给与不同的权值;w1,w2…,wk为每个时间点所对应的数据流的权值集合。其中,式中计算了距离未知类型点最近的k个做邻居点的数值。结合K-NN相关理论及计算过程,给出基于DT-KNN的网络数据流异常检测算法流程,如图1所示。
图1 基于DT-KNN的网络数据流异常检测算法流程
结合基于DT-KNN的网络数据流异常检测算法流程,选择Storm平台作为处理平台,对基于DTKNN的网络数据流异常检测算法进行实现,关键是给出DT-KNN算法在Storm平台上的拓扑方案。
Storm是一个免费开源的分布式实时处理平台,提供了一个简单、可靠的连续流数据处理环境[4],主要利用“spouts”和“bolts”的组建来定义和操作信息源。由于Storm能够提供一个简单可行、安全可靠的连续数据流处理环境,并且能够对数据流进行分布式处理[5],因此本文选择Storm作为基于DT-KNN的网络数据流异常检测算法的实现平台。Storm的工作原理如图2所示。
图2 Storm集群工作原理
DT-KNN算法在Storm平台上的拓扑如图3所示。
图3 DT-KNN算法在Storm平台上的拓扑
从图3可以看出,基于DT-KNN的网络数据流异常检测算法主要通过Spout在Storm平台上实现数据处理[6]。Spout A接收初始化数据,Spout B将接收到的数据存储在KAFKA中,Spout C接收时间计算,Spout D接收初始化参数,Spout E将KAFKA接收到的数据进行查询[7]。最终,Spout B和Spout C被发送到本地节点。Local Bolt是一个分布式部分,到达的数据均匀分布到每个Local Bolt线程;Spout A和Spout B被发送到DT-KNN Blot,DT-KNN Bolt使用从Spout A和Spout D发送的初始化数据和参数初始化全局微集群[8]。DT-KNN Bolt通过初始化数据和参数初始化全局微集群由Spout A和Spout D传输。在Spout C发送时间信息后,Global Bolt开始从Redis中提取数据,并逐步合并全局微集群的结果,实现全球微集群的增量更新。Macro Clustering BoltBolt从Spout E接收用户查询参数,对Global Bolt中的全局结果执行聚类查询,并将查询结果发送到 Print Bolt。
实验选择KDD CUP99数据集作为实验数据。这个数据集包含两类,一类是普通数据,另一类是攻击数据。共有311 029条数据记录,每个数据包含41维属性,包括34维连续属性和7维离散属性[9]。所有的实验数据都进行了归一化处理。
实验使用的仿真工具是MATLAB,硬件环境是4.0 GHz的PC,操作系统为Windows 7。
3.2.1 判断指标
运算速度和精度是网络数据流异常检测算法性能衡量的主要指标。其中,精确度是指检测出来的网络数据流异常点占实际异常点的比例,即:
式中,s为算法运行过程中检测到的真正异常点个数;|o|为算法运行过程中检测到的疑似异常点个数。
3.2.2 准确性测试
在网络数据流异常检测算法的准确性测试中,采用检测率和误报率作为衡量标准,采用KNN算法和DT-KNN算法对同一类型攻击和对未知类型攻击的检测能力进行试验分析。
(1)对同一类型攻击的检测实验
按照2∶1的比例将数据分为训练数据集与测试数据集,测试集与训练集均包含所有攻击类型。测试集的数据不分组,直接进行测试,攻击类型占总测试数据的9%;训练集中数据分为4组,每组攻击类型只有一种,占该组数据的2%。实验结果如图4所示。
图4 DT-KNN算法和KNN算法的检测率与误报率
从图4可以看出,与KNN算法相比,在检测率与误报率方面DT-KNN算法具有明显优势,由此可以验证DT-KNN算法在网络数据流异常检测中的准确性。
(2)对未知攻击的检测实验
训练集中分为训练集A和训练集B,测试集包含主要攻击类型是DoS攻击。首先,训练集A用于生成分类模型,训练集B用于更新分类模型,最后使用测试集进行测试[10]。实验结果如图5所示。
图5 未知攻击检测结果
由图5可以看出,DT-KNN算法在检测率、误报率与对未知数据的检测率方面都优于KNN算法,验证了DT-KNN算法在网络数据流异常检测中的准确性。
对同一类型攻击的检测实验和对未知攻击的检测实验结果可以看出,相比于KNN算法,DT-KNN算法都具有更好的网络数据流异常检测效果:DTKNN算法的时效性明显高于KNN算法;随着网络数据量的增加,KNN算法运行时间的增加幅度明显高于DT-KNN算法。由此可以得出结论,DT-KNN算法在网络数据流异常检测中具有比KNN算法更高的时效性。
网络数据流具有数据量大、时间连续、无限不可知、到达快速、随时间改变的特性[11]。结合这些特征,将累计距离的概念引入KNN算法,提出采用DT-KNN算法对网络数据流进行分析,用以预测待检测点的变化趋势,最终给出DT-KNN算法在Storm平台上的拓扑图。通过MATLAB软件仿真分析可知,相比KNN算法,DT-KNN算法具有更高的准确率和更好的时效性,在网络数据流异常检测中具有一定的应用价值。