无耻的接受了p猫的py交易,自己也想实验下memcached这个放大攻击
0x01 前言
近日,一种利用Memcached缓存服务器来作为放大器的DRDOS攻击来势汹汹,多家安全机构检测到了这种反射放大攻击,其利用memcached协议,发送大量带有被害者IP地址的UDP数据包给放大器主机,然后放大器主机对伪造的IP地址源做出大量回应,形成分布式拒绝服务攻击,从而形成DRDoS反射。这里利用大佬们的文章,简单实验下攻击过程,因本人能力有限,望各位表哥勿喷。
参考5t4rk大佬的文章:
http://blog.csdn.net/microzone/article/details/79262549
本文仅作演示作用,不带有任何攻击行为
0x02 攻击原理
先来了解下相关的概念是什么意思
首先了解下什么是Memcached:
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。本质上,它是一个简洁的key-value存储系统。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
Balabala~~,其实memcached作为一个缓存系统,缓解web程序对于数据库的访问,来达到加速的效果,具体效果如下图:
DDOS我们都知道,关于DRDOS原理:
DRDoS是英文“Distributed Reflection Denial of Service ”的缩写,中文意思是“分布式反射拒绝服务”。与DoS、DDoS不同,该方式靠的是发送大量伪造的带有被害者IP地址的数据包给攻击主机,然后攻击主机对IP地址源做出大量回应,形成拒绝服务攻击。
因为Memcached支持TCP和UDP种协议,所以可以使用2种协议上传攻击载荷,TCP因为是面向连接的,头部字段没有length所以可以直接发送数据,而UDP存在length字段且只占2个字节,每次只能发2**16=64K的数据,需要多次循环上传。
但是进行反射攻击载荷时时必须使用UDP发包,TCP基于3次握手如果源IP被伪造会停止通信,但是UDP因为面向无连接的,即使伪造IP也可以通信,服务器也无法验证源IP真实性,这个就很有意思了。
此次实验主要用到以下3个memcached命令,set,get,quit
1) 第一个是上传有效载荷Memcached set 命令
Memcachedset 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。
set 命令的基本语法格式如下:
set keyflags exptime bytes [noreply]
value
参数说明如下:
key:键值 key-value 结构中的 key,用于查找缓存值。
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据
value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
使用telnet ip port连接上memcached之后
2) 第二个反射有效载荷Memcached get 命令
Memcachedget 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
get 命令的基本语法格式如下:
get key
多个 key 使用空格隔开,如下:
get key1key2 key3
参数说明如下:
key:键值 key-value 结构中的 key,用于查找缓存值。
3) 退出会话Memcached quit
0x03攻击流程
要实现这种攻击至少需要三个条件:
1. 攻击者手里必须控制大量肉鸡机器,并且分布式在互联互通分布在互联上。
2. 攻击者随时可以通过代理或者控制程序同时向所有肉鸡发送大量攻击指令。
3. 所有肉鸡在接受指令后,同时大量并发,同时向受害者网络或者主机发起攻击行为。
DRDoS要完成一次反射放大攻击:
1. 攻击者,必须提前需要把攻击数据存放在所有的在线肉鸡或者反射服务器之上。
2. 攻击者,必须伪造IP源头。发送海量伪造IP来源的请求。当然这里的IP就是受害者的IP地址。
3. 反射服务器,必须可以反射数据,运行良好稳定。最好是请求数据少,返回数据成万倍增加。
如此不断循环,就可以大规模攻击其带宽网络,增加占用率和耗损目标机的硬件资源。
而此次memcached作为放大主机,在网络中数量庞大且大部分都存在无认证的现象,导致攻击者可以很容易的进行DRDOS攻击,根据shodan搜索结果,运行在端口11211的memcached主机有将近10W台暴露在公网中
0x04攻击复现
首先在192.168.1.123机器进行发包,发送memcached指令,在使用udp发送时指令前加上8字节标志位\x00\x00\x00\x00\x00\x01\x00\x00
发送16字节,返回了1918字节的数据,抓包看看
放大倍数:1918/16=119
现在可以使用set指令进行上传数据,指令后加上\r\n回车换行代替手动操作,
get用于获取value值,返回数据
如果上传的数据的有1M,返回时1M=2^20/20,大约放大5W倍,而且理论上最高可以达到6W倍。还有不知道为什么用scapy伪造IP后靶机收不到memcached发过来的udp包,折腾了很久,有知道的师傅请联系我。
0x05缓解措施
1. memcache的用户建议将服务放置于可信域内,有外网时不要监听 0.0.0.0,有特殊需求可以设置acl或者添加安全组。
2. 为预防机器器扫描和ssrf等攻击,修改memcache默认监听端口。
3. 升级到最新版本的memcache,并且使用SASL设置密码来进行权限控制。