簡介,主要欺騙形式,Ⅰ.hosts檔案篡改,Ⅱ.本機DNS劫持,1>.DNS欺騙,3>.偷取服務 Theft of services,4>.限制,DNS欺騙的防範,
簡介
在Internet上存在的
DNS伺服器有絕大多數都是用bind來架設的,使用的bind版本主要為bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.這些bind有個共同的特點,就是BIND會快取(Cache)所有已經查詢過的結果,這個問題就引起了下面的幾個問題的存在.
主要欺騙形式
Ⅰ.hosts檔案篡改
Hosts檔案是一個用於存儲計算機網路中節點信息的檔案,它可以將
主機名映射到相應的IP位址,實現DNS的功能,它可以由計算機的用戶進行控制。
Hosts檔案的存儲位置在不同的作業系統中並不相同,甚至不同Windows版本的位置也不大一樣:
Windows NT/2000/XP/2003/Vista/win7:默認位置為%SystemRoot%\system32\drivers\etc\,但也可以改變。
有很多網站不經過用戶同意就將各種各樣的外掛程式安裝到你的計算機中,其中有些說不定就是木馬或病毒。對於這些網站我們可以利用Hosts把該網站的域名映射到錯誤的IP或本地計算機的IP,這樣就不能訪問了。在WINDOWSX系統中,約定
127.0.0.1為本地計算機的IP位址, 0.0.0.0是錯誤的IP位址。
如果,我們在Hosts中,寫入以下內容:
127.0.0.1 # 要禁止的網站 A
0.0.0.0 # 要禁止的網站 B
這樣,計算機
解析域名 A和 B時,就解析到本機IP或錯誤的IP,達到了禁止網站A 和B的目的。
Ⅱ.本機DNS劫持
DNS劫持又稱
域名劫持,是指在劫持的網路範圍內攔截域名解析的請求,分析請求的域名,把審查範圍以外的請求放行,否則返回假的IP位址或者什麼都不做使請求失去回響,其效果就是對特定的網路不能反應或訪問的是假網址。
相關內容
域名解析的基本原理就是把域名翻譯成IP位址,以便計算機能夠進一步通信,傳遞內容和網址等。
由於域名劫持往往只能在特定的被劫持的網路範圍內進行,所以在此範圍外的
域名伺服器(DNS)能夠返回正常的IP位址,高級用戶可以在網路設定把DNS指向這些正常的域名伺服器以實現對網址的正常訪問。所以域名劫持通常相伴的措施——封鎖正常DNS的IP。
如果知道該域名的真實IP位址,則可以直接用此IP代替域名後進行訪問。比如訪問百度,你可以直接用百度IP(111.13.100.92)訪問。
簡單的說就是把你要去的地址攔截下來,給你一個錯誤的地址,或者告訴你你要去的地方去不了,人為的導致你無法到達目的地,一般用於對一些不良網站的封殺或是一些黑客行為。
1>.DNS欺騙
在DNS的快取還沒有過期之前,如果在DNS的快取中已經存在的記錄,一旦有客戶查詢,DNS伺服器將會直接返回快取中的記錄.
下面我們來看一個例子:
一台運行著Lunix的Internet
主機,並且提供rlogin服務,它的IP位址為123.45.67.89,它使用的DNS伺服器(即/etc/resolv.conf中指向的DNS伺服器)的IP位址為98.76.54.32,某個客戶端(IP位址為38.222.74.2)試圖連線到unix主機的rlogin連線埠,假設unix主機的/etc/hosts.equiv檔案中使用的是dns名稱來允許目標主機的訪問,那么unix主機會向IP為98.76.54.32的DNS伺服器發出一個
PTR記錄的查詢:
123.45.67.89 -> 98.76.54.32 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0
QY: 2.74.222.38.in-addr.arpa PTR
IP為98.76.54.32的DNS伺服器中沒有這個反向查詢域的信息,經過一番查詢,這個DNS伺服器找到38.222.74.2和38.222.74.10為74.222.38.in-addr.arpa.的權威DNS伺服器,所以它會向38.222.74.2發出PTR查詢:
98.76.54.32 -> 38.222.74.2 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0
QY: 2.74.222.38.in-addr.arpa PTR
請注意,38.222.74.2是我們的客戶端IP,也就是說這台機子是完全掌握在我們手中的.我們可以更改它的DNS記錄,讓它返回我們所需要的結果:
38.222.74.2 -> 98.76.54.32 [Answer]
NQY: 1 NAN: 2 NNS: 2 NAD: 2
QY: 2.74.222.38.in-addr.arpa PTR
AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com
AN: trusted.host.com A 38.222.74.2
NS: 74.222.38.in-addr.arpa NS ns.sventech.com
NS: 74.222.38.in-addr.arpa NS ns1.sventech.com
AD: ns.sventech.com A 38.222.74.2
AD: ns1.sventech.com A 38.222.74.10
當98.76.54.32的DNS伺服器收到這個應答後,會把結果轉發給123.45.67.98,就是那台有rlogin服務的unix
主機(也是我們的目標 :) ),並且98.76.54.32這台DNS伺服器會把這次的查詢結果快取起來.
這時unix主機就認為IP位址為38.222.74.2的
主機名為trusted.host.com,然後unix主機查詢本地的/etc/hosts.equiv檔案,看這台主機是否被允許使用rlogin服務,很顯然,我們的欺騙達到了.
在unix的環境中,有另外一種技術來防止這種欺騙的發生,就是查詢
PTR記錄後,也查詢PTR返回的主機名的A記錄,然後比較兩個IP位址是否相同:
123.45.67.89 -> 98.76.54.32 [Query]
NQY: 1 NAN: 0 NNS: 0 NAD: 0
QY: trusted.host.com A
很不幸,在98.76.54.32的DNS伺服器不會去查詢這個記錄,而會直接返回在查詢2.74.222.38.in-addr.arpa時得到的並且存在快取中的信息:
98.76.54.32 -> 123.45.67.89 [Query]
NQY: 1 NAN: 1 NNS: 2 NAD: 2
QY: trusted.host.com A
AN: trusted.host.com A 38.222.74.2
NS: 74.222.38.in-addr.arpa NS ns.sventech.com
NS: 74.222.38.in-addr.arpa NS ns1.sventech.com
AD: ns.sventech.com A 38.222.74.2
AD: ns1.sventech.com A 38.222.74.10
那么unix
主機就認為38.222.74.2就是真正的trusted.host.com了,我們的目的達到了!
這種IP欺騙的條件是:你必須有一台Internet上的授權的DNS伺服器,並且你能控制這台伺服器,至少要能修改這台伺服器的DNS記錄,我們的欺騙才能進行.
2>.拒絕服務攻擊 Denial of service
還是上面的例子,如果我們更改位於38.222.74.2的記錄,然後對位於98.76.54.32的DNS伺服器發出2.74.222.38.in-addr.arpa的查詢,並使得查詢結果如下:
因為74.222.38.in-addr.arpa完全由我們控制,所以我們能很方便的修改這些信息來實現我們的目的.
38.222.74.2 -> 98.76.54.32 [Answer]
NQY: 1 NAN: 2 NNS: 2 NAD: 2
QY: 2.74.222.38.in-addr.arpa PTR
AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com
AN: www.company.com A 0.0.0.1
NS: 74.222.38.in-addr.arpa NS ns.sventech.com
NS: 74.222.38.in-addr.arpa NS ns1.sventech.com
AD: ns.sventech.com A 38.222.74.2
AD: ns1.sventech.com A 38.222.74.10
這樣一來,使用98.76.54.32這台DNS伺服器的用戶就不能訪問www.company.com了,因為這個IP根本就不存在!
3>.偷取服務 Theft of services
還是上面的例子,只是更改的查詢結果如下:
38.222.74.2 -> 98.76.54.32 [Answer]
NQY: 1 NAN: 3 NNS: 2 NAD: 2
QY: 2.74.222.38.in-addr.arpa PTR
AN: 2.74.222.38.in-addr.arpa PTR trusted.host.com
AN: www.company.com CNAME www.competitor.com
AN: company.com MX 0 mail.competitor.com
NS: 74.222.38.in-addr.arpa NS ns.sventech.com
NS: 74.222.38.in-addr.arpa NS ns1.sventech.com
AD: ns.sventech.com A 38.222.74.2
AD: ns1.sventech.com A 38.222.74.10
這樣一來,一個本想訪問http://www.competitor.com的用戶會被帶到另外一個地方,甚至是敵對的公司的主頁(想想把華為和北電聯起來是什麼樣的感覺. :) ).並且發給company.com的郵件會被傳送給mail.compertitor.com.(越來越覺得在網路上的日子不踏實! xxbin這樣想).
4>.限制
對這些攻擊,也有一定的限制.
首先,攻擊者不能替換快取中已經存在的記錄.比如說,如果在98.76.54.32這個DNS伺服器上已經有一條www.company.com的
CNAME記錄,那么攻擊者試圖替換為www.competitor.com將不會成功.然而,一些記錄可以累加,比如A記錄,如果在DNS的快取中已經存在一條www.company.com的A記錄為1.2.3.4,而攻擊者卻欺騙DNS伺服器說www.company.com的A記錄為4.3.2.1,那么www.company.com將會有兩個A記錄,客戶端查詢時會隨機返回其中一個.(呵呵,這不是loading balance么?)
其次,DNS伺服器有個
快取刷新時間問題,如果www.netbuddy.org的TTL為7200,那么DNS伺服器僅僅會把www.netbuddy.org的信息快取7200秒或者說兩個小時.如果攻擊者放入一條TLL為604800的A記錄,那么這條記錄將會在快取中保存一周時間,過了默認的兩天后,這個DNS伺服器就會到處"分發"攻擊者假造的記錄.
下面是常用的幾種可以累加和不能累加的記錄:
A can add
NS can add
MX can add
PTR cannot add
DNS欺騙的防範
DNS欺騙攻擊是很難防禦的,因為這種攻擊大多數本質都是被動的。通常情況下,除非發生欺騙攻擊,否則你不可能知道你的DNS已經被欺騙,只是你打開的
網頁與你想要看到的網頁有所不同。在很多針對性的攻擊中,用戶都無法知道自己已經將網上銀行帳號信息輸入到錯誤的網址,直到接到銀行的電話告知其帳號已購買某某高價商品時用戶才會知道。這就是說,在抵禦這種類型攻擊方面還是有跡可循。
使用最新版本的DNS伺服器軟體,並及時安裝補丁
關閉DNS伺服器的遞歸功能。DNS伺服器利用快取中的記錄信息回答查詢請求或是DNS伺服器通過查詢其他服務獲得查詢信息並將它傳送給客戶機,這兩種查詢成為遞歸查詢,這種查詢方式容易導致DNS欺騙。
保護內部設備:像這樣的攻擊大多數都是從網路內部執行攻擊的,如果你的網路設備很安全,那么那些感染的主機就很難向你的設備發動欺騙攻擊。
不要依賴DNS:在高度敏感和安全的系統,你通常不會在這些系統上瀏覽網頁,最後不要使用DNS。如果你有軟體依賴於主機名來運行,那么可以在設備主機檔案里手動指定。
使用入侵檢測系統:只要正確部署和配置,使用入侵檢測系統就可以檢測出大部分形式的ARP快取中毒攻擊和DNS欺騙攻擊。
使用
DNSSEC: DNSSEC是替代DNS的更好選擇,它使用的是數字前面DNS記錄來確保查詢回響的有效性,DNSSEC還沒有廣泛運用,但是已被公認為是DNS的未來方向,也正是如此,美國國防部已經要求所有MIL和GOV域名都必須開始使用DNSSEC。