防火牆技術之DNS控制
談談防火牆: DNS的污染與劫持
序言
說到防火牆,想必大家對其並不陌生,幾乎所有的計算機都安裝有防火牆軟體,而在一些像學校、單位、網吧等公共網路中,網路管理員常常還會部署硬體防火牆。這些防火牆為在抵禦外來的網路攻擊,防止內部網路攻擊、計算機網路訪問控制等方面都做出了非常重要的貢獻,而今天我們就來講一下防火牆中的訪問控制中的DNS解析控制相關的技術。
DNS在平時用戶瀏覽網頁,訪問互聯網的過程中扮演著非常重要的角色。用戶通常通過使用域名來訪問對應的網站及伺服器,而計算機與計算機之間的通訊實際上則是靠IP地址來進行通訊,因此DNS在其中充當著將域名解析為對應的IP地址的作用。在一些私有網路的訪問控制實施中,若不想讓用戶訪問某些網站,比如一些公司不希望其員工在上班期間使用電腦瀏覽微博之類的網站,只需要讓用戶無法獲得該網站對應的IP地址即可。而不少的網路管理員則會從DNS上下手,以實現讓網路使用者無法獲得正確的IP地址。
一種"硬體防火牆"的部署方法
方法一:DNS劫持(DNS Hijacking)
在很多時候,我們組建區域網時通常會在網路內架設一個DNS伺服器,這個DNS伺服器通常會嵌入在一些網路基礎設施中,而不會獨立架設。例如家庭用戶使用的路由器中通常會啟動有dnsmasq服務,該服務會在路由器本地啟動一個DNS伺服器,其目的是對用戶的DNS請求結果進行本地的緩存,以便於在日後如果用戶仍需要查詢該域名的有關記錄時,路由器本地能夠利用緩存提供比較迅速的應答,改善用戶的網路瀏覽體驗。用戶在接入網路時(如連接WiFi等)會通過DHCP自動獲取IP地址,在獲取IP地址的同時,DHCP還會提供該網域內的DNS伺服器IP給用戶。通常情況下,若用戶的沒有對IP地址有關設置進行改動的情況下,操作系統會自動選擇DHCP服務提供的DNS地址。因此,網路管理員只需要對這一DNS伺服器進行相關配置,比如將www.weibo.com的解析記錄設置為一個隨機的IP地址,如233.233.233.233(亂寫的),用戶訪問微博時,瀏覽器查詢相關DNS記錄,DNS伺服器就會把這個錯誤的IP進行返回,而通過這個錯誤的IP地址用戶瀏覽器肯定無法與新浪微博的伺服器構建連接,也就成功實現了對微博網站的訪問控制了。
圖:區域網一個DNS伺服器的解析記錄
方法二:DNS污染(DNS Poisoning)
然而上述的方法在很多時候並不湊效,因為用戶只需要將DNS伺服器設置為一些公共DNS伺服器,比如谷歌的8.8.8.8之類的話,本地網路的DNS伺服器將無法對相關DNS請求進行劫持了,用戶也可以自由地訪問所有的網站。這也是為什麼當年一些運營商使用DNS劫持技術來賣廣告的時候,只需要把DNS伺服器進行手動設置就能夠避免一部分的廣告彈窗。
運營商通過DNS劫持實現廣告、業務信息等的推送
不過如果用戶繞開了本地網路的DNS伺服器,網路管理員仍然是有辦法對用戶的DNS記錄進行控制的,那就是DNS污染了。我們先來了解一下DNS協議本身,DNS協議是通過UDP協議通訊的,與TCP協議不同的是,UDP協議沒有握手,在數據傳輸的過程中,雙方也不需要在收到數據後對對方進行確認。因此,UDP協議是比較不可靠的,協議本身無法保障數據傳輸的完整性,而這種不可靠性也為DNS污染技術提供了先決性條件。網路管理員可以在計算機網路出入口旁路設置IDS入侵檢測,對53埠的UDP報文進行對比,當相關內容符合關鍵字時,則可以像發出DNS查詢請求的機器發送預先設置好的應答結果,由於互聯網通訊存在延時,該預設的應答結果必定會先於遠程DNS伺服器返回的結果到達客戶機器,因此瀏覽器會將最先返回的含有虛假IP的DNS查詢結果作為該域名的解析結果,從而實現了訪問控制。
我們可以進行如下實驗來進一步體會相關技術的具體實現。在海外架設一伺服器,搭建DNS服務,本地查詢並記下某一域名的解析值(圖1)。
圖1.DNS伺服器本地正確解析值
本地向該伺服器進行同樣的域名解析請求(圖3),用Wireshark進行抓包分析(圖2),查看,發現解析結果與伺服器上正確的解析結果不同,我們可以通過Wireshark查看相關記錄。
圖2.Wireshark抓包記錄
不難發現在本地向遠程伺服器發送相關請求時,有以遠程伺服器名義返回的兩個結果(16和17),這兩個結果的IP地址是無效的,而伺服器真正返回的正確結果則姍姍來遲(19),而由於前兩個由內網旁路發送的DNS結果搶先到達本地,伺服器返回的真正結果未被採納。
圖3.遠程伺服器查詢結果
因此,DNS污染也被稱作是DNS搶答,因為其原理實質上就是利用UDP的不可靠通訊以及只接收最先返回的數據的原理,利用內網延時絕對低於遠程伺服器的延時的實質情況,實現搶答。
當然,對於這種情況,已經有了不少的解決方案,最原始的方法是通過丟棄最先應答的數據包,取最後到達的數據包來作為應答結果,不過網路管理員同樣可以完全屏蔽區域網外的一切53埠通訊,通過上述的方法返回錯誤的DNS應答結果來阻止用戶獲得正確的ip地址。另外一種解決方案比較有效,目前也正在不斷地推廣中,這種方案就是棄用UDP這種不可靠的連接方式,採用TCP+SSL來進行加密通訊及查詢,目前DNSCrypt項目已經為此提供了相關的技術解決方案,一些DNS服務方也逐漸支持TCP/SSL的查詢請求。
You know that


TAG:HQ雜談 |