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 引流。④ 网络暴露面定期扫描公网可达的放大服务。