Chargen反射DDoS攻击的防范
最近有客户收到机房的提示邮件如:【Exploitable chargen service used for an attack: It appears that a public "chargen" service on your network, running on IP address xxx.xxx.xxx.xxx, participated in a large-scale attack against a customer of ours, generating large UDP responses to spoofed probes that claimed to be from the attack target.】,大概就是说你的服务器被DDoS攻击者利用了。
UDP 数据风暴(UDP Storm)是DDoS攻击手段的一种。攻击者通过向被攻击服务器发送大量带有垃圾数据的UDP 报文,使受害者服务器信道资源的利用率下降,从而达到拒绝服务的目的。UDP Storm 攻击的实现手法可分为直接攻击和反射攻击。在直接攻击方式下,攻击者控制僵尸主机上通过后门等非法手段安装的僵尸进程向被攻击服务器发送UDP 报文;而反射攻击则是攻击者通过伪造被攻击服务器IP地址向大量有漏洞的服务器发送某些基于UDP 服务的特殊请求报文,这些请求的回复会被放大数倍后返填送到受害者服务器从而达到攻击目的。反射式DDoS攻击不需要控制僵尸进程,实现起来更方便且不容易被追踪,因此它已经成了一种最近非常活跃的DDoS 攻击手段。常见的被用于反射攻击的服务就是Chargen服务。
Chargen协议
Chargen 字符发生器协议(Character Generator Protocol)是一种简单网络协议,设计的目的是用来调试TCP 或UDP 协议程序、测量连接的带宽或进行QoS 的微调等。它的默认端口为19,分为基于TCP 和UDP 两种方式,TCP 方式下建立连接后,服务器会不断传送任意字符到客户端,直到客户端关闭连接。UDP 方式下每当服务器收到客户端的一个UDP数据包后向客户端返回一个数据包,长度为0~512 字节之间随机值,数据包的负载可以是任意字符。
Chargen 协议的设计初衷是为了网络测试,并没有严格的访问控制和流量控制机制,在UDP 模式下任何人都可以向开放该服务的主机请求服务,这种简单的请求-回复模式便为DDoS 攻击者提供了便利。下图给出了这个攻击的示意。图中攻击者的地址是IP A,三元组(src=0:S,dst=1:19,proto=UDP ) 表示A 伪造被攻击对象地址IP 0 和端口S,向被利用主机IP1 的19 端口发送的Chargen 请求报文,对应被利用主机放大后的回复报文流向了被攻击主机IP 0。这个漏洞早在1996年就被发现(CVE-1999-0103),该漏洞被利用最主要的原因是实现过程没有设计必要的访问控制。
流量放大程度在不同的操作系统上有所不同,有些可以达到几十倍。在Linux 系统下,对于64 字节的无负载UDP Chargen 请求,系统回复一个1066 字节的UDP 应答报文,而在Windows 系统下使用同样的请求,回复的UDP 应答报文长度达3259 字节,并产生了分片,流量被放大了50 倍。
我们可以用telnet协议对被利用者进行简单请求模拟(telnet xxx.xxx.xxx.xxx 19),效果如下图:
该原理有点和下面这个恶搞图相似
防范方法
从上文叙述可以看出大部分被利用的服务器是使用的window系统,Chargen 协议属于Simple TCP/IP服务的一个协议。
微软官方描述如下:
该服务一般是用不上的,所以我们防范被利用或被攻击只需开启防火墙关掉19端口,或者直接关掉或卸载Simple TCP/IP服务即可。附图如下:
ü 方法一:关闭Simple TCP/IP服务(以server 2003为例)
ü 方法二:卸载Simple TCP/IP服务