反射型DDos攻击分析

2019-09-29  本文已影响0人  城市烈人
image.png

背景

​ 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

所以,UDP的反射型DDos更加受攻击者的钟爱

常见UDP反射类型

image.png

仅从放大倍数来看,Memcached反射攻击的危害程度远远高于其他反射攻击类型 ,理论上它能够实现50,000倍的放大效果 .

memcached反射型

​ 而基于UDP协议的Memcached反射型攻击因为其高达数万倍的放大倍数,更加受到攻击者的青睐。

Memcached反射攻击,就是发起攻击者伪造成受害者的IP对互联网上可以被利用的Memcached的服务发起大量请求,Memcached对请求回应,大量的回应报文汇聚到被伪造的IP地址源,形成反射型分布式拒绝服务攻击。

Memcached是一个缓存服务器,很多服务站点用来存储缓存数据,以防止WEB服务器承担更多性能损耗,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

image.png
为什么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攻击靠后的一半 ,让他来攻击后面带宽小的比较容易起作用,这样消耗前一半的带宽,也阻塞后一半的入口带宽,如果效果好理论上能减少攻击流量的一半以上。

上一篇下一篇

猜你喜欢

热点阅读