王華翔信息工程大學(xué)信息工程學(xué)院 河南 450002
本文根據(jù)對IP數(shù)據(jù)包結(jié)構(gòu)和網(wǎng)絡(luò)傳輸過程的分析,提出一種基于IP生存時間TTL的信息隱藏方法,通過替換原有的TTL值,可以把秘密消息嵌入到數(shù)據(jù)包中。由于IP數(shù)據(jù)包的TTL值在網(wǎng)絡(luò)中是動態(tài)可變的(通過路由器、防火墻等),即在信道中存在噪聲,本文設(shè)計了幾種編碼方法,使之有廣泛的適用范圍并且具有良好的隱蔽性。
IP數(shù)據(jù)報的結(jié)構(gòu)如圖1所示。
圖1 IP數(shù)據(jù)報結(jié)構(gòu)
各部分含義如下:
版本:用于傳輸數(shù)據(jù)的IP版本,大小為4位;
頭部長度:用于規(guī)定報頭長度;
服務(wù)類型:用于設(shè)置數(shù)據(jù)傳輸?shù)膬?yōu)先權(quán)或者優(yōu)先級,其大小為8位;
總長度:指出數(shù)據(jù)報的總長,數(shù)據(jù)報總長=報頭長度+數(shù)據(jù)長度,大小為16位;
標識:用于標識所有的分段,大小為16位;
分段標志:確定一個數(shù)據(jù)報是否可以分段,同時也指出當(dāng)前分段后面是否還有更多分段,大小為3位;
分段偏移量:由目標計算機用于查找分段在整個數(shù)據(jù)報中的位置,大小位13位;
生存時間:設(shè)置數(shù)據(jù)報可以經(jīng)過的最多路由器數(shù)。長度為8位;
協(xié)議:指定用于創(chuàng)建數(shù)據(jù)字段中的數(shù)據(jù)的上層協(xié)議,大小為8位;
校驗和:檢查所傳輸數(shù)據(jù)的完整性,大小為16位;
源地址:源IP地址,字段長度為32位;
目標地址:目標IP地址,字段長度為32位;
選項:上一個必須的字段,字段長度具體取決于所選擇的IP選項;
數(shù)據(jù):包含網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù),IP數(shù)據(jù)報還包括上層協(xié)議的報頭信息;
其中,生存時間(TTL)字段設(shè)置了數(shù)據(jù)報經(jīng)過的最多路由器數(shù)。它指定了數(shù)據(jù)報的生存時間。TTL的初始值由源主機設(shè)置,經(jīng)過一個處理它的路由器,它的值就減 1,當(dāng)該字段為0時,數(shù)據(jù)報就被丟棄。設(shè)置該字段主要是為了防止無法到達的數(shù)據(jù)報永久停留在網(wǎng)絡(luò)中阻塞網(wǎng)絡(luò)。該字段成為隱蔽位置的原因是:①由于網(wǎng)絡(luò)情況和路徑變化頻繁,該TTL值改變不會被認為是異常。②對這個值的操作也可以被認為是合法的,因為對該字段的操作可以認為是用于另外一種用途:在一組擁有相同功能的服務(wù)器中找到距離源主機最近的服務(wù)器。源主機在開始尋找時,首先會發(fā)送TTL=1的請求包到這個地址。請求包在被丟棄前將到達一些路由器。如果沒有回復(fù)信息,那么源主機就在TTL值上加1,繼續(xù)搜索。由于有原因①和②的存在,所以 TTL在網(wǎng)絡(luò)中的取值是變化的,滿足了成為隱蔽信息字段的條件。
本文提出的隱藏算法的主要思想就是將要隱藏的秘密消息編碼替換到原IP報文的TTL值。并提出編碼方法抵抗由于網(wǎng)絡(luò)中正常 TTL變化引起的噪聲,并使調(diào)制后的 TTL值接近自然的TTL值。隱藏與傳輸?shù)脑砣鐖D2所示。
圖2 利用TTL隱藏信息示意圖
在發(fā)送端將秘密消息c經(jīng)過變換得到m,將m放入TTL中,TTL在數(shù)據(jù)包中占一個字節(jié),利用該方法進行隱蔽通信需要考慮通信連路上路由器的數(shù)量N,接收方必須知道該數(shù)據(jù)包在網(wǎng)絡(luò)中共經(jīng)過多少路由器,從而可以將收到的信息m’加上N得到發(fā)送方發(fā)送的數(shù)據(jù)m。在局域網(wǎng)中,由于路由路徑一般固定,所以N一般不會發(fā)生變化,這使得這種簡單的信息隱藏方法可行。為了讓接收方得知IP數(shù)據(jù)包在網(wǎng)絡(luò)上經(jīng)過的路由數(shù)N,本文設(shè)計了訓(xùn)練序列,接收方可以由已知的訓(xùn)練序列規(guī)律求出N值。以下是該隱藏方法的流程。
發(fā)送端:
(1)將待隱藏的信息c預(yù)加密達到m,增加隱秘性。
(2)構(gòu)造雙方預(yù)知的一段序列如長度為l的全1串嵌入到TTL字段中,即將TTL值設(shè)為255作為訓(xùn)練序列和開始標志。
(3)將待發(fā)送的秘密信息m按字節(jié)嵌入到TTL字段中發(fā)送。
接收端:
(1)接收數(shù)據(jù)包,將TTL字段的取值存儲得到m’。
(2)在TTL值序列中尋找訓(xùn)練序列特征,將序列中TTL取值M與255相減,得到數(shù)據(jù)包在網(wǎng)絡(luò)上經(jīng)過的路由器數(shù)N,即255-M = N。
(3)將接收到的TTL值m’加上N得到發(fā)送的秘密消息,即m = N+m’。
(4)將m按照預(yù)共享的密鑰解密得到原始的隱藏信息c。
在局域網(wǎng)中,該方法可以正確的傳輸隱藏信息。但在復(fù)雜的互聯(lián)網(wǎng)中,由于路由的路徑不同,數(shù)據(jù)包所經(jīng)過的路由等設(shè)備的數(shù)目N是動態(tài)變化的,這種方法有極高的誤碼率,這極大的限制了該方法的適用范圍,并且由于 m直接嵌入TTL中,使隱藏數(shù)據(jù)包TTL值的統(tǒng)計特性與自然的統(tǒng)計特征相差巨大,容易被檢測和消除。對于這個問題,本文提出以下幾種方法。
(1)采用兩個不同的TTL值,這兩個值之間的差要比較大,它們分別代表二進制數(shù)0和1。這樣的話,即使經(jīng)過的路由器數(shù)量對方不知道,對方也可以根據(jù)接收到的數(shù)值的大小來判斷,這樣就提高了系統(tǒng)的穩(wěn)定性和隱蔽性。
(2)采用兩個不同的TTL值,這兩個值之間的差比較小,分別代表二進制數(shù)0和1。定義一個計數(shù)器L,發(fā)送0或1是都連續(xù)發(fā)送L次,接收方收到序列后可以根據(jù)收到的重復(fù)數(shù)值來確定原信息,這樣的TTL值變化較小,更符合一般的TTL變化規(guī)律。為進一步加強隱蔽性,L可以由一個帶密鑰的函數(shù)決定,使之動態(tài)變化,這樣即使攻擊者發(fā)現(xiàn)了隱蔽信道的存在,由于沒有密鑰也很難恢復(fù)秘密信息。
(3)采用擴頻編碼。將待發(fā)送信息m用擴頻編碼調(diào)制,如長度為L的Walsh-Hadamard碼,使每一比特都調(diào)制成一個值為±1的碼序列 C=(C1,C2,……,CL),用預(yù)設(shè)的 TTL值T與C相加得到一個t序列t=(T+C1,T+C2,……,T+CL),再將t序列嵌入到TTL中發(fā)送給接收方。由于W-H碼的均值為0,接收方只要分段計算收到的TTL值的均值就可以得到估計的路由數(shù)N’,把接收到的t’序列減去N’,就可以得到序列C’,由于擴頻編碼的特性,用相應(yīng)的W-H碼即可解擴出原有的信息m。如果攻擊者如果沒有相應(yīng)的碼字,根本無法察覺隱藏信息的存在。這種方法也適用于當(dāng)網(wǎng)絡(luò)發(fā)生較大改變時的情形,由于 N’是分段計算的,當(dāng)網(wǎng)絡(luò)拓撲突然發(fā)生較大改變時,該方法可以自適應(yīng)的計算出當(dāng)前網(wǎng)絡(luò)環(huán)境下的N值。
采用這三種編碼方法的流程與前面提到的簡單的基于TTL的信息隱藏方法大致相同,增加了編碼的步驟以對抗網(wǎng)絡(luò)上的噪聲提高隱蔽性,但不需要訓(xùn)練序列的幫助來獲得N值了。
在確定的發(fā)送和接受端之間,路由的路徑一般變化比較緩慢,即N在大多數(shù)時間內(nèi)都是確定值,故以上幾種方法在理論上都是可行的。本文通過Winpcap編程實驗,在局域網(wǎng)及城域網(wǎng)中以上三種方法均能正確的解析出隱藏信息。
信息隱藏算法的性能一般可以從隱蔽性、魯棒性和信道容量幾方面來考慮。
(1)隱蔽性
隱蔽信道的隱蔽性就是要求攜密數(shù)據(jù)和普通數(shù)據(jù)類似,不引起懷疑,如果能夠很容易的被檢測出來隱藏也就失去了意義。簡單的基于TTL的信息隱藏由于使用的一般安全網(wǎng)絡(luò)設(shè)備不關(guān)注的TTL值來隱藏消息,隱蔽性是比較高的,但利用基于統(tǒng)計特性的檢測方法還是可以被發(fā)現(xiàn)的。正常的網(wǎng)絡(luò)數(shù)據(jù)包中TTL的取值變化不大,隨不同的網(wǎng)絡(luò)環(huán)境其統(tǒng)計特性也不同。由實際從網(wǎng)絡(luò)截取的數(shù)據(jù)包中統(tǒng)計分析得出,在局域網(wǎng)中,由于路由路徑基本不變,TTL值一般也是不變的;在一個較復(fù)雜網(wǎng)絡(luò)網(wǎng)關(guān)內(nèi)外間通信時,由于中間一般經(jīng)過防火墻、負載均衡等設(shè)備,其TTL取值一般在某一取值附近波動;在更大距離的互聯(lián)網(wǎng)中,TTL的取值也呈現(xiàn)了在一定值附近變化的特點。由此可見,自然的IP數(shù)據(jù)包中TTL取值是符合一定規(guī)律的,針對這種規(guī)律,分布特點設(shè)置合理的閾值,可以檢測出簡單的基于TTL的隱蔽信道。簡單的將秘密信息直接替換TTL值的方法在局域網(wǎng)中是可行的,但由于其TTL的取值分布規(guī)律就是信源信息的分布規(guī)律,與合法的IP數(shù)據(jù)包TTL取值相差很大,很容易被檢測出來,隱蔽性不夠好。本文提到的第一種編碼方法用相差較大的兩個TTL值來映射秘密消息,考慮到的是正確的解碼,而沒有考慮TTL取值的分布,故隱蔽性相對較差。第二種編碼方法使用重復(fù)序列代替單獨的碼字,由于發(fā)送的TTL值差別很小,類似于正常傳輸?shù)腎P包中的TTL取值,故具有很強的隱蔽性。第三種編碼方法利用了擴頻編碼的方法,TTL的取值僅在極小的±1范圍內(nèi)變化,統(tǒng)計特性上可以看作是TTL信道中的隨機噪聲,故此方法具有很強的隱蔽性。
(2)魯棒性
魯棒性描述算法抵抗蓄意或非蓄意攻擊的能力或程度。蓄意攻擊包括被動和主動攻擊。被動攻擊指監(jiān)測者分析檢查所有數(shù)據(jù),嘗試發(fā)現(xiàn)可能存在的隱蔽通信,其最高目標是竊聽、截斷或篡改秘密信息。主動攻擊則不關(guān)心隱蔽通信是否存在,其目的是:在不破壞數(shù)據(jù)包功能的前提下,盡可能地干擾可能存在的秘密信息的提取。非蓄意攻擊指傳輸路徑中,數(shù)據(jù)包可能遭遇的操作和處理,例如:過濾、篩選、地址翻譯等。實用算法產(chǎn)生的攜密數(shù)據(jù)包,經(jīng)過非蓄意攻擊后,大部分秘密信息能夠保留。
簡單的信息直接嵌入TTL的方法魯棒性很差,傳輸過程中任何噪聲都會造成接收方誤碼率的急劇增高,這種方法僅適用于無噪聲信道,比如局域網(wǎng)。本文提到的第一種編碼方法其魯棒性取決于比特0和1對應(yīng)TTL取值的差ΔT,若信道本身的TTL變化值大于ΔT,就會造成誤碼。后兩種編碼方法的魯棒性取決于設(shè)計的碼長L,對于第二種方法,只要在L長的序列中誤碼的個數(shù)不超過L/2個,接收端就可以正確的還原秘密信息。對于第三種方法,由于引入了擴頻增益,魯棒性更好。
(3)信道容量
容量指隱藏的秘密比特數(shù)。從保密通信的角度,帶寬或傳輸速率能更好地刻畫隱藏算法的容量特性。基于此種隱蔽信道的特點,我們定義每個數(shù)據(jù)包隱藏的比特數(shù)bpp來定義該隱蔽信道的容量。容易得知,第一種編碼方法的信道容量為1bpp,第二和第三種方法的信道容量為1/L bpp。隱藏效率比較低,后兩種編碼方法通過降低信道容量的方法獲得隱蔽性和魯棒性的提升。當(dāng)然,也可以對信道容量進行改進,引入多進制編碼來提高隱藏效率,但相應(yīng)的會降低信道的隱蔽性。如簡單的信息直接嵌入TTL的方法,信道容量達到了每數(shù)據(jù)包隱藏1字節(jié)的,但其隱蔽性和魯棒性都很弱。
總體來說,基于IP數(shù)據(jù)包TTL構(gòu)造的隱蔽信道的帶寬很小,這有利于提高信道的隱蔽性,并且由于網(wǎng)絡(luò)流量巨大,即使在低帶寬情況下也可以傳輸大量的隱蔽信息。
基于網(wǎng)絡(luò)協(xié)議的信息隱藏是在信道中隱藏信息,相對于基于信源的隱藏通常具有更高的安全性。本文通過對IP包的封裝結(jié)構(gòu)和通信過程的分析,指出IP包的TTL值隱藏信息的可能性,并提出了基于IP包生存時間的信息隱藏方法。理論分析和實踐表明,該方法具有實際應(yīng)用的可行性和較好的安全性。
[1]Girling, N. and C., Covert Channels in LAN's. IEEE Transactions on Software Engineering.1987.
[2]萬宏輝.基于TCP/IP的信息隱藏.湘潭師范學(xué)院學(xué)報:自然科學(xué)版.2007.
[3]楊智丹等.基于IP報頭選項的網(wǎng)絡(luò)隱蔽通道技術(shù).計算機工程.2009.
[4]楊智丹,劉克勝與李麗.IPv6中的網(wǎng)絡(luò)隱蔽通道技術(shù)研究.東南大學(xué)學(xué)報(自然科學(xué)版).2007.