一个小故事读懂Memcached漏洞 – 作者:进击的大熊2018

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

*本文原创作者:进击的大熊2018,本文属FreeBuf原创奖励计划,未经许可禁止转载

0x00 有人的地方就有江湖

只要有人,就有恩怨,有恩怨,就有江湖。小黑同学早就看班里的小白不顺眼了,恰逢今天是3月2日元宵节,所谓月黑风高杀人夜,今晚就给他整点麻烦。小白平时不是最喜欢嘚瑟家里房子多大多好吗,最好能找些人去到他家里吓吓他,人越多越好。于是乎,小黑开始谋划这次整蛊计划。

1、城里人不少,但是该找哪些人呢?

最好四肢发达那种,因为杀伤力比较强;最好还头脑简单那种,这样比较容易找来办事,所以小黑到处打听满足这两个条件的人,小黑还给他们取了个统一的名字叫肉鸡。

2、找到人之后,该怎么把他们聚集起来呢?

小黑心想城里人都喜欢凑热闹,于是小黑向肉鸡们散播谣言,小白家附近今晚有烟花表演看咯,小白家附近今晚有烟花表演看咯,小白家附近今晚有烟花表演看咯。

3、该怎么说服这些人去小白家呢?

反正肉鸡们头脑简单,于是小黑戴着小白模样的面具,跟他们说,我是小白,今晚在我家阳台看烟花角度最好咯,今晚在我家阳台看烟花角度最好咯,今晚在我家阳台看烟花角度最好咯。

晚上8点左右,小白刚吃完饭想出去看小电影,推开家门,突然一帮壮汉涌了进来,家里面瞬时挤满了人,想出也出不去,外面的人还有很多壮汉想挤进来。。。

小白一脸懵逼,在家里随便拉了个壮汉问了那三个经典问题:你是谁,你从哪里来,你来干嘛。谁知道那人也是一脸懵逼“不是你跟我说今晚在这里看烟花最爽吗,所以我就来了呀”,小白这才明白被恶作剧了,心里一万只草泥马奔涌而过。。。

人群.jpg

0x01 复盘故事

这个小故事其实讲的就是这几天闹得沸沸扬扬的Memcached漏洞事件,复盘下整个过程,看看为什么小黑能成功整出恶作剧,然后你会顺便发现Memcached漏洞攻击的逻辑竟然如此简单:

一、搜集信息,明确目标

故事:小黑首先通过搜集信息,确定出今晚去小白家的人。目标很明确,有两个条件:四肢发达、头脑简单。

Memcached漏洞:寻找满足两个条件的网络主机:开着11211端口、且服务可以默认登录。11211端口号一般由Memcached占用,且容易通过Memcached放大流量,即所谓的“四肢发达”;默认登录的意思就是不用任何认证,比如无需账号密码就能登录Memcached服务。

二、信息埋伏,准备攻击

故事:小黑向肉鸡们散播今晚有烟花表演看的消息,引起肉鸡们兴趣,腾出晚上时间。

Memcached漏洞:攻击者需要先往肉鸡的Memcached里埋伏预设值的信息,以便后续攻击使用。Memcached用于数据库的内存缓存服务,简单来说就是可以存储一些键值对数据。什么是键值对?比如储存英文名的数据库,小白的英文是A,那么其中一条数据是“小白:A”。“键”是“小白”,“值”是“A”,通过查询“键” “小白”,就可以得到“值” “A”。在这里为了得到放大攻击的效果,把小白的英文名设为A…………(省略1百万次重复的A)…………A。这样一来,输入 “查询小白英文名” 大约是20个字节数据,就能输出1M字节的“A”,实现五万倍的放大效果。

三、伪造信息,反射攻击

故事:小黑通过面具伪装为小白,把头脑简单的壮汉们骗到小白家。

Memcached漏洞:Memcached支持UDP协议,而UDP协议又是基于无连接特性,简单来说攻击者通过UDP协议伪造数据包,把源IP地址篡改为受害者的地址,这样一来发布给“肉鸡们”之后,“肉鸡们”就自然把反馈的流量反射给受害者,流量一大就能造成对方网络拥塞的攻击效果。全世界各地有5W多台符合条件的肉鸡,再乘以每个肉鸡流量的放大值,将能达到恐怖的流量攻击效果。

0x02 模拟攻击

下面是模拟攻击的具体流程:

一、情报收集

通过情报引擎(比如钟馗之眼或shodan等)按指定条件搜索肉鸡们。

搜索信息.png

二、虚拟机搭建环境

将虚拟机(Windows 2008系统)作为其中一个肉鸡,安装Memcached服务(1.4.4版本),根据默认配置进行操作:

1、发现11211端口已被Memcached占用,且不对IP地址做限制

虚拟机1.png

2、本地或者远程直接telnet进来,发现无需认证,即可使用

虚拟机2.png

虚拟机3.png

三、向肉鸡写入预设值的键值对

攻击者主机,撰写Python脚本,通过TCP协议向肉鸡写入大负荷的键值对,“GoMem”对应1M字节的字符“A”。这里有两个问题:

1、为什么是1M字节,而不写入更大的数据?是因为Memcached最大只支持1M的键值单数据对存储。

2、为什么不用UDP协议来写入键值?是因为UDP协议一次只能发送64Kb的数据,要写入1M字节数据,得分好几次写入,所以选择TCP协议。

写值.png

四、伪造UDP数据,反射攻击

攻击者主机,撰写Python脚本,通过UDP协议伪造源地址为受害者地址,向肉鸡请求“GoMem”值数据,于是肉鸡把1M字节的字符“A”打向受害者。用tcpdump小工具对11211端口进行监控,从下图可以看到受害者主机已经接收到攻击流量。

而这里为什么使用UDP,而不用TCP?是因为TCP连接需要通过三次握手,UDP则不需要,安全性更低,容易伪造数据包。

反射.png

0x03 防护建议 

互联网世界的主机、软件就是这么单纯,并不像它的创造者那么复杂,创造者给的设定是怎样,它们就怎样执行,所以很容易被不法分子利用。像这次的Memcached漏洞,只要知道了你的服务器地址,不做防护的话,就很容易被攻成宕机,而攻击的成本很小,只要一部能上网和编程的电脑。

一不小心唠叨了几句,说回正题,那么对于这次Memcached漏洞,我们该怎么防护呢?(以下大部分建议参考网上各种安全预警通告)

对于使用Memcached 服务的开发者小伙伴:

1、Memcached官方最新版本 1.5.6 已封堵了漏洞,默认会关闭 UDP 11211 端口,因此建议升级至最新版本,并且设置密码来进行权限控制。

2、为保万全,在边界防火墙上关闭 UDP 11211 端口的入站与出站流量。

3、尽量在服务器上关闭 Memcached 的 UDP 11211 端口,或只允许其监听在 127.0.0.1:11211。

4、机房采取BCP38,以防止攻击者伪造来源。

对于网络运营商小伙伴的应对措施:

1、运营商的互联互通设备上对出口网络中对源端口为 UDP 11211 的请求进行控制。

2、运营商内部的骨干节点接入设备对出口网络中源端口为 UDP 11211 的请求进行控制。

3、 IDC 在网络出口对出口网络中的源端口为 UDP 11211 的请求进行控制。

控制方式:

1、直接封禁 UDP 协议的 11211 端口;

2、通过 netflow 等监控方式统计 UDP 11211 的流量,超过阈值再进行封禁。

希望这次的事件,能引起大家对信息安全的重视。

时刻牢记安全无小事,防微杜渐是关键!

*本文原创作者:进击的大熊2018,本文属FreeBuf原创奖励计划,未经许可禁止转载

来源:freebuf.com 2018-03-16 10:00:40 by: 进击的大熊2018

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论