如何减轻memcached的放大攻击

2018-08-17 15:07:17 浏览数 (1)

什么是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:
代码语言:javascript复制
sudo systemctl restart memcached
  • 如果您的系统使用SysV:
代码语言:javascript复制
sudo service memcached restart

Debian和Ubuntu

  • 默认情况下,Memcached配置为在Debian和Ubuntu中侦听localhost。 此配置不受放大漏洞的影响,但您仍应验证您未运行易受攻击的设置:
代码语言:javascript复制
grep 127.0.0.1 /etc/memcached.conf

应该返回:

代码语言:javascript复制
-l 127.0.0.1

如您所见,memcached正在侦听localhostIP地址。

您还可以使用ssnetstat检查系统的监听UDP端口:

代码语言:javascript复制
sudo ss -apu
sudo netstat -lpu

Memcached应该再次显示它正在侦听localhost或地址127.0.0.1,如下所示:

代码语言:javascript复制
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作为额外的预防措施:
代码语言:javascript复制
cat <<EOT >> /etc/memcached.conf
​
# Disable UDP
-U 0
EOT
  • 重启memcached。如果您的系统使用systemd:
代码语言:javascript复制
sudo systemctl restart memcached

如果您的系统使用SysV:

代码语言:javascript复制
sudo service memcached restart

更详细的防护方案可以参考Memcached DDoS反射攻击如何防御这篇文章。更多Linux教程请前往腾讯云 社区学习更多知识。


参考文献:《Mitigating memcached Amplification Attacks》

0 人点赞