【漏洞分析】DDOS攻防分析(三)——UDP篇

0x00 UDP攻击实例

0x01 UDP协议基础知识

0x02 UDP DDOS攻击防御

 

0x00 UDP攻击实例

2013年12月30日,网游界发生了一起“追杀”事件。事件的主角是PhantmL0rd(这名字一看就是个玩家)和黑客组织DERP Trolling。

PhantomL0rd,人称“鬼王”,本名James Varga,某专业游戏小组的成员,同时是美国最大的在线游戏直播平台Twitch的知名和资深视频博主,经常一边参加游戏对战一边实况直播。

DERP Trolling,一个成立于2011年的黑客组织,本次事件中专门以“PhantomL0rd”实况直播的游戏为攻击目标,一旦成功弄倒目标,便会在推特上发布战果。

事情看上去很简单。这一天,PhantmL0rd连续在多场游戏对战中遭到DERP Trolling的“追杀”:凡是PhantmL0rd参加的网络游戏,都不同程度地遭到了DERP Trolling的DDoS攻击。英雄联盟、EA官网、暴雪战网、DOTA2官网、企鹅俱乐部等等知名游戏网站都因遭到DDoS攻击而瘫痪。哎,不过想要玩个游戏而已,怎么就这么难?

然而,随着事件的不断被挖掘和曝光,知道真相的玩家们哭了。调查发现,一直被认为是受害者的PhantomL0rd实际上恰恰是这次事件的幕后主使。这是什么原因呢?

原来,PhantomL0rd经常参加一些游戏对战比赛,既然是比赛就会有胜有负。但是PhantomL0rd为了保住自己“王”的地位,就偷偷地和DERP Trolling串通:一旦比赛过程中PhantomL0rd打不过对手,DERP Trolling就登场,向游戏服务器发动DDoS攻击,让比赛异常终止,这样PhantomL0rd就有翻盘的机会。

这次事件的曝光不仅让PhantomL0rd颜面尽失,还让DERP Trolling使用的这个DDoS攻击手段“火”了一把。那么DERP Trolling到底使用了什么手段呢?

DERP Trolling在这次“追杀”事件中,采用的是NTP反射放大攻击。从记载来看,DERP Trolling应该是第一个利用NTP服务器进行大规模反射放大攻击的黑客组织。这次“追杀”事件之后,NTP反射放大攻击一夜之间变得非常火热。2014新年的第一周,NTP反射放大攻击占到了DDoS攻击流量的69%。

什么是NTP反射放大攻击?

我们先来看看什么是NTP。NTP,全称是Network Time Protocol,网络时间协议。顾名思义,NTP是一种用于保证网络中的计算机时间同步的协议。在网络中,计算机的时间同步非常的重要。比如发射火箭,如果每台计算机时间都不同,那么发射的时候应该以哪台计算机为准呢?

NTP协议采用服务器-客户端模型,提供了高精准度的时间校正机制。在网络中,NTP客户端不以自己的时间为准,而是每隔一段时间从NTP服务器同步更新自身时间。NTP协议定义了NTP服务器的层次结构,通过逐层传播,实现时间同步。因为上游NTP服务器通常是高精度而可靠的时钟源,如原子钟、卫星、天文台等,时间同步的精度得到了保证。

20161101142049665.png

 

NTP协议中有一个监控(Monlist)功能,用于监控NTP服务器。NTP服务器会记录与自己进行过时间同步的客户端IP地址的信息,而且客户端可以通过一些命令索要这些记录。每个NTP服务器可以记录进行过时间同步的最后600个客户端的IP地址,当有客户端索要这个记录时,NTP服务器会返回这600个客户端IP地址,响应包按照每6个IP地址进行分割,最多可以返回100个响应包。

20161101142103507.png

 

理解了NTP协议,NTP反射放大攻击就容易理解了。NTP反射放大攻击有两个关键点:反射和放大。

反射

反射,就是把源IP地址伪造成被攻击IP地址,进行“传瞎话”的无耻行为。谎言之所以可以传播,就是因为听者轻信。缺少源认证机制的协议最容易被利用,所以反射攻击均为基于UDP的无状态连接协议。NTP正是基于UDP协议进行传输的。

在UDP协议中,正常情况下,客户端发送请求包到服务器,服务器响应包给客户端,这就完成了一次交互,中间没有校验过程。由于UDP协议是面向无连接的,所以客户端发送请求包的源IP地址很容易被篡改。一些低版本的NTP服务器没有针对源IP地址的校验机制,所以如果把请求包的源IP地址篡改为攻击目标的IP地址,最终服务器返回的响应包就会被送到攻击目标,这就是“反射”攻击。

20161101142116560.png

 

放大

放大,顾名思义,就是我假冒你的名义打他一拳,他会打你100拳。黑客通常是利用互联网的基础架构来进行放大攻击,效果更强,毕竟网络基础架构的能力是超级强大的,而且,完全免费。——这让我想起《三体》中叶文洁利用太阳来放大电磁波信号,把太阳作为放大器,大刘的脑洞够大。网络中开放的NTP服务器非常多,如果黑客利用僵尸主机,同时向NTP服务器发起大量的Monlist请求,1个Monlist请求包可以引发100个响应包。通常,1个NTP请求包只有90字节的大小,而1个回应报文通常为482字节,100个回应报文就是48200字节,回应报文是请求报文的500倍左右,这样就可以达到四两拨千斤的“放大”效果。

20161101142008179.png

(author Zhaoxuepeng https://www.cnblogs.com/Shepherdzhao/)

0x01 UDP协议基础知识

UDP协议全称“用户数据报协议”,User Datagram Protocol,是一种传输层协议。UDP协议是一种无连接的协议,不提供数据报的分组、组装,不对数据包的传输进行确认,当报文发送出去后,发送端不关心报文是否完整的到达对端。这个听起来像是缺点的特点,却是UDP协议最大的优点。这种报文处理方式决定了UDP协议资源消耗小,处理速度快,所以通常音频、视频和普通数据传送时使用UDP比较多。就比如音频或视频吧,大家在看视频或者听音乐的时候,都是追求数据传输更快一些,而在传输过程中,偶尔丢一两个数据包,对整体效果并不会产生太大的影响。

相比于之前介绍的DNSHTTP协议,UDP协议需要关注的点要简单很多。我们来看看UDP报文结构。

20161108111340314.png

 

我们再来看一个现网真实UDP报文的抓包。

20161108111450166.png

 

每个UDP报文由UDP报文头部和UDP数据字段两部分组成。其中头部字段由8个字节,4个字段组成,分别是:源端口号、目的端口号、报文长度和校验和。

l  UDP协议使用端口号为不同的应用保留其各自的数据传输通道。比如DNS协议目的端口号是53TFTP协议目的端口号是69

l  数据报的长度是指包括报头和数据载荷部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据载荷部分。数据载荷的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报文的最大长度为65535字节。不过,一些实际应用往往会限制报文的大小。

l  UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方人为篡改或者因其他原因遭到了损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测报文传输过程中是否出错。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的报文丢弃,或者给应用程序提供警告信息。

0x02 UDP DDOS攻击防御

UDP协议与TCP协议不同,是无连接状态的协议,并且UDP应用协议五花八门,差异极大,因此针对UDP Flood的防护其实非常困难。我们也不能像TCP攻击那样进行源认证,所以只能找特征了。

一般传统的UDP攻击都是由攻击工具打出来的,通常会具有一定的特征,尤其在数据段会有一些相同或者有规律变化的字段。而对于我们前一节介绍的UDP反射放大攻击,虽然并不是攻击工具伪造的UDP报文,而是真实网络设备发出的UDP报文,在数据段不具备相同的特征,但是目的端口却是固定的,所以也可以作为一种特征。

确定攻击报文的特征后,就可以根据特征进行过滤了。特征过滤也就是常说的指纹过滤,根据攻击报文的特征,自定义过滤属性。

指纹过滤有两种方法:

l  静态指纹过滤

对于已知的攻击特征,可以直接配置到过滤器的参数中。Anti-DDoS系统不仅具有TCPUDP等传输层协议的报文解析能力,还具有应用层报文解析能力,可针对应用层头部信息字段做过滤。配置了静态指纹过滤后,Anti-DDoS会对收到的报文进行特征匹配,对匹配到攻击特征的报文,再进行丢弃、限流等下一步操作

20161108111503177.png

 

那么,如何获知攻击特征呢?一种方法是抓包分析,人为识别出攻击特征,然后配置到过滤器中。UDP报文的数据段、源IP地址、源端口,目的IP地址、目的端口都可能隐藏着攻击报文的特征。比如,UDP反射放大攻击一般都是基于特定的UDP端口,比如现在比较常见的NTPDNSSSDP反射放大攻击,分别对应的UDP端口是123531900

下面一般有14种常见UDP反射放大攻击的过滤器模板。这些攻击都属于已知攻击特征,抗D设备可以配置已经预先定义好了攻击特征的参数,直接应用即可。

20161108111519770.png

 

如果抗D设备预置的过滤器模板不够用,个人也无法抓包分析配置攻击特征,那么有的抗D设备可以配置动态学习:

l  动态指纹学习

在攻击特征未知的情况下,Anti-DDoS系统具有指纹自动学习功能。对于一些攻击工具发起的UDP攻击,攻击报文通常都拥有相同的特征字段,比如都包含某一个字符串,或整个报文内容一致。指纹学习就是对一些有规律的UDP攻击报文负载特征进行识别,并且自动提取出指纹特征,然后就把这个提取的特征作为过滤条件,自动应用并进行过滤。

Anti-DDoS系统默认情况下,学习UDP载荷的最后8个字节,当然这个学习的偏移量和学习长度都是可以手动配置的。偏移量是从UDP报文头结束处开始计算,取值从0字节到1500字节可灵活配置;学习长度从1个字节开始配置,最多可以学习8个字节。

20161108111533644.png

 

传统的UDP flood攻击是一种消耗对方资源,也消耗自己资源的攻击方式,你攻击了一个服务器,其实也在消耗你的系统资源,说白了就是拼资源而已,看谁的带宽大,看谁能坚持到最后。这种攻击方式没有技术含量,现在已经越来越少的黑客使用这种方式了。

取而代之的是UDP反射放大攻击,近几年越来越多的被黑客所使用。像前面提到的几种做成过滤器模板的UDP反射放大攻击,都是比较常见的。后续对于UDP flood攻击的防御重点也应该聚焦在反射放大攻击上。

0x01 UDP协议基础知识

UDP协议全称“用户数据报协议”,User Datagram Protocol,是一种传输层协议。UDP协议是一种无连接的协议,不提供数据报的分组、组装,不对数据包的传输进行确认,当报文发送出去后,发送端不关心报文是否完整的到达对端。这个听起来像是缺点的特点,却是UDP协议最大的优点。这种报文处理方式决定了UDP协议资源消耗小,处理速度快,所以通常音频、视频和普通数据传送时使用UDP比较多。就比如音频或视频吧,大家在看视频或者听音乐的时候,都是追求数据传输更快一些,而在传输过程中,偶尔丢一两个数据包,对整体效果并不会产生太大的影响。

相比于之前介绍的DNSHTTP协议,UDP协议需要关注的点要简单很多。我们来看看UDP报文结构。

20161108111340314.png

 

我们再来看一个现网真实UDP报文的抓包。

20161108111450166.png

 

每个UDP报文由UDP报文头部和UDP数据字段两部分组成。其中头部字段由8个字节,4个字段组成,分别是:源端口号、目的端口号、报文长度和校验和。

l  UDP协议使用端口号为不同的应用保留其各自的数据传输通道。比如DNS协议目的端口号是53TFTP协议目的端口号是69

l  数据报的长度是指包括报头和数据载荷部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据载荷部分。数据载荷的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报文的最大长度为65535字节。不过,一些实际应用往往会限制报文的大小。

l  UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方人为篡改或者因其他原因遭到了损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测报文传输过程中是否出错。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的报文丢弃,或者给应用程序提供警告信息。

posted @ 2021-09-02 14:50  XuepengZ  阅读(1731)  评论(0编辑  收藏  举报