晁绪耀
(郑州职业技术学院,河南 郑州 450001)
异常是指数据集产生于完全不同的机制、并非随机偏差的、与众不同的数据,与其他数据显著不同。异常流量检测技术需要建立正常使用模式,并将系统或用户行为与该模式做比较,对流量数据的偏离程度做出判断[1]。在一个异常流量检测系统中,无法保证所定义的度量可以将所有异常行为模式准确的表示出来,因此需要不断修正、更新正常模式。异常网络流量包括:网络扫描、DDoS攻击、网络蠕虫病毒、网络故障及性能问题导致的异常等。网络扫描是常见的异常网络流量之一,其主要表现就是在单位时间内同一个源IP连续访问大量不同的目标IP或同一目标IP的不同端口[2]。DDoS攻击即拒绝服务攻击,大量不同源IP对同一目标IP发送数据包,其主要目标是消耗服务器端资源,迫使服务器停止响应,因此会在单位时间内发送大量数据包,占用带宽资源。网络蠕虫病毒主要目的是消耗系统资源,造成大量网络流量。蠕虫病毒主要利用操作系统漏洞传播扩展,且传播方式多种多样。仅仅通过局部链路上的流量测量数据很难检测到这类异常,需要分析全网的流量特征或者通过分析、统计全网的流量进行检测[3]。由网络故障和性能问题导致的异常最典型的就是文件服务器故障、网络内存分页错误、广播风暴、瞬间拥塞等。此外,用户网络资源使用不当或者恶意下载也会导致流量异常,浪费网络带宽。
随着数据挖掘技术的不断发展,数据挖掘领域也融入了统计学、机器学习、数学等各个领域的算法,在异常网络流量检测中,很多方法都具有较强的实用性及指导意义。数据挖掘技术在异常网络流量检测中的过程如下:系统先收集入侵数据集,捕获流量;再对其进行预处理,将其处理成适用于数据挖掘技术的形式;最后,对数据进行模式提取,如能够建立正常模式,系统就判定为正常流量,如不符合正常模式,系统就判定为未知流量数据,产生警报[4]。这些方法用于异常流量检测时,为了更好地适应流量数据或获得更好的性能,每种方法会在特定的条件下进行改进,或者与其他方法互相结合,达到优势互补的目的。具体而言,基于数据挖掘的异常网络流量检测常用的方法包括以下几种。
基于分类的异常检测是根据训练数据集的特点构建分类器,如流量为未知类别,可通过分类器将其映射到已有类别中,学习算法的输入为已有类型标记的训练数据集、某类特定的分类算法等,数据集用于构建预测分类模型及分析分类模型,以预测未知类别的审计记录数据,最终根据预测分类及分析模型判定数据类型是否异常。有监督学习方法由于利用了数据分类标记信息,所以检测出异常数据的准确率高于无监督方法,不过有监督学习方法也有一定的不足,比如该方法可以将未知类别的数据分到已有类别标记中,但无法对新的入侵类别做出准确分类;该方法需要利用类标,然而网络中很难获得准确且具有代表性的标记信息,因此学术界通常会采用半监督学习方法标记部分数据,再通过其他方法传播标记,标记出无标记数据[5]。
分类算法叫做有监督学习方法,聚类算法则为无监督学习方法,新收集的网络流量无法通过有监督学习方法做到准确、快速地标记类别,因此聚类方法通常应用于当前网络环境的异常流量检测。聚类算法是将物理或抽象对象的集合分为多个小组,每个小组均由相似的对象组成,一个小组叫做簇,小组中的对象与其他小组中的对象有所不同。聚类算法应用于异常网络流量检测时无需标记数据类别,不用将数据按照训练数据或测试数据分类,因此可以处理网络中异构、高维的海量数据,且聚类算法具有较强的自适应能力与自学习能力,反应速度也更快。
数据挖掘领域中的数据通常以向量组的形式存在,数向量维数表明了数据的特征数。如果抽取数据特征过多就会出现问题,过高的向量维数会增加向量之间的计算量,造成维数灾难的发生,并且某些聚类算法中维数过高时,相比在低维空间,两个数据点在高维空间的距离匹分度更加不明显。特征选择算法就是从所有特征集合中选择出具有代表性的子集在保留属性的可解释性的基础上组成新的特征空间,一旦出现流量异常问题,某些属性取值就会发生急剧变化[6]。
基于数据挖掘的异常网络流量分析检测系统包括训练阶段与异常检测阶段。在训练阶段,将整理好的正常流量数据与异常流量数据输出神经网络结构进行训练,达到训练要求后再进入异常检测阶段。系统采集实时网络流量信息,将整理过的具有异常特征属性的数据送出训练完成的神经网络结构,最终判断流量信息是否异常及异常的种类。如果网络异常流量无法准确识别,将其特征属性存入特征库由网络安全管理员进行判断,系统会针对异常流量生成告警信息,并在交互界面展现异常的类型。基于上述需求,本研究提出的基于数据挖掘的异常网络流量检测系统包括:数据采集、数据整理、数据挖掘与异常检测、告警4个基本模块。
数据采集模块的主要目的是为数据挖掘提供数据集,为保证网络流量采集的实时性与完整性,本研究中系统设计采用了tcpdump工具。tcpdump工具兼具高效性与轻量级的特点,不会对原系统性能产生影响,采集到的数据以文件的形式保存于系统服务器,再由数据整理模块提取到检测需要的特征属性。Sniffer,tcpdump等Linux环境中常用的数据采集工具都是基于BPF的Libpcap函数库实现的。其中,tcpdump是一款强大的网络数据采集分析工具,其定义为dump the traffic on a network,其可对协议、主机、网络及端口提供逻辑语句,功能强大,能够灵活截取策略。tcpdump截获的数据还是没有完全解码的十六进制形式,可以采用带“-w”参数的命令将其存储于文件中,再利用其他程序对文件进行解码,以方便、直观地分析数据,该部分功能由数据整理模块来完成[7]。数据采集模块设计过程中系统网卡采用混杂模式,用于采集正常流量及异常流量。Linux环境下需要添加对tcpdump进程的守护,以采集到实时的流量信息。
数据采集模块采集到的数据是以十六进制的形式存储于服务器中,数据整理模块则需要对采集到的数据进行解析,提取需要的特征属性,主要用于后续的数据挖掘。从某种程度上讲,异常检测的准确性由特征属性的选择而决定的,因此数据整理模块需要提取合适的异常流量特征属性。本研究提出的异常网络流量检测系统主要对其实用性及检测能力进行评估,针对实时流量信息进行设计,文件解码后取出异常检测需要的特征性。在选择特征属性时,采用以固定时间为单位进行提取,降低数据挖掘部分的计算压力,减少资源占用,降低对系统性能的影响。特征值信息以文件的形式保存下来。本模块中特征属于包含了不同寻常种类的特征,包括TCP数据包中URG、ACK、PSH、RST、SYN、FIN标志位置的包数量、协议数据包的长度、IP数据包分片偏移量、ICMP数据包等。针对不同的属性,结合常见的异常类型计算正常情况下及异常情况下各种属性相关的程度,可以得到以下几种能够对数据挖掘部分神经网络训练过程进行指导的异常流量特征属性:
(1)tcp_pkt_rata描述单位时间段内TCP协议报文数量与总报文数量的比;(2)udp_pkt_rate描述单位时间段内UDP协议报文数量与总报文数量比;(3)icmp_pkt_rate描述单位时间段内ICMP协议报文数量与总报文数量比;(4)syn_synack描述SYN位置报文数理SYN+ACK被置位报文数的比,正常情况下该值接近1;(5)syn_fin描述SYN报文个数与所有FIN置位的报文数比,该值正常情况下接近1;(6)rst_rate描述RESET置位报文数与TCP报文总数比;(7)icmp_udp描述CIMP不可达报文数与UDP报文数比;(8)reply_echo描述ICMP请求与ICMP应答报文数比;(9)traffic_fitted描述单位时间段内拟合到[0,1]范围内的流量大小;(10)pkt_fitted描述单位时间段内拟合到[0,1]范围内的数据包数量。
异常流量特征与记录时间具有密切相关性,因此在提取特征属性将其转化为单位时间内UDP报文数量占总报文数量的比率等。通过本模块将采集到的数据解码成系统可以识别的格式,按照流量信息的源地址、源端口、包大小、协议等对流量数据包的基本信息进行整理,计算出单位时间内各个协议数据包数量占数据包总数的比值、数据包平均字节数等与异常种类匹配的信息,并与基本信息一起记录到.log文件中。采用shell脚本完成文件解码及信息提取,间隔一定时间执行shell脚本,解析.pcap文件提取特征信息,执行脚本后将提取到的数据保存于本地,并删除.pcap文件,避免记录文件过大而影响系统性能的问题[8]。
完成数据挖掘后将异常网络流量送入告警模块产生告警信息,再将无异常流量信息文件删除,整个异常网络流量检测即完成。
虽然网络安全技术越来越先进,但是网络攻击技术的发展也不断水涨船高,且计算机网络大规模、爆炸式的增长,互联网数据信息也越来越多,导致网络攻击的潜在可能性也越大。为了营造一个更加良性、健康的网络生态环境,就需要研究更多、更有效的网络安全保障方法。本研究提出的基于数据挖掘的异常网络流量分析与检测系统是一种快速、高效的异常流量检测识别方法,能够帮助网络安全管理人员排查网络异常,维护安全的网络环境。