基于Memcached的DRDos的研究与攻击复现
0 条评论【声明】本文仅作学习研究之用,欢迎一起探讨,请勿发动恶意攻击,否则后果自负!
核弹级DDoS攻击肆掠全球
进入3月,春天到了,万物复苏, 又到了动物交配的季节! 咦!不对不对,我要说什么来着。。O(∩_∩)O哈哈~皮这么一下确实很好玩哦 (^▽^)) 下面咱们说说正事,自从进入三月份啊,爆炸性的新闻就不断啊!先是阿里云爆出成功监控和防御一起流量高达758.6Gbps的Memcached DDoS反射攻击
接着全球最大的同性交友网站 Gayhub Github也宣称自己遭遇有史以来最大的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 | Memcached 存储命令 |
这里我们主要用到的是这四个:set
、get
、delete
、quit
。set
用于将攻击载荷上传到Memcached服务器,get
用于UDP包请求我们存的攻击载荷,delete
用于删除攻击载荷,quit
则用来退出服务。
攻击复现
获取Memcached主机信息
通过shodan或者Zoomeye我们能够获取Memcached的主机信息情况,或者你有精力的话也可以扫一扫全网啊~看一看有木有11211开放的主机存在。。这里我直接通过脚本拿到了1w IP(多了不敢拿啊。。),但是其中可以用来发起攻击的估计只有很少一部分吧(因为自从攻击事件发生后很多服务器都做了相应的防护策略。。)。
获取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拒绝服务攻击技术研究
声明:
文章标题:基于Memcached的DRDos的研究与攻击复现
文章作者:h3h3da
文章链接:https://www.liucunzhan.com/p/6b3f75e2-070f-4709-9a56-1862b3d3581c
文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。
喜欢,就支持我一下吧~