原创技术分析 | Memcached之反射拒绝服务攻击技术原理

Posted 天融信阿尔法实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创技术分析 | Memcached之反射拒绝服务攻击技术原理相关的知识,希望对你有一定的参考价值。


0x00 背景介绍



Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。


DRDOS

分布式反射拒绝服务攻击,对于分布式还有拒绝服务都很好理解,反射的意思简单来说就是借别人的手来攻击。Memcache满足被借用的条件就可以借用Memcache的手来攻击其他主机。

0x01 攻击原理


1.1技术实现

攻击实现的条件是海量未认证的memcache主机和未使用URPF机制。

1.2攻击原理

因为Memcache 同时支持tcp和udp协议,这符合反射DRDOS的最佳情况,关于tcp与udp协议的区别有很多,这里面主要介绍跟攻击有关的区别:

1 TCP保证数据正确性,UDP可能丢包。

2 UDP的协议, 没有握手过程, 攻击者可以轻易的伪造来源IP并发起请求。

3. TCP 每次发包大小不受限制,udp每次最大发送64k,memcache最大存1m,所以直接用tcp存1m数据。

 基于上面两个协议的特点,我们对大量的受控Memcache主机发包:

1 我们选择用tcp发包set指令,因为tcp可靠不丢包,同时每次发包不受大小限制,memcache最大存1m,所以直接存1m数据

2 用udp发包修改源ip(受害者ip)发送get指令,

3 Memcache接收到伪造后的数据请求后把大量数据响应给伪造后的受害者的主机造成拒绝服务。

1.3命令介绍

利用Memcached作为反射服务器需要用到memcached几个命令,set命令用来设置键值,get命令获取键值,为什么需要set命令?因为攻击者不知道key是什么,攻击者设置完成后,攻击者用get请求获取这个数据Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中。

如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

key → abc

flag → 0

exptime → 0 (以秒为单位,过期时间,0表示不永不过期)

bytes → 10 (数据存储的字节数)

value → abc(第二行)

原创技术分析 | Memcached之反射拒绝服务攻击技术原理

原创技术分析 | Memcached之反射拒绝服务攻击技术原理

Get命令获取key(键) 中的value(数据值)。

原创技术分析 | Memcached之反射拒绝服务攻击技术原理

Delete 删除。

1.4攻击方法

首先发送set命令,set命令用来提前设置好键值,以便用get命令反射时候自己知道键的名称,而用set命令设置键值时候并不需要伪造源ip,所以用tcp协议更好,数据可靠不丢包。用get命令时候需要伪造源ip,伪造的ip为我们想攻击的目标,这时候需要用udp发包。

这里简单写个一次攻击的poc,之后只要加循环多线程就可以实现多次攻击。

原创技术分析 | Memcached之反射拒绝服务攻击技术原理

这里先用tcp发包测试一下,发送set指令设置键值,然后发送get指令看看能否获取到。

原创技术分析 | Memcached之反射拒绝服务攻击技术原理

伪造源ip,这里使用scapy,src本应该是我们自己的ip,但是这里我改成了我想攻击目标的ip,因为使用udp协议发包,在没有使用URPF机制的情况下,memcache响应的数据包会返回给我们攻击的目标完成了攻击。

原创技术分析 | Memcached之反射拒绝服务攻击技术原理

1.5攻击情况

首先是set,键值对,值里面通过tcp存1m数据,然后再用udp发送get请求,get请求只有20字节,但是响应的确是1m数据

因为发送的get命令指令数据很小,但是返回的数据是发送的5万倍,所以当在网络中找到

这种符合情况的memcache大量主机后就可以实现DRDOS攻击了。


0x02 防御策略



01

设置访问控制规则

例如,在Linux环境中运行命令iptables -A INPUT -p tcp -s 192.168.0.2 —dport 11211 -j ACCEPT,在iptables中添加此规则只允许192.168.0.2这个IP对11211端口进行访问。

02

绑定监听IP

03

应使用最小化权限运行服务

使用普通权限账号运行,指定Memcached用户。例如,在Linux环境中运行以下命令来运行Memcached:
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid

04

启用认证功能

Memcached本身没有做验证访问模块,Memcached从1.4.3版本开始,能支持SASL认证。SASL认证详细配置手册。


05


  修改默认端口

修改默认11211监听端口为11222端口。在Linux环境中运行以下命令:
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222 -c 1024 -P /tmp/memcached.pid

以上是关于原创技术分析 | Memcached之反射拒绝服务攻击技术原理的主要内容,如果未能解决你的问题,请参考以下文章

漏洞学习Memcached服务器UDP反射放大攻击

利用Memcached的反射型DDOS攻击技术分析

放大倍数超5万倍的 Memcached DDoS 反射攻击,怎么破?

关于利用memcached服务器实施反射DDoS攻击的情况通报

[漏洞预警]利用Memcached 服务器实施反射DDos攻击情况报告

注意了!有人利用memcached服务漏洞实施反射DDOS攻击,如何防范看这里——