memchache反射型ddos分析与复现

栏目: 数据库 · 发布时间: 6年前

内容简介:前言先简单说明一下反射型ddos,假设有很多服务器开着一个服务,服务内容与类型不管,如果用户每次发给服务器少量内容,服务器就会返回远大于请求的回复,则这个服务就达到了反射性ddos的要求。因为tcp协议中发送方ip是可以伪造的,如果我们将源ip设置成希望进行攻击的目标ip,如8.8.8.8,再将伪造后的数据包发给服务方,服务方按照正常处理则会回复给8.8.8.8,从而达到ddos攻击的效果。

前言

先简单说明一下反射型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 如下:

memchache反射型ddos分析与复现

保存为Dockerfile,然后执行

docker run --name my-memcache -p 11211:11211 -d memcached

就运行了一个memcache,容器11211端口映射到本机11211

测试memcache:

telnet 127.0.0.1 11211

可看到以下字样:

memchache反射型ddos分析与复现

vm虚拟机

作者的mac在运行 docker 时遇到了一些bug,本机无法直接访问到容器,为了能顺利抓包只好在vm虚拟机里搭建了memcache

首先在http://memcached.org 下载相应版本文件,执行:

memchache反射型ddos分析与复现

可能出现libevent不兼容问题,下载libevent-2.0.21后运行

memchache反射型ddos分析与复现

安装完成后执行

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值,组合使用效果如下:

memchache反射型ddos分析与复现

可以设想,如果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:

memchache反射型ddos分析与复现

memchache反射型ddos分析与复现

memddos.py 获取攻击荷载并伪造ip至目标ip:

memchache反射型ddos分析与复现 memchache反射型ddos分析与复现

memchache反射型ddos分析与复现

伪造ip的过程中需要安装scapy库,在有些情况下安装可能不是很方便,linux下可使用[此方法](http://blog.csdn.net/alexzhang67/article/details/52084874)在 python 2.7下安装scapy

攻击过程中用wireshark检测流量包,首先运行:

memddos_pre.py server.txt 1 10000 10

向server.txt里的反射方列表存储10000字节大小的内容,超时时间10s,这里只设置了10000是方便后续抓包工作。

执行结果如下:

memchache反射型ddos分析与复现

wireshark抓包如下:

![1.png](1.png)

成功存储攻击荷载至memcache

第二步发动攻势,执行:

sudo python memddos.py server.txt 1 1

这里必须sudo才有足够权限伪造ip,为了保证抓到的包不会太杂乱,线程和攻击次数都只设置了1次,执行结果如下:

memchache反射型ddos分析与复现

返回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)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Node.js in Action

Node.js in Action

Mike Cantelon、Marc Harter、TJ Holowaychuk、Nathan Rajlich / Manning Publications / 2013-11-25 / USD 44.99

* Simplifies web application development * Outlines valuable online resources * Teaches Node.js from the ground up Node.js is an elegant server-side JavaScript development environment perfect for scal......一起来看看 《Node.js in Action》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

SHA 加密
SHA 加密

SHA 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具