概述
2019年09月10日, 华为AntiDDoS8000设备某荷兰数据中心局点捕获新型UDP反射放大攻击,反射源端口为1194。客户在AntiDDoS8000清洗设备上配置硬件过滤规则有效阻断了攻击。华为未然实验室通过对攻击流量深入分析,很快发现攻击流量来自在网络中开放的OpenV**服务。
OpenV**是一个用于创建虚拟专用网络加密通道的软件包,最早由James Yonan编写。OpenV**允许创建的V**使用公开密钥、电子证书、或者用户名/密码来进行身份验证。
攻击原理
OpenV**支持UDP、TCP两种隧道模式,默认使用UDP,在认证模式上支持Pre-sharedstatic key 和 TLS 两个模式,默认为TLS模式。
图1 TLS mode OpenV**状态图(数据来源见参考资料1)
OpenV**有Data channel和Control channel两个通道,在UDP隧道模式下,Data channel的可靠性需要业务层自己维护,Control channel的可靠性则需要OpenV**自己来维护,这也是问题的关键所在。通过分析OpenV**可靠性实现代码,可以发现当OpenV**发送出数据包后,若在超时时间内没有收到对应的确认包,则会进行多次数据重传,直到socket超时(默认30s)。超时时间计算逻辑有两种方式(见图2),一种是指数增长方式(默认配置),另一种是固定值(默认2秒)的方式。
图2 OpenV**源码
攻击模拟
根据图1所示,我们让客户端向服务器发送PCONTROLHARDRESETCLIENTV2数据包,服务器则会响应PCONTROLHARDRESETSERVERV2数据包,客户端对服务器响应的数据包不做P_ACK_V1应答,服务器便会对_PCONTROLHARDRESETSERVER__V2数据包进行多次重传。
以下是PCONTROLHARDRESETCLIENT_V2数据包字符串的十六进制格式:
“x38x11xadx18x24xa7x8axadx41x00x00x00x01x5dx85x8a”
“x31x65xc3x17xa6xe9x35x8bx51xcfxfbx6cxa5x1bxc4x08”
“x90x43xa1x6axa7xa1x20xc8x69x37x85x60xe3x44xa6x4c”
“x33x3fxdcx86xd5x29”
图3 默认配置“指数增加超时时间”下OpenV**服务遭受攻击时数据抓包
图4 “固定超时时间”配置下OpenV**服务遭受攻击时数据抓包
根据图3、图4可见,服务器对未及时应答的数据包,会进行多次重传。根据该特性,结合UDP反射攻击手法,即可实现UDP反射放大攻击。为了更高效的利用反射源,客户端需要将每次请求的源端口设置为不一样,如果是同一个源端口,在30秒有效期内,将被忽略。
放大倍数
指数增加超时时间方式
如图3所示,客户端发送一个96字节的一个报文,服务器将在30秒内响应大小与请求包相当的5个数据包,所以放大倍数应该是 5 / 1 = 5倍,同时流量的PPS也放大了5倍。
固定超时时间方式
如图4所示,客户端发送一个96字节的一个报文,服务器将在后续的30秒内,以0.5秒的间隔响应一个大小为与请求包相当的数据包,所以放大倍数应该是 30 / 0.5 = 60 倍,同时流量的PPS也放大了60倍。
攻击风险
通过shodan网络空间搜索引擎查询,可以发现在网络空间有将近70万个对外开放的OpenV**服务。如果攻击者利用这些OpenV**服务进行UDP反射放大攻击,将会对被攻击者造成严重影响。
图5 网络空间1194端口统计图(数据来源shodan)
防范建议
1、在大带宽的数据中心场景, 可以在专业Anti-DDoS设备或者边界路由上配置过滤规则(protocol udp, source port 1194, packetlength >= 56 Bytes) 2、小带宽的企业数据中心当遭遇这种攻击时会引发链路带宽拥塞,只能靠上游云清洗过滤
参考资料
Protocol state fuzzing of anOpenV** OpenV**