标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-1930] 作者: 对不起 发表于: [2018-09-15]
本文共 [338] 位读者顶过
前言先简单说明一下反射型ddos,假设有很多服务器开着一个服务,服务内容与类型不管,如果用户每次发给服务器少量内容,服务器就会返回远大于请求的回复,则这个服务就达到了反射性ddos的要求。 因为tcp协议中发送方ip是可以伪造的,如果我们将源ip设置成希望进行攻击的目标ip,如8.8.8.8,再将伪造后的数据包发给服务方,服务方按照正常处理则会回复给8.8.8.8,从而达到ddos攻击的效果。
[出自:jiwo.org] 相比传统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伪造问题。 |