0引言
近年来,在各国版权和法律机构的压力下,以著名的海盗湾为代表的很多BT下载网站关闭了各自的Tracker服务器,由此将不再有中心Tracker服务器提供下载列表,节点也不可能再连入BT网络。但是BT提供了一种可选的方案,也就是连入DHT(Distribute hash table)网络,这时的每个节点都相当于一个小型的Tracker服务器,可用来维护某些文件的下载列表。
DHT技术现在已经获得广泛使用,几乎所有的BT客户端软件都支持这个协议,因此该技术对BT的发展起到了很重要的推动作用。但与此同时,还应看到因其需要消耗大量资源来维护路由表,同时也没有对节点身份进行验证,就会导致DHT网络可能受到DDos攻击。本文主要研究了如何利用Mainline DHT协议的脆弱性进行DDos攻击,同时通过在Mainline DHT真实网络下的实验对攻击的性能进行了评估。可以看到利用这种脆弱性发动的攻击不仅仅对DHT网络本身有害,同时也可以对因特网内的任意一个用户发动攻击。
1相关研究工作以及背景知识
1.1Mainline DHT协议
BitTorrent 使用了分布式哈希表(distributed sloppy hash table)的技术,用以实现在无tracker的torrent文件中peer的联系信息存储。此时,每个peer都是一个tracker。该协议是基于Kademila协议的,并且全部都使用着UDP报文。
在DHT中,每个节点都有一个全局的唯一标识节点id。节点id的产生是随机的,且使用与BitTorrent的infohash相同的160-bit空间。“异或距离”用来比较两个node_id或者node_id与infohash的接近程度。Nodes必须维护一个路由表,其中保存了部分其他Nodes的联系信息。而当与自身节点更为接近时,路由表的信息则会更加详细。
Mainline DHT协议包括4种RPC操作:
(1)ping主要用于探测一个节点是否在线;
(2)announce_peer用于通知一个节点储存对,方便日后查询需要;
(3)find_node使用160位的目标ID作为参数。接收者返回包含K个离目标ID最近节点的形式的列表;
(4)get_peers使用160位的infohash作为参数。接收者如果有这个infohash对应的peers下载列表,则直接返回相关的peers,否则返回本地路由表中距离infohash最近的K个节点。
当一个node想得到某个torrent文件的peers,首先使用异或距离来比较torrent文件的infohash和路由表中节点的node ID。接下来向路由表中node ID与infohash最接近的那些节点发送请求,得到当前正在下载此一torrent文件数据的peers的联系信息。如果被请求的节点知道该torrent文件的peers,则peers的联系信息将包含在回复中。否则,被请求的节点必须返回其路由表中更接近infohash的那些节点。当获取得到peers列表后,客户端就可以使用BT协议与peers通信,并进行文件的下载了。
1.2Mainline DHT安全性研究
分布式拒绝服务主要是利用木马或病毒等攻击方式,将多台分散主机联合起来,再对某个或某些目标发动攻击,耗尽主机的资源。当然,联合的主机越多,拒绝服务攻击的效果就越好。
近年来,有关利用P2P网络脆弱性发动DDos攻击已开展了大量研究。文献[1] 探讨了P2P网络中Napster等协议的安全性,并对DDos攻击的攻击防御方法进行了深入研究。文献[2-3] 借助BT协议中与Tracker服务器交互部分的脆弱性而发动了DDos攻击。但是由于近年来大部分Tracker服务器出于版权原因关掉,这种方式的危害性已经不大。文献[4-5] 研究了基于Mainline DHT脆弱性发动DDos攻击的方法。首先,在网络上选择非常热门的几个种子,其次在本地发动Sybil攻击伪造大量node_id与热门种子infohash接近的节点,这时就会有大量节点发送get_peers消息请求获取peers 列表,因此只需要将攻击的节点IP、端口写入get_peers回复中的peers字段,就会有大量用户对受害节点请求TCP连接,从而发动DDos攻击。虽然如此,但这样的方式却仅能针对某一个热门种子。通过文献[6]即可看到,一个热门电影的peers大小不过几万个,这样的数字也并不足以产生很大的危害。基于以上研究,进一步地,本文设计的系统可以对多个种子的用户列表同时进行污染,由此显著提高了攻击效率。第3期张信幸,等:一种利用Mainline DHT脆弱性发动DDos攻击的方法智能计算机与应用第4卷
2系统设计与实现
2.1Mainline DHT脆弱性
Mainline DHT对节点node_id的选取并未做任何检查,因此可将DHT节点的node_id设置为任意值;其次,可在本地服务器上产生多个node_id,并将其发布出去,这样,外界就会将本系统视为多个DHT节点。一个DHT节点就是一个小型Tracker服务器,那么产生多个DHT节点,将这多个小型的Tracker服务器组合起来,就变成了一个大型的Tracker服务器。但对于node_id的选取,不能仅仅只是随机产生,而是需要进行精心设计,否则搜索效率将会非常地低。Mainline DHT也没有对节点node_id和IP以及端口做任何校验,因此在DHT网络发动Sybil攻击显然就极为容易了。
2.2攻击原理
在本文的系统中,完成DDos攻击主要有两个步骤。首先,要产生大量Sybil节点,如此可使DHT网络中尽可能多的节点知晓其存在后而向其发送get_peers请求;接下来,就可在get_peers回复中加入将要攻击的节点,这里的受害节点可使用一台预先部署的服务器进行测试;最后,大量的用户就会向受害节点请求TCP连接,相应地就在受害服务器端记录各项信息用于评估攻击性能。
2.3系统设计
文中的系统主要由图1所示的多个模块组成,下面对各个模块进行简要介绍:
(1)base-mysql。这是mysql数据库操作的基类,其中实现了mysql数据库与C函数的接口函数,也就是将打开、插入、删除、查询等操作都进行了封装。
(2)dht-mysql。base-mysql类的子类,在其基础上实现了dht模块与mysql的交互,而且将插入、删除等操作的参数都设置为infohash。
(3)log。这个模块用来管理配置文件和日志文件,其中配置文件的名字是dht.config。
(4)dht。这是程序最主要的模块,主要提供了3个接口函数,分别是:dht_init(),dht_periodic(),dht_uninit()。其中,dht_init()用来初始化搜索模块中的各数据结构,根据配置文件产生多个node_id,并开始第一步扩散;dht_periodic()是在epoll_wait()收到消息或者发生超时现象时调用
的,可解析收到的消息类型,并按照前述的消息处理方式对消息进行处理;dht_uninit()是对本模块进行一些释放工作,在此过程中,首先会产生大量Sybil节点并向DHT网络扩散,这样就能够收到大量get_peers请求,为此再构造get_peers回复,并在回复中包含全部的受害节点。
(5)dht-config。用来解析、读取配置文件。
(6)dht-main。这是main函数所在的模块,将其上所有模块整合起来实现系统的整体功能。
图1系统架构
Fig.1System architecture
对于受害节点模块,则仅仅开启对应的端口号,并记录接收到的连接数以及占用的带宽,当客户端发送报文时,就将关闭连接。
3实验结果与结论分析
3.1节点扩散模块
由2.1节可知,系统节点的扩散效果对DDos的攻击状况将产生很大影响,而通过文中在不同网络环境下的测试发现,对系统的扩散效果最具影响的因素就是IP类型。图2描述了在国内三种不同网络环境下,扩散系统在前140分钟收到get_peers请求的测试结果,其中电信网络和网通网络使用的都是内网IP,而移动网络使用的则是外网IP。可以看到在移动网络环境下,扩散效果非常好,140分钟内就收到了26万个get_peers请求,而另外两种环境请求数都在1万以下。由此可知,外网IP对系统性能影响很大,这主要是由于针对通过DHT网络学习到系统的那些节点,在外网IP环境下,能够主动与这些节点连接,而内网IP则不行,NAT阻断了很多连接请求。
图2不同网络下收到的get_peers请求数
Fig.2The number of get_peers requests in different network
3.2DDos攻击的效能
文中在该部分进行了4次实验,攻击时间分别为10:00、16:00、22:00、04:00,每次攻击持续1个小时,并且在已经部署的模拟受害节点上,持续监控6小时,受害节点总计监听24小时。其后,统计了各个时间点受害节点上收到的TCP连接数。
图3描述了从10:00到16:00的DDos攻击情况。可以看到在10:00到11:00的攻击持续时间中,收到的请求数从0快速增加到6万以上,在11点系统的监听程序死掉了,即进行了重启。重启后看到,尽管在12点已经停止了攻击,但是系统仍然收到很多的新攻击,在13点30左右甚至超过了之前11点的峰值。
图310:00-16:00收到的攻击连接数
Fig.3The number of attack connections
received in 10:00-16:00
图4描述了16:00到22:00的攻击情况,这里为受害模拟程序增加了重启脚本,同时为了防止机器死掉,即将程序最大连接数限制为112 000万。可以看到,在17点停止攻击后,连接数仍然继续增加,直到19点左右增加到设定的最大限制值。
图416:00-22:00收到的攻击连接数
Fig.4The number of attack connections
received in 16:00-22:00
图5描述了22:00到04:00的攻击情况。可以看到,攻击延续了之前的连接,一直保持之前设定的最大连接数,直到3点时程序得到了重启。
图522:00-04:00收到的攻击连接数
Fig.5The number of attack connections
received in 22:00-04:00
图6描述了04:00到10:00的攻击情况。可以看到,这个时间段的增加速度明显没有之前快。对比图6与图4可以得到,图6中在攻击后五小时才达到所设定的最大连接数,而图4仅经过两小时就已达到了这一数目。
由图3~图6可以看出,利用Mainline DHT脆弱性发动的DDos攻击具有很强的可持续性,在攻击结束后的6小时,新的连接仍然在不断建立;其次,与文献[5]及文献[7] 相比,文献中的DDos攻击数都在25左右,而文中的DDos攻击规模则在10万以上,其攻击威力明显要强大了许多;最后,通过图4和图6的对比还可以看到16:00时的攻击性能比04:00要提高了2倍,这说明白天的攻击性能比晚上的要好一些。图604:00-10:00收到的攻击连接数
Fig.6The number of attack connections
received in 04:00-10:00
4结束语
本文给出了一种利用Mainline DHT脆弱性发动DDos攻击的方法。由实验结果可以看出,这种方法可以对因特网上的任意目标发动DDos攻击,并造成很大的危害。通过文中的实验可以得到以下结论:第一,利用Mainline DHT脆弱性发动DDos攻击可以造成很大的危害性,对比文献[5]和文献[7] 中受害机上产生的25个左右的DDos TCP连接数,本文中的10万以上的TCP连接数,显然其危害要更大;第二,白天的攻击效能要比晚上提高2倍左右;最后,这种攻击方式的持续性非常强,在停止攻击后的5小时仍然能接收到大量TCP连接。因此,Mainline DHT的脆弱性会对因特网造成很大危害,应当对其Mainline DHT协议进行安全性增强改进。
参考文献:
[1]刘晓娟.基于P2P网络的DDoS攻击防御研究[D]. 北京:北京邮电大学,2009.
[2]JEROME H, COREY K, ZOU C C. A BitTorrent-driven distributed denial of service attack[C]// Security and privacy in communication networks and workshops International conference,2007:261-268.
[3]DEFRAWY K, GJOKA M, MARKOPOULOU A. BitTorrent: misusing BitTorrent to launch DDoS attacks[C]// SRUTI 2007: Proceedings of the 3rd USENIX Workshop on Steps to Reducing Unwanted Traffic on the Internet,2007:1–6.
[4]史建焘,张宏莉.一种DHT安全性优化策略[J].智能计算机与应用,2012,2(6):11-13.
[5]余杰.P2P网络测量与安全关键技术研究[D].长沙:国防科学技术大学,2010.
[6]WOLCHOK S, HALDERMAN J A. Crawling BitTorrent DHTs for fun and profit[C]// Proceedings of the 4th USENIX Conference on Offensive Technologies., August 2010:1-8.