一次性进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:16004488
微信公众号:计算机与网络安全
ID:Computer-network
一、NTP放大攻击
在发生的众多DDoS攻击事件中,针对反垃圾邮件组织Spamhaus的大规模DDoS攻击依然令人记忆犹新。攻击者向大量开放DNS解析器进行了域名查询,并将源IP地址伪造成Spamhaus的IP地址,利用DNS放大技术,对攻击流量进行了约100倍的放大,使攻击流量达到了惊人的300Gbit/s。如此巨大的攻击流量对Spamhaus造成了比较严重的影响,甚至拖慢了局部互联网的访问速度。
300Gbit/s的攻击流量已经很难应对了,如果攻击流量达到2Tbit/s(约2100G bit/s)会发生什么呢?如果攻击者利用NTP服务器进行放大攻击,这样的灾难就有可能发生。
NTP(Network Time Protocol,网络时间协议)是用来使计算机时间同步化的一种协议,它可以使计算机与时钟源进行同步化并提供高精准度的时间校正,NTP使用UDP 123端口进行通信。
在NTP协议的服务器实现上,通常会实现一系列Mode 7的调试接口,而接口中的monlist请求能够获取与目标NTP服务器进行同步的最后600个客户端的IP地址等信息。这意味着,只需要发送一个很小的请求包,就能够触发大量连续的包含IP地址信息等数据的UDP响应数据包。
实际上,monlist请求返回的数据量与一段时间内和NTP服务器交互的客户端数量有关。如果NTP服务器与大量的客户端进行交互,那么一个不超过64个字节的请求数据包就能够触发100个482个字节的响应数据包。如图1所示。
图1 NTP服务monlist的请求和响应
由于NTP服务使用的是UDP单包通信,因此与DNS放大攻击类似,攻击者可以通过伪造IP源地址的方式进行NTP放大攻击,将攻击流量放大700倍!
有安全公司曾对世界范围内的NTP服务器进行了扫描和监控,发现40多万台NTP服务器能够被利用进行NTP放大攻击(见图2)。
图2 NTP放大器的分布情况
在这些放大器中,放大倍数在700以上的NTP服务器数量超过1000台(见图3)。
图3 放大倍数700以上的NTP放大器的分布情况
放大倍数在100以上的NTP服务器数量超过6000台(见图4)。
图4 放大倍数100以上的NTP服务器分布情况
放大倍数在10以上的NTP服务器超过4万台(见图5)。
图5 放大倍数10以上的NTP服务器的分布情况
从目前的数据来看,并不是所有的NTP放大器都能够将流量放大700倍以上,因此整体的平均放大倍数并不太高。然而,攻击者可以利用技术手段,轻易地将任何一台NTP放大器的放大倍数提高到700以上。
monlist请求返回的数据量与一段时间内和NTP服务器交互的客户端数量有关,并且NTP服务使用的是UDP单包通信,因此攻击者可以将伪造源IP地址的UDP请求包发送给NTP放大器,伪造客户端与NTP服务器的交互,增加“和NTP服务器交互的客户端的数量”,以此来增加monlist请求的响应数据量并增大NTP放大器的放大倍数,如图6所示。
图6 利用伪造源IP地址的请求增大放大倍数
只要向NTP放大器发送600个不超过64个字节的请求包(约40KB数据),就能够快速地将NTP放大器的放大倍数提高到700以上,并在该服务器的NTP服务关闭或重新启动之前一直保持这么大的放大倍数(见图7)。
图7 NTP服务器的monlist响应数据已增大
利用这种方法,全世界范围内的40多万台NTP放大器都能够轻易地变成放大倍数超过700的放大器,攻击者利用这些NTP放大器即可发动规模空前的DDoS放大攻击。我们知道,在针对Spamhaus的DDoS攻击中,DNS放大的倍数约为100,攻击的流量达到了300Gbit/s;而如果攻击者使用NTP放大攻击,并将全部NTP放大器的放大倍数提高到700以上,那么同样规模的僵尸网络将能够产生7×300Gbit/s=2100Gbit/s的放大攻击流量,如此大流量的DDoS攻击是非常难以防护和缓解的。
事实上,攻击者已经逐渐开始使用这种攻击技术,League of Legends、EA和Steam等游戏公司都遭到了以NTP放大攻击为主要攻击流量的DDoS攻击(见图8)。
图8 DDoS攻击流量比例
虽然目前的攻击流量还没有达到2T的级别,但如果网络和服务器的管理员不采取必要的措施,攻击流量非常有可能会不断增大,危害局部甚至整个互联网。
与开放DNS解析器一样,公开的NTP服务器也同样需要进行有效的管理和配置。建议全部的NTP服务软件升级到最新版本,并通过在配置文件中添加noquery参数来限制客户端的monlist等信息查询请求。
相比于开放DNS解析器,如果公开的NTP服务器不进行有效管理和配置,将会给整个互联网带来更加严重的危害。
二、DNS放大攻击
与NTP放大攻击相似的是DNS放大攻击,而相比前者,后者见诸于报道的频率更大。之前,黑客针对安全组织Spamhaus(反垃圾邮件)的DDoS攻击中,尽管有专业的云安全厂商CloudFlare为其提供DDoS防御服务,但高达300Gbit/s的攻击峰值也让CloudFlare几临崩溃。而事后的调查显示这次攻击所用的手段就是DNS放大攻击。
面对众多的此类攻击事件,我们不禁要问:黑客是怎么实施这类放大攻击的或者说成功进行此类攻击的条件是什么?该怎么防御这种攻击?
下面通过一个测试,从攻击者的角度来帮助理解这些问题。测试演示的是DNS放大攻击(见图9)。
图9 DNS放大攻击测试演示
搭建的测试用DNS服务器信息如图10所示。
图10 测试用DNS服务器信息
(一)攻击测试
在开始之前,先看图11中简化后的攻击图示。
图11 简化后的攻击图示
要完成上述攻击,攻击者需要具备什么条件才能向目标开火呢?我们知道要实施攻击(将数据引向攻击目标),这里有一个前提,就是必须能伪造DNS查询的源IP。我们看一个普通的DNS查询(A记录)示例(见图12)。
图D12 DNS查询示例
对应的DNS结构如图13所示。
图13 对应的DNS结构
可以看到,对于单次查询,其回复的目的地靠的仅是框中标示的ID(0x0002),而对源IP合法与否并没有相应的验证措施,即DNS的这种模式允许我们把查询包中的IP源设置为任意IP地址,至此满足了攻击实施的最重要前提条件。
回头再看图12框线中的部分,可以看到,虽然查询和响应的数据大小不对称,但两者相差不大(不足两倍),这对于实际攻击活动所需要的放大倍数还远远不够。实际上就算我们把UDP包传输大小提升至512个字节,放大倍数最大也就7左右。
根据RFC1035中定义的DNS消息格式以及所能支持的内容长度,UDP包传输大小被限制为512个字节,超出的部分将被截断,或丢弃或使用TCP协议重传(端口仍为53)。
显然我们必须寻找一种扩充响应包大小的方式,即下面要提到的EDNS机制。
RFC2671中提出了一种扩展DNS的机制:EDNS(Extension Mechanisms for DNS),并在其中推荐了一种传递包大小的EDNS0。在EDNS0中,扩展了DNS数据包的结构,增加了OPT RR字段。在此字段中包含了客户端能够处理的最大UDP报文大小信息。服务端在响应DNS请求时,解析并记录下客户端能够处理的最大UDP报文大小,并根据该大小生成响应的报文。它使我们的UDP包传输即使大于512个字节而仍然可以采用UDP协议。
图14展示的是测试的日志反馈(TXT记录)。
图14 日志反馈
可以看到(第一个框),这台启用EDNS机制的DNS服务器所支持的最大UDP传输大小为1280个字节,查询反馈的大小是1055个字节(突破了512个字节的限制),但仍采用的是UDP协议(注意第二个框)。对应的数据包如图15所示。
图15 数据包
实际攻击中我们可以通过配置DNS服务器使UDP传输大小扩充至4096个字节,也即放大倍数可以为60左右。ENDS机制的引入使DNS放大攻击所需倍数得到了保证。
如果只有前两个条件而我们不能找到大量反射源(大量开放查询服务的第三方DNS服务器),攻击仍很难立竿见影。这主要是因为如果反射源很少的话,受攻击方就可以通过黑名单机制屏蔽攻击源,丢弃攻击数据。
那网络上开放查询服务的第三方DNS服务器多吗?我们知道DNS作为互联网至关重要的基础设施,为了尽可能保证网络畅通,许多大型机构或公司对外都提供免费的DNS服务,如Google公司的8.8.8.8等,区别在于它们提供的反射倍数有大有小。
图16是我们扫描互联网上开放查询服务的第三方DNS服务器(总数380多万台)后获得的放大倍数统计。
图16 互联网上开放查询服务的第三方DNS服务器
其中放大倍数为Perfect的DNS服务器IP分布,如图17所示。
图17 放大倍数为Perfect的DNS服务器IP分布
综上可以看到能进行放大攻击的服务器数占到了32%,其中有24%的服务器放大倍数达到了完美,而且这些服务器地域分布也非常广泛,这样就有了可利用的众多攻击源。
最后我们还得保证攻击链条中所涉及的DNS服务器均开启了递归查询功能,使查询请求层层深入,而不能中断于某个环节。大多数DNS服务器默认开启递归功能。
总结上面提到的条件:
首先,能做到伪造源IP,即要攻击的目标。DNS协议的这种设计缺陷,使伪造工作变得非常容易。
其次,要达到更好的放大效果,还需要所选的DNS服务器支持EDNS扩展机制,以突破512个字节的限制。
然后,需要拥有一份开放查询服务的第三方DNS服务器列表。这可通过相应的端口扫描工具获得。
最后,需要攻击链条中涉及的DNS服务器开启了递归查询功能。
满足了上述条件,就可以通过构造脚本使这种攻击自动化。
图18展示的是测试用脚本运行情况。
图18 测试用脚本运行情况
关键代码如下:
脚本使用Python编写,并使用了第三方Scapy库。Scapy对DNS的解析如图19所示。
图19 Scapy对DNS的解析
攻击中捕获的数据包如图20所示。
图20 捕获的数据包
当然前面测试显示的攻击倍数还不是非常理想。实际的攻击拓扑往往如图21所示(这里省略了对DNS根服务器及其相关服务器的查询请求)。
图21 典型DNS反射攻击拓扑图
黑客向第三方DNS服务器投递的查询数据中,查询的区域(相当于这里的a.com)往往指向由其控制的DNS服务器。黑客在这台被控制的服务器上开启EDNS机制并构造TXT记录使查询响应反馈的数据尽可能大(可至4096个字节),且使用UDP协议。
(二)防御建议
加固反射源:
对开放查询服务的DNS服务器作限制,只对可信的区域主机提供解析服务。
强制某些DNS查询类型(如TXT、ANY)使用TCP传输。并对单个源IP的查询速率做限制。
采用最小化权限并及时更新补丁,以免落入黑客之手。
对于被攻击目标:
由于DNS放大攻击仍属于流量型攻击的一种,可以使用Anycast技术对攻击流量进行稀释和清洗。
微信公众号:计算机与网络安全
ID:Computer-network
【推荐书籍】