域名系統(tǒng)(Domain Name System,DNS)是一個將Domain Name和IP Address進行互相映射的Distributed Database。DNS是網(wǎng)絡(luò)應(yīng)用的基礎(chǔ)設(shè)施,它的安全性對于互聯(lián)網(wǎng)的安全有著舉足輕重的影響。但是由于DNS Protocol在自身設(shè)計方面存在缺陷,安全保護和認證機制不健全,造成DNS自身存在較多安全隱患,導(dǎo)致其很容易遭受攻擊。很多專家就DNS Protocol的安全缺陷提出了很多技術(shù)解決方案。例如IETF提出的域名系統(tǒng)安全協(xié)議(Domain Name System Security,DNSSEC),其目標(biāo)就在于解決這些安全隱患。這個Protocol增加了安全認證項目,增強了Protocol自身的安全功能。但是新增加的安全機制需要占用更多的系統(tǒng)和網(wǎng)絡(luò)資源,同時要升級Database和System Manggament Software,這些基于DNSSEC協(xié)議的軟件還不成熟,距離普及應(yīng)用還有較長時間。目前,常見的措施是定期升級DNS軟件和加強相關(guān)的安全配置,禁用不安全的端口等。本文對以偵聽為基礎(chǔ)的DNS ID欺騙(DNS ID spoofing)進行了探討,并提出了相關(guān)的防護解決方案。
一、DNS SERVER的服務(wù)工作過程
DNS是一種實現(xiàn)Domain Name和IP Address之間轉(zhuǎn)換的系統(tǒng),它的工作原理就是在兩者間進行相互映射,相當(dāng)于起到翻譯作用,所以稱為域名解析系統(tǒng)。DNS System分為Server和Client兩部分,Server的通用Port是53。當(dāng)Client向Server發(fā)出解析請求時,Local DNS Server第一步查詢自身的Database是否存在需要的內(nèi)容,如果有則發(fā)送應(yīng)答數(shù)據(jù)包并給出相應(yīng)的結(jié)果;否則它將向上一層DNS Server查詢。如此不斷查詢,最終直至找到相應(yīng)的結(jié)果或者將查詢失敗的信息反饋給客戶機。如果Local DNS Server查到信息,則先將其保存在本機的高速緩存中,然后再向客戶發(fā)出應(yīng)答。日常我們上網(wǎng)是通過Browser方式來申請從Domain Name到IP Address的解析,即Client向DNS Server提交域名翻譯申請,希望得到對應(yīng)的IP Address。這里以筆者所在院校為例,說明DNS的工作原理。
例如Client的Address為10.252.2.16,學(xué)校DNS Server為218.30.19.40,從此客戶機來訪問西安財經(jīng)學(xué)院網(wǎng)站。在地址欄鍵入學(xué)校網(wǎng)站的www.xaufe.edu.cn,通過DNS Server查找其對應(yīng)的IP Address。這個申請從10.252.2.16的一個隨機PORT發(fā)送出去,由218.30.19.40的53綁定端口接收到此申請并進行翻譯,首先在218.30.19.40的高速緩存中查找www.xaufe.edu.cn的IP Address,若存在對應(yīng)的映射關(guān)系,就直接將IP Address發(fā)送給客戶機,若緩存中沒有,則218.30.19.40會向上層DNS SERVER查詢,最后將查詢到的結(jié)果先發(fā)送到218.30.19.40,最后由218.30.19.40將西安財經(jīng)學(xué)院的IP Address(281.195.32.1)返回給Client 10.252.2.16。這樣10.252.2.16就可以和西安財經(jīng)學(xué)院站點建立連接并訪問了。
二、DNS欺騙攻擊原理
2.1 欺騙原理
Client的DNS查詢請求和DNS Server的應(yīng)答數(shù)據(jù)包是依靠DNS報文的ID標(biāo)識來相互對應(yīng)的。在進行域名解析時,Client首先用特定的ID號向DNS Server發(fā)送域名解析數(shù)據(jù)包,這個ID是隨機產(chǎn)生的。DNS Server找到結(jié)果后使用此ID給Client發(fā)送應(yīng)答數(shù)據(jù)包。Client接收到應(yīng)答包后,將接收到的ID與請求包的ID對比,如果相同則說明接收到的數(shù)據(jù)包是自己所需要的,如果不同就丟棄此應(yīng)答包。根據(jù)攻擊者的查詢和應(yīng)答原理,可使用不同方法實現(xiàn)攻擊,如:
(1)因為DNS Message僅使用一個簡單的認證碼來實施真實性驗證,認證碼是由Client程序產(chǎn)生并由DNS Server返回結(jié)果的,客戶機只是使用這個認證碼來辨別應(yīng)答與申請查詢是否匹配,這就使得針對ID認證碼的攻擊威脅成為可能。
(2)在DNS Request Message中可以增加信息,這些信息可以與客戶機所申請查詢的內(nèi)容沒有必然聯(lián)系,因此攻擊者就能在Request Message中根據(jù)自己的目的增加某些虛假的信息,比如增加其它Domain Server的Domain Name及其IP Address。此時Client在受到攻擊的Domain Server上的查詢申請均被轉(zhuǎn)向此前攻擊者在Request Message中增加的虛假Domain Server,由此DNS欺騙得以產(chǎn)生并對網(wǎng)絡(luò)構(gòu)成威脅。
(3)當(dāng)DNS Server接收到Domain Name和IP Address相互映射的數(shù)據(jù)時,就將其保存在本地的Cache中。若再有Client請求查詢此Domain Name對應(yīng)的IP Address,Domain Server就會從Cache中將映射信息回復(fù)給Client,而無需在Database中再次查詢。如果黑客將DNS Request Message的存在周期設(shè)定較長時間,就可進行長期欺騙。
2.2 DNS欺騙攻擊的方式
DNS欺騙技術(shù)常見的有內(nèi)應(yīng)攻擊和序列號攻擊兩種。內(nèi)應(yīng)攻擊即黑客在掌控一臺DNS Server后,對其Domain Database內(nèi)容進行更改,將虛假IP Address指定給特定的Domain Name,當(dāng)Client請求查詢這個特定域名的IP時,將得到偽造的IP。
序列號攻擊是指偽裝的DNS Server在真實的DNS Server之前向客戶端發(fā)送應(yīng)答數(shù)據(jù)報文,該報文中含有的序列號ID與客戶端向真實的DNS Server發(fā)出請求數(shù)據(jù)包中含有的ID相同,因此客戶端會接收該虛假報文,而丟棄晚到的真實報文,這樣DNS ID序列號欺騙成功??蛻魴C得到的虛假報文中提供的域名的IP是攻擊者設(shè)定的IP,這個IP將把客戶帶到攻擊者指定的站點。
2.3 DNS 序列號欺騙攻擊原理
DNS 序列號(ID)欺騙以偵測ID和Port為基礎(chǔ)。在Switch構(gòu)建的網(wǎng)絡(luò)中,攻擊方首先向目標(biāo)實施ARP欺騙。當(dāng)Client、攻擊者和DNS Server同在一個網(wǎng)絡(luò)時,攻擊流程如下:①攻擊方向目標(biāo)反復(fù)發(fā)送偽造的ARP Request Message,修改目標(biāo)機的ARP 緩存內(nèi)容,同時依靠IP續(xù)傳使Data經(jīng)過攻擊方再流向目的地;攻擊方用Sniffer軟件偵測DNS請求包,獲取ID序列號和Potr;②攻擊方一旦獲得ID和Potr,即刻向客戶機發(fā)送虛假的DNS Request Message,Client接收后驗證ID和Potr正確,認為接收了合法的DNS應(yīng)答;而Client得到的IP可能被轉(zhuǎn)向攻擊方誘導(dǎo)的非法站點,從而使Client信息安全受到威脅;③Client再接收DNS Server的Request Message,因落后于虛假的DNS響應(yīng),故被Client丟棄。當(dāng)Client訪問攻擊者指向的虛假IP時,一次DNS ID欺騙隨即完成。
三、DNS欺騙檢測和防范思路
3.1 檢測思路
發(fā)生DNS欺騙時,Client最少會接收到兩個以上的應(yīng)答數(shù)據(jù)報文,報文中都含有相同的ID序列號,一個是合法的,另一個是偽裝的。據(jù)此特點,有以下兩種檢測辦法:
(1)被動監(jiān)聽檢測。即監(jiān)聽、檢測所有DNS的請求和應(yīng)答報文。通常DNS Server對一個請求查詢僅僅發(fā)送一個應(yīng)答數(shù)據(jù)報文(即使一個域名和多個IP有映射關(guān)系,此時多個關(guān)系在一個報文中回答)。因此在限定的時間段內(nèi)一個請求如果會收到兩個或以上的響應(yīng)數(shù)據(jù)報文,則被懷疑遭受了DNS欺騙。
(2)主動試探檢測。即主動發(fā)送驗證包去檢查是否有DNS欺騙存在。通常發(fā)送驗證數(shù)據(jù)包接收不到應(yīng)答,然而黑客為了在合法應(yīng)答包抵達客戶機之前就將欺騙信息發(fā)送給客戶,所以不會對DNS Server的IP合法性校驗,繼續(xù)實施欺騙。若收到應(yīng)答包,則說明受到了欺騙攻擊。
3.2 防范思路
在偵測到網(wǎng)絡(luò)中可能有DNS欺騙攻擊后,防范措施有:①在客戶端直接使用IP Address訪問重要的站點,從而避免DNS欺騙; ②對DNS Server和Client的數(shù)據(jù)流進行加密,Server端可以使用SSH加密協(xié)議,Client端使用PGP軟件實施數(shù)據(jù)加密。
對于常見的ID序列號欺騙攻擊,采用專業(yè)軟件在網(wǎng)絡(luò)中進行監(jiān)聽檢查,在較短時間內(nèi),客戶端如果接收到兩個以上的應(yīng)答數(shù)據(jù)包,則說明可能存在DNS欺騙攻擊,將后到的合法包發(fā)送到DNS Server并對DNS數(shù)據(jù)進行修改,這樣下次查詢申請時就會得到正確結(jié)果。
四、DNS防護方案
4.1 進行IP地址和MAC地址的綁定
(1)預(yù)防ARP欺騙攻擊。因為DNS攻擊的欺騙行為要以ARP欺騙作為開端,所以如果能有效防范或避免ARP欺騙,也就使得DNS ID欺騙攻擊無從下手。例如可以通過將Gateway Router 的Ip Address和MAC Address靜態(tài)綁定在一起,就可以防范ARP攻擊欺騙。
(2)DNS信息綁定。DNS欺騙攻擊是利用變更或者偽裝成DNS Server的IP Address,因此也可以使用MAC Address和IP Address靜態(tài)綁定來防御DNS欺騙的發(fā)生。由于每個Network Card的MAC Address具有唯一性質(zhì),所以可以把DNS Server的MAC Address與其IP Address綁定,然后此綁定信息存儲在客戶機網(wǎng)卡的Eprom中。當(dāng)客戶機每次向DNS Server發(fā)出查詢申請后,就會檢測DNS Server響應(yīng)的應(yīng)答數(shù)據(jù)包中的MAC Address是否與Eprom存儲器中的MAC Address相同,要是不同,則很有可能該網(wǎng)絡(luò)中的DNS Server受到DNS欺騙攻擊。這種方法有一定的不足,因為如果局域網(wǎng)內(nèi)部的客戶主機也保存了DNS Server的MAC Address,仍然可以利用MAC Address進行偽裝欺騙攻擊。
4.2 使用Digital Password進行辨別
在不同子網(wǎng)的文件數(shù)據(jù)傳輸中,為預(yù)防竊取或篡改信息事件的發(fā)生,可以使用任務(wù)數(shù)字簽名(TSIG)技術(shù)即在主從Domain Name Server中使用相同的Password和數(shù)學(xué)模型算法,在數(shù)據(jù)通信過程中進行辨別和確認。因為有Password進行校驗的機制,從而使主從Server的身份地位極難偽裝,加強了Domain Name信息傳遞的安全性。
安全性和可靠性更好的Domain Name Service是使用域名系統(tǒng)的安全協(xié)議(Domain Name System Security, DNSSEC)),用Digital Signature的方式對搜索中的信息源進行分辨,對DATA的完整性實施校驗,DNSSEC的規(guī)范可參考RFC2605。因為在設(shè)立Domain時就會產(chǎn)生Password,同時要求上層的Domain Name也必須進行相關(guān)的Domain Password Signature,顯然這種方法很復(fù)雜,所以InterNIC域名管理截至目前尚未使用。然而就技術(shù)層次上講,DNSSEC應(yīng)該是現(xiàn)今最完善的Domain Name設(shè)立和解析的辦法,對防范Domain Name欺騙攻擊等安全事件是非常有效的。
4.3 優(yōu)化DNS SERVER的相關(guān)項目設(shè)置
對于DNS Server的優(yōu)化可以使得DNS的安全性達到較高的標(biāo)準(zhǔn),常見的工作有以下幾種:①對不同的子網(wǎng)使用物理上分開的Domain Name Server,從而獲得DNS功能的冗余;②將外部和內(nèi)部Domain Name Server從物理上分離開并使用Forwarders轉(zhuǎn)發(fā)器。外部Domain Name Server可以進行任何客戶機的申請查詢,但Forwarders則不能,F(xiàn)orwarders被設(shè)置成只能接待內(nèi)部客戶機的申請查詢;③采用技術(shù)措施限制DNS動態(tài)更新;④將區(qū)域傳送(zone transfer)限制在授權(quán)設(shè)備上;⑤利用事務(wù)簽名對區(qū)域傳送和區(qū)域更新進行數(shù)字簽名;⑥隱藏服務(wù)器上的Bind版本;⑦刪除運行在DNS服務(wù)器上的不必要服務(wù),如FTP、telnet和Http;⑧在網(wǎng)絡(luò)外圍和DNS服務(wù)器上使用防火墻,將訪問限制在那些DNS功能需要的端口上。
4.4 直接使用IP地址訪問
對個別信息安全等級要求十分嚴格的WEB站點盡量不要使用DNS進行解析。由于DNS欺騙攻擊中不少是針對竊取客戶的私密數(shù)據(jù)而來的,而多數(shù)用戶訪問的站點并不涉及這些隱私信息,因此當(dāng)訪問具有嚴格保密信息的站點時,可以直接使用IP地址而無需通過DNS解析,這樣所有的DNS欺騙攻擊可能造成的危害就可以避免了。除此,應(yīng)該做好DNS Server的安全配置項目和升級DNS軟件,合理限定DNS Server進行響應(yīng)的IP地址區(qū)間,關(guān)閉DNS Server的遞歸查詢項目等。
4.5 對DNS數(shù)據(jù)包進行監(jiān)測
在DNS欺騙攻擊中,Client會接收到至少兩個DNS的數(shù)據(jù)響應(yīng)包,一個是真實的數(shù)據(jù)包,另一個是攻擊數(shù)據(jù)包。欺騙攻擊數(shù)據(jù)包為了搶在真實應(yīng)答包之前回復(fù)給Client,它的信息數(shù)據(jù)結(jié)構(gòu)與真實的數(shù)據(jù)包相比十分簡單,只有應(yīng)答域,而不包括授權(quán)域和附加域。因此,可以通過監(jiān)測DNS響應(yīng)包,遵循相應(yīng)的原則和模型算法對這兩種響應(yīng)包進行分辨,從而避免虛假數(shù)據(jù)包的攻擊。
本文對DNS解析及DNS欺騙的原理進行了闡述,對DNS欺騙攻擊的方式、檢測和防范的思路進行了探討,最后給出了一些預(yù)防DNS欺騙的常見方法。相信這些方案的應(yīng)用,可以大大提高DNS的安全性和可靠性。但網(wǎng)絡(luò)的發(fā)展和應(yīng)用日新月異,在實踐中還要不斷緊跟技術(shù)變化的步伐,不斷學(xué)習(xí)和總結(jié)才能有效抵御各種新類型的DNS故障。