什么是Memcrashed?
在2018年2月27日,Cloudflare 和 Arbor Networks 公司于周二发出警告称,恶意攻击者正在滥用 Memcached 协议发起分布式拒绝服务(DDoS)放大攻击,全球范围内许多服务器(包括 Arbor Networks 公司)受到影响。下图为监测到Memcached攻击态势。
美国东部时间28日下午,GitHub透露其可能遭受了有史最强的DDoS攻击,专家称攻击者采用了放大攻击的新方法Memcached反射攻击,可能会在未来发生更大规模的分布式拒绝服务(DDoS)攻击。对GitHub平台的第一次峰值流量攻击达到了1.35Tbps,随后又出现了另外一次400Gbps的峰值,这可能也将成为目前记录在案的最强DDoS攻击,此前这一数据为1.1Tbps。据CNCERT3月3日消息,监测发现Memcached反射攻击在北京时间3月1日凌晨2点30分左右峰值流量高达1.94Tbps。
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。放大攻击针对使用UDP在公共网络上公开的Memcached部署。
这些攻击都是使用memcached协议并源自11211
端口。攻击者将普通大小的UDP数据包从欺骗性IP地址发送到运行memcached的服务器。这些请求会从memcached中获取极大的数据包响应,从而快速拥塞受害者的网络并导致拒绝服务(DoS)方案。
服务在腾讯云如何减轻这种攻击?
- 如果您使用到了Memcached服务,请务必禁用UDP支持,Memcached启动时,建议添加“-U 0”参数可完全禁用UDP(默认情况下,Memcached会侦听INADDR_ANY,并默认启用UDP)细节可参考官方说明文档:https://github.com/memcached/memcached/wiki/ConfiguringServer#udp
- 腾讯云用户建议开启安全组防火墙,确保Memcached服务器与互联网之间无法通过UDP来访问,配置可参考如下图:
- 进入腾讯云控制台,打开安全组配置界面,操作如下:
修改或添加安全组策略,策略配置参考如下(规则作用:禁止外部入向的11211端口UDP流量):
若您的Memcached服务必须使用到UDP,建议始终以较小的数据包来响应,否则可能导致协议会被滥用进行放大攻击;
- 腾讯云云缓存Memcached产品采用自研架构,未使用UDP协议,默认不受该问题影响,您可以放心使用!
在运行memcached怎么办?
Memcached不应该暴露在互联网上。您可以采取一些基本步骤来保护您的memcached实例。
- 如果您需要将memcached绑定到特定的私有IP地址和端口。
- 如果您不需要memcached通过任何网络连接进行通信,请禁用memcached的UDP并确保它只是在监听
localhost
。
CentOS
- 默认情况下,Memcached配置为在TCP和UDP上侦听来自基于RHEL的分发上的任何IP地址的传入连接。 将其更改为仅侦听
localhost
,并作为额外的预防措施,为memcached禁用UDP。
编辑memcached配置文件中的OPTIONS
行:
/etc/sysconfig/memcached
代码语言:javascript复制OPTIONS="-l 127.0.0.1 -U 0"
- 重启memcached。如果您的系统使用systemd:
sudo systemctl restart memcached
- 如果您的系统使用SysV:
sudo service memcached restart
Debian和Ubuntu
- 默认情况下,Memcached配置为在Debian和Ubuntu中侦听
localhost
。 此配置不受放大漏洞的影响,但您仍应验证您未运行易受攻击的设置:
grep 127.0.0.1 /etc/memcached.conf
应该返回:
代码语言:javascript复制-l 127.0.0.1
如您所见,memcached正在侦听localhost
IP地址。
您还可以使用ss
或netstat
检查系统的监听UDP端口:
sudo ss -apu
sudo netstat -lpu
Memcached应该再次显示它正在侦听localhost
或地址127.0.0.1
,如下所示:
root@localhost:~# ss -aup
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 127.0.0.1:11211 *:* users:(("memcached",pid=5021,fd=30),("memcached",pid=5021,fd=29),("memcached",pid=5021,fd=28),("memcached",pid=5021,fd=27))
- 禁用memcached使用UDP作为额外的预防措施:
cat <<EOT >> /etc/memcached.conf
# Disable UDP
-U 0
EOT
- 重启memcached。如果您的系统使用systemd:
sudo systemctl restart memcached
如果您的系统使用SysV:
代码语言:javascript复制sudo service memcached restart
更详细的防护方案可以参考Memcached DDoS反射攻击如何防御这篇文章。更多Linux教程请前往腾讯云 社区学习更多知识。
参考文献:《Mitigating memcached Amplification Attacks》