DNS解析是互聯網中一項非常重要的功能,是用戶訪問網站的關鍵環節,我們日常工作生活使用網絡都伴隨著大量的DNS服務做支撐。DNS將用戶容易記憶輸入的域名指向可由計算機直接識別的IP地址,是確保用戶通過域名訪問網站,維持網絡空間正常秩序的導航系統。
但DNS在設計之初只注重實用性和便捷性,而忽視了安全性,DNS查詢過程通常是基于無連接不可靠的UDP協議,這就導致DNS查詢過程中驗證機制的缺失,黑客很容易利用該漏洞進行攻擊。DNS服務器可能面臨如下DNS攻擊風險:
(1)黑客偽造客戶端源IP地址發送大量的DNS請求報文,造成DNS request flood攻擊。
(2)黑客偽造成授權服務器發送大量的DNS回應報文,造成DNS reply flood攻擊。
(3)黑客篡改某些網站的域名和IP地址對應關系,導致用戶訪問被導向至其他網站。
(4)黑客向DNS服務器發送大量錯誤格式的DNS異常報文,或者發送大量超長DNS報文,導致DNS服務器處理這些報文時出現異常,拒絕正常服務。
接下來我們重點介紹常見的一些DNS攻擊以及相應的防御措施。
DNS Request Flood 攻擊與防御
DNS request flood攻擊原理非常簡單,就是黑客通過控制僵尸網絡向DNS服務器發送大量域名的解析請求,導致DNS服務器因大量解析請求而過載,無法響應正常用戶的DNS請求。
在DNS request flood攻擊過程中,攻擊目標可能是權威服務器,也可能是遞歸服務器,攻擊目標不同,所采用的防御手段也不同。對于遞歸服務器,向它發送DNS請求的是終端用戶,所以防御過程中,需要判定這個DNS請求是否是由真實的瀏覽器客戶端發出;而對于權威服務器,向它發送DNS請求的可能就是遞歸服務器,所以認證方式也應有所不同。
1.針對虛假源攻擊
授權服務器源認證(即ns重定向方式),可以有效防御DNS Request Flood虛假源攻擊。重定向只針對訪問受攻擊域名的源IP地址實施,以減少誤判和避免對正常業務的訪問延時。
基于目的地址對DNS Request報文的速率進行統計,當DNS request報文的速率超過閾值時,啟動重定向。
(1)返回給請求源一個別名地址,如果請求源是虛假源,則不會回應重定向報文,認證不通過報文丟棄。
(2)如果請求源是真實源,則重新請求發送的重定向地址。認證通過將此真實源加入白名單。
(3)再次重定向正確的地址,請求源重新請求正確地址,報文命中白名單,直接放行到達授權服務器,完成報文交互。
2.針對真實源攻擊
如果是真實源攻擊,經過上述防御過程后,通過的DNS報文還很大,則可以繼續采用以下方式進行防御。
(1)DNS請求報文限速:對于大流量的DNS request flood攻擊是一種非常有效的防御方式。
(2)DNS request報文限速源IP行為控制,丟棄超出閾值的DNS request報文。
(3)另外還需要對異常DNS報文進行檢查,將非標準格式的DNS報文直接丟棄。
DNS Reply Flood 攻擊與防御
DNS服務器收到DNS回應報文時,不管自己有沒有發過解析請求,都會處理這些DNS回應報文。DNS reply flood攻擊是黑客發送大量的DNS回應報文到DNS緩存服務器,導致緩存服務器因為處理這些DNS回應報文而耗盡資源,影響正常業務的過程。
DNS reply flood大多都是虛假源攻擊,黑客控制僵尸主機發出的DNS reply報文的源IP地址通常都是偽造的,是不存在的,所以在防御的時候,就可以從回應源IP地址的真假性入手,判定這個源IP是否是真實源。
針對DNS reply flood攻擊的應對方式主要有:
1.DNS reply報文限速
DNS reply報文限速對于大流量的DNS Reply flood攻擊是一種非常有效的防御手段,主要分為對指定域名限速和對指定IP限速兩種,分別將匹配了指定域名和指定IP的DNS reply報文進行限速,將超過閾值的DNS reply報文直接丟棄處理。
2.異常DNS報文的檢查
除DNS reply報文限速外,還可以針對異常DNS報文進行檢查,從而過濾掉惡意的DNS請求數據。
(1)DNS報文格式:對DNS報文格式進行檢查,將非標準的DNS報文直接丟棄。
(2)DNS報文長度:通常情況下,基于UDP協議的DNS協議長度都不大于512字節,而很多DNS flood經常采用超大DNS報文以造成鏈路堵塞,因此可以將報文長度作為檢測DNS報文是否正常的一個標準,當DNS報文長度超過閾值時,直接將DNS報文丟棄處理 。
(3)DNS報文的TTL值
將DNS報文的跳數限制在DNS報文允許跳數范圍內,當DNS報文的跳數超出閾值時,直接丟棄該DNS請求報文。
此外,還有一種升級版的DNS reply flood攻擊,它的破壞性更強,這就是DNS反射攻擊。
黑客將自己的源IP地址偽造成被攻擊目標的IP地址,然后向網絡中開放的DNS服務器發送大量的查詢請求。
由于DNS回應報文通常是請求報文的幾倍甚至幾十倍,這些放大后的DNS回應報文被引導至被攻擊目標,導致網絡擁塞,拒絕正常服務器,從而達到放大攻擊的效果。
DNS反射攻擊和前面介紹的傳統DNS reply flood攻擊有兩點本質的不同。
(1)傳統DNS reply flood攻擊的攻擊目標一般是DNS緩存服務器;而DNS反射攻擊的攻擊目標一般是客戶端。
(2)傳統DNS reply flood攻擊大多是虛假源攻擊,而在DNS反射攻擊中,DNS請求報文都是真實的,DNS回應報文也都是真實的。
DNS 緩存投毒攻擊
在實際的DNS解析過程中,當用戶對某個域名發起請求時,遞歸服務器首先會查看自身的DNS緩存,如果緩存中恰好有該域名的記錄,就會直接將結果返回給用戶,用戶對所得的IP地址發起訪問。如果緩存中沒有記錄,才會發起全球解析查詢。
這種查詢機制,縮短了解析查詢的時間,可以讓用戶獲得更快的訪問體驗,但也存在一定的安全風險。如果攻擊者通過控制用戶的主機或者使用惡意軟件攻擊用戶的DNS緩存,就可以對DNS緩存中的域名映射關系進行篡改,將域名解析結果指向一個虛假IP。
在這種情況下,用戶對該網站發起請求時,通過DNS系統的解析會直接將虛假的映射關系返給用戶,將用戶引導至虛假站點之上,從而造成信息泄露,財產安全受到影響。
針對DNS緩存投毒,主要有以下幾種應對措施:
1.使用可信的ISP或DNS服務器
由于用戶的計算機通常會直接使用ISP所提供的DNS服務器。因此,盡量選擇信譽良好且配備了全面安全措施的ISP,才能有效預防緩存投毒。如果不放心ISP提供的默認DNS服務器的話,也可以自行改用其他可信的DNS服務器,以減少受攻擊的可能性。
2.刷新DNS緩存
為了獲取最新的DNS解析記錄,預防遭受DNS緩存投毒攻擊,用戶可以定期對自己的系統進行DNS緩存清理工作,操作方法:Win+R快捷鍵→輸入:cmd→輸入:ipconfig/flushdns→回車。
3.復查訪問過的目標網站
雖然計算機會機械地認為,只要你輸入的網站URL沒錯的話,它訪問到的就是真實的IP地址。但是我們可以更謹慎地檢查訪問的網站是否是目標網站,檢查網頁的地址欄上是否有HTTPS加密,以及它的界面是否看起來可疑。一旦發現自己訪問的是虛假網站,立即退出該網站,并執行病毒掃描和DNS緩存刷新。
4.重新啟動路由器以清除其DNS緩存
我們常用的路由器也可能帶有自己的DNS緩存功能,它們和上面提到的用戶計算機以及DNS服務器一樣,容易受到DNS投毒的攻擊。因此,定期重啟路由器,將有利于清除已有的DNS緩存,并重新獲取新的映射記錄。