cat case/PM-2018-0058.md

GitHub 2018-02-28 Memcached UDP 反射放大攻击峰值 1.35Tbps

P1 · memcached UDP 反射放大攻击峰值 1.35Tbps(史上最大之一),GitHub 经 Akamai 引流缓解,约 5 分钟间歇不可用

summary

2018-02-28 17:21-17:30 UTC,GitHub.com 因一次分布式拒绝服务(DDoS)攻击不可用(17:21-17:26 完全不可用,17:26-17:30 间歇)。攻击峰值达 1.35Tbps、1.269 亿包/秒,是当时公开记录中最大的 DDoS 之一。攻击手法是 memcached 基于 UDP 的反射放大:滥用互联网上无意暴露且启用 UDP 的 memcached 实例,攻击者伪造 GitHub 源 IP 发送极小请求,被反射成放大的响应涌向 GitHub。

timeline

17:21 UTC 网络监控检测到入站/出站流量比异常并告警。因单设施入站带宽超 100Gbps,决策将流量导向 Akamai。17:26 UTC 经 ChatOps 发起撤回 transit 的 BGP 公告、仅经 Akamai 链路公告 AS36459,路由数分钟收敛,Akamai 边界 ACL 缓解。17:30 UTC 完全恢复。17:34 UTC 进一步撤回交易所路由再移走 40Gbps。约 18:00 UTC 出现第二波约 400Gbps 峰值,Akamai 处理无额外干预。攻击总时长约 20 分钟。

root_cause

根因是 memcached 协议设计缺陷:无需认证、默认启用 UDP(11211),对极小请求可返回大至 1MB 的响应,放大系数高达约 51000 倍;攻击者伪造源 IP 将暴露的 memcached 实例变为反射放大器。GitHub 并非被入侵,而是被海量反射流量饱和链路。

amplifiers

① 无认证+UDP:memcached 默认无认证且启用 UDP,天然放大面。② 源 IP 伪造:UDP 无握手,攻击者可 spoof 受害者地址。③ 暴露面大:大量 memcached 实例被误配暴露公网。④ 规模:来自 1000+ ASN、数万端点,单点难以封堵。

mitigation

将流量重路由至 Akamai Prolexic 清洗(BGP 公告切换),边界 ACL 过滤攻击流量;自身提前扩容 transit 容量。后续自动化触发 DDoS 缓解提供商、持续度量 MTTR。

lessons

memcached 必须禁 UDP、仅监听本机、防火墙锁端口;运营者应减少暴露的放大服务;与清洗提供商预建立 BGP 引流是应对 Tbps 级攻击的关键。

checklist

① memcached 启动参数 -U 0 禁用 UDP、-listen 127.0.0.1。② 防火墙封锁 11211 入站。③ 与 DDoS 清洗商预配置 BGP 引流。④ 网络暴露面定期扫描公网可达的放大服务。