先简单说明一下反射型ddos,假设有很多服务器开着一个服务,服务内容与类型不管,如果用户每次发给服务器少量内容,服务器就会返回远大于请求的回复,则这个服务就达到了反射性ddos的要求。
因为tcp协议中发送方ip是可以伪造的,如果我们将源ip设置成希望进行攻击的目标ip,如8.8.8.8,再将伪造后的数据包发给服务方,服务方按照正常处理则会回复给8.8.8.8,从而达到ddos攻击的效果。
相比传统ddos攻击来说,反射ddos有两个显著优势:
1、不需要控制任何肉鸡,任何达到要求的服务器都能成为帮凶,更容易达到分布式的效果。
2、通过反射后数据量得到放大效果,成倍增加攻击流量。
近日,本文主角memcache则是帮助黑客们打出了阿里云世上最大的流量:758.6G每秒 [相关链接](https://mp.weixin.qq.com/s/ghPd_I6ynCh8W_orMxSdNg),下文我将简单介绍其攻击原理和方式
memcache环境搭建很简单,这里简单说一下:
docker
docker永远是搭环境最推荐的方式之一,dockerfile 如下:
保存为Dockerfile,然后执行
docker run --name my-memcache -p 11211:11211 -d memcached
就运行了一个memcache,容器11211端口映射到本机11211
测试memcache:
telnet 127.0.0.1 11211
可看到以下字样:
vm虚拟机
作者的mac在运行docker时遇到了一些bug,本机无法直接访问到容器,为了能顺利抓包只好在vm虚拟机里搭建了memcache
首先在http://memcached.org 下载相应版本文件,执行:
可能出现libevent不兼容问题,下载libevent-2.0.21后运行
安装完成后执行
memcached -d -m 64M -u root -l 172.16.250.164 -p 11211 -c 256 -P /tmp/memcached.pid
-l参数为虚拟机ip,运行后即可在虚拟机的11211端口开启memcache。
memcache 的几个基础命令如下:
set命令用于将 value(数据值) 存储在指定的 key(键) 中:
set key flags exptime bytes [noreply]
key:键值 key-value 结构中的 key,用于查找缓存值。
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据
value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
get命令则取出相应key值,组合使用效果如下:
可以设想,如果memecahe存储了一个值很长的key,当我们get的时候,memcache就会返回很长的数据包,这就达到了我们所需要的反射效果,虽然以上例子为tcp协议,memcache实际上也支持udp协议,而udp的无连接更适合用于做反射放大攻击。
攻击需要两个过程
1、存储到memcache。
2、获取相应值达到攻击效果
首先是存储攻击荷载的脚本,[参考自](http://blog.csdn.net/microzone/article/details/79262549?from=groupmessage&isappinstalled=0):
server.txt里存放memcache列表,我只存放了虚拟机172.16.250.164
memddos_pre.py,存放攻击荷载至memcache:
memddos.py 获取攻击荷载并伪造ip至目标ip:
伪造ip的过程中需要安装scapy库,在有些情况下安装可能不是很方便,linux下可使用[此方法](http://blog.csdn.net/alexzhang67/article/details/52084874)在python2.7下安装scapy
攻击过程中用wireshark检测流量包,首先运行:
memddos_pre.py server.txt 1 10000 10
向server.txt里的反射方列表存储10000字节大小的内容,超时时间10s,这里只设置了10000是方便后续抓包工作。
执行结果如下:
wireshark抓包如下:
![1.png](1.png)
成功存储攻击荷载至memcache
第二步发动攻势,执行:
sudo python memddos.py server.txt 1 1
这里必须sudo才有足够权限伪造ip,为了保证抓到的包不会太杂乱,线程和攻击次数都只设置了1次,执行结果如下:
返回wirdshark查看:
![2.png](2.png)
可看见172.16.250.164也就是memcache向攻击目标8.8.8.8发送了大量垃圾信息,攻击完全达到了效果。
在实战运用中,这种放大理想状态可达到5w倍,当然,实际情况要取决于发射方环境,不过通过上述实验可看出其恐怖的攻击性,不仅可以消耗memcache巨量资源,造成的的流量也是非常巨大。
1、memcache的服务就不应该对所有人开放,至少在外网不应该监听0.0.0.0。
2、升级memcache并使用SASL设置密码来进行权限控制。
3、运营商uRPF的覆盖可有效解决ip伪造问题。
参考文章
http://blog.csdn.net/microzone/article/details/79262549?from=groupmessage&isappinstalled=0)