【声明】本文仅作学习研究之用,欢迎一起探讨,请勿发动恶意攻击,否则后果自负!

核弹级DDoS攻击肆掠全球

进入3月,春天到了,万物复苏,又到了动物交配的季节!咦!不对不对,我要说什么来着。。O(∩_∩)O哈哈~皮这么一下确实很好玩哦 (^▽^)) 下面咱们说说正事,自从进入三月份啊,爆炸性的新闻就不断啊!先是阿里云爆出成功监控和防御一起流量高达758.6Gbps的Memcached DDoS反射攻击


接着全球最大的同性交友网站GayhubGithub也宣称自己遭遇有史以来最大的DDoS攻击,在2月28日的17:21-17:26之间,GitHub网站无法正常访问。从17:26-17:30,网站只能间歇性的可以访问。简单说,这10分钟该网站已处于瘫痪状态。二者遭遇的新型DDos皆是利用Memcache作为DRDoS放大器,这种反射性DDos能够利用很少的计算资源反射出巨大的流量,破坏力强大

通过Memcached型反射型DDoS攻击的抓包样本,从UDP协议+源端口11211的特征,可以快速分辨这种攻击类型。

什么是DRDos?

DDos相信大家都知道是什么,但是DRDos可能有些人还是第一次听说,那么什么是DRDos呢?
DRDoS是英文“Distributed Reflection Denial of Service ”的缩写,中文意思是“分布式反射拒绝服务”。与DoS、DDoS不同,该方式靠的是发送大量带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,形成拒绝服务攻击。
黑客往往会选择那些响应包远大于请求包的服务来利用,这样才可以以较小的流量换取更大的流量,获得几倍甚至几十倍的放大效果。一般来说,可以被利用来做放大反射攻击的服务包括DNS服务、NTP服务、SSDP服务、Chargen服务、Memcached等。

————来自百度

什么是Memcached?

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

————来自百度

简单点理解呢,就是它是一个简洁的key-value存储系统。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。那么如何利用Memcached来DRDos呢?请看下面。

Memcached的放大攻击原理

从协议上看,Memcached运行在11211端口,支持TCP与UDP协议,也就是我们可以使用这两种协议来与Memcached主机通信,这也为我们伪造数据包提供了机会。学习过计算机网络的都知道,TCP是面向连接的,经过三次握手与服务器建立连接,能重传,提供可靠的服务,而UDP是无连接的不需要事先与服务器建立连接,提供不可靠的服务,不需要进行三次握手。同时服务器接收方也无法验证客户源IP。因此我们可以通过发送源地址为被攻击主机IP的数据包来将Memcached服务器返回的包发现被攻击主机,从而达到反射攻击的目的。还有一点,由于Memcached系统支持最大键值单数据对1M存储。所以我们最大只能存储1M,当然你可以作多个字段,这样也会放大。这里我们将使用TCP来上传我们的攻击载荷,使用UDP构造请求来发起攻击。

Memcached有如下一些命令和操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Memcached 存储命令
Memcached set 命令
Memcached add 命令
Memcached replace 命令
Memcached append 命令
Memcached prepend 命令
Memcached CAS 命令
Memcached 查找命令
Memcached get 命令
Memcached gets 命令
Memcached delete 命令
Memcached incr/decr 命令
Memcached 统计命令
Memcached stats 命令
Memcached stats items 命令
Memcached stats slabs 命令
Memcached stats sizes 命令
Memcached flush_all 命令

这里我们主要用到的是这四个:setgetdeletequit
set用于将攻击载荷上传到Memcached服务器,get用于UDP包请求我们存的攻击载荷,delete用于删除攻击载荷,quit则用来退出服务。

攻击复现

获取Memcached主机信息

通过shodan或者Zoomeye我们能够获取Memcached的主机信息情况,或者你有精力的话也可以扫一扫全网啊~看一看有木有11211开放的主机存在。。这里我直接通过脚本拿到了1w IP(多了不敢拿啊。。),但是其中可以用来发起攻击的估计只有很少一部分吧(因为自从攻击事件发生后很多服务器都做了相应的防护策略。。)。
大约有50多万太主机运行着Memcached服务

获取IP的脚本很简单,我就不发了(不敢发啊~),有兴趣的童鞋可以自己写一写(搜一搜)。。

上传攻击载荷

这里我们使用python脚本,利用socket来发起一个TCP连接,上传一个1M大小(Memcached最大支持1M的键值数据)的载荷。载荷上传成功后Memcached服务器会回显STORED消息,因为我们可以利用这个来确定我们的载荷是否上传成功。同样我们也可以使用telnet连接Memcached服务器,直接get xxx(你上传的key的名称)来验证载荷是否成功上传。

上传的脚本很简单,我就不发了(不敢发啊~),有兴趣的童鞋可以自己写一写(搜一搜)。。

发送伪造IP的UDP包

这里我们使用了python的scapy来伪造UDP包向Memcached服务器发送请求查询我们存储的key,这样Memcached服务器返回的数据就被指向了我们要攻击的IP(这里我选择了我的本地地址。。),当然为了结果更加明显,你也可以利用多线程控制更多服务器数量或者干脆多发几个包。。。

发送的脚本很简单,我就不发了(不敢发啊~),有兴趣的童鞋可以自己写一写(搜一搜)。。

监听查看返回结果

我直接将被攻击IP(UDP数据包中的源IP地址)设置为了我的本地地址,端口12345,打开控制台,直接nc -l -u -p 12345监听一下,可以看到,Memcached服务器返回的数据正源源不断地发来~可以试想一下,我们发出区区20字节的数据包,却可以返回高达1M的数据,1M/20=52100倍,再加上数十万Memcached服务器的存在,这要是打起来,这酸爽~我啥也不说了,自行体会吧。

最后删除载荷并退出(保持好习惯~)

防御措施

如何避免被利用成为Memcached反射端

建议对运行的Memccached服务进行安全检查和加固,防止被黑客利用发起DDoS攻击造成不必要的带宽流量;
如果您的Memcached版本低于1.5.6,且不需要监听UDP。您可以重新启动Memcached加入 -U 0启动参数,例如:Memcached -U 0,禁止监听在udp协议上

如何防护Memcached DDoS反射攻击

建议优化业务架构,将业务分散到多个IP上,或者购买网络产品服务商提供的安防服务。

Tips

在看大佬们的资料的时候发现十分好玩的一个东西,就是利用Memcached的开放服务特性,我们可以利用Memcached服务器来存储我们的一些不是那么重要的东西啊,毕竟这存储资源free啊,不好好利用多么浪费啊~

参考

758.6G每秒:阿里云成功防御国内最大规模Memcached DDoS反射攻击

史上首个核弹级DDoS攻击肆掠全球 GitHub遭1.35T级流量攻击

基于Memcached分布式系统DRDoS拒绝服务攻击技术研究

欢迎加入我的tg群组

为什么选择tg就不多说了,下面是邀请链接,直接扫码吧!
扫码加入我的telegram群组


声明:
文章标题:【DRDos攻击】基于Memcached的DRDos的研究与攻击复现
文章作者:RookieHacker
文章链接:http://blog.rookiehacker.org/2018/03/12/memcacheddrdos/
文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。


喜欢,就支持我一下吧~