物联网设备的大量普及让许多原本默默无闻的协议走到了安全舞台的中央,CoAP就是其中之一。这个协议设计初衷是为计算能力和电量都极其有限的设备提供轻量级的通信方式,但它基于UDP传输、默认无需认证的特性,也让它成为反射式DDoS攻击的理想放大器。所谓CDN CoAP反射,是指攻击者借助互联网上暴露的CoAP服务端点(包括一些错误配置的CDN回源节点和物联网网关),将放大后的响应流量导向目标受害者的一种攻击手法。理解它的原理,是做好防御的第一步。

CoAP协议为什么会成为放大攻击的载体
CoAP(Constrained Application Protocol)是IETF在RFC 7252中定义的协议,设计目标是在8位微控制器、几十KB内存的设备上也能跑起来。它的报文格式非常精简,头部固定只有4个字节,默认运行在UDP的5683端口上。正是这种轻量化设计埋下了安全隐患:UDP是无连接协议,服务端收到请求后,会按照报文中声称的源地址回复响应,而不会像TCP那样通过三次握手确认对方身份。
攻击者利用这一点,构造源地址字段为受害者IP的CoAP请求发给大量开放端点。端点收到请求后,老老实实把响应发往受害者。更糟的是,CoAP支持返回资源列表、分块传输等特性,某些响应报文的体积远大于触发它的请求报文,放大倍数可以达到数倍甚至数十倍。攻击者只需发送小流量的请求,就能让受害者承受成倍放大的洪泛流量。
此外,CoAP默认使用明文传输,没有强制要求身份认证。虽然协议规范提供了DTLS作为安全层,但大量物联网设备出厂时并未启用。这意味着任何人都能向这些端点发送请求并获取响应,攻击门槛被降到极低。
CDN CoAP反射攻击的完整链路剖析
这类攻击的执行过程可以拆解为几个步骤。第一步是扫描收集,攻击者提前用全网扫描工具(如masscan、zmap)寻找开放UDP 5683端口且会返回响应的CoAP端点,包括物联网网关、智能家居中枢、传感器汇聚节点,以及个别配置失误将物联网接口暴露在公网的CDN回源或边缘节点。这些端点的集合就构成了攻击者手中的反射器资源池。
第二步是伪造请求。攻击者编写程序,将CoAP请求报文中的Message ID和Token设置为固定值,把IP头部的源地址字段篡改为受害者的IP,然后以极高频率向反射器池发送。一个典型的恶意请求示例如下:
import socket
import struct
# 构造一个简单的CoAP GET请求,请求 /.well-known/core 资源列表
# 该响应通常体积远大于4字节的请求头,放大效果明显
def build_coap_request():
# CoAP头部: 版本1, 类型CON(0), Token长度0, Code GET(0.01), MessageID
header = struct.pack('!BBH', 0x40, 0x01, 0x1234)
# 选项: Uri-Path ".well-known" 和 "core"
opt1 = bytes([0xB4]) + b'.well-known' # 选项增量11,长度4
opt2 = bytes([0x04]) + b'core' # 选项增量0,长度4
return header + opt1 + opt2
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 注意:常规网络环境下伪造源地址需要原始套接字,此处仅为示意
sock.sendto(build_coap_request(), ('反射器IP', 5683))
第三步是响应回弹。反射器收到请求后,将资源描述等数据返回给报文中声称的源地址,也就是受害者。受害者的带宽和连接处理能力在短时间内被大量无意义的UDP报文耗尽,正常业务随之瘫痪。整个过程中,攻击者自身的流量开销很小,真实的攻击源头也隐藏在众多反射器之后,溯源难度显著增加。
值得注意的是,请求/.well-known/core资源是常见的放大手段,因为它会返回设备支持的完整资源列表,响应体积天然偏大。加上CoAP的组播支持,一个请求可能触发多个端点同时响应,放大效应进一步叠加。
如何检测和防御CoAP反射攻击
从设备与服务器管理者的角度,最根本的措施是不要让CoAP端点暴露在公网上。CoAP本是为局域网或受限网络设计的协议,如果没有明确的公网访问需求,应在防火墙上封禁UDP 5683端口的入站流量。对于确需对外提供服务的场景,建议启用DTLS加密并配置预共享密钥或证书认证,让匿名请求直接被丢弃,反射者无从利用。
从网络层面,可以部署 ingress 过滤(入口流量过滤),遵循RFC 2827和BCP 38的建议,在网络的边缘路由器上丢弃源地址不属于本网段的出站报文。如果所有运营商都执行这一策略,源地址伪造将无处遁形,反射攻击的根基就会被拔除。虽然这需要全行业协作,但单个企业内部先行实施仍能减少自身被利用的风险。
从受害者角度,当遭遇这类攻击时,需要依靠流量清洗能力。典型的特征是:入站流量集中在UDP 5683端口,报文内容为CoAP格式,且来源IP分布极为分散。可以在边界设备上配置限速规则直接丢弃该端口的外来流量:
# iptables 示例:丢弃所有来自外部、目标端口5683的UDP报文 iptables -A INPUT -p udp --dport 5683 -j DROP # 对来源高度分散的反射流量,可结合限速策略缓解 iptables -A INPUT -p udp --dport 5683 -m limit --limit 100/s --limit-burst 200 -j ACCEPT iptables -A INPUT -p udp --dport 5683 -j DROP
更彻底的方案是接入专业的DDoS高防服务或CDN防护节点,让清洗中心在攻击流量到达源站之前完成过滤。同时,业务系统应尽量将关键服务构建在TCP之上,或者为UDP服务实现应用层的源验证机制(类似DNS的Cookie机制),从协议设计层面压缩反射空间。
最后,定期对自身资产进行端口扫描审计也很重要。很多管理员并不清楚自己管辖的物联网设备或智能网关开了哪些UDP服务。使用nmap等工具对外网IP段做一次全面的UDP端口排查,及时关闭不需要的服务,是成本最低、收益最明确的防护动作。反射攻击的本质是借刀杀人,只要刀不够多、不够利,攻击者就无计可施。