什么是chargen服务放大DDoS攻击

更新时间:

概述

本文主要概述什么是chargen服务放大DOS攻击。

详细信息

什么是CHARGEN协议

CHARGEN字符发生器协议(Character Generator Protocol)是一种简单网络协议,设计的目的是用来调试TCP或UDP协议程序、测量连接的带宽或进行QoS的微调等。它的默认端口为19,分为基于TCP和UDP两种方式。
  • TCP方式下建立连接后,服务器会不断传送任意字符到客户端,直到客户端关闭连接。
  • UDP方式下每当服务器收到客户端的一个UDP数据包后,向客户端返回一个数据包,长度为0~512字节之间随机值,数据包的负载可以是任意字符。
CHARGEN协议的设计初衷是为了网络测试,并没有严格的访问控制和流量控制机制,在UDP 模式下任何人都可以向开放该服务的主机请求服务,这种简单的请求\- 回复模式便为DDoS 攻击者提供了便利。

DDoS Chargen攻击原理

攻击示意图如下所示。图中攻击者的地址是IP:A,三元组(src=0:S,dst=1:19,proto=UDP ) 表示A伪造被攻击对象地址IP:0和端口S,向被利用主机IP:1的19端口发送的Chargen请求报文,对应被利用主机放大后的回复报文流向了被攻击主机IP:0。这个漏洞早在1996年就被发现(CVE-1999-0103),该漏洞被利用最主要的原因是实现过程没有设计必要的访问控制。
CHARGEN协议的设计初衷是为了网络测试,并没有严格的访问控制和流量控制机制,在UDP模式下任何人都可以向开放chargen服务的主机请求服务,这种简单的请求\回复模式使得攻击者可以伪造源地址信息向chargen服务发送请求,而chargen服务并不会验证源地址的真伪,会向源地址发送应答包,这导致该服务可被用来进行DOS攻击。
RFC 864中给出chargen应答包的建议大小不超过512字节,但是在实际实现过程中,这个大小并未被严格限制,根据实际测试,在Linux系统下,对于64 字节的无负载UDP chargen请求,系统回复一个1066字节的UDP应答报文,流量被放大了15倍,而在Windows系统下使用同样的请求,回复的UDP应答报文长度达3259 字节,并产生了分片,流量被放大了50 倍。这使得该服务可以被用来进行放大DOS攻击。

如何防护

  1. 受害者:由于 CHARGEN不是常用协议,因此对于这类DDoS可以使用基于端口匹配的方法进行检测。发现对应的流量使用专业设备或者程序丢弃即可。
  2. 被利用者:确认系统是否必须开放chargen服务,如果不是必要服务,请在系统中关闭该服务,具体关闭的办法如下所示。
    • Linux的关闭方法:在 /etc/xinetd.conf文件中注释掉chargen服务或者在 /etc/xinetd.d/目录下将chargen服务对应的文件中的disable属性改为yes。
    • Windows的关闭方法:chargen服务属于Windows系统中的 Simple TCP服务,一般情况下Windows系统缺省不会安装该服务,如果已经安装该服务,可以通过如下几种方式关闭服务。
      • 通过控制面板里的Service控制程序关闭,将 Simple TCP/IP service设置为禁用。
      • 修改系统注册表,将以下两项表项的值设为0。
        HKLM\System\CurrentControlSet\Services\SimpTCP\Parameters\EnableTcpChargen
        HKLM\System\CurrentControlSet\Services\SimpTCP\Parameters\EnableUdpChargen
        
      • 通过系统命令关闭chargen服务,命令如下所示。
        net stop simptcp
        
      • 对于必须开放chargen服务的主机,为避免被攻击,建议使用防火墙限制访问该服务的来源。

适用于

  • DDoS基础防护