科普文:NTP反射攻擊

今天凌晨我司某業務便遭受了40G左右的攻擊,持續了15分鐘,直接造成主業務的網路中斷。

根據此次攻擊抓包的分析,攻擊類型又是NTP反射攻擊, 即基於網路時間協議(Network Time Protocol)的攻擊。事實上早前的幾次攻擊也是NTP反射,只是更加嚴重一些。所以特地科普下嘛叫NTP反射攻擊。

NTP服務中有一項功能叫MONLIST,是用來監控最近與NTP服務交互的客戶端信息的一項功能,本意是好的。但在NTPD v4.2.7p26版本之前,默認情況下大家都可以來用這個功能,而NTP服務本身基於UDP協議,那麼就可以偽造源IP地址,讓NTP服務返回的查詢結果發給偽造的IP,即被攻擊IP。

簡單而言就是這樣:

NTP服務通過UDP協議的123埠對外提供服務,但4.2.7p26版本之前存在一個CVE-2013-5211的漏洞,一個在安全人員眼裡是漏洞,在產品經理眼中是功能的東東。

之前版本的NTPD的ntp_request.c文件中,mon_getlist_0mon_getlist_1兩個函數默認可以接受GET_MONLIST請求,並根據MRU演算法返回最近交互的600個IP地址。而在修復的補丁(點擊【閱讀原文】)中,則刪除了該函數中返回MONLIST查詢的代碼,即默認禁止GET_MONLIST請求。

下圖是NTP服務一次MONLIST請求的抓包:

從圖中可見,查詢請求數據量為51位元組,查詢響應的600個IP地址會按照6個IP為一組進行返回,共7組482位元組和1組266位元組返回,即發送51位元組的請求會得到3640位元組響應,放大了71.37倍。

攻擊者只需要全網爬下尚未升級NTPD服務的伺服器,而後就可以寫個簡單的程序進行攻擊了:

from scapy.all import *

data = "x17x00x03x2a" + "x00" * 5

send(IP(dst=NTP Server IP, src=Vicim Server IP)/UDP(sport=2222, dport=123)/Raw(load=data))

因此,這種攻擊也很難追溯攻擊源,如果運營商側能夠進行流量監測並直接清洗同目的的大流量NTP響應,那麼會極大減少這種影響。而更多的則是需要受影響的NTP服務進行升級,雖然它們本身也是受害者——畢竟,他還只是個孩子啊!

更多內容請關注微信公眾號:邊窗

推薦閱讀:

幾維安全提醒勒索病毒又來襲 網路安全行業或迎機遇
一個黑客會經歷怎樣的人生?
網站被黑了怎麼恢復
應對數字化環境下面臨的供應鏈網路威脅
農民鬥地主——Binder fuzz安全研究

TAG:DDoS | 網路安全 | 計算機網路 |