一种新颖的P2P僵尸网络检测技术

2009-10-26 09:34梁其川吴礼发
电脑知识与技术 2009年22期
关键词:网络安全检测

梁其川 吴礼发

摘要:针对当前僵尸网络向P2P方向发展的趋势,在对P2P僵尸网络本质的理解和把握的基础上,提出了一种新颖的P2P僵尸网络检测技术。对于某个被监视的网络,关注其内部每台主机的通信行为和网络恶意活动。把这些通信行为和网络恶意活动分类,找出具有相似或相关通信和网络恶意行为的主机。根据我们对定义的理解,这些主机就属于某个P2P僵尸网络。

关键词:P2P;僵尸网络;检测;网络安全

中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)22-pppp-0c

僵尸网络是当前因特网面临最大的威胁之一,僵尸网络对因特网造成的主要危害包括DDoS攻击、机密信息窃取、发送垃圾邮件等。从1999年因特网出现第一个具有僵尸网络特性的恶意代码PrettyPark算起至今,IRC僵尸网络一直占据着重要地位。但是2002年第一个P2P僵尸网络Slapper的出现使得僵尸网络进入了一个新的发展阶段。接着在2003年和2004年出现的Sinit和Phatbot都是典型的P2P僵尸网络,他们的扩散进一步吸引了大众的眼球。2006年Nugache以及2007年Peacomm(又称其为Storm)僵尸网络的大规模爆发,则似乎预示着僵尸网络进入了一个全新的P2P时代[1]。

随着大家对僵尸网络危害的认识逐渐深入,对僵尸网络检测技术的研究也成了各方面关注的热点。最先开始系统研究僵尸网络的机构是成立于1999年的蜜网工作组(The Honeynet Project)[2],随后,安全领域的学术研究和会议讨论热点都涉及僵尸网络的议题。USESIX协会从2007年开始举办僵尸网络专题讨论会HotBots ( workshop on hot topics in understanding botnets)。各大反病毒公司也分别就僵尸网络的检测和反制做了许多有意义的工作。但是由于IRC僵尸网络占据着主导地位,因此大多数的僵尸网络检测技术都集中在基于IRC的僵尸网络上。而对IRC僵尸网络的检测基本无一例外都致力于检测其C&C ( Command & Control )信道,这是因为基于IRC的僵尸网络的C&C具有集中性的特点,只要找到了其C&C服务器,就可以破坏整个僵尸网络。而P2P僵尸网络则不一样,它的C&C并集中的服务器,而是分散的终端(peers)。这样以来对P2P僵尸网络的检测就越发困难,而且即使检测到了某台主机被感染了P2P僵尸程序(bot),关闭掉整个僵尸网络也很困难,因为僵尸终端分布在整个互联网范围内。Matt Jonkman提出了基于数据包大小和频率来检测Storm Worm的通用方法。但是该方法的主要缺点是不检测数据包的内容,很容易引起虚警[3]。Helsinki科技大学的Antti Nummipuro提出了基于主机的P2P僵尸网络检测方法[4],但是该方法与其他恶意代码检测技术类似,并没有特别新颖或创新之处。阿姆斯特丹大学的Reinier Schoof和Ralph Koning等人对P2P僵尸网络的检测则关注在P2P对等端的发现上[5]。而GA Tech的Guofei Gu等人则提出通过检测网络流量以及网络活动的方法检测P2P僵尸网络(也包括检测其他类型的僵尸网络)方法,相对来说更加具有现实性和可靠性[6]。

本文主要解决如下问题:通过对某个网络内(比如某个局域网)的所有主机的通信和恶意行为进行监控,找到具有相似通信和恶意行为的主机,则基本就可以判定这些主机为某个僵尸网络的部分僵尸主机。

1 对P2P僵尸网络检测的深入认识

1.1 P2P僵尸网络的本质理解

僵尸网络的传统定义为:攻击者(称为botmaster,也称作僵尸主人)出于恶意目的,传播僵尸程序控制大量主机,并通过一对多的命令与控制(command and control, C&C)信道所组成的网络[7]。而我们则主要通过僵尸网络的通信和恶意活动方面对P2P僵尸网络进行本质定义如下:通过C&C信道被控制的具有协同性的恶意代码群组。我们主要从如下的几个方面理解这个定义:

1) 恶意代码。意味着僵尸程序被僵尸主人用来展开恶意行为,比如扫描、发送垃圾邮件、向僵尸主机下载延伸的其他恶意代码,等一系列恶意行为。

2) 被控制的。意味着被感染的僵尸主机必须向C&C信道发起连接,加入僵尸网络。只有这样,僵尸主机才可以获取到僵尸主人的命令完成不同的行为,或者对自己升级等。也就是说,被感染的僵尸主机必须同C&C通信,否则就不能扮演其角色,完成其任务。

3) 协同性群组。意味着被同一个僵尸主人控制的同一个僵尸网络的多个僵尸程序将表现出相似地或相关联的通信特征和恶意行为特征。假设僵尸主人通过不同的信道(或命令机制)向各个不同的僵尸程序发布命令,则根据我们的定义,这些僵尸程序的组合不能称之为僵尸网络,只能理解为松散的恶意程序集合。

1.2 常用的P2P僵尸网络检测方法

僵尸网络很难被检测,尤其是P2P僵尸网络,大致有如下几种原因:1) P2P僵尸网络使用的P2P协议与其他正常的P2P协议相比没有什么不同;2) 僵尸网络产生的P2P流量非常少;3) 在某个被监控的网络内可能只有少数几台主机(甚至只有一台)感染了僵尸程序;4) 甚至有P2P僵尸网络使用加密的通信[8]。

对个人用户来说,因为面对的只是自己的一台或者少有的几台主机,用户不必要关心僵尸网络问题,他只需要关注主机不要被僵尸程序感染变成僵尸主机。个人用户只需要按时升级杀毒软件、软件防火墙、系统补丁等,且养成良好的上网习惯,就可以把感染僵尸程序的风险降到最低。个人主机对僵尸网络的检测方法也很简单,如果用户有一定的计算机知识,就可以很轻松地掌握自己主机的网络连接、异常进程等信息,进而判定主机是否被感染了僵尸程序。

对某个网络(比如局域网)的管理员,他所关心的就是该网络内部的所有主机。当前,专业的网络防火墙(NIDS)和入侵防御系统(IPS)不失为最好的选择。传统的IDS只关注向内的连接和流量,但是如何从大量的向内扫描和入侵尝试等行为中辨别出内部主机是否已经被感染就成了烫手的问题。

对大型研究机构和反病毒公司,他们拥有很多别人不能企及的资源,比如可以在全球范围内部署网络嗅探器,可以监控各级DNS服务器,等等。他们最有可能获取到整个僵尸网络的轮廓,掌握僵尸网络的实时动态,而且他们也具有最先进的技术和最顶尖的人才。

1.3 我们的P2P僵尸网络检测方法

在前面对P2P僵尸网络本质理解的基础上,我们提出一种全新的P2P僵尸网络检测方法。我们的方法主要集中于某个被监控的网络。我们首先检测网络内所有主机的通信状况,这样就可以确定“谁在跟谁通信”以及通信的协议、格式特征内;第二还要检测网络内所有主机的网络活动,即检测到“谁在干什么”,比如扫描、下载二进制代码、攻击远程主机等等。然后在通信行为和网络活动中找出一个(或数个)协同组。具体说来就是先把具有相似通信行为的主机分成多个聚类;接着把具有相似网络活动的主机分成多个聚类,然后对两者进行交叉关联,找到那些既有相似通信行为又有相似网络活动的主机。根据我们前面的分析,这些主机就处于某个僵尸网络当中。

2 检测模型框架及实现

2.1 问题的陈述和一些假定

根据前面给出的定义,P2P僵尸网络主要有恶意性、被控制性和协同群组性三个特点。需要注意的是,这三个特点缺一不可。比如正常的P2P程序,它是一个协同性群组,但是不具有恶意。再比如蠕虫或病毒,具有恶意性和被控制性,但是没有协同性。因此,只有满足这三个条件,才可以判定其为僵尸网络。

下面我们以Peacomm P2P僵尸网络为实例来具体看看其工作过程[9]。Peacomm僵尸网络的C&C信道是Overnet P2P协议。它通常是以邮件附件的方式感染主机,然后通过向系统驱动中添加“wincom32.sys”的方式初始化僵尸程序。这个驱动被注入到“services.exe”进程中,这个服务在接下来就扮演P2P客户端的角色。该僵尸程序还会阻断Windows自带的防火墙,并开启如下的端口:

TCP: 139, 12474

UDP: 123, 137, 138, 1034, 1035, 7871, 8705, 19013, 40519

在被感染的僵尸程序中,有一个固定的邻居列表。僵尸程序就是通过这些端口向邻居列表中的其他僵尸程序联系,这样就加入到僵尸网络当中。

2.2 体系结构

图 1显示了我们提出的P2P僵尸网络检测方法的体系结构。该体系结构主要由五部分组成:网络行为监控模块、通信监控模块、网络行为分类模块、通信流量分类模块和交叉关联模块。网络行为监控和通信监控都部署在被监控网络的边缘,也就是网络与外部网络的进出口处,而且他们同时并行运行。通信监控主要监控内部主机与外部的全部通信,并以一种容易理解使用的格式记录日志,即主要负责“谁在跟谁通信”的问题。网络行为监控模块监控所有主机的恶意行为,也以日志的方式记录下来,即主要负责“谁在做什么”的问题。网络行为分类模块把监控模块记录的日志按照非监督分类的方法进行分类,把具有相似或相近网络行为模型的主机成一类。通信流量分类模块也是把通信监控模块产生的日志记录用非监督分类的方法进行分类,把具有相似或相近通信模型的主机分成一类。交叉关联模块则负责交叉比对由上述两个模块产生的类,找到那些在两个模块中都处于同一个类中的主机。则这些主机就是P2P僵尸主机。

2.2.1 监控模块

通信监控比较容易实现,很多路由器都支持网络流量日志功能。可以直接从路由器获取。也可以用一些常用的抓包工具,比如Windows系统下面的Ethereal[10],和Linux下面的开源解决方案Argus[11]。为了便于找到相似或相近的通信模型,对于每个流我们主要关注如下内容:发起时间、持续时间、源IP地址、源端口、目标IP地址、目标端口和包含的字节数等。

网络行为监控主要监控内部主机向外发起的一些恶意的网络活动,比如扫描、发送垃圾邮件、下载二进制代码、溢出远程主机,等等。而这些恶意行为一般也是僵尸主人对僵尸网络下达的命令动作。对网络行为的监控我们采用开源的入侵检测系统Snort[12]。对检测到的每个恶意行为,Snort会产生一个报警(alert)。针对不同的恶意行为,Snort产生不同的警报。

2.2.2 网络行为分类

网络行为的分类比较简单,如图 2所示,可以根据恶意行为的类型直接进行一级分类,如果分类比较粗糙,则可根据不同的标准进行相应的二级分类。比如对扫描行为,可以根据端口的类型进行细分;比如溢出远程主机行为,可以根据所利用的漏洞情况进行细分;比如发送垃圾邮件行为,也可以根据SMTP服务器的重叠程度进行细分;等等。

2.2.3 通信流量分类

每一条通信流都是按照前面所述统一的数据格式记录。对于一个监控的网络(比如某个具有200台主机的局域网),网络流量可能非常大,因此要在这些巨大的通信流量中找出相似或相近的通信模型并不容易。我们采用模式分类中常用的无监督聚类方法对其进行分类。如图 3所示,过滤规则一是指过滤掉那些网络内部通信的流量,因为我们主要关注内部主机和外部通信的情况。过滤规则二是指过滤掉那些内部主机和外部著名站点通信的流量,比如新浪、搜狐、网易等公认的著名站点,因为一般情况下默认这些站点不会成为僵尸主机。特征压缩则是为了提高后面分类的速度。聚类的生成方法可以采用最简单的K均值聚类方法。

2.2.4 交叉关联

得到上面网络行为和通信流的聚类,交叉关联就很容易进行。交叉关联的结果就是找到一些主机,比如h1,h2,h3…hn,在网络行为和通信流分类中都被分到相同的类,则可以断定h1,h2,h3…hn属于同一个僵尸网络。我们用如下的方法解决:第一步,过滤。因为被监控网络内的很多主机是没有恶意网络活动的,因此把通信聚类中那些没有恶意网络活动的主机删除,这样第一步下来就可以过滤掉很多主机。第二,交叉关联。对处于网络行为中的每个聚类,用聚类的每天主机在通信聚类中比对,如果发现有相似的数台主机,则记录,否则继续进行知道全部比对结束。不难理解,该算法的复杂度为O(n)(n为被监控网络内的主机数)。

2.3 评估

以往僵尸网络的定义只是从表面上把握了僵尸网络,具有描述性质。我们从内在本质出发,给出了僵尸网络全新的定义。并且从该定义出发,提出了一种全新的P2P僵尸网络检测系统。该检测技术把握住了P2P僵尸网络的本质特征,保证了算法的正确性。在该检测框架的实施中,每一步都切实可行,具有算法和实现上的可行性。

3 结束语

不难看出,提出的P2P僵尸网络检测技术是基于对P2P僵尸网络本质的理解和把握。该方法跳出了常规的检测思维,通过通信流及网络活动对P2P僵尸网络进行检测,通过分析,可以看出这种方法对P2P僵尸网络的检测具有很低的误报率。

但是这种方法也存在一定的局限性。第一,只能检测到被监控的某个有限网络,得不到整个僵尸网络的轮廓和活动特性。第二,如果被监控的网络内只有很少几台(甚至一台)主机感染了某个P2P僵尸网络,则这种检测方法会产生较高的漏报率。而这也是我们将来继续努力的方向。

参考文献:

[1] R. Lemos.Bot software looks to improve peerage[OL].http://www.securityfocus.com/news/11390,2006,6.

[2] The Honeynet Project, http://www.honeynet.org.

[3] M.Jonkman. Encrypted storm traffic. http://www.bleedingthreats.net/index.php/2007/10/15/encrypted-storm-traffic/.2007,10.

[4] A.Nummipuro.Detecting P2P-Controlled Bots on the Host.In Seminar on Network Security,2007,10.

[5] R. Schoof, R. Koning. Detecting peer-to-peer Botnets. http://staff.science.uva.nl/delaat/sne-2006-2007/p17/report.pdf. 2007, 2.

[6] G. Gu, R. Perdisci, J. Zhang, W. Lee. BotMiner: Clustering Analysis of Network Traffic for Protocol- and Structure-Independent Botnet Detection. In 17th USENIX Security Symposium,2008.

[7] 诸葛建伟, 韩心慧,周勇林,叶志远,邹维.僵尸网络研究[J].软件学报,2008,19(1):152-165.

[8] G. Gu, J. Zhang, and W. Lee. BotSniffer: Detecting botnet command and control channels in network traffic. In Proceedings of the 15th Annual Network and Distributed System Security Symposium ( NDSS' 08 ), 2008.

[9] J. Stewart. Sinit P2P Trojan Analysis. http://www.secureworks.com/research/threats/archive/sinit. 2003, 8.

[10] Ethereal. http://www.ethereal.com.

[11] Argus. http://qosient.com/argus/

[12] The Snort Team. http://www.snort.org.

猜你喜欢
网络安全检测
“不等式”检测题
“一元一次不等式”检测题
“一元一次不等式组”检测题
网络安全
网络安全人才培养应“实战化”
上网时如何注意网络安全?