NTP Reply Flood Attack (NTP射型Ddos攻擊)如下簡稱NTP_Flood是一種利用網絡中NTP服務器的脆弱性(無認證,不等價數據交換,UDP協議),來進行DDos行爲的攻擊,本文將就此種攻擊的產生緣由,利用方法等進行闡述,並使用編程語言(Python,C++)對此攻擊進行實現。html
感謝NSFOCUS的大牛同事們(SCZ,周大同窗,SAI,冰雪風谷)在平常學習工做中的支持。ios
NTP服務器【Network Time Protocol(NTP)】是用來使計算機時間同步化的一種協議,它可使計算機對其服務器或時鐘源(如石英鐘,GPS等等)作同步化,它能夠提供高精準度的時間校訂(LAN上與標準間差小於1毫秒,WAN上幾十毫秒),且可介由加密確認的方式來防止惡毒的協議攻擊。算法
網絡時間協議(NTP)是一種經過因特網服務於計算機時鐘的同步時間協議。它提供了一種同步時間機制,能在龐大而複雜多樣因特網中用光速調整時間分配。它使用的是可返回時間設計方案,其特色是:時間服務器是一種分佈式子網,能自我組織操做、分層管理配置,通過有線或無線方式同步邏輯時鐘達到國家標準時間。此外,經過本地路由選擇運算法則及時間後臺程序,服務器能夠從新分配標準時間。編程
NTP 的設計帶來了三種產品 — 時鐘偏移、時間延遲及差量,全部這三種與指定參考時鐘都是相關聯的。時鐘偏移表示調整本地時鐘與參考時鐘相一致而產生的誤差數;時間延遲表示在指定時間內發送消息與參考時鐘間的延時時間;差量表示了相對於參考時鐘本地時鐘的最大誤差錯誤。由於大多數主機時間服務器經過其它對等時間服務器達到同步,因此這三種產品中的每一種都有兩個組成部分:其一是由對等決定的部分,這部分是相對於原始標準時間的參考來源而言;其二是由主機衡量的部分,這部分是相對於對等而言。每一部分在協議中都是獨立維持的,從而可使錯誤控制和子網自己的管理操做變得容易。它們不只提供了偏移和延遲的精密測量,並且提供了明確的最大錯誤範圍,這樣用戶接口不但能夠決定時間,並且能夠決定時間的準確度。服務器
NTP 源於時間協議和 ICMP 時間標誌消息,但其設計更強調精確度和充足性兩個方面,即便是用於網絡路徑上包括多路網關、延遲差量及不可靠網絡。當前使用的最新版是 NTPv3,它與之前的版本兼容。網絡
l LI:跳躍指示器,警告在當月最後一天的最終時刻插入的迫近閨秒(閨秒)。編程語言
l VN:版本號。分佈式
l Mode:模式。該字段包括如下值:0-預留;1-對稱行爲;3-客戶機;4-服務器;5-廣播;6-NTP 控制信息oop
l Stratum:對本地時鐘級別的總體識別。學習
l Poll:有符號整數表示連續信息間的最大間隔。
l Precision:有符號整數表示本地時鐘精確度。
l Root Delay:有符號固定點序號表示主要參考源的總延遲,很短期內的位15到16間的分段點。
l Root Dispersion:無符號固定點序號表示相對於主要參考源的正常差錯,很短期內的位15到16間的分段點。
l Reference Identifier:識別特殊參考源。
l Originate Timestamp:這是向服務器請求分離客戶機的時間,採用64位時標(Timestamp)格式。
l Receive Timestamp:這是向服務器請求到達客戶機的時間,採用64位時標(Timestamp)格式。
l Transmit Timestamp:這是向客戶機答覆分離服務器的時間,採用64位時標(Timestamp)格式。
l Authenticator(Optional):當實現了 NTP 認證模式,主要標識符和信息數字域就包括已定義的信息認證代碼(MAC)信息。
在Linux上咱們可使用ntpdc來進行NTP的操做,ntpdc支持不少命令:
# ntpdc -n -i time.org.za
ntpdc> ?
ntpdc commands:
addpeer controlkey fudge keytype quit timeout
addrefclock ctlstats help listpeers readkeys timerstats
addserver debug host loopinfo requestkey traps
addtrap delay hostnames memstats reset trustedkey
authinfo delrestrict ifreload monlist reslist unconfig
broadcast disable ifstats passwd restrict unrestrict
clkbug dmpeers iostats peers showpeer untrustedkey
Listpeers指令與monlist指令
Listpeers指令,列出目標NTP服務器的peers(NTP Servers)
Monlist指令,能夠獲取與目標NTP Server進行過同步的最後600個客戶機IP。這意味着,一個很小的請求包,就能獲取到大量的活動IP地址組成的連續UDP包,wireshark抓包以下圖:
正是因爲此指令的不等價交換(1:562的報酬),UDP協議的通訊模糊性(無三次握手驗證),以及NTP服務器的無認證機制,使得反射型DDos攻擊成爲可能。
這個Python腳本的做用是,從指定的服務器使用monlist指令返回的IP地址列表,因爲Linux的ntpdc指令超時時間很短,所以不容易返回完整的列表。