近日,互联网上存在大量利用 Memcached UDP 端口实施 DDoS 放大攻击的案例,攻击者可利用该存在风险的 Memcached 服务器实施大规模的流量攻击,从而导致网站无法正常提供服务。为避免我们的业务受影响,boke112 导航建议大家及时开展安全自查,如在受影响范围,请及时进行更新修复,避免被外部攻击者入侵。
Memcached 漏洞描述
Memcached 是一套常用的 key-value 缓存系统,由于它本身没有权限控制模块,所以对公网开放的 Memcached 服务很容易被攻击者扫描发现。该类攻击主要使用 Memcached 协议的 UDP 端口开展攻击,攻击者通过向开启了 UDP 协议支持的 Memcached 服务器上发送伪造的 IP 欺骗请求,Memcached 服务器会将大量的响应报文发往目标攻击主机,从而占用目标攻击机器的大量带宽资源,导致拒绝服务。
阿里云关于 Memcached的安全加固方案
1、定期升级,使用官方最新版本 Memcached。
2、配置访问控制
建议用户不要将服务发布到互联网上而被黑客利用,可以通过 ECS 安全组规则或 iptables 配置访问控制规则。例如,在 Linux 环境中运行命令 iptables -A INPUT -p tcp -s 192.168.0.2 —dport 11211 -j ACCEPT,在 iptables 中添加此规则只允许 192.168.0.2 这个 IP 对 11211 端口进行访问。
3、绑定监听 IP
如果 Memcached 没有在公网开放的必要,可在 Memcached 启动时指定绑定的 IP 地址为 127.0.0.1。例如,在 Linux 环境中运行以下命令:
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
Memcached 命令参数说明
-d 是指启动一个守护进程。
-m 是指分配给 Memcached 使用的内存数量,单位是 MB,以上为 1024MB。
-u 是指运行 Memcached 的用户,推荐使用单独普通权限用户 Memcached,而不要使用 root 权限账户。
-l 是指监听的服务器 IP 地址,例如指定服务器的 IP 地址为 127.0.0.1。
-p 是用来设置 Memcached 的监听端口,默认端口为 11211。建议设置 1024 以上的端口。
-c 是指最大运行的并发连接数,默认是 1024。可按照您服务器的负载量来设定。
-P 是指设置保存 Memcached 的 pid 文件,例如保存在 /tmp/memcached.pid 位置。
7、备份数据。
为避免数丢失,升级前请做好备份,或者建立 ECS 硬盘快照。
8、云盾检测及防护。
使用云盾安骑士自动检测不安全的配置项。
腾讯云关于 Memcached的安全加固方案
1、如果您使用到了 Memcached 服务,请务必禁用 UDP 支持,Memcached 启动时,建议添加“-U 0”参数可完全禁用 UDP(默认情况下,Memcached 会侦听 INADDR_ANY,并默认启用 UDP)细节可参考官方说明文档。
2、腾讯云用户建议开启安全组防火墙,确保 Memcached 服务器与互联网之间无法通过 UDP 来访问,配置可参考如下:
2.1 进入腾讯云控制台,打开安全组配置界面,操作如下:
2.2 修改或添加安全组策略,策略配置参考如下(规则作用:禁止外部入向的 11211 端口 UDP 流量):
3、若您的 Memcached 服务必须使用到 UDP,建议始终以较小的数据包来响应,否则可能导致协议会被滥用进行放大攻击;
4、验证方法
修复完毕后,您可以在服务器上运行下面的命令来测试服务器是否易受攻击或修复措施是否生效:
$ echo -en "x00x00x00x00x00x01x00x00statsrn" | nc -u 127.0.0.1 11211 STAT pid 21357 STAT uptime 41557034 STAT time 1519734962 ...
查看返回内容,若返回内容非空(如上图所示),则表明你的服务器可能在受影响之列。