劉 莉 徐芹寶 王昌達
(江蘇大學計算機科學與通信工程學院 鎮(zhèn)江 212013)
最初在多級安全系統(tǒng)中,隱蔽信道(Covert Channel)是指可信系統(tǒng)中的高安全級用戶,通過違反系統(tǒng)安全策略的方式將信息泄露給未授權用戶的一種通信機制[1]。由于隱蔽通道所使用的通信媒介并不是為面上信道(Overt Channel)所設計的,因此隱蔽通道的容量遠遠小于其面上信道的容量。在包交換網(wǎng)絡中,根據(jù)應用的通信介質(zhì),隱蔽信道大致可分為隱蔽存儲信道(Covert Storage Channel,CSC)和 隱 蔽 時 間 信 道(Covert Timing Channel,CTC)。其中,CSC 使用數(shù)據(jù)包中約定的共享存儲位置作為介質(zhì)來傳遞隱蔽信息,如包頭中的冗余位等;CTC使用與數(shù)據(jù)包傳輸相關的時間性介質(zhì)作為通信介質(zhì),例如數(shù)據(jù)包發(fā)送頻率、數(shù)據(jù)包間延遲等。一般地,可以通過流量歸一化(Traffic Normalization)方法來消除CSC[2],但CTC 至今無法被根除。目前有多種CTC的實現(xiàn)方法,如IPCTC[3]、JitterBug[4]、TRCTC[5]和MBCTC[6]等。目前對CTC的研究多集中在信道容量的擴容、信道的隱蔽性等方面。為了提高隱蔽信道的容量,本文提出了以偽包標識排列和數(shù)據(jù)包大小作為通信介質(zhì)的二維隱蔽時間信道2dCTC,顯著提高了現(xiàn)有CTC的通信容量。本文的主要貢獻如下。
1)提出了一種以偽包標識排列和數(shù)據(jù)包的大小變化為通信介質(zhì)的二維隱蔽時間信道2dCTC。實驗結(jié)果表明,2dCTC比現(xiàn)有的一維CTC具有更高的信道容量。
2)設計了基于康托展開式2dCTC 編碼與解碼算法,提高了2dCTC的自動編碼與解碼效率。
一般地,CTC 可分為以下3 類[8]:1)時隙信道:使用在一個時隙內(nèi)傳輸?shù)陌臄?shù)量變化來對消息進行編碼/解碼;2)包間延遲信道:使用數(shù)據(jù)包傳輸?shù)陌g延遲(Inter Packet Delay,IPD)變化對消息進行編碼/解碼;3)排序信道:使用傳輸中數(shù)據(jù)包的ID順序變化對消息進行編碼/解碼。
在第一類中,Cabuk 等[3]提出了第一個基于IP協(xié)議的簡單時隙時間信道(Simple Time Covert channel,STC),該方法的主要思想是根據(jù)給定時隙內(nèi)是否存在數(shù)據(jù)包來編碼和解碼二進制數(shù)1 或0。然而,這種方法需要發(fā)送方和接收方之間的時鐘同步,而網(wǎng)絡時鐘精準同步相對困難。王昌達等[9]提出了利用在固定時間窗口內(nèi)發(fā)送不同數(shù)量的IP 數(shù)據(jù)包傳送多位比特,提高了傳輸容量,該方法同時給出了比特序列塊的定界方法,因此無需時鐘同步。
在第二類中,Berk等[10]提出了以相鄰兩個數(shù)據(jù)包傳輸之間的包間延遲為介質(zhì)嵌入信息。在文獻[7]中,通過模擬網(wǎng)絡正常流量流的包間延遲構建CTC,由于此方法使得數(shù)據(jù)包傳輸?shù)慕y(tǒng)計特性與正常數(shù)據(jù)包傳輸?shù)慕y(tǒng)計特性幾乎相同,所以構建的CTC具有更好的隱蔽性。Wu等[11]在CTC中引入了哈夫曼編碼,在該方法中,發(fā)送者使用哈夫曼編碼將隱藏消息編碼到相鄰數(shù)據(jù)包之間的時間間隔,該方法提高了信道的隱蔽性和容量。
在第三類中,El-Atawy等[12]提出了一種利用傳輸數(shù)據(jù)包ID 的排序作為隱蔽通信介質(zhì)的技術。通過操控發(fā)送方模擬自然發(fā)生的數(shù)據(jù)包重新排序現(xiàn)象傳遞隱蔽信息,提高了CTC 的魯棒性和隱蔽性性。Zhang等[13]設計了可變碼長方案構造分組重組隱蔽定時信道。在該方法中,通過改變RTCP(Real Time Transport Control Protocol)數(shù)據(jù)包位置調(diào)整相鄰兩個RTCP 數(shù)據(jù)包內(nèi)數(shù)據(jù)包的個數(shù),來表示隱蔽消息,并且使用了格雷碼提高信道的魯棒性和不可檢測性。
綜上,已知的CTC 一般只使用一種通信介質(zhì),所以它們是一維CTC。為了大幅度提高CTC 的容量,本文首先提出了多維度CTC 的概念,然后作為應用的實例,構建了一個二維的時間信道2dCTC,最后理論分析與實驗驗證了2dCTC 具有高通信容量等優(yōu)點。
本文提出的2dCTC,采用“數(shù)據(jù)包的偽包標識排列”和“數(shù)據(jù)包大小變化”相結(jié)合的二維通信介質(zhì)對隱蔽信息進行編碼。為便于理解,在討論2dCTC方案之前,我們分別給出在上述兩個維度上進行編碼和解碼過程。
在包交換網(wǎng)絡中,數(shù)據(jù)包在傳輸中的錯序率大約在0.1%到3%之間[14],這使得參與構建時間信道的數(shù)據(jù)包數(shù)量較少,其容量也相應較小。因此我們提出使用偽包標識,它是附加在數(shù)據(jù)包上取值唯一的數(shù)據(jù)塊。與駐留在報頭中的包ID 不同,偽包標識位于數(shù)據(jù)包的數(shù)據(jù)區(qū)域(payload area)中。圖1給出了基于數(shù)據(jù)包偽包標識排序的信息編/解碼的工作原理。
圖1 基于數(shù)據(jù)包偽包標識排序的信息編/解碼的工作原理
首先,將待傳輸?shù)南⒎譃镹個二進制塊,即{s1,s2,s3…si…sN},每個si包含L位二進制數(shù)。我們假設每一個si包含8位二進制數(shù),每一個si對應十進制數(shù)為Si;{sidi|sidn∈R,i=1,2,3…n} 是數(shù)據(jù)包偽包標識的集合。則基于偽包標識排序的信息編/解碼的主要步驟如下。
1)根據(jù)每個si包含的二進制的位數(shù)以及約束條件2L≤n!,計算編碼表示每個si需要的數(shù)據(jù)包的個數(shù)n。因為,每個si包含8位,所以n=6。
2)根據(jù)Si的值,通過康托展開式[15]的逆運算得到相應的偽包標識排列{sid1,sid2…sidn} ,康托展開式的計算公式如下,見式(1):
其中,Si表示康托值,a[i] 為整數(shù),且0 ≤a[i] ≤i,0 ≤i≤n,表示當前元素在未出現(xiàn)元素中的序位。
使用康托展開運算代替映射表,分析其算法復雜性可知,當傳輸n個數(shù)據(jù)數(shù)時,運用康拓展開的逆運算的時間復雜度為O(n),而運用映射表的復雜度為O(nlgn)。由此可見,運用康拓展開式以及康拓展開式的逆運算在計算速度上優(yōu)勢明顯,確保了編碼與解碼的效率。
3)按照偽包標識排列中的順序?qū)伟鼧俗R依次添加到數(shù)據(jù)包的有效負載區(qū)域,并發(fā)送數(shù)據(jù)包流。
4)在CTC的接收端,根據(jù)數(shù)據(jù)包的到達時間排列數(shù)據(jù)包的偽包標識,然后通過式(1)計算Si,從而解碼出隱蔽信息。
為了更好地理解本節(jié)中的方法,在此提供一個示例。若si為00001011(對應的十進制數(shù)Si等于11);偽包標識為{1 ,2,3,4,5,6} ,根據(jù)康托展開式的逆運算計算得到偽包標識排列:11÷5!=0…11,因此a[6 ] =0,sid1=1;11÷4!=0…11,所以a[5 ] =0,sid2=2;按照相同的方法計算可得,a[4 ] =1,sid3=4,a[3 ] =2,sid4=6,a[2 ] =1,sid5=5,sid6=3 。 因此,偽包標識的排列為{1 ,2,4,6,5,3} 。然后將{1,2,4,6,5,3} 依次添加到n個數(shù)據(jù)包的數(shù)據(jù)區(qū)域內(nèi),并以數(shù)據(jù)包流的方式發(fā)送。在接收端獲取每一個數(shù)據(jù)包中的偽包標識,得到偽包標識的排列{1,2,4,6,5,3} ,然后通過康托展開式計算可得Si=11,si=00001011。
使用數(shù)據(jù)包大小的變化對信息進行編碼和解碼,不易受數(shù)據(jù)包傳輸延遲、抖動等信道噪聲的影響。圖2 給出了基于數(shù)據(jù)包大小變化的消息編/解碼方法的工作原理,主要步驟如下。
圖2 基于數(shù)據(jù)包大小變化的消息編/解碼方法的工作原理
1)通過公式M=HgB,R( )X統(tǒng)計數(shù)據(jù)包大小,其中,M為各組數(shù)據(jù)包個數(shù);HgB,R是一個統(tǒng)計函數(shù),計算每個分組中的數(shù)據(jù)包的個數(shù);B為組距離,R表示要統(tǒng)計的數(shù)據(jù)包大小范圍;X表示樣本數(shù)據(jù)序列。
2)構建表示數(shù)據(jù)包大小與二進制塊之間關系的映射表。如果一個數(shù)據(jù)包大小可以表示α位二進制數(shù),則將通過(1)統(tǒng)計出的數(shù)據(jù)包個數(shù)較多的區(qū)域劃分為2α個區(qū)間。
3)根據(jù)映射表及si,發(fā)送相應大小區(qū)間內(nèi)的數(shù)據(jù)包。
4)接收端得到相應的數(shù)據(jù)包進行解碼時,首先獲取數(shù)據(jù)包的大小,根據(jù)數(shù)據(jù)包的大小通過查找映射表得到相應的信息。
為了更好地理解本節(jié)中的方法,此處提供一個示例。假設{li|li∈R,i=1,2…n} 表示數(shù)據(jù)包的大小,其中,li表示第i個數(shù)據(jù)包的大小,當數(shù)據(jù)包大小li≥l時,表示二進制中的“1”,否則表示“0”;si為00001011,數(shù)據(jù)包大小為l1<l3<l4<l5<l6<l7<l<l8<l2<l9,則數(shù)據(jù)包發(fā)送的順序為首先發(fā)送第1個數(shù)據(jù)包,然后依次是第3,4,5,8,6,2,9 個數(shù)據(jù)包。接收端得到需要的數(shù)據(jù)包,抓取數(shù)據(jù)包的大小依 次 為l1,l3,l4,l5,l8,l6,l2,l9,根據(jù)映射關系得到si=00001011。
使用2dCTC方案對L位的信息進行編碼,首先將消息為兩個部分。第一部分(K位)信息通過數(shù)據(jù)包大小變化編碼,另一部分(L-K位)通過數(shù)據(jù)包的偽包標識排列進行編碼。圖3 給出了2dCTC的工作原理。
圖3 2dCTC的工作原理
2dCTC編/解碼的主要步驟如下:
1)根據(jù)式(2)計算編碼過程中需要的數(shù)據(jù)包數(shù)量n:
其中,α表示映射表中一個數(shù)據(jù)包大小所表示的比特數(shù),k表示si從左往右的αn位。
2)通過數(shù)據(jù)包大小變化編碼K位信息得到一組n個有序排列的數(shù)據(jù)包,并通過偽包標識排列編碼L-K位信息。
3)將偽包標識按照排列中的順序依次添加到有序的數(shù)據(jù)包中并以流的方式發(fā)送。
4)當接收端得到相應的數(shù)據(jù)包進行解碼時,分別根據(jù)數(shù)據(jù)包大小變化的解碼方法與基于偽包標識排列的解碼方法解碼信息。
算法1和算法2分別表示2dCTC的編碼和解碼過程。
為了更好地理解本節(jié)中的方法,此處提供一個示例。假設si=00001011;當數(shù)據(jù)包大小li≥l時,表示二進制中的“1”,否則表示“0”;數(shù)據(jù)包的大小變化滿足:l1<l3<l4<l5<l<l2;偽包標識序列為{1 ,2,3,4} ;根 據(jù) 式(2)可 知,n=4,K=0000,L-K=1011;第一部分K位信息根據(jù)基于數(shù)據(jù)包大小變化編碼可知,數(shù)據(jù)包的發(fā)送順序為第1 個,第3 個,第4 個,第5 個數(shù)據(jù)包,根據(jù)基于數(shù)據(jù)包偽包標識排序編碼可知,偽包標識的排列為{2 ,4,3,1} ,因此將偽包標識2,4,3,1 依次添加到第1 個,第3 個,第4 個,第5 個數(shù)據(jù)包中,并以流的方式發(fā)送數(shù)據(jù)包。接收端根據(jù)數(shù)據(jù)包到達的順序,獲取數(shù)據(jù)包的大小為l1<l3<l4<l5<l,偽包標識排列 依 次 為{2 ,4,3,1} ,所 以 可 以 得 到K=0000,L-K=1011,因此si=00001011。
本節(jié)在理論上分析了2dCTC 的信道容量以及誤碼率,并通過實驗將二維隱蔽時間信道與一維時間信道進行了對比。
1)信道容量
在2dCTC中,假設n個數(shù)據(jù)包表示L比特的信息,則L和n滿足公式:2L=n!mn,其中,m表示基于數(shù)據(jù)包大小變化編碼中劃分的區(qū)間的個數(shù)。因此,信道容量的上限為
其中T表示發(fā)送相鄰兩個數(shù)據(jù)包之間的時間間隔。
2)誤碼率
由于網(wǎng)絡噪聲的存在,可能會對2dCTC的魯棒性造成一定的影響,本文將2dCTC的網(wǎng)絡噪聲分為兩類,第一類是僅僅破壞數(shù)據(jù)包的傳輸順序,例如,數(shù)據(jù)包傳輸?shù)臅r延和抖動,第二類是對傳輸中數(shù)據(jù)包數(shù)量造成影響,例如,數(shù)據(jù)包丟失,數(shù)據(jù)包聚合,數(shù)據(jù)包拆分和偽包的注入。
在我們先前的工作中,已經(jīng)充分研究了這些網(wǎng)絡噪聲對于一維CTC所造成的影響[8,16]。我們在此基礎上得出2dCTC的信道誤碼率。
由于數(shù)據(jù)包傳輸?shù)臅r延和抖動的存在,接收端的兩個相鄰數(shù)據(jù)包之間的包間延遲Tr可以表示為式(4):
其中,Td為傳輸時延,jk表示時延抖動并且滿足的隨機正態(tài)分布,tk表示數(shù)據(jù)包發(fā)送的時刻,T表示發(fā)送相鄰兩個數(shù)據(jù)包之間的時間間隔。
假設Δ 為T的最小值,為了保持數(shù)據(jù)包的傳輸順序,必須使得Δ+>0,因為n個數(shù)據(jù)包包含n-1個包間間隔,所以傳輸誤碼率如式(5)所示:
為了減小由數(shù)據(jù)包傳輸?shù)臅r延和抖動帶來的信道誤碼率,我們可以采取增加發(fā)送相鄰兩個數(shù)據(jù)包之間的時間間隔T的措施。
關于由數(shù)據(jù)包丟失,數(shù)據(jù)包聚合,數(shù)據(jù)包拆分和偽包的注入引起的信道誤碼率,不失一般性,假設λ表示數(shù)據(jù)包丟失的概率,μ表示數(shù)據(jù)包與其后續(xù)數(shù)據(jù)包聚合的概率,γ表示偽包注入的概率,以及ω表示數(shù)據(jù)包拆分的概率。在這些噪聲下對信道誤碼率的期望可以表示為式(6):
其中,φ的物理含義是至少發(fā)生一種此類噪聲的概率。為了減輕數(shù)據(jù)包丟失,數(shù)據(jù)包聚合,數(shù)據(jù)包拆分以及偽包的注入對信道的負面影響,可以采取添加冗余信息,即在具有噪聲的2dCTC下發(fā)送相同的消息k次,其中k≥1,且k∈N+。
為了驗證2dCTC的正確性和有效性,我們使用Python 實現(xiàn)了兩臺主機之間的隱蔽通信,通信協(xié)議為TCP。在這個實驗中,數(shù)據(jù)包是通過Scapy 庫生成的。本文選擇400 個字節(jié)的文本文件作為隱蔽消息。數(shù)據(jù)包之間的時間間隔從5ms 依次遞增到40ms。我們將2dCTC 的總時間消耗和容量分別與一維錯序CTC、一維數(shù)據(jù)包大小CTC的總時間消耗和容量進行比較,其中容量的單位是bps,即在1s內(nèi)傳輸?shù)淖止?jié)數(shù)。一維錯序CTC 使用數(shù)據(jù)包真實ID 排列來表示消息,需要使用6個包表示8位。一維數(shù)據(jù)包長度CTC 是利用數(shù)據(jù)包大小的變化來表示消息,每個數(shù)據(jù)包表示1位,即8位二進制數(shù)需要8 個數(shù)據(jù)包。2dCTC 使用4 個數(shù)據(jù)包表示8 位。實驗結(jié)果分別如圖4(a)和圖4(b)所示,實驗結(jié)果表明,2dCTC與兩種一維CTC相比,總時間消耗最小,信道容量也更高。
圖4 實驗結(jié)果
為有效提高已有的隱蔽時間信道容量,本文首先提出了多維隱蔽時間信道的概念,作為應用設計并實現(xiàn)了一個二維隱蔽時間信道2dCTC。2dCTC采用數(shù)據(jù)包偽包標識排序和數(shù)據(jù)包大小變化相結(jié)合構造二維通信介質(zhì),使用康托展開進行編碼與解碼。理論分析和實驗結(jié)果均表明2dCTC 在保證隱蔽通信效果的同時,信道容量得到了顯著的提升。在下一步工作中,我們將設計具有更高維數(shù)的CTC,以進一步提高CTC的容量。