近日, 国内外多家安全公司和机构发布了Memcached超级DRDoS(Distributed Reflection Denial of Service)攻击的预警,引发各方关注。今天中国电信云堤与绿盟科技联合发布报告《深度剖析Memcached 超大型DRDoS攻击》,报告指出从本周一至周五(2月26日至3月2日 06:00)短短5天内,全球就发生了79起利用Memcached协议的DDoS反射放大攻击。日攻击总流量最高达到419TBytes。
深度剖析Memcached 超大型DRDoS攻击
近日,国内外多家安全公司和机构发布了Memcached超级DRDoS(Distributed Reflection Denial of Service,分布式反射拒绝服务)攻击的预警,引发各方关注。据我们的监控显示,目前该攻击的最大峰值流量已经达到了1.35T。而在2月27号,Memcached的反射攻击事件流量范围不过几百兆到最大500G左右。几日之隔,攻击峰值的历史纪录就迅速被翻倍刷新,并且攻击发生的频率从一天十几次到几百次,呈现爆发式增长。这是要搞大事情!
其中,针对我国境内的Memcached反射放大攻击就有68次,江苏、浙江两省被攻击频繁。针对我国境内的攻击,单次攻击最高攻击峰值达505Gbps。攻击持续时间最长的一次发生在3月1日,持续1.2小时,总攻击流量达103.8TBytes。
其中,针对我国境内的Memcached反射放大攻击就有68次,江苏、浙江两省被攻击频繁。针对我国境内的攻击,单次攻击最高攻击峰值达505Gbps。攻击持续时间最长的一次发生在3月1日,持续1.2小时,总攻击流量达103.8TBytes。
Memcached分布情况
最新统计显示,全球总共有3790个Memcached服务器被利用参与到这些Memcached反射放大攻击。这些被利用反射源遍布于全球96个国家或地区范围内。其中,美国就占了全球的1/4。
分布在中国地区的被利用的Memcached服务器位列第二位,占比12.7%。在中国各省份占比如下所示,广东、北京、浙江为TOP3。 绿盟威胁情报中心NTI (NSFOCUS Network Threat Intelligence,简称NTI)的统计结果显示,全球范围内存在被利用风险的Memcached服务器为104,506台。分布情况如下:
从地理分布来看,美国可被利用的Memcached服务器最多,其次是中国。
仅从放大倍数来看,Memcached反射攻击的危害程度远远高于其他反射攻击类型,US-Cert提供的数据显示它能够实现51,000倍的放大效果。
与其他反射攻击相比,Memcached如何实现这么多倍的放大效果呢?其中的重要原因就是Memcached的key-value功能。前文提到key-value的作用是决定存储容量的大小,正常情况下key-value的值通常不超过几千字节。当Memcached被攻击者利用作为反射器时,key-value的值经过修改可以达到100万字节以上。
这个攻击过程,我们通过实验室也进行了完整复现。
触发Memcached反射攻击的请求报文最小为15字节,而返回的请求数据达到105万字节,理论上可放大到接近7万倍。如此强悍的放大攻击,与其他各类DRDoS攻击形成断崖式的差距对比。
Memcached攻击防护加固建议
Memcached系统自查建议
攻击的形成过程为我们提供了一个很好的预警思路,安全产品可针对Memcached的key-value配置进行检测,在Memcached系统被利用成为攻击源之前就进行拦截。检测流程如下,技术建议详见报告。
Memcached攻击流量清洗
面对如此大规模、大范围的DDoS攻击威胁,所有网络安全节点都应该加强防范,从攻击防护和外发清洗两方面入手,充分保障基础设施和业务流量的安全。针对此攻击,我们提供如下防护建议,技术建议详见报告。
运营商。运营商及IDC处于网络上游,拥有强大的带宽资源,是攻击最直接的受害者,也是防护的第一道屏障。运营商能够灵活控制路由策略和防护策略进行快速过滤。
企业用户。企业用户通常贴近服务终端,熟悉掌握自身业务流量特点,策略配置更加明确,灵活性强。
Memcached系统防护加固
对于正在使用Memcached系统的用户,为了避免被攻击者利用,使Memcached成为攻击源,对外发起攻击流量,影响自身系统性能,我们提供如下几点建议。
1)在边界网络设备上配置URPF策略,过滤外发的虚假源IP报文;
2)在Memcached系统前进行深度检测,直接过滤报文特征中set key 0 900 64000的第三个字段过大的数据包,这样做可以在Memcached系统被修改利用成为攻击源前进行拦截;
3)对Memcached服务进行安全检查,查看Memcached服务是否监听UDP端口。查找Memcached进程,查看是否有-l参数,如果没有则默认为0.0.0.0。若Memcached服务不需要监听UDP,禁用UDP。详情参考Memcached官方文档:
https://github.com/memcached/memcached/wiki/ConfiguringServer#udp