反射型DDos攻击分析
背景
2018年3月1日,GitHub在官方平台发文披露了本次DDoS攻击过程。在2月28日的17:21-17:26之间,GitHub网站无法正常访问。从17:26-17:30,网站只能间歇性的可以访问。简单说,这10分钟该网站已处于瘫痪状态。
根据GitHub公布的报告,这种利用Memcache作为DRDoS放大器进行放大的DDoS攻击,利用Memcached协议,发送大量带有被害者IP地址的UDP数据包给放大器主机,然后放大器主机对伪造的IP地址源做出大量回应,形成分布式拒绝服务攻击,从而形成DRDoS反射。
image.png
这种类型的 DDoS攻击被称为“反射型 DDoS”或“反射 DDoS”。响应数据包被放大的倍数被称为 DDoS攻击的“放大系数”。相比普通的20到100倍的放大系数,本次GitHub攻击放大系数高达5万倍,被誉为“核弹级”的攻击。
简介
一般而言,我们会根据针对的协议类型和攻击方式的不同,把 DDoS 分成
SYN Flood、ACK Flood、UDP Flood、NTP Flood、SSDP Flood、DNS Flood、HTTP Flood、ICMP Flood、CC
等各类攻击类型.
反射型DDoS 攻击则是DDoS攻击中较巧妙的一种。攻击者并不直接攻击目标服务 IP,而是通过伪造被攻击者的 IP向开放某些某些特殊服务的服务器发请求报文,该服务器会将数倍于请求报文的回复数据发送到那个伪造的IP(即目标服务IP),从而实现隔山打牛,四两拨千金的效果。
而UDP协议没有握手,且允许IP源地址伪造,很多协议在响应包处理时,要远大于请求包,一个字节的请求十个字的响应,十个字节的请求一百个字的响应,这就是UDP反射放大攻击最根本的原理。
image.png
-
1、不握手:TCP面向连接 ; UDP不需要建立连接
-
2、不可靠:TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交 付,即不保证可靠交付。
-
3、无控制:UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低
-
4、一对多:UDP支持一对一,一对多,多对一和多对多的交互通信
-
5、开销小:UDP的首部开销小,只有8个字节。
所以,UDP的反射型DDos更加受攻击者的钟爱
常见UDP反射类型
image.png仅从放大倍数来看,Memcached反射攻击的危害程度远远高于其他反射攻击类型 ,理论上它能够实现50,000倍的放大效果 .
memcached反射型
而基于UDP协议的Memcached反射型攻击因为其高达数万倍的放大倍数,更加受到攻击者的青睐。
Memcached反射攻击,就是发起攻击者伪造成受害者的IP对互联网上可以被利用的Memcached的服务发起大量请求,Memcached对请求回应,大量的回应报文汇聚到被伪造的IP地址源,形成反射型分布式拒绝服务攻击。
Memcached是一个缓存服务器,很多服务站点用来存储缓存数据,以防止WEB服务器承担更多性能损耗,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
image.png为什么Memcached会被利用与反射放大DDoS攻击?
- 由于Memcache监听UDP,天然满足反射DDoS条件
- 很多用户将服务监听在0.0.0.0,且未进行iptables规则配置,这导致可以被任意来源IP请求
- Memcached反射的倍数达到数万倍,非常利于用于放大报文倍数行成超大流量的DDoS攻击
攻击流程
攻击者将自身IP伪造成攻击的目标地址,并向Memcached反射器发送请求读取Memcached在key-value中存储的信息。Memcached在收到请求后向伪造的虚假源IP进行回复,从而形成反射。
image.png Memcached服务支持UDP协议的访问请求,并且默认也会将UDP端口11211对外开放。
因此攻击者只需要通过快速的端口扫描,便可以收集到全球大量没有限制的Memcached服务器,随后攻击者只需要向Memcached服务器的UDP:11211端口,发送伪造为源IP的攻击目标IP地址的特定指定请求数据包,服务器在收到该数据包后,会将返回数据发送至攻击目标的IP地址。
默认情况下,可以通过telnet做memcached做任何的操作,包括获取信息、添加健值、删除数据项目。而且一般情况下memcached是以root用户启动,可以作为攻击的点做提权获取更多的系统信息 。开头介绍的针对github的大规模Ddos攻击也是由于互联网上对外开放udp 11211的端口被人利用做反射式攻击
本地攻击demo
思路是这样的:我们先批量上传指定数据到服务器的Memcached上面,然后我们再去Memcached服务器请求查询数据上一步存储的数据 。
1、先给memcached添加一些缓存数据
pip install memcached
python
import memcache
mc = memcache.Client(['192.168.81.254:11211'],debug=True)
mc.add('test',"test"*9999)
mc.set('test',"test",10000)
mc.add('test1',"test"*10000)
mc.add('test2',"test"*20000)
mc.add('test3',"test"*30000)
mc.set('test',"test",9999999)
image.png
2、模拟攻击 get stats数据请求
python -c "print '\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n'" | nc -nvvu 192.168.81.254 11211 >> /dev/null
image.png
发出去16字节,收到1065字节,
1065 / 16 = 66.56 倍
3、请求获取刚才缓存的test test1 test2 test3 数据,get value
python -c "print '\x00\x00\x00\x00\x00\x01\x00\x00gets test test1 test2 test3\r\n'" | nc -rvvu 192.168.81.254 11211 >> /dev/null
image.png
发出去38字节,收到210680字节
放大了 6354 倍
image.png不妨可以进行一个大概理论计算
比如单台服务器发送的测试指令只有二十个字节数据,却可以返回1M数据。
1M/20=5W(5万倍放大率),四两拨千斤。
假设理想状况下某个黑客团队现在手里有50W可用机器,那么DRDoS理论值数值将会达到约50W*1M=500GB的洪流
公网上的memcached服务还存在很多这样的漏洞
image.png
除了memcached反射型DDos攻击之外,目前比较受欢迎的是NTP、DNS、SSDP、SNMP等等,都是UDP协议上实现的
企业防护反射型DDos方法
image.png 反射 DDoS 攻击于难以追踪、且不需要大量的肉鸡等特点,越来越流行,势必会对企业的业务造成很大的威胁。
1、清洗:优化业务架构,将业务分散到多个IP上 ,防御大流量反射型DDos攻击需要储备足够的带宽,如果遇到大流量反射攻击 ,可以使用云清洗服务,针对UDP反射进行过滤的云清洗服务或者UDP封堵。
2、反击:获得了反射服务器的地址列表后,迅速进行排列,让排名靠前的一半也DDOS攻击靠后的一半 ,让他来攻击后面带宽小的比较容易起作用,这样消耗前一半的带宽,也阻塞后一半的入口带宽,如果效果好理论上能减少攻击流量的一半以上。