胡宗輝, 甘 剛
(成都信息工程大學(xué)信息安全工程學(xué)院,四川成都610225)
計(jì)算機(jī)網(wǎng)絡(luò)從1969年美國(guó)開始建立ARPANet開始,到現(xiàn)在短短幾十年中,計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展和普及可謂是“一日千里”,網(wǎng)絡(luò)發(fā)展的早起,網(wǎng)絡(luò)的使用限制于一個(gè)比較小的范圍內(nèi),對(duì)網(wǎng)絡(luò)的安全缺乏足夠的重視。當(dāng)時(shí)設(shè)計(jì)之初的主要目的是“方便共享資源和交換信息”,而在于保障信息安全方面的設(shè)計(jì)也非常有限。互聯(lián)網(wǎng)自身的特征是方便、自由開放,這就顯示出互聯(lián)網(wǎng)的軟弱性特征,在互聯(lián)網(wǎng)使用過程中受到各方面的襲擊[1]。由于在早起網(wǎng)絡(luò)協(xié)議的開放性和共享性,協(xié)議在設(shè)計(jì)的時(shí)候在安全方面考慮不足,比如:缺乏認(rèn)證機(jī)制和加密機(jī)制,使計(jì)算機(jī)網(wǎng)絡(luò)在設(shè)計(jì)之初就存在一些安全隱患。隨著計(jì)算機(jī)網(wǎng)絡(luò)的爆發(fā)式發(fā)展,網(wǎng)絡(luò)不在被地理位置限制,到現(xiàn)在計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)遍布全世界。由于網(wǎng)絡(luò)開放的環(huán)境,如果要在網(wǎng)絡(luò)上傳遞一些敏感信息的時(shí)候,信息安全就會(huì)受到很大的威脅。因此確保信息在使在網(wǎng)絡(luò)中安全傳輸變得越來越重要[2]。
隨著2013年斯諾登事件的爆發(fā),信息安全已經(jīng)被提升為一個(gè)國(guó)家戰(zhàn)略層的高度。由于網(wǎng)絡(luò)的普及,網(wǎng)絡(luò)安全已經(jīng)成為計(jì)算機(jī)技術(shù)中一個(gè)重要的研究領(lǐng)域。隨著網(wǎng)絡(luò)攻擊的發(fā)展,防火墻技術(shù)也是“日新月異”,我們平時(shí)在訪問網(wǎng)絡(luò)的時(shí)候,一般都會(huì)使用防火墻。一般公司內(nèi)使用的防火墻從大的方面來講分為內(nèi)部防火墻和外部防火墻。當(dāng)訪問網(wǎng)絡(luò)的時(shí)候,一般都會(huì)使用防火墻進(jìn)行網(wǎng)絡(luò)訪問的限制;比如:進(jìn)行端口過濾,IP過濾等限制。
文中探討使用DNS隧道,在DNS隧道中封裝數(shù)據(jù),來打破防火墻的限制[3]。當(dāng)訪問互聯(lián)網(wǎng)的時(shí)候,大多數(shù)的防火墻和網(wǎng)絡(luò)都開放DNS服務(wù)[4];就是利用防火墻對(duì)DNS協(xié)議的信任關(guān)系建立DNS隧道,以達(dá)到數(shù)據(jù)傳輸?shù)哪康摹?/p>
域名系統(tǒng)(Doain Name System,DNS)是一種把計(jì)算機(jī)名解析為對(duì)應(yīng)的IP地址的服務(wù)[5]。

圖1 dns解析示意圖
DNS解析原理:
(1)當(dāng)輸入域名,按下enter鍵訪問網(wǎng)址的時(shí)候,客戶端先向本地的DNS服務(wù)器發(fā)送查詢請(qǐng)求。
(2)本地DNS服務(wù)器收到請(qǐng)求,先查詢緩存是否有該域名的記錄;有的話,就直接返回;沒有就向配置的根DNS發(fā)送請(qǐng)求;根DNS會(huì)先查詢得到頂級(jí)域名DNS服務(wù)器的IP地址,然后返回給本地DNS服務(wù)器[6]。
(3)本地DNS服務(wù)器就根據(jù)返回的IP,繼續(xù)請(qǐng)求頂級(jí)域名服務(wù)器;頂級(jí)域名服務(wù)器也做類似的過程:先查緩存,沒有就返回二級(jí)域名DNS服務(wù)器的地址給本地DNS服務(wù)器。
(4)然后本地域名服務(wù)器就向二級(jí)域名DNS發(fā)送請(qǐng)求,繼續(xù)類似的過程。
(5)直到最后權(quán)威DNS服務(wù)器向本地服務(wù)器返回對(duì)應(yīng)的IP地址。
(6)然后本地DNS服務(wù)器返回給主機(jī),然后主機(jī)在訪問這個(gè)IP地址。
DNS解析就是這樣逐層遞歸的方式,最終把域名的對(duì)應(yīng)的IP地址返回到本機(jī)。
例如:當(dāng)主機(jī)首次訪問www.baidu.com時(shí),就會(huì)按照上邊的遞歸查詢方式進(jìn)行遞歸查詢。
(1)當(dāng)首次訪問的時(shí)候,主機(jī)先向本地DNS服務(wù)器發(fā)送查詢請(qǐng)求。
(2)本地域名服務(wù)器收到請(qǐng)求后,先查詢緩存是否有該域名的記錄;有的話,就直接返回;沒有就向配置的根DNS發(fā)送請(qǐng)求;根DNS先查詢得到頂級(jí)域名DNS服務(wù)器(.com)的IP地址,然后返回給本地DNS服務(wù)器[6]。
(3)本地域名服務(wù)器就根據(jù)返回的IP,繼續(xù)請(qǐng)求頂級(jí)域名服務(wù)器;頂級(jí)域名服務(wù)器也會(huì)做類似的過程:先查緩存,沒有就返回二級(jí)域名DNS服務(wù)器(baidu.com)的地址給本地DNS服務(wù)器。
(4)然后本地DNS服務(wù)器就向二級(jí)域名DNS服務(wù)器發(fā)送請(qǐng)求;二級(jí)域名DNS服務(wù)器就先查詢自己的緩存,發(fā)現(xiàn)有www.baidu.com對(duì)應(yīng)的IP地址;就直接返回給本地DNS服務(wù)器。
(5)本地DNS服務(wù)器把查詢到的IP地址返回給主機(jī)。
(6)主機(jī)獲得了www.baidu.com域名的IP地址,就可以訪問該網(wǎng)站了。
根據(jù)DNS查詢過程,利用專門解析某種類型域名的DNS服務(wù)器,在DNS的查詢過程中建立起DNS隧道。

圖2 dns隧道通信示意圖
假設(shè)運(yùn)行在內(nèi)部主機(jī)上的客戶端,想與外網(wǎng)的DNS服務(wù)器進(jìn)行通信;在內(nèi)部網(wǎng)絡(luò)中存在一個(gè)本地DNS服務(wù)器,所有想上網(wǎng)進(jìn)行域名查詢的主機(jī)都要經(jīng)過這個(gè)本地DNS服務(wù)器;在網(wǎng)絡(luò)邊緣存在一個(gè)防火墻;外網(wǎng)的定制的DNS服務(wù)器相當(dāng)于服務(wù)端,負(fù)責(zé)某種所有定制類型的域名的解析(比如:定制的testuu.com這種類型的域名)。
由于防火墻的限制,一般邊界防火墻都會(huì)限制內(nèi)部網(wǎng)絡(luò)的提供的服務(wù):比如對(duì)ftp服務(wù)的20和21端口過濾,對(duì)telnet服務(wù)的23端口進(jìn)行過濾;而對(duì)從外部網(wǎng)絡(luò)訪問內(nèi)部網(wǎng)絡(luò)可能會(huì)對(duì)IP地址的限制。但是如果內(nèi)部網(wǎng)絡(luò)要上網(wǎng),那么就要使用DNS服務(wù),那么防火墻一般對(duì)DNS服務(wù)是信任的。利用DNS服務(wù)的查詢和遞歸解析的過程,建立起這個(gè)DNS隧道。
過程如下:
(1)首先要注冊(cè)個(gè)域名,比如在美橙域名注冊(cè)機(jī)構(gòu)中注冊(cè)一個(gè)qh.cn的域名,然后設(shè)置qh.cn的域名服務(wù)器的IP地址為自己的主機(jī)IP地址。這樣類似于*.qh.cn域名查詢都會(huì)到自己的主機(jī)中[4]。
(2)配置定制服務(wù)器,在服務(wù)器上設(shè)置監(jiān)聽DNS的53端口,接受DNS請(qǐng)求,并且只解析類似于qh.cn這樣的域名。
(3)運(yùn)行在網(wǎng)絡(luò)內(nèi)部主機(jī)上的客戶端,查詢定制類型的域名*.up.qh.cn(表示上行數(shù)據(jù));由于這個(gè)域名是定制的;在查詢的時(shí)候,本地DNS是查詢不到的;那么根據(jù)上邊的DNS遞歸查詢過程,本地DNS就先通過邊界防火墻,然后從根域名服務(wù)器一層一層的去查詢;最終會(huì)傳遞給定制的DNS;定制DNS通過域名解析,得到這個(gè)域名中存儲(chǔ)的信息。
(4)然后定制DNS,把要返回的信息封裝成DNS報(bào)文*.down.qh.cn(表示下行數(shù)據(jù))返回給內(nèi)部網(wǎng)絡(luò)的客戶端。
(5)這樣通過DNS域名查詢和返回,就建立起DNS隧道了。
如果要把傳輸?shù)臄?shù)據(jù)封裝到DNS隧道中,就要知道DNS協(xié)議數(shù)據(jù)包的結(jié)構(gòu),DNS報(bào)文的基本格式如圖3所示。

圖3 dns報(bào)文格式
在圖3,Header是DNS報(bào)文的報(bào)頭部分。報(bào)頭部分的第一個(gè)字段是ID,表示是DNS每次查詢的時(shí)候分配的一個(gè)16位的標(biāo)識(shí)符;第二個(gè)字段是“標(biāo)識(shí)字段”,由 QR,Opcode,AA,TC,RD,RA,000,Rcode 這些標(biāo)識(shí)符組成。QR是報(bào)文類型標(biāo)志,請(qǐng)求報(bào)文QR=0,應(yīng)答報(bào)文QR=1。Opcode是操作碼標(biāo)志位,主要用于設(shè)置查詢的種類。AA授權(quán)應(yīng)答標(biāo)志位,僅在應(yīng)答報(bào)文中有意義。TC截?cái)鄻?biāo)志位,表示報(bào)文是否被分段。RD期望遞歸標(biāo)志位,在請(qǐng)求報(bào)文中有意義;表示建議域名使用遞歸查詢方法。RA在應(yīng)答報(bào)文中設(shè)置,表示服務(wù)器是否支持遞歸查詢。Rcode是應(yīng)答碼標(biāo)志位,在應(yīng)答報(bào)文中設(shè)置。QDcount表示報(bào)文數(shù)據(jù)部分的查詢消息字段中的問題條數(shù)。ANcount表示報(bào)文數(shù)據(jù)部分應(yīng)答消息字段中的資源記錄數(shù)。NScount表示表示報(bào)文數(shù)據(jù)部分授權(quán)應(yīng)答字段中的名稱服務(wù)器資源記錄數(shù)。ARcount表示報(bào)文數(shù)據(jù)部分附加消息字段中的資源記錄數(shù)。
Query是DNS請(qǐng)求報(bào)文中的請(qǐng)求消息部分,包含QName、Qtype、QClass。QName 表示請(qǐng)求的域名,以ASCII碼表示;Qtype表示查詢的資源記錄類型;QClass表示查詢類別。
Response、Authority、Additional是 DNS 應(yīng)答報(bào)文中顯示所應(yīng)答的記錄信息,這些記錄格式是一樣的。NAME表示記錄對(duì)應(yīng)的域名,與請(qǐng)求報(bào)文中的QName一致;TYPE是記錄類型;CLASS是記錄數(shù)據(jù)的類型;TTL表示該記錄信息緩存的時(shí)間;Rdlength表示Rdata字段的長(zhǎng)度;Rdata表示具體的記錄數(shù)據(jù)。
在RFC1023中規(guī)定:為和現(xiàn)有的域名相互兼容,域名以分隔號(hào)分開,并且各個(gè)分隔號(hào)之間的長(zhǎng)度(labels)小于63個(gè)字符,并且一個(gè)域名的總長(zhǎng)度不能超過255個(gè)字符[7],因此一個(gè)QName最多能夠攜帶200多個(gè)字符;并且還需要對(duì)存放的信息進(jìn)行編碼(base32/base64編碼);比較新的 RFC2181和RFC4343中規(guī)定,域名部分還可以使用二進(jìn)制編碼的方式。
QName的格式如圖4所示。

圖4 QName(請(qǐng)求域名)的格式
由圖4中可以看出域名都是由一系列:域名長(zhǎng)度對(duì)應(yīng)的域名ASCII碼,這種類似的標(biāo)簽(labels)組成。
當(dāng)DNS中出現(xiàn)重復(fù)的域名的時(shí)候,為了減小報(bào)文的長(zhǎng)度,DNS使用一種壓縮方式來壓縮報(bào)文,這種壓縮方式可以消除域名中重復(fù)的報(bào)文;使用這種方式,后邊重復(fù)出現(xiàn)的域名就變成之前重復(fù)出現(xiàn)的域名偏移位置的指針(pointer),以wireshark抓包結(jié)果為例,如圖5所示。

圖5 DNS報(bào)文壓縮的格式
由于DNS壓縮的時(shí)候,把重復(fù)的labels變?yōu)檫@些域名出現(xiàn)的位置相對(duì)于DNS報(bào)文開始的偏移值(pointer)。
labels和pointer的區(qū)別是,由于labels最大長(zhǎng)度為63[8],因此長(zhǎng)度字段的前2bit位一定0;而pointer是由2個(gè)字節(jié)組成,并且前2bits為11,后邊的14bits是偏移值。這樣labels就與偏移指針區(qū)分開來了。
當(dāng)DNS報(bào)文中出現(xiàn)重復(fù)的域名,DNS報(bào)文就使用壓縮方式;在DNS壓縮報(bào)文中可以利用pointer指向的偏移位置,來構(gòu)造松弛空間(松弛空間的作用就是存放要通信的數(shù)據(jù))。

圖6 DNS報(bào)文存儲(chǔ)數(shù)據(jù)原理圖
按照?qǐng)D6的格式,通過操作pointer指針的指向位置,在DNS數(shù)據(jù)包中創(chuàng)建松弛空間,然后把通信的數(shù)據(jù)(Injected data)放到這部分松弛空間中[1];這樣就把數(shù)據(jù)封裝到DNS數(shù)據(jù)包中了,然后在經(jīng)過DNS隧道的傳遞,就能實(shí)現(xiàn)信息的交互。
松弛空間的構(gòu)造過程如下:
(1)先根據(jù)圖5的DNS協(xié)議的報(bào)文格式,構(gòu)造原始DNS請(qǐng)求數(shù)據(jù),格式如圖6上半部分表格的樣子,如下:

(2)然后把原始DNS請(qǐng)求數(shù)據(jù)按照?qǐng)D6中下本部分表格的樣式修改,如下:

(3)這樣按照?qǐng)D6的指針偏移位置就形成了松弛空間。
(4)然后把要傳輸?shù)臄?shù)據(jù)經(jīng)過編碼等變形之后,放到松弛空間中,如下:

(5)這樣就利用DNS隧道的方式實(shí)現(xiàn)了數(shù)據(jù)的傳輸。
在linux下使用C語言實(shí)現(xiàn)
(1)搭建環(huán)境,首先要建立一個(gè)域名服務(wù)器,比如在美橙域名注冊(cè)機(jī)構(gòu)中注冊(cè)一個(gè)定制的的域名,然后設(shè)置這個(gè)域名服務(wù)器的IP地址為自己的主機(jī)IP地址。這樣查詢這個(gè)域名的時(shí)候,最終訪問這個(gè)定制的域名服務(wù)器。
(2)然后利用C語言按照下邊的程序流程圖編寫程序。

圖7 程序?qū)崿F(xiàn)流程

圖8 訪問端
下面對(duì)前面研究所提出的訪問程序的有效性與可行性,配置了一個(gè)虛擬環(huán)境進(jìn)行研究與分析,虛擬環(huán)境為Windows XP、Windows 7,代碼使用C編寫。
通過實(shí)驗(yàn)測(cè)試,服務(wù)端和客戶端成功連接,可以瀏覽目標(biāo)主機(jī)的目錄,進(jìn)行相應(yīng)的訪問操作。結(jié)果如圖2所示。
同時(shí),實(shí)驗(yàn)通過在不同環(huán)境下進(jìn)行測(cè)試,可以成功通過安裝有表1中3種防火墻環(huán)境的內(nèi)網(wǎng)。并且實(shí)現(xiàn)了在XP、WIN7等不同操作系統(tǒng)下的訪問。

表1 穿透內(nèi)網(wǎng)防火墻測(cè)試結(jié)果
主要介紹通過DNS的查詢和應(yīng)答過程建立起DNS隧道,結(jié)合DNS報(bào)文壓縮的格式,通過操作pointer指針來存儲(chǔ)數(shù)據(jù),然后利用防火墻對(duì)DNS的信任關(guān)系;以達(dá)到穿透防火墻進(jìn)行通信的目的。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,相關(guān)研究領(lǐng)域的技術(shù)也在發(fā)生深刻變化。一方面要求提供更高的穩(wěn)定性;另一方面要求提供高的兼容性,為了支持更高的傳輸速率和可靠性,以滿足多種需求,該技術(shù)具有良好的應(yīng)用前景[8]。
[1] 劉西青.淺談?dòng)?jì)算機(jī)網(wǎng)絡(luò)安全問題[J].軟件,2013,34(12):239.
[2] 黃存東.關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)信息安全問題的技術(shù)研究[J].軟件,2011.
[3] Dusi M,Crotti M,Gringoli F,et al.Tunnel hunter:Detecting application-layer tunnels with statistical fingerprinting[J]. Computer Networks.2009.
[4] 谷傳征,王軼駿,薛質(zhì).基于DNS協(xié)議的隱蔽信道研究[J].信息安全與通信保密.2011.
[5] Eastlake D.Domain name system security extensinas[J].RFC 2535,1999.
[6] 李海明,蘇開宇.DNS安全威脅與防護(hù)[J].計(jì)算機(jī)安全.2011.
[7] 王永杰,劉京菊.基于DNS協(xié)議的隱蔽通道原理及性能分析[J].計(jì)算機(jī)工程2014,(7).
[8] 章思宇,鄒福泰,王魯華,等.基于DNS的隱蔽通道流量檢測(cè)[J].通信學(xué)報(bào).2013.
[9] Born K,Gustafson D.Detecting DNS tunnels u-sing character frequency analysis[C].Proceedings of the 9th Annual Security Conference.2010.
[10] 孔政,姜秀柱.DNS欺騙原理及其防御方案[J].計(jì)算機(jī)工程.2010.
[11] 劉曉麗.基于DNS代理的網(wǎng)絡(luò)訪問控制系統(tǒng)的實(shí)現(xiàn)[J].華東科技:學(xué)術(shù)版.2013.
[12] 蔡昭權(quán),王美珍,梅松,等.一種新的基于DNS協(xié)議的IPSec隱蔽通信研究[J].計(jì)算機(jī)應(yīng)用.2008,(7).
[13] 吳其祥,李祖猛,馬華.基于HTTP協(xié)議的隱蔽信道研究[J].信息安全與通信保密.2009.
[14] 史曉敏,劉飛.淺析基于DNS協(xié)議的隱蔽通道及監(jiān)測(cè)技術(shù)[J].保密科學(xué)技術(shù).2011.
[15] 劉靜,裘國(guó)永.基于反向連接、HTTP隧道和共享DNS的防火墻穿透技術(shù)[J].鄭州輕工業(yè)學(xué)院學(xué)報(bào)2007,(10).