DNS欺騙原理及工作工程分析
DNS欺騙是這樣一種中間人攻擊形式,它是攻擊者冒充域名伺服器的一種欺騙行為,它主要用於向主機提供錯誤DNS資訊,當用戶嘗試瀏覽網頁,例如IP地址為XXX.XX.XX.XX ,網址為www.bankofamerica.com,而實際上登入的確實IP地址YYY.YY.YY.YY上的www.bankofamerica.com ,使用者上網就只能看到攻擊者的主頁,而不是使用者想要取得的網站的主頁了,這個網址是攻擊者用以竊取網上銀行登入證書以及帳號資訊的假冒網址,DNS欺騙其實並不是真的“黑掉”了對方的網站,而是冒名頂替、招搖撞騙罷了。整個操作過程其實非常簡單,下面我們將探討DNS欺騙攻擊是如何實現的以及如何抵禦這種攻擊。
正常DNS通訊
域名系統(DNS)協議在RFC 1034/1035中是這樣定義的:它被認為是網際網路使用中最重要的協議之一。當你在瀏覽器輸入網址時(例如http://www.google.com),就會向DNS伺服器傳送一個DNS請求以便找到與該網址相對應的IP地址。這是因為與網際網路互連的路由器和裝置並不知道google.com,它們只知道IP地址,如74.125.95.103。
DNS伺服器本身的工作原理是,儲存IP地址到DNS名稱對映的記錄(稱為資源記錄)資料庫,聯絡這些資源記錄與客戶端,並將這些資源記錄與其他DNS伺服器聯絡。整個企業和整個網際網路的DNS伺服器架構是有點複雜的,事實上,有很多關於DNS架構的專門書籍,但在本文中我們將不會涵蓋DNS架構或者所有不同DNS通訊型別的內容,不過我們將介紹基本的DNS通訊,如圖1所示。
圖1: DNS查詢和響應
DNS函式是屬於查詢/響應型別的格式,當客戶端希望解析DNS域名為IP地址時,就會向DNS伺服器傳送一個查詢,然後伺服器會將對應的作為回覆。從客戶端的角度來看,看到的只有兩個資料包:查詢和響應。
圖2: DNS查詢和響應資料包
而當我們進一步考慮DNS遞迴問題時,這種情況就會變得更加複雜。由於網際網路DNS結構的層次性,DNS伺服器需要能夠互相通訊以便獲取客戶端傳送的查詢所對應的答案。我們的內部DNS伺服器可能知道本地區域網絡伺服器的IP地址對映,但是我們不能指望內部DNS伺服器知道全世界網路的IP地址對映。這也就是遞迴發揮作用的地方,就是當一臺DNS伺服器代表客戶端的名義向另一臺DNS伺服器傳送查詢請求,也就是說,這種情況下,DNS伺服器變成了客戶端,如圖3所示。
圖3: DNS通過遞迴的查詢和響應
欺騙DNS
執行DNS欺騙攻擊的方法有很多,在這裡我們將使用一種稱為DNS ID欺騙的技術。
每個通過網際網路傳送的DNS請求都包含一個獨特的識別碼,其目的在於辨識查詢和響應,並將對應的查詢和響應配對在一起。這就意味著,如果我們的攻擊計算機可以攔截目標裝置傳送的DNS查詢,我們就只需要做一個包含該識別碼的假資料包,這樣目標計算機就會根據識別碼而接受我們傳送的查詢結果。
我們將使用一個簡單的工具分兩個步驟來完成整個操作。首先,我們對目標裝置進行ARP快取中毒攻擊以重新路由通過攻擊主機的目標裝置的通訊,這樣我們就能夠攔截DNS查詢請求,然後我們就能夠傳送欺騙性的資料包。這樣做的目的是為了讓目標網路的使用者訪問我們製造的惡意網址而不是他們試圖訪問的網址,如圖4所示。
圖4: 使用DNS ID欺騙方法的DNS欺騙攻擊
有幾種不同的工具可以用於執行DNS欺騙攻擊,我們選擇使用Ettercap,它包含windows和Linux兩個版本,大家可以點選此處下載該工具。如果你稍微研究一下這個網址就會發現Ettercap包含很多除DNS欺騙外的功能,它可以用於很多形式的中間人攻擊。
如果你是在windows系統中安裝Ettercap,你會發現它包含一個很強大的圖形使用者介面,不過對於DNS欺騙的情況,我們只需要使用命令列介面。
在操作Ettercap之前,需要進行一些配置。Ettercap的核心是資料包嗅探器,主要利用不同的外掛來執行不同的攻擊。dns_spoof外掛是用於本文示例的工具,所以我們需要修改與該外掛相關的配置檔案。在windows系統中,該檔案位於C:\Program Files (x86)\EttercapNG\share\etter.dns以及/usr/share/ettercap/etter.dns,這個檔案很簡單並且包含你想要欺騙的DNS記錄。對於我們而言,我們希望所有試圖開啟yahoo.com的使用者被定向到本地網路的主機上,所以我們加入了一些條目,正如圖5中所示。
圖5: 新增欺騙性的DNS記錄到etter.dns
這些資訊就是告訴dns_spoof外掛這樣的資訊:當它發現針對yahoo.com www.yahoo.com或者的DNS查詢請求時,就傳送IP地址172.16.16.100作為響應。在實際情況下,172.16.16.100會執行某種web伺服器軟體向用戶展現假冒網站。
一旦檔案配置好並儲存後,我們就可以執行命令字串來發動攻擊了,命令字串使用以下選項:
-T –指定文字介面的使用
-q –以靜音模式執行命令,這樣捕捉的資料包不會輸出到螢幕
-P dns_spoof –指定dns_spoof外掛的使用
-M arp –發起中間人ARP中毒攻擊以攔截主機間的資料包
// // -指定整個網路作為攻擊的目標
我們需要的最終命令字串為:
Ettercap.exe –T –q –P dns_spoof –M arp // //
執行此命令將啟動兩個階段的攻擊,首先是對網路裝置的ARP快取中毒攻擊,然後是傳送假的DNS查詢響應資訊。
圖6:Ettercap主動搜尋DNS查詢
一旦啟動,任何使用者試圖開啟www.yahoo.com都會被重新定向到我們的惡意網站。
圖7: 從使用者角度看到的DNS欺騙的結果
如何抵禦DNS欺騙攻擊
DNS欺騙攻擊是很難防禦的,因為這種攻擊大多數本質都是被動的。通常情況下,除非發生欺騙攻擊,否則你不可能知道你的DNS已經被欺騙,只是你開啟的網頁與你想要看到的網頁有所不同。在很多針對性的攻擊中,使用者都無法知道自己已經將網上銀行帳號資訊輸入到錯誤的網址,直到接到銀行的電話告知其帳號已購買某某高價商品時使用者才會知道。這就是說,在抵禦這種型別攻擊方面還是有跡可循:
保護內部裝置: 像這樣的攻擊大多數都是從網路內部執行攻擊的,如果你的網路裝置很安全,那麼那些感染的主機就很難向你的裝置發動欺騙攻擊。
不要依賴DNS:在高度敏感和安全的系統,你通常不會在這些系統上瀏覽網頁,最後不要使用DNS。如果你有軟體依賴於主機名來執行,那麼可以在裝置主機檔案裡手動指定。
使用入侵檢測系統: 只要正確部署和配置,使用入侵檢測系統就可以檢測出大部分形式的ARP快取中毒攻擊和DNS欺騙攻擊。
使用DNSSEC: DNSSEC是替代DNS的更好選擇,它使用的是數字前面DNS記錄來確保查詢響應的有效性,DNSSEC現在還沒有廣泛運用,但是已被公認為是DNS的未來方向,也正是如此,美國國防部已經要求所有MIL和GOV域名都必須開始使用DNSSEC。
總結
從攻擊技術水平和惡意意圖來看,DNS欺騙攻擊是非常致命的中間人攻擊形式,使用這種攻擊技術我們可以利用釣魚技術來竊取登入資訊,利用漏洞安裝惡意軟體或者導致拒絕服務的情況。在下篇文章中,我們將分析“雜湊值傳遞”攻擊,看看它們如何被用於登入windows計算機,而不需要帳號資訊。