Memcached UDP 反射攻击漏洞

问题记录

  今天中午有同事反应某系统打开很慢,觉得是电脑问题(手动偷笑)。打开网站一看,慢的连静态文件都是几KB/S的速度。这明显不合理啊。上服务器一查,CPU正常、内存正常、Web程序也正常。html

  因而想到了网络带宽问题。用vnstat -i eth1 -l一看,惊呆了😮,出网带宽达到了 162.44Mbit/s,这不是被攻击了么?缓存

3971524549705_.pic_hd.jpg

  继续用iftop查看是哪一个程序占用了网络。安全

Snipaste_2018-04-24_15-21-12.png

  发现居然是 Memcache,这说明 Memcache 存在问题。而咱们的应用程序对 Memcache 操做的地方并很少且无异常,故猜想是 Memcache 收到了攻击,并且是前段时间很火的 UDP 反射攻击漏洞引发的。
  因而在咱们对 Memcache 启动参数加了 -U 0并重启后,流量就正常了。如下内容是关于该漏洞的详细信息和具体解决办法。服务器

漏洞描述

  Memcached 是一套经常使用的 key/value 缓存系统,因为它自己没有权限控制模块,因此对公网开放的 Memcached 服务很容易被攻击者扫描发现。该类攻击主要使用 Memcached 协议的 UDP 端口开展攻击,攻击者经过向开启了 UDP 协议支持的 Memcached 服务器上发送伪造的 IP 欺骗请求,Memcached 服务器会将大量的响应报文发往目标攻击主机,从而占用目标攻击机器的大量带宽资源,致使拒绝服务。网络

排查方案

  1. 从外部互联网测试是否对外开放了 Memcached 11211 UDP 端口,使用nc工具测试端口,并查看服务器上是否运行memcached进程,具体测试方式:

    测试端口:nc -vuz IP地址 11211
    测试是否对外开放 memcached 服务:telnet IP地址 11211,若是开放了 11211 端口,则可能受影响
    检查进程状态:ps -aux | grep memcached tcp

  2. 使用echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u IP地址 11211命令查看返回内容,若返回内容非空,则代表服务器可能受到了影响。

漏洞解决方案

  1. 若是开放了 11211 UDP 端口,使用防火墙策略封禁 UDP 11211 端口,确保 Memcached 服务器与互联网之间没法经过 UDP 来访问;
  2. 建议您添加-U 0参数并重启 memcached 服务彻底禁用 UDP;
  3. Memcached 官方已经发布新版本默认禁用 UDP 11211 端口,可升级到最新版本;
  4. 对在运行的 Memcached 服务进行安全加固,例如:启动绑定本地监听IP,禁止对外访问、禁用UDP协议、启用登陆认证等安全功能,提升 Memcached 安全性;

安全加固方案

  1. 按期升级,使用官方最新版本 Memcached
  2. 配置访问控制

    不要将服务发布到互联网上而被黑客利用,能够经过iptables配置访问控制规则。例如,在Linux环境中运行命令iptables -A INPUT -p tcp -s 192.168.0.2 -dport 11211 -j ACCEPT,在iptables中添加此规则只容许192.168.0.2这个 IP 对 11211 端口进行访问。memcached

  3. 绑定监听 IP工具

    若是 Memcached 没有在公网开放的必要,可在 Memcached 启动时指定绑定的 IP 地址为 127.0.0.1。例如,在 Linux 环境中运行如下命令:post

    memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
  4. 使用最小化权限帐号运行 Memcached 服务测试

    使用普通权限帐号运行,指定 Memcached 用户。例如,在 Linux 环境中运行如下命令来运行 Memcached:

    memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
  5. 启用认证功能

    Memcached 自己没有作验证访问模块,Memcached 从 1.4.3 版本开始,能支持 SASL 认证。

  6. 修改默认端口

    修改默认 11211 监听端口为 11222 端口。在 Linux 环境中运行如下命令:

    memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222 -c 1024 -P /tmp/memcached.pid

参考资料


原文地址: https://shockerli.net/post/me...
更多文章请访问个人我的博客: https://shockerli.net
相关文章
相关标签/搜索