高方華
摘 要 網(wǎng)絡(luò)中的隱蔽通道技術(shù)被廣泛應(yīng)用于網(wǎng)絡(luò)攻擊,已成為影響網(wǎng)絡(luò)安全的重要來(lái)源之一。TCP/IP模型中的網(wǎng)絡(luò)層、傳輸層、應(yīng)用層,甚至物理層上的很多協(xié)議都可以用來(lái)構(gòu)建網(wǎng)絡(luò)隱蔽通道,加上網(wǎng)絡(luò)隱蔽通道的隱蔽性,使得許多入侵檢測(cè)系統(tǒng)很難檢測(cè)到該通道的存在。本文在分析網(wǎng)絡(luò)隱蔽通道特性及常見(jiàn)建立方法的基礎(chǔ)上,提出了使用ICMP協(xié)議建立隱蔽通道的方法,并給出了具體的設(shè)計(jì)過(guò)程。
關(guān)鍵詞 隱蔽通道 網(wǎng)絡(luò)通信 ICMP協(xié)議
中圖分類號(hào):TP393.08 文獻(xiàn)標(biāo)識(shí)碼:A
0引言
網(wǎng)絡(luò)中的信息資源給人們的生活和工作帶來(lái)了極大的便利,而其安全問(wèn)題也越來(lái)越受到廣泛的關(guān)注。在進(jìn)行網(wǎng)絡(luò)攻擊時(shí),由于網(wǎng)絡(luò)監(jiān)控系統(tǒng)的應(yīng)用,建立一條新的鏈接用于數(shù)據(jù)竊取是極不現(xiàn)實(shí)的,因此大部分網(wǎng)絡(luò)攻擊者采用了隱蔽通道技術(shù)。在正常網(wǎng)絡(luò)通信信道中建立可能的隱蔽通道,用于傳遞隱蔽信息,甚至攜帶病毒,利用其隱蔽性能夠一定程度上繞過(guò)穿透防火墻,并躲避入侵檢測(cè)系統(tǒng)的檢測(cè)。
網(wǎng)絡(luò)隱蔽通道對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)安全,甚至硬件都產(chǎn)生威脅。因此,我們必須從本質(zhì)上分析網(wǎng)絡(luò)隱蔽通道的特性及其構(gòu)建原理,以減少甚至杜絕其帶來(lái)的危害。
1網(wǎng)絡(luò)隱蔽通道技術(shù)概述
1.1隱蔽通道的概念
相對(duì)于網(wǎng)絡(luò)隱蔽通道而言,傳統(tǒng)上把隱蔽通道定義限定在系統(tǒng)內(nèi)部,前提是兩個(gè)通信實(shí)體間必須要有共享資源,才能夠建立隱蔽通道。隨著網(wǎng)絡(luò)與通信技術(shù)的發(fā)展,這種傳統(tǒng)的定義呈現(xiàn)出狹隘的一面。為更好的描述網(wǎng)絡(luò)隱蔽通道的概念,我們把整個(gè)網(wǎng)絡(luò)看做是一個(gè)由通信設(shè)備和通信鏈路組成的計(jì)算機(jī)系統(tǒng),網(wǎng)絡(luò)中任何設(shè)備和數(shù)據(jù)信息都是這個(gè)系統(tǒng)的一部分資源。這樣,就可以將隱蔽通道的概念擴(kuò)展到網(wǎng)絡(luò)中。為不失廣泛性,任何未經(jīng)允許或者通過(guò)非正常通信手段在網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)信息傳遞的通道都可被稱為網(wǎng)絡(luò)隱蔽通道。
網(wǎng)絡(luò)隱蔽通道是一個(gè)牽扯到數(shù)據(jù)通信、網(wǎng)絡(luò)安全及信息計(jì)算的復(fù)雜領(lǐng)域,其研究已成為網(wǎng)絡(luò)安全領(lǐng)域中熱點(diǎn)之一。在網(wǎng)絡(luò)隱蔽通道中,數(shù)據(jù)通過(guò)信息隱藏或者改寫(xiě)的方式隱蔽在所傳遞的報(bào)文中,而報(bào)文的未用字段、填充字段以及報(bào)文收發(fā)的時(shí)間特性等都可被作為信息的隱蔽處。
1.2網(wǎng)絡(luò)隱蔽通道構(gòu)建的常見(jiàn)方法
網(wǎng)絡(luò)隱蔽通道的構(gòu)建主要是利用網(wǎng)絡(luò)協(xié)議漏洞或者報(bào)文的時(shí)間特性來(lái)建立,其常見(jiàn)方法如下:
利用未用或保留字段建立隱蔽通道:由于網(wǎng)絡(luò)檢測(cè)系統(tǒng)一般不會(huì)對(duì)保留字段和未用字段進(jìn)行檢查,因此網(wǎng)絡(luò)攻擊者可將要傳遞的信息隱蔽在報(bào)文中未用的字段或者保留字段中,例如:IP報(bào)頭的TOS字段和DF字段均可用于隱蔽信息的傳輸。
利用擴(kuò)展和填充字段建立隱蔽通道:由于大部分網(wǎng)絡(luò)協(xié)議都支持對(duì)報(bào)文的擴(kuò)展,以滿足網(wǎng)絡(luò)通信中的特殊需求,而擴(kuò)展方式卻很少有明確的定義。因此,網(wǎng)絡(luò)攻擊者可以對(duì)某協(xié)議報(bào)文進(jìn)行自行擴(kuò)展,將信息作為填充內(nèi)容隱蔽到填充字段中,從而建立網(wǎng)絡(luò)隱蔽通道。
在協(xié)議規(guī)范允許下,對(duì)報(bào)文相關(guān)字段或者負(fù)載大小進(jìn)行調(diào)制來(lái)隱蔽信息的傳輸,以此來(lái)建立網(wǎng)絡(luò)隱蔽通道。
利用報(bào)文的收發(fā)時(shí)間特性,通過(guò)調(diào)整正常數(shù)據(jù)包的發(fā)送接收時(shí)間來(lái)傳遞隱蔽信息,從而建立網(wǎng)絡(luò)隱蔽通道。
其他方式建立隱蔽通道:例如,利用網(wǎng)絡(luò)沖突檢測(cè)機(jī)制或無(wú)線局域網(wǎng)的Traceback機(jī)制將信息隱蔽其中,這也是建立網(wǎng)絡(luò)隱蔽通道的方法。
2基于ICMP協(xié)議的網(wǎng)絡(luò)隱蔽通道實(shí)現(xiàn)
2.1利用Ping命令建立網(wǎng)絡(luò)隱蔽通道
ICMP協(xié)議是網(wǎng)絡(luò)中用于檢測(cè)網(wǎng)絡(luò)運(yùn)行狀況的一種重要手段。ICMP協(xié)議通過(guò)發(fā)送查詢請(qǐng)求、收發(fā)應(yīng)答包的的形式來(lái)對(duì)網(wǎng)絡(luò)報(bào)文進(jìn)行響應(yīng)。Ping命令常用于檢測(cè)網(wǎng)絡(luò)是否連通,通常利用ICMP協(xié)議來(lái)實(shí)現(xiàn),其工作示意見(jiàn)圖1。
HOS A(源主機(jī))向HOST B(目標(biāo)主機(jī))發(fā)送ICMP_ECHO請(qǐng)求命令時(shí),在ICMP數(shù)據(jù)報(bào)頭的負(fù)載部分(數(shù)據(jù)選項(xiàng)域)中,通過(guò)添加一些數(shù)據(jù)來(lái)反映網(wǎng)絡(luò)的當(dāng)前狀況,例如,網(wǎng)絡(luò)延時(shí)、網(wǎng)關(guān)地址等。當(dāng)HOST B收到ICMP_ECHO命令請(qǐng)求后,返回ICMP RCHO REPLY應(yīng)答命令,而HOST A請(qǐng)求數(shù)據(jù)包中的負(fù)載數(shù)據(jù)被原封不動(dòng)的返回。通常情況下,防火墻和網(wǎng)絡(luò)檢測(cè)系統(tǒng)都不會(huì)檢查ping命令數(shù)據(jù)包中的負(fù)載部分內(nèi)容,網(wǎng)絡(luò)攻擊者可以輕易的將要發(fā)送的數(shù)據(jù)信息隱蔽在其中,從而建立了一條隱蔽的通道。
2.2 ICMP隱蔽通道的實(shí)現(xiàn)
筆者在Windows系統(tǒng)下,采用C++環(huán)境實(shí)現(xiàn)基于ICMP協(xié)議的網(wǎng)絡(luò)隱蔽通道的建立。文中要實(shí)現(xiàn)基于ICMP協(xié)議的網(wǎng)絡(luò)隱蔽通道,首先要選擇Raw Socket類型,并指明采用的是ICMP協(xié)議;其次,在構(gòu)造ICMP發(fā)送或應(yīng)答數(shù)據(jù)包前要進(jìn)行準(zhǔn)確計(jì)算校驗(yàn)和,以保證網(wǎng)絡(luò)傳輸中數(shù)據(jù)的準(zhǔn)確性。Imcp_hdr結(jié)構(gòu)是本設(shè)計(jì)采用的數(shù)據(jù)結(jié)構(gòu),與建立網(wǎng)絡(luò)隱蔽通道有著密切的關(guān)系,下面對(duì)該結(jié)構(gòu)中的幾個(gè)域分量做出說(shuō)明:(1) Type域分量用于指明ICMP報(bào)文的類型,其域值決定了其余域分量中的數(shù)據(jù)格式。(2) Code域分量用于對(duì)type域分量做進(jìn)一步的說(shuō)明。(3) Checksum域分量表示校驗(yàn)和,在本文設(shè)計(jì)中,該域分量初始值為0,而這些初始值在網(wǎng)絡(luò)數(shù)據(jù)傳輸前會(huì)被校驗(yàn)碼取代。(4) Echo域分量用于表示ICMP數(shù)據(jù)包中ID域的內(nèi)容。在建立網(wǎng)絡(luò)隱蔽通道的過(guò)程中,收發(fā)雙方事先對(duì)ID域的值進(jìn)行約定,若一方主機(jī)接收到的ICMP數(shù)據(jù)包中ID域值不是事先約定值,則表明這個(gè)ICMP報(bào)文不是來(lái)自于構(gòu)建的網(wǎng)絡(luò)隱蔽通道。
根據(jù)上述定義和說(shuō)明,構(gòu)造ICMP報(bào)文的Imcp_hdr數(shù)據(jù)結(jié)構(gòu),并對(duì)數(shù)據(jù)包中的負(fù)載域進(jìn)行數(shù)據(jù)填充。然后采用動(dòng)態(tài)加密算法的對(duì)負(fù)載域中的數(shù)據(jù)進(jìn)行加密,加密算法如下:
AnsiString rs; int i,l; unsigned char c,sc;
l=s.Length(); rs="";endprint
for(i=0;i { sc=char(0x1a+i%3); c=s.c_str()[i]; c=c^sc; rs=rs+char(c);} return rs; 把經(jīng)過(guò)動(dòng)態(tài)加密算法加密后的隱蔽到ICMP數(shù)據(jù)報(bào)中的負(fù)載部分,以建立網(wǎng)絡(luò)隱蔽通道,建立過(guò)程代碼如下: void Fill_ICMP_Data(char*pICMPData,int nDataSize) //填充隱蔽數(shù)據(jù) { ICMPHEADER*pICMPHdr; Char*pDataPart; pICMPHdr=(ICMPHEADER*)pICMPData; pICMPHdr->i_type=ICMP_ECHO; pICMPHdr->i_code=0; pICMPHdr->i_id=(USHORT)GetCurrentProcessId(); pICMPHdr->i_seq=0; pDataPart=pICMPData+sizeof(ICMPHEADER); char*s1=Edit5->Text.c_str(); memcpy(pDataPart,s1,nDataSize-sizeof(ICMPHEADER)); } 在經(jīng)過(guò)構(gòu)造ICMP報(bào)文數(shù)據(jù)結(jié)構(gòu)、動(dòng)態(tài)加密數(shù)據(jù)、在ICMP負(fù)載部分隱蔽數(shù)據(jù)等過(guò)程后,還需要進(jìn)行初始化、建立連接、傳輸隱蔽數(shù)據(jù)、斷開(kāi)連接等過(guò)程,在此不再一一贅述。 2.3網(wǎng)絡(luò)隱蔽通道傳輸實(shí)例分析 經(jīng)過(guò)上述設(shè)計(jì),建立了基于ICMP協(xié)議的網(wǎng)絡(luò)隱蔽通道。運(yùn)行本文程序,并使用網(wǎng)絡(luò)嗅探器Tcpdump對(duì)構(gòu)建的網(wǎng)絡(luò)隱蔽通道中傳輸?shù)臄?shù)據(jù)包進(jìn)行監(jiān)測(cè),抓取到的一個(gè)ICMP數(shù)據(jù)包的內(nèi)容如圖2所示: 對(duì)圖2中的ICMP數(shù)據(jù)包進(jìn)行分析可知:(1)“08”為ICMP報(bào)文的類型type;(2)“00”為ICMP報(bào)文的code域值;(3)“52 19”為ICMP數(shù)報(bào)文的Checksum域值;(4)“98 04”為ICMP報(bào)文的ID標(biāo)識(shí);(5)“09 00”為ICMP報(bào)文序列號(hào);(6)“bf 99 9d 00”為ICMP報(bào)文的時(shí)間戳;(7)“79 74 71 6a 6e 68 7f 69 6f 79 72 79 74 78 79 2b”為ICMP報(bào)文的負(fù)載域填充數(shù)據(jù)內(nèi)容。 在上述分析中,結(jié)果(7)為經(jīng)過(guò)動(dòng)態(tài)加密算法加密后的數(shù)據(jù),即隱蔽通道傳輸?shù)碾[蔽數(shù)據(jù)。由3.2節(jié)給出的動(dòng)態(tài)加密算法可知,隱蔽數(shù)據(jù)在加密前的原始字符串為“computerscience1”。由于筆者設(shè)計(jì)的基于ICMP協(xié)議的網(wǎng)絡(luò)隱蔽通道,是在自己組建的虛擬網(wǎng)絡(luò)中實(shí)現(xiàn)的,且未考慮防火墻的影響,因此,文中方法在實(shí)際網(wǎng)絡(luò)部署環(huán)境下的實(shí)現(xiàn)與應(yīng)用還需進(jìn)一步探討。 3結(jié)語(yǔ) 網(wǎng)絡(luò)隱蔽通道已成為影響網(wǎng)絡(luò)安全的主要來(lái)源之一,因此,我們要了解網(wǎng)絡(luò)隱蔽通道技術(shù)的概念,并掌握常見(jiàn)的網(wǎng)絡(luò)隱蔽通道建立方法。由于大部分網(wǎng)絡(luò)檢測(cè)系統(tǒng)認(rèn)為基于ICMP協(xié)議的數(shù)據(jù)是良性數(shù)據(jù)流,不檢測(cè)ICMP數(shù)據(jù)包中的數(shù)據(jù)域內(nèi)容,因此網(wǎng)絡(luò)攻擊者很容易將生成的任意信息隱蔽到ICMP報(bào)文中的有效負(fù)載中。基于此,本文給出了基于ICMP協(xié)議的網(wǎng)絡(luò)隱蔽通道實(shí)現(xiàn)過(guò)程,并對(duì)建立的網(wǎng)絡(luò)隱蔽通道傳輸實(shí)例進(jìn)行了分析。