-
当今时代,网络环境错综复杂,安全问题日益突出。由于僵尸网络的C&C服务器具有更高的隐蔽性,僵尸程序经常被实施大规模网络攻击的黑客所采用,几乎所有的DDoS攻击和80%~90%的垃圾邮件攻击都是由僵尸网络发起的[1]。因此,僵尸网络已成为网络安全中不容忽视的问题。
早期的僵尸网络主要采用IRC[2]和HTTP[3]作为通信协议,具有单点失效问题,很容易被检测和摧毁。如今,大多数僵尸网络使用P2P技术来创建C&C(命令和控制)机制以增强网络通信隐蔽性[4]。相比采用IRC和HTTP协议的僵尸网络,不具有中心节点的P2P僵尸网络具有更大的威胁性和隐蔽性。所以,P2P僵尸网络越来越受到攻击者的青睐,P2P僵尸网络检测[5]也成为安全领域的研究热点。
目前,P2P应用已经引起了互联网流量爆炸式的增长,这对数据存储以及实时分析来讲都是一个巨大的挑战。因此,在检测P2P僵尸网络的早期,对网络中的非P2P流量进行过滤就显得尤为重要。
本文针对P2P僵尸网络提出一种两阶段的检测方法:第一阶段基于端口判断、DNS查询以及会话中数据流计数来过滤非P2P流量;第二阶段基于会话特征来识别P2P僵尸网络,其中本文使用基于会话特征的检测方法有效降低了需要分析的数据条数。然后采用基于决策树模型的随机森林算法对流量进行分类识别,从而检测出僵尸网络。同时,在UNB数据集上将本文算法与另外两种已有算法做了实验对比和分析,实验结果表明随机森林算法对P2P僵尸网络的检测准确率更高。
HTML
-
本节描述了本文提出的分两个阶段检测僵尸网络流量的方法。该方法的重点在于对非P2P流量的过滤以及对会话的特征的提取,其结构如图 1所示。本文将从数据包过滤规则、会话特征和分类算法3方面依次展开介绍。
-
目前,常用的P2P流量识别方法包括端口识别[15]、特征码识别[16]以及基于流特征的识别[17]。然而,端口识别方法不能识别出采用随机端口或自定义端口的P2P应用程序,DPI(深度包检测技术)[18]不能识别加密的P2P流量,基于流特征的识别方法只能判断出P2P应用程序的部分流量,且具有很高的误报率。所以,结合快速启发式的P2P协议流量识别方法,本文采用非P2P协议知名端口过滤机制、DNS查询、流计数规则来过滤非P2P流量,如图 2所示。
端口过滤是数据包级别的过滤方法,主要过滤掉常用的非P2P应用程序流量;DNS查询是流级别的过滤方法,流计数和端口判断是会话级的过滤方法,这两种规则主要是过滤掉网页等非P2P流量。其中,基于端口的过滤方法可以识别出一些普通的非P2P应用程序流量,比如SSH一般使用22号端口,Telnet(远程登录)使用23号端口。常用应用程序及其对应端口号如表 1所示。
应用程序 端口号 SSH 22 Telnet 23 MAIL 25, 110, 143, 465, 220, 993, 995 NetBios 125, 137, 139, 445 Remote 3 389 FTP 20, 21 NTP 123 通常,P2P节点通信不需要进行域名解析,而是直接读取存储在本地配置文件中的IPs列表来获取IP。然而,对于非P2P的应用程序必须使用DNS域名解析来获取IP。因此,判断诸如Web、Mail等非P2P网络数据流的依据之一可以是:网络流中的目的IP地址是否是通过域名解析得到的。
用户正常发送Web应用服务请求时,在一个页面中,该Web应用程序会对一个IP地址采用多端口、并行请求的连接方式。因此,会有多条数据流出现在同一个会话中。P2P网络节点每次使用一对随机的源端口和目的端口进行通信。因此,本文可以使用流计数和端口判断来过滤非P2P流量,如果某个会话使用了TCP协议和80、8080或443端口,且会话中的流数量超过了阈值,那么该会话便可以认为是网页流量会话。判断准则为:
式中,sum(fi)表示一个会话中有效的流数量;δc表示阈值,其取值是根据正常网页访问会话中出现的流数量选择的。利用抓包工具分别采集简单和相对复杂的网页请求数据包并对其进行分析,分析结果表明,简单网页一般为3~4个连接请求,而复杂化网页的连接请求是5~8个。所以,本文将阈值设定为3。
尽管这一阶段的方法不能准确地检测出确定的P2P应用程序,但是它可以在真实的网络环境中过滤掉绝大部分非P2P流量和少量安全的P2P流量。
-
通过对P2P僵尸网络的数据流特征分析,加入同一个僵尸网络的僵尸主机之间的流量特征具有相似性。所以,本文使用基于会话的策略进行特征提取,也就是把具有相同目的地址的数据流聚合在相同的会话中,降低了流特征个数和数据条数,进而提高了检测效率。
-
P2P僵尸主机与其他僵尸主机的通信过程是由僵尸程序自动完成的,流的持续时间一般较短且很固定。因此,可以提取会话中流持续时间的平均值、最大值、最小值和标准差以及会话中上行(下行)流数据包平均间隔时间作为特征。
-
P2P僵尸网络中两个节点进行通信过程中,传输数据包的大小以及传输数量均比较小,且同一个僵尸网络中,僵尸主机产生的C&C通信流具有极大的相似性。因此,可以通过使用会话中流的分布来区分正常的P2P网络通信流与P2P僵尸网络流。提取会话中上行(下行)流最大数据包长度的平均值、平均数据包长度的平均值、最小数据包长度的平均值、平均数据包长度的标准差、有效数据包个数的平均值、有效数据包个数的标准差、传输字节数的平均值、传输字节数的标准差作为特征。
综上所述,将从会话中提取到的这22个特征如表 2所示。
特征值 特征值的说明 avg_dura 相同会话中不同网络流的持续总时间的均值 std_dura 相同会话中不同网络流的持续总时间的标准差 min_dura 相同会话中不同网络流的持续总时间的最小值 max_dura 相同会话中不同网络流的持续总时间的最大值 avg_f(b)int 相同会话中不同网络流的上行(下行)数据包传输的平均间隔时间 max_f(b)pl 相同会话中不同网络流的上行(下行)传输数据包长度的最大值的均值 avg_f(b)pl 相同会话中不同网络流的上行(下行)传输数据包长度的均值的均值 min_f(b)pl 相同会话中不同网络流上行(下行)传输数据包长度的最小值的均值 std_avg_f(b)pl 相同会话中不同网络流上行(下行)传输数据包长度的平均值的标准差 avg_f(b)pen 相同会话中不同网络流上行(下行)传输的有效数据包个数的平均值 std_avg_f(b)pen 相同会话中不同网络流上行(下行)传输的有效数据包个数的标准差 avg_f(b)pb 相同会话中不同网络流上行(下行)传输的总字节数的平均值 std_f(b)pb 相同会话中不同网络流上行(下行)传输的总字节数的标准差 -
到目前为止,很多有监督的机器学习算法都可以被用来对数据进行分类。本文使用以下3种分类算法来验证所提方法的检测率:贝叶斯网络分类算法、REPTree分类算法以及随机森林分类算法。虽然,这些算法都是基于会话特征来检测P2P僵尸网络流量的,但随机森林算法展现出了较高的准确率。
随机森林算法使用二叉树作为分类树,每个分类树的构建原则是从上到下递归划分的,且其训练集是通过对原始训练数据集有放回采样得到的。为了尽可能降低发生过拟合现象的情况,随机森林使用Bagging随机采样方式构建法分类树。所以,本文使用随机森林分类算法进行高速网络环境中P2P僵尸网络流量的检测。