Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcached服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取Memcached中的敏感信息。
检测自查:
(1)检测目的端口为11211的TCP或UDP报文(确保是Memcached服务器);
(2)检测报文是否为set命令
(3)检测set命令后面的bytes字段值是否超过设定的阈值,如果是,则可以怀疑该报文存在异常;

通常情况下,多数value的大小都在64K以内,而最后一条的达到了将近1M,与其他记录有很明显的差别,基本上可以判断该记录存在问题,该服务器可能已经被利用。
修复方案:(升级前先做好备份)
1. 定期升级,使用官方最新版本Memcached
2. 配置访问控制
建议用户不要将服务发布到互联网上而被黑客利用,可以通过ECS安全组规则或iptables配置访问控制规则。
例如,在Linux环境中运行命令iptables -A INPUT -p tcp -s 192.168.0.2 —dport 11211 -jACCEPT,在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. 修改默认端口
修改默认11211监听端口为11222端口。在Linux环境中运行以下命令:
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222-c 1024 -P /tmp/memcached.pid
6. 若Memcached服务不需要监听UDP,可在做好数据备份的前提下,对Memcached服务添加“-U 0”重启禁用UDP
7. 在边界网络设备上配置URPF策略,过滤外发的虚假源IP报文;
8. 在Memcached系统前进行深度检测,直接过滤报文特征中set key 0 900 64000的第三个字段过大的数据包,这样做可以在Memcached系统被修改利用成为攻击源前进行拦截;