冒著老生常談的風險,現在可以看到越來越多分散式阻斷(DDoS)攻擊使用另一個基本的網路協定。這次所用的是網路時間協定(NTP)。它並不像DNS或HTTP那麼有名,但卻同樣重要。NTP用來同步多個網路設備的時間。沒有它,我們就要回到必須手動調整電腦時間的日子。有個解決這類攻擊的方法已經出現了十年,但遺憾的是並沒有被廣泛採用。
NTP的主要功能是從高精確來源(如GPS或銫原子鐘相容設備)來散播時間。我很抱歉地要告訴你,你電腦內的時鐘很爛。石英晶體振盪器的誤差率通常是1ppm(百萬分之一),或是每秒多或少一微秒。相當於每個月誤差半秒鐘,這聽起來並不那麼糟糕。
不幸的是,我們不知道在特定時間點,時鐘的誤差方式為何。而輕微的溫度變化也會影響石英震盪週期。此外,1GHz處理器(現在這算慢的了)在半秒鐘就經歷5億次週期。在叢集和分散式系統裡,知道現在是什麼時間變得至關重要。
NTP各點會交換UDP封包來比較它們所認為的時間。設定良好的客戶端會去檢查三個或更多的點以獲得更好的時間準確度。當有個點從參考時鐘認為自己的時間不再準確,它就會對時鐘做出微小的修正。這會讓系統時間慢慢改變,所以所有正在運行中的軟體不會被打亂。這是解決一個重要問題的簡單解決方案。
不幸的是,不法份子利用這關鍵服務來發動DDoS攻擊。NTP伺服器通常都是公開的,往往會接受來自任何人的連線。有個monlist指令可以透過UDP發送給NTP伺服器,要求伺服器回覆最近接觸過的各點列表。
這對故障排除很有用,但它也是攻擊者的理想工具。送個將來源地址偽裝成攻擊目標的小封包,伺服器就會很樂意的送一大包資料給攻擊目標。該伺服器越繁忙,攻擊就會越被放大。
IT管理者可以做些事情來避免在無意間成為幫兇(IPv6並不能解決這問題,NTP也在它上面運作)。首先,關閉未使用的服務。你會很驚訝地知道有多少系統仍然提供字元產生協定(chargen)服務。如果電腦並不是NTP伺服器,那它就不需要運行NTP伺服器軟體。這也同樣地適用在其他未使用的服務和協定上。
其次,思考一下你所運行的服務設定。事實證明,至少在我這裡幾個版本的NTP裡,monlist指令是預設開啟的。不幸的是,這需要使用者花時間去研究找出各個選項的風險。更好的解決方案是應用程式應該提供合理和安全的預設值。
第三,也是最重要的,IP欺騙應該在網路邊界被偵測和封鎖。實行BCP- 38往往讓人覺得不可行,但它真的不那麼糟糕。我知道全球骨幹在十年前就已經在使用它。關鍵是只專注在網路邊界(如果實行在核心將無法擴展)。
簡化版本是設定你的邊界路由裝置,來自某介面的進入封包,只有當該封包的回應可以合理地繞回該介面時允許通過。這不僅可以預防NTP、chargen和DNS欺騙攻擊利用你的網路資產來攻擊別人,它也防止所有IP欺騙穿越你的網路。
這協定是有些舊了。BCP-38之於網路安全,就跟洗手之於醫藥一樣。隨著越來越多網路變得合規,你的安全資源可以從DDoS攻擊轉移出來,開始專注在我們還沒有很好解決方案的問題上。
BCP-38發表於2000年5月,我們已經知道該如何除去大多數現今的DDoS活動有13年了!雖然它是免費的,但它的確需要技術資源來實現。考慮到節省的成本,想想看,你可以確信你的網路不會參加一個欺騙性DDoS攻擊。
不幸的是,實行BCP- 38只會防止攻擊利用你的資產。並無法防止你被攻擊。將這訊息傳播出去,鼓勵其他人養成良好的上網衛生,那麼從長遠來看,這些欺騙攻擊或許能夠被最小化。
@原文出處:A Free Solution For DDoS Reflection Attacks: A Decade In Waiting作者:Ben April(資深威脅研究員)