反射放大类DDoS攻击之所以难防,核心在于攻击流量并非直接来自攻击者控制的设备,而是攻击者伪造受害者IP向互联网上大量开放服务发送小请求,这些服务再把数倍甚至上百倍体积的响应数据涌向受害者。识别这类攻击的关键不是看流量有多大,而是看流量里有没有“反射特征”和“放大特征”。反射特征表现为大量源IP是合法的公共服务器,比如DNS、NTP、Memcached、CLDAP、SSDP等服务的默认端口;放大特征表现为入向流量中响应包远多于请求包,单包尺寸偏大,且协议类型集中在少数几个可被利用的服务上。只要在流量入口对这两类特征做实时统计,基本可以在攻击开始后几十秒内完成识别。
先从最常见的几种反射放大向量说起。DNS反射放大利用开放递归解析器,攻击者发送一个约60字节的ANY查询,伪造源地址为受害者IP,递归解析器可能返回3000到4000字节的响应,放大倍数约50到70倍。NTP反射利用monlist命令,一个几十字节的请求可以触发几百KB的响应,放大倍数可达200倍以上,不过现在支持monlist的老旧NTP服务器已经减少很多。Memcached反射放大在2018年达到顶峰,利用UDP 11211端口未授权访问,一个十几字节的get请求可以触发几MB的响应,放大倍数最高可达51000倍,是目前已知放大效率最高的协议。CLDAP反射利用无连接轻量目录访问协议,UDP 389端口,放大倍数约50到70倍。SSDP反射利用UPnP设备,UDP 1900端口,放大倍数约30倍。除此之外还有Chargen、Quake3、RIPv1、Portmap、SNMP等协议也存在反射放大风险。
识别反射放大攻击的四个核心指标
第一个指标是入向流量与出向流量的比例严重失衡。正常业务场景下,服务器收到的请求和发出的响应在包数量上大致匹配,即使有大量下载业务,出向字节数会大于入向,但包数量不会出现几十倍的差距。反射放大攻击发生时,受害者几乎没有发出对应请求,但会收到海量响应包,入向包数量可能是出向包数量的几十倍甚至上百倍。在流量监控系统里设置入向PPS与出向PPS的比值阈值,当比值超过5:1并持续一分钟以上,就应当触发告警。
第二个指标是源端口高度集中。反射放大攻击的响应包都来自特定服务的端口,比如DNS响应来自UDP 53,NTP响应来自UDP 123,Memcached响应来自UDP 11211,CLDAP响应来自UDP 389,SSDP响应来自UDP 1900。如果入向流量中某个UDP源端口的包数量占比突然超过60%,且这个端口不是业务正常使用的端口,基本可以判定为反射放大攻击。这个识别方法比单纯看流量大小准确得多,因为正常业务流量很少会出现单一源端口占比异常的情况。
第三个指标是源IP的地理分布和网络类型异常分散。反射放大攻击的响应包来自全球各地被利用的开放服务器,源IP数量可能达到数十万甚至上百万,而且这些IP分属不同的运营商和AS号。正常业务访问的源IP通常集中在特定区域或特定运营商。通过分析入向流量的源IP前缀数量和AS号数量,如果短时间内出现大量此前从未出现过的源IP,且分散在全球各地,这是反射放大攻击的强信号。
第四个指标是包长分布异常。反射放大攻击的响应包往往尺寸较大且大小相对固定,比如DNS ANY响应通常在3000字节以上,Memcached响应可能是几MB的大包,NTP monlist响应可能拆分成多个几百字节的包。如果入向流量中大于1000字节的UDP包占比突然升高,且这些大包集中在特定源端口,就需要高度警惕。正常UDP业务流量中大包占比通常较低,因为UDP协议本身不适合传输大数据。
识别之后的分流与过滤策略
识别出反射放大攻击后,第一步不是硬抗,而是快速分流。在边界路由器或防火墙层面,针对已经识别出的攻击特征做临时过滤。如果攻击集中在UDP 11211端口,直接丢弃所有目的端口为11211的入向UDP流量,因为正常业务几乎不会使用Memcached的UDP端口对外提供服务。同理,UDP 1900、UDP 389、UDP 123这些端口如果业务不需要,可以直接在边界封禁。对于DNS这类业务可能依赖的端口,需要更精细的策略,比如只放行来自可信递归解析器的响应,或者对DNS响应包做速率限制。
更有效的做法是在上游运营商侧进行黑洞路由或流量清洗。当攻击流量超过自身带宽承载能力时,联系运营商将受害IP的流量牵引到清洗中心,由清洗设备过滤后再回注正常流量。这个过程需要提前与运营商签订清洗服务协议,并配置好BGP社区属性,确保攻击发生时可以在几分钟内完成牵引。对于自建清洗方案,可以在IDC入口部署高性能流量分析设备,通过NetFlow、sFlow或IPFIX采集流量元数据,结合DPI深度包检测,对反射放大攻击的协议特征做实时匹配和阻断。
基于速率和行为基线的动态防护
静态规则只能应对已知端口和已知协议,对于利用非标准端口或变种协议的反射放大攻击,需要建立动态行为基线。对每个业务IP建立正常状态下的入向流量模型,包括PPS、BPS、源IP数量、源端口分布、包长分布等指标。当实时流量偏离基线超过设定阈值时,自动触发防护策略。例如某个业务IP平时入向PPS不超过5000,突然涨到50000,且源端口集中在UDP 53,系统自动将该IP的DNS响应流量限制在正常基线的1.5倍以内,超出部分丢弃。这种动态基线方法可以应对未知的反射放大变种,但需要较长时间的数据积累和算法调优,否则容易误伤正常业务。
在应用层,对于Web服务,可以在反向代理或负载均衡器上配置UDP流量管控策略。由于HTTP/3使用UDP 443,如果业务没有启用HTTP/3,直接关闭UDP 443端口可以避免被利用。对于必须开放UDP端口的业务,比如游戏服务器、语音通话服务,需要实现协议级别的验证机制。以游戏服务器为例,可以在客户端和服务器之间加入握手验证,服务器只接受经过验证的客户端IP发送的UDP包,对于未验证的源IP直接丢弃。这种方式虽然不能完全阻止反射放大攻击,但可以大幅降低攻击流量对业务的影响。
源地址验证与出向流量治理
反射放大攻击的根源在于攻击者可以伪造源IP。如果所有网络设备都执行BCP38和BCP84建议的入口过滤,即丢弃源地址不属于本网段的出向包,反射放大攻击的威力会大幅下降。作为服务提供方,虽然无法控制全球所有网络的入口过滤,但可以做好自身的出向流量治理。检查自己的服务器是否对外开放了可能被利用的UDP服务,比如Memcached是否监听了UDP 11211,DNS服务是否允许任意来源的递归查询,NTP服务是否开启了monlist。对于不需要对外提供UDP服务的服务器,在主机防火墙层面关闭相关端口。对于必须提供UDP服务的服务器,配置访问控制列表,只允许可信来源访问。
对于拥有大量服务器的企业,建议定期扫描内部资产的UDP端口开放情况,尤其是11211、1900、389、123、53、161等端口。很多反射放大攻击的受害者同时也是反射源,因为内部服务器配置不当开放了可被利用的服务。通过主动扫描和整改,可以减少互联网上可被利用的反射源数量,从源头上降低反射放大攻击的整体威胁。
防护架构的冗余与弹性
反射放大攻击的流量峰值可能达到数百Gbps甚至Tbps级别,单一防护节点很难承受。合理的防护架构应该是多层级的。第一层在IDC边界,部署高性能硬件防火墙或专用抗D设备,负责过滤大部分已知特征的攻击流量。第二层在运营商侧,通过BGP牵引将攻击流量分散到多个清洗节点,利用运营商的带宽资源优势吸收攻击。第三层在应用前端,部署负载均衡和反向代理集群,对清洗后的流量做进一步筛选和限速。第四层在业务服务器内部,通过主机防火墙和内核参数调优,丢弃异常包和畸形包。
弹性扩展能力同样重要。攻击发生时,如果本地防护资源不足,需要能够快速启用云端清洗服务。提前与云安全服务商做好对接,配置好API接口和自动化触发机制,当本地流量超过预设阈值时自动将流量牵引到云端清洗中心。清洗完成后再回注到源站。这个过程需要在DNS层面做好TTL调整,确保切换过程中业务不中断。
日志分析与溯源取证
反射放大攻击的溯源难度很大,因为攻击者伪造了源IP,真正的攻击者隐藏在伪造流量背后。但通过分析攻击流量的特征,仍然可以获取一些有价值的信息。比如攻击者使用的反射源IP列表,这些IP对应的开放服务类型和版本,攻击请求的具体内容等。将这些信息与威胁情报平台的数据进行比对,可能发现攻击者使用的工具特征或攻击基础设施。在防护过程中,完整记录攻击流量的NetFlow数据和采样包数据,对于事后分析和改进防护策略非常重要。
对于被利用作为反射源的服务器所有者,应该建立监测机制,当服务器出向流量异常增大时,检查是否被用于反射放大攻击。例如一台Memcached服务器平时出向流量很小,突然出向UDP流量暴增,且目的IP集中在少数几个地址,说明这台服务器正在被利用。及时关闭未授权访问或限制UDP响应速率,可以避免成为攻击者的帮凶。
反射放大类DDoS攻击的防护是一个系统工程,涉及流量识别、边界过滤、上游协同、动态基线、源地址治理等多个环节。单纯依赖某一种手段很难应对大规模攻击,需要将多种技术手段和管理措施结合起来,形成纵深防御体系。同时要认识到,反射放大攻击的根源在于互联网上大量配置不当的开放服务,推动这些服务的整改和关闭,才是从源头上降低此类攻击威胁的根本途径。
