OpenVPN服務被利用於UDP反射放大DDoS攻擊

  • 2019 年 10 月 10 日
  • 筆記

概述

2019年09月10日, 華為AntiDDoS8000設備某荷蘭數據中心局點捕獲新型UDP反射放大攻擊,反射源端口為1194。客戶在AntiDDoS8000清洗設備上配置硬件過濾規則有效阻斷了攻擊。華為未然實驗室通過對攻擊流量深入分析,很快發現攻擊流量來自在網絡中開放的OpenVPN服務。

OpenVPN是一個用於創建虛擬專用網絡加密通道的軟件包,最早由James Yonan編寫。OpenVPN允許創建的VPN使用公開密鑰、電子證書、或者用戶名/密碼來進行身份驗證。

攻擊原理

OpenVPN支持UDP、TCP兩種隧道模式,默認使用UDP,在認證模式上支持Pre-sharedstatic key 和 TLS 兩個模式,默認為TLS模式。

圖1 TLS mode OpenVPN狀態圖(數據來源見參考資料1)

OpenVPN有Data channel和Control channel兩個通道,在UDP隧道模式下,Data channel的可靠性需要業務層自己維護,Control channel的可靠性則需要OpenVPN自己來維護,這也是問題的關鍵所在。通過分析OpenVPN可靠性實現代碼,可以發現當OpenVPN發送出數據包後,若在超時時間內沒有收到對應的確認包,則會進行多次數據重傳,直到socket超時(默認30s)。超時時間計算邏輯有兩種方式(見圖2),一種是指數增長方式(默認配置),另一種是固定值(默認2秒)的方式。

圖2 OpenVPN源碼

攻擊模擬

根據圖1所示,我們讓客戶端向服務器發送PCONTROLHARDRESETCLIENTV2數據包,服務器則會響應PCONTROLHARDRESETSERVERV2數據包,客戶端對服務器響應的數據包不做P_ACK_V1應答,服務器便會對_PCONTROLHARDRESETSERVER__V2數據包進行多次重傳。

以下是PCONTROLHARDRESETCLIENT_V2數據包字符串的十六進制格式:

「x38x11xadx18x24xa7x8axadx41x00x00x00x01x5dx85x8a」

「x31x65xc3x17xa6xe9x35x8bx51xcfxfbx6cxa5x1bxc4x08」

「x90x43xa1x6axa7xa1x20xc8x69x37x85x60xe3x44xa6x4c」

「x33x3fxdcx86xd5x29」

圖3 默認配置「指數增加超時時間」下OpenVPN服務遭受攻擊時數據抓包

圖4 「固定超時時間」配置下OpenVPN服務遭受攻擊時數據抓包

根據圖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萬個對外開放的OpenVPN服務。如果攻擊者利用這些OpenVPN服務進行UDP反射放大攻擊,將會對被攻擊者造成嚴重影響。

圖5 網絡空間1194端口統計圖(數據來源shodan)

防範建議

1、在大帶寬的數據中心場景, 可以在專業Anti-DDoS設備或者邊界路由上配置過濾規則(protocol udp, source port 1194, packetlength >= 56 Bytes) 2、小帶寬的企業數據中心當遭遇這種攻擊時會引發鏈路帶寬擁塞,只能靠上游雲清洗過濾

參考資料

Protocol state fuzzing of anOpenVPN OpenVPN