技术分享——针对UDP协议的攻击与防御

本文介绍了UDP协议的基本概念、报文格式和应用场景,特别是其在DNS、流媒体等领域的使用。同时,讨论了针对UDP的两种主要攻击类型——UDPFlood和反射放大攻击,以及相应的防御方法,如限流和指纹学习技术。
摘要由CSDN通过智能技术生成

一、UDP协议概述

UDP(User Datagram Protocol,用户数据报协议)是TCP/IP协议栈中的一种无连接的传输协议,能够提供面向事务的简单不可靠数据传输服务。

1.UDP的报文格式

UDP的报文格式如图1所示。

图1 UDP报文格式

UDP报文中各字段的含义如下:

(1)源端口(16位):发送方的端口号。

(2)目的端口(16位):接收方的端口号。

(3)报文长度(16位):表示UDP报文总长度,包括首部和数据部分。

(4)校验和(16位):对整个UDP数据段进行校验,防止报文首部出错。

由此可见,UDP报文首部没有确认机制或传输保证,所以UDP的错误处理往往由上层协议(应用层)来承担。

2.UDP的应用场景

由于缺乏可靠性且属于非连接导向协议,基于UDP协议的应用一般必须允许一定量的丢包、出错和复制粘贴。与TCP协议不同,UDP协议主要用于支持不需要可靠机制、对传输性能要求较高的应用,比如常见的DNS,就是由客户端发起解析请求,然后服务器直接应答响应,避免了TCP的建立与断开连接以及过多的协议报头所产生的开销,提高了传输效率。再如,流媒体、即时多媒体游戏和IP电话(VoIP)等对实时性要求较高的应用,都是建立在UDP协议之上的。此外,UDP还用于组播协议,如在局域网里共享屏幕教学,使用组播发送数据可以避免由TCP产生的大量连接。

二、针对UDP协议的攻击与防御

由于UDP是一种无连接的协议,缺乏可靠性机制,相对于TCP来说,它更容易遭受欺骗攻击。同时,UDP在传输数据上表现出的“高效”特点也常常被攻击者所利用,用来发起DDoS攻击,例如UDP Flood攻击、UDP反射放大攻击等。

1.UDP Flood攻击

(1)攻击原理

UDP Flood属于一种带宽类的DDoS攻击,攻击者通常会结合源IP地址欺骗技术,利用僵尸网络向目标发送大量的UDP报文,这种UDP报文通常为大包,且速率非常快。UDP Flood通常会消耗网络带宽资源,严重时造成链路拥塞;同时,大量随机源IP和随机源端口的UDP Flood会导致依靠会话转发的网络设备性能降低甚至资源耗尽,从而导致网络瘫痪。

(2)防御方法

方法一:限流

这种方法的基本思路是利用DDoS防护系统对UDP报文进行限流,将链路中的UDP报文控制在合理的带宽范围之内。

可以采用两种方式针对UDP Flood进行限流:一是以某个IP地址作为统计对象,对到达这个IP地址的UDP流量进行统计并限流,超过部分丢弃;二是以UDP会话作为统计对象,如果某条会话上的UDP报文速率达到了告警阈值,这条会话就会被锁定,后续命中这条会话的UDP报文都被丢弃。

方法二:指纹学习

一般来说,黑客为了加大攻击频率,快速、长时间挤占目标的网络带宽,在使用DDoS攻击工具实现UDP Flood时,会直接在内存中存放一段内容,然后高频发送到目标,所以攻击报文具有很高的相似性(比如都包含某一个字符串,或整个报文内容一致);而正常业务的每个UDP报文负载内容一般都是不一样的。所以,DDoS防护系统可以通过收集具有相同特征的字符串来检测UDP Flood攻击,这样可以有效降低误报率。

指纹学习就是通过分析客户端向服务器发送的UDP报文载荷是否有大量的一致内容,来判定这个UDP报文是否异常。如图2所示,DDoS防护系统对到达指定目的地的UDP报文进行统计,当UDP报文达到告警阈值时,开始对UDP报文的指纹进行学习。如果相同的特征频繁出现,就会被学习成指纹,后续命中该指纹的报文将被判定为攻击报文,并作为攻击特征进行过滤。目前,市面上绝大多数的DDoS防护系统产品均采用指纹学习的方法来防御UDP Flood攻击。

图2 指纹学习

2.UDP反射放大攻击

对于攻击者来说,传统的UDP flood是一种消耗目标资源、同时也消耗自身资源的攻击方式。UDP flood攻击过程中,攻防双方其实是在拼“资源”,比谁的带宽大、资源多,比谁能坚持到最后。而新型的UDP反射放大攻击则是一种“四两拨千斤”的DDoS攻击方式,攻击者可以更小的代价获得更好的攻击效果。因此在现网中,UDP反射放大攻击越来越多地被使用。

(1)攻击原理

许多基于UDP的服务具有“小请求、大响应”的特性,即这些服务在响应客户端的请求时,响应包的大小要远大于请求包。UDP反射放大攻击正是利用了这一点。

以Memcached服务为例,Memcached是一种开源的高性能分布式内存对象缓存服务,通过查询缓存数据库,直接返回访问请求,加快应用程序的响应效率,同时降低对数据库的访问次数。也正是这种服务机制,使攻击者有了可乘之机,借用正常服务达到攻击的目的。

Memcached支持UDP协议的访问请求,默认将UDP端口11211对外开放。因此,攻击者只需要通过快速的端口扫描,便可以收集到全球大量没有任何防护措施的Memcached服务器,随后攻击者只需要向Memcached服务器的UDP端口11211发送伪造的特定请求报文,该请求报文的源地址被设置成了攻击目标的IP地址。服务器在收到该请求报文后,则会将“放大”后的响应报文发送至攻击目标处,如图3所示。攻击者甚至可以利用僵尸网络作为请求源,向Memcached服务器发起“群体”请求,则返回的响应报文将成指数级上升,比原始请求报文扩大几百至几万倍,从而通过反射加放大的形式,使攻击目标拥塞,无法正常提供服务,达到低成本化、高隐蔽性的攻击效果。

图3 UDP反射放大攻击实例

除了上面提到的Memcached,目前还有其他十多种基于UDP的协议,均可以用于反射放大攻击,放大倍数从几倍到几万倍,如表1所示。

表1 可用于UDP反射放大攻击的协议

协议

端口

理论放大倍数

DNS

53

28~54

NTP

123

556.9

SNMP

161

6.3

SSDP

1900

30.8

Portmap

111

7~28

QOTD

17

140.3

CharGen

19

358.8

TFTP

69

60

NetBIOS

138

3.8

Memcached

11211

10000~50000

WS_Discovery

3702

70~500

CLDAP

389

56~70

(2)防御方法

UDP反射放大攻击的防御方法与传统UDP Flood攻击的防御方法基本相同,这里不再赘述。

三、小结

本文介绍了UDP协议的基础知识及应用场景,并重点描述了两种针对UDP协议的攻击原理及防御方法。就目前而言,指纹学习是防御UDP协议攻击最为有效的技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值