DNS安全(一)DNS緩存投毒與防護

       互聯網的飛速發展,把人們帶入了一個新的時代。一方面,人們享受着互聯網帶來的便捷多彩的生活,另一方面,個人信息安全也正面臨者新的挑戰。

        如今的互聯網,時時刻刻都在發生網絡***、病毒傳播。一邊是攻,另一邊是防,可以說這是一場沒有硝煙的持久戰。戰爭推動了環境變革,戰爭也推動了武器的升級。本文站在DNS安全角度,簡單聊聊DNS緩存投毒的原理與防禦機制。

【第一 DNS介紹】

DNS(域名系統 Domain Name System)是一個多層次的分佈式數據庫系統,它基本的功能是完成域名解析,即提供域名和IP 地址之間的映射關係,屬於互聯網(Internet)的基礎設施,爲互聯網(Internet)上用戶提供便利。

 

【第二 DNS的工作原理概述】
在分析DNS 緩存投毒***原理之前,先了解一下DNS 解析過程。

假設我們在客戶端上要查詢的域名爲www.test.com,並且客戶端和我們的本地緩存DNS滿足如下條件:
(1)客戶端是首次訪問www.test.com,即客戶端本地沒有緩存記錄。

(2)本地緩存DNS中沒有www.test.com的緩存記錄,當然,本地緩存DNS肯定不是www.test.com的權威DNS。
那麼,客戶端發起www.test.com查詢請求後的過程如下圖所示:

wKiom1Rh62HQb5D7AACLNglYnxE732.jpg

(1)客戶端向本地緩存DNS發起遞歸查詢www.test.com 的請求。
(2)本地緩存DNS檢查本地資源記錄,若存在則作授權回答;若不存在,則檢查本地緩存,如存在則直接給客戶端返回結果。若本地資源記錄和緩存中都不存在,則向根DNS發起迭代查詢。

本例中本地緩存DNS向根DNS發起www.test.com的迭代查詢。

(3)根DNS返回com 域的權威名字服務器(即頂級域DNS)的NS記錄和對應IP地址。

(4)本地緩存DNS繼續向頂級域DNS發起www.test.com的迭代查詢。

(5)頂級域名服務器返回test.com域的權威DNS的NS記錄和IP地址。

(6)本地緩存DNS繼續向test.com的權威DNS發起www.test.com的迭代查詢。

(7)test.com的權威DNS應答www.test.com的查詢請求。

(8)本地緩存DNS將應答結果保存在本地緩存,並將結果應答給客戶端。

 

【第三 DNS緩存投毒***】

DNS緩存投毒***可以分爲傳統的緩存投毒***Kaminsky緩存投毒***。但無論傳統的DNS緩存投毒還是後來出現的Kaminsky緩存投毒均出現在下圖紅色區域,即權威DNS應答本地緩存DNS發起的迭代請求的過程中。

wKiom1Rh7rnCebvbAAC7q74-BBY353.jpg

【第四 傳統的DNS緩存投毒***】

        由於DNS 採用UDP 協議傳輸查詢和應答數據包,屬於簡單信任機制。對接收到的應答數據包僅進行原查詢包IP 地址、端口和隨機查詢ID 的確認,而不會對數據包的合法性做任何分析。如果若匹配,則接受其作爲正確應答數據包,繼續DNS 解析過程,並丟棄後續到達的所有應答數據包。這就使得***者可以仿冒權威名字服務器向緩存DNS 服務器發送僞造應答包,力爭搶先完成應答以污染DNS 緩存。
        如果***者發送的僞造應答包在權威DNS發送的正確應答包之前到達緩存DNS 服務器,並與原查詢包IP 地址、端口和隨機查詢ID 相匹配,就能夠成功污染DNS 緩存。

        例如,***者僞造上面的test.com權威應答內容,將www.test.com的A記錄修改成一個非法的IP地址比如1.1.1.1,且僞造權威DNS的IP地址、端口號以及查詢ID提前一步應答給本地緩存DNS,那麼本地緩存DNS就會將此內容視爲合法,並緩存到本地然後應答給客戶端。即使後來真正的應答到了本地緩存DNS,那也沒辦法再改變。

 

【第五 傳統的DNS緩存投毒的缺陷】

        根據DNS的工作原理可知:被***的域名只有在本地緩存DNS中沒有緩存,那麼纔有可能***成功。本地緩存DNS中已經存在該域名的緩存,那麼***者只能等到該域名緩存的生存時間(TTL)過期後再組織下一次***。這樣的***效率和命中率是比較低的。


【第六 Kaminsky緩存投毒***】

        2008 年的夏天,Dan Kaminsky 發現了一種新型DNS 緩存投毒***,該***的方式一經公開立即引起了網絡安全界的廣泛關注。

        Kaminsky緩存投毒***克服了傳統DNS 緩存投毒***存在的***所需時間長、成功率很低的缺陷。其***原理如下:

(1)***者向被***的本地緩存DNS發送一個域名的DNS 查詢請求,該查詢請求中的域名主機使用隨機序列和目標域名的組合。

例如www123456.test.com,其中ns2.test.com爲目標域名,www123456是隨機生成的。很顯然,這個查詢的域名主機記錄在test.com的權威DNS中是不存在的。正常test.com的權威DNS要返回NXDOMIAN(代表域名不存在)。換句話說就是本地緩存DNS中肯定沒有www123456.test.com的緩存記錄,本地緩存DNS接收到這個域名查詢請求後肯定是要出去迭代請求的。

 

(2)***者僞造test.com的權威DNS應答數據包中,應答資源記錄部分與正確應答包中部分是與正常結果一樣的,比如test.com的DNS的IP地址、UDP端口號、應答結果是NXDOMAIN。

但是,在應答報文中的授權資源記錄部分,***者僞造一個test.com的NS記錄爲ns2.test.com且該記錄對應的A記錄IP是2.2.2.2(可能是一個釣魚網站的IP)。那麼該資源記錄信息將也被寫入本地緩存DNS的Cache 中,在Cache 保持時間內,對test.com名字服務器所管轄的所有域名的查詢都將被髮送到***者自己控制的IP(2.2.2.2)中

通過dig命令測試類似報文應答內容如下。

wKioL1Rh-YjyJf8DAAHBIr_kkUI375.jpg

 

【第七 Kaminsky緩存投毒的優勢】

        傳統DNS 緩存投毒***中,存在***所需時間長、***成功率低的問題,而Kaminsky ***克服了這一缺陷。因爲Kaminsky ***中,每次查詢都會在目標域名上添加隨機序列,這使得在被***的本地緩存DNS的 Cache 中根本就不存在各個臨時構造域名主機的記錄,因此若***不成功,則立即更換隨機序列連續不斷地進行***,不存在有效***時間的問題進而提升了***成功率。
       傳統DNS 緩存投毒***成功後,只是污染了該與權威區中的某個域名,而Kaminsky ***成功後,污染的是本地緩存DNS Cache中一個域名主機的NS記錄(即該域名的權威主機記錄),之後對該名字服務器管轄的所有域名主機的查詢都將被髮送到***者控制的IP 地址中,破壞力度遠高於傳統緩存投毒***。

 

【第八 緩存投毒***防護】

     最後,我們來說說如何做好DNS的防護,降低DNS被緩存投毒的風險。簡單總結大概有以下幾點:

(1)作爲權威域名的負責方,要儘量的部署多臺權威DNS,比如一主多備。這樣能有效的防止自己域名被投毒

        例如,test.com區,本來只有一個DNS服務器,NS爲dns.test.com,對應的IP爲1.1.1.1。那麼***者僞造源IP回包的時候只需要僞造這一個IP應答給本地緩存DNS就可以了,因爲本地緩存DNS肯定是向1.1.1.1發起了迭代請求。但如果有多臺權威DNS,那麼這個***的成功率就會降低,***的時間就會變長。因爲,本地緩存DNS可能是向5.5.5.5發了www123456.test.com的域名解析請求。***者回的包可能回的是3.3.3.3,就算是僞造5.5.5.5回的包,那麼可能已經在真正應答之後了。

(2)在選擇DNS軟件時要儘量選擇DNS ”源端口隨機性”較好的軟件或者版本。

         例如,現在應用比較廣泛的開源Bind軟件,在比較早期的版本中,源端口的隨機性並不是很好。微軟windows serve中的DNS軟件做“本地緩存DNS”更是不太合適,因爲無論從源端口隨機性、解析性能等等諸多方面都不健壯。但它也有自身的有點,例如與AD域的配合等方面。

(3)在現有的DNS基礎上綁定新的安全機制,比如部署DNSSEC或者增加新的安全認證協議。

 

        總之,DNS安全是一個大課題,需要各方共同推動纔會達到比較理想的效果。在日常的工作中最重要的是提高自身安全意識,瞭解目前負責的系統是否存在DNS安全隱患,及時的做好軟件升級、做好網絡規劃等工作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章