姬國珍,譚全福
(中國電子科技集團公司第三十研究所,四川 成都 610041)
網(wǎng)絡在給人們帶來方便的同時,也備受攻擊者的青睞。網(wǎng)絡通信面臨各類攻擊,攻擊者利用公開的網(wǎng)絡協(xié)議和數(shù)據(jù)隱蔽傳輸惡意通信數(shù)據(jù)(惡意代碼﹑病毒﹑木馬等),極大地增加了通信的隱蔽性。同時,攻擊者可以繞過殺毒軟件﹑IPS等網(wǎng)絡防護系統(tǒng),對網(wǎng)絡信息的安全性和秘密性構成了嚴重威脅。
網(wǎng)絡隱蔽通信的基本方式是以網(wǎng)絡數(shù)據(jù)流為載體,采用隱寫術[1]來構建隱蔽信道。隱蔽信道(Covert Channel)是指采用特殊編譯碼使不合法的信息流(通常為秘密信息)逃避常規(guī)安全控制機制的檢測,在普通系統(tǒng)中形成一個秘密的傳輸通道傳給未授權者。網(wǎng)絡隱蔽通信中的隱蔽信道可分為兩種模式,即存儲型隱蔽信道(Storage Covert Channel)和時分型隱蔽信道(Timing Covert Channel)。存儲型隱蔽信道是指將秘密信息嵌入網(wǎng)絡數(shù)據(jù)包的某些未用位或者載荷中,隨著網(wǎng)絡包一起發(fā)送出去;時分型隱蔽信道是指將秘密信息調制進網(wǎng)絡數(shù)據(jù)包的發(fā)包間隔﹑發(fā)包速率﹑發(fā)包次序等特征中進行傳遞。在時分型隱蔽信道模型中,存在一種利用時間間隔傳遞信息的隱蔽通道構建方法。在網(wǎng)絡中存在各種不同數(shù)據(jù),這些不同類型的數(shù)據(jù)通過全球標準的TCP/IP協(xié)議或者一些專有協(xié)議來完成相互間通信。在網(wǎng)絡的大量流量中存在大量數(shù)據(jù)包,這些數(shù)據(jù)包的時間間隔不盡相同。利用這一特性可以構建隱蔽通道。因此,本文通過分析基于時間間隔的隱蔽通道原理,實現(xiàn)了一種利用時間間隔傳遞信息的隱蔽通道構建方法。
由于受網(wǎng)絡設備性能﹑網(wǎng)絡時延以及帶寬等各方面影響,數(shù)據(jù)包之間存在一定的時間間隔。通過對來自源主機和目的主機的數(shù)據(jù)包進行抓包統(tǒng)計分析,可以看到這些數(shù)據(jù)包的時間間隔在一個范圍內。假定這些數(shù)據(jù)包的最長時間間隔[2]為I,那么網(wǎng)絡數(shù)據(jù)包時間間隔集合為[0,I ]。將這個區(qū)間劃分為不同長度的子區(qū)間,如[0,I1],[0,I2]…[0,In],這樣數(shù)據(jù)包時間間隔就被劃分為n個區(qū)間,n一般取值為2或4。當n=2時,前后兩個數(shù)據(jù)包之間的時間間隔可以攜帶1 bit的隱藏信息,非0即1;當n=4時,前后兩個數(shù)據(jù)包的時間間隔可以攜帶2 bit的隱藏信息,即00﹑01﹑10﹑11。當數(shù)據(jù)包的時間間隔落在這n個區(qū)間中的某一個時,就可以通過n來表征前后兩個數(shù)據(jù)包的時間間隔。
對網(wǎng)絡中源主機到目的主機某個特定協(xié)議的數(shù)據(jù)包進行統(tǒng)計分析,通過網(wǎng)絡抓包軟件對該協(xié)議的數(shù)據(jù)包傳輸時延進行統(tǒng)計分析。假設前后數(shù)據(jù)包時間間隔最大值為I,將最大時間間隔I進行N(N=2n,n=1,2)等份,n的大小決定了一個時間間隔可編碼數(shù)據(jù)的大小。當N為2時,一個時間間隔可以攜帶1 bit信息;當N為4時,一個時間間隔可以攜帶2 bit信息。這樣,一個ASCII字符就可以通過(8/n)+1個數(shù)據(jù)包的時間間隔來承載。在發(fā)送端根據(jù)一個字符編碼值設置數(shù)據(jù)包的時間間隔(如數(shù)字1的ASCII碼為00110001,采用2位編碼方式,數(shù)字1就可以通過發(fā)送5個連續(xù)的數(shù)據(jù)包傳送來實現(xiàn)隱蔽信息的承載)。在接收端根據(jù)接收到的數(shù)據(jù)包之間的時間間隔進行相應的二進制信息還原,四個連續(xù)的時間間隔對應一個字符,對接收的所有數(shù)據(jù)包進行編碼,就可以還原發(fā)端的所有內容。
選取基于時間間隔的隱蔽通道,首先選取常見的ICMP。該協(xié)議是常見的通道檢測協(xié)議,無需建立三次握手,一般網(wǎng)絡不會過濾該數(shù)據(jù)報文。
基于時間間隔的隱蔽通道構建需要以下三個步驟。
(1)構建數(shù)據(jù)包:利用Winpcap驅動接口程序構建ping Request數(shù)據(jù)包。該數(shù)據(jù)包需要與操作系統(tǒng)系統(tǒng)原有ping請求數(shù)據(jù)包有所區(qū)別。
(2)定時發(fā)送數(shù)據(jù)包:發(fā)送端按照一定時間間隔(時間間隔根據(jù)當前待傳送數(shù)據(jù)的二進制編碼來判斷)定時發(fā)包。
(3)接收檢測數(shù)據(jù)包:接收端對數(shù)據(jù)包進行接收檢測,并對時間間隔進行編碼,還原隱蔽數(shù)據(jù)。
為了簡單,將最大時間間隔分為2個區(qū)間。對于是否滿足時間間隔門限值,分別對應為二進制數(shù)值的1和0。這樣傳輸m個字符就需要8m+1個數(shù)據(jù)包發(fā)包實現(xiàn)。下面就隱蔽通道構建過程中的這三個部分進行詳細描述。
利用Winpcap接口發(fā)送數(shù)據(jù)包為原始數(shù)據(jù)包,包括以太網(wǎng)頭部﹑IP頭部﹑ICMP頭部以及填充字段等三部分。原始數(shù)據(jù)包的封裝結構如圖1所示。
圖1 ICMP協(xié)議原始數(shù)據(jù)包結構
其中,以太網(wǎng)頭部14個字節(jié)包含6個字節(jié)的源MAC地址﹑6字節(jié)的目的MAC地址以及2字節(jié)的協(xié)議類型標識。IP頭部需要填充源IP地址和目的IP地址,而其余字節(jié)可以根據(jù)一般ping數(shù)據(jù)包的相關內容填充。
構建數(shù)據(jù)包采用最常用的ping Reqeust數(shù)據(jù)包,需要對構建的數(shù)據(jù)包某些字節(jié)做一些改動,以便區(qū)分網(wǎng)絡中的原有數(shù)據(jù)包。ICMP協(xié)議[3]的數(shù)據(jù)包格式如圖2所示。
圖2 ICMP回顯請求與應答數(shù)據(jù)包
回顯請求數(shù)據(jù)包構建方法如下:類型填充為0,代碼字段為0x00表示回顯請求,校驗和字段需要根據(jù)ICMP協(xié)議頭部和選項數(shù)據(jù)重新計算校驗和。標識符ID用當前的進程號填充。序號初始值為0,后續(xù)數(shù)據(jù)包序號自增1?;仫@請求數(shù)據(jù)包選項數(shù)據(jù)用a到w之間的數(shù)據(jù)填充。
由于選項數(shù)據(jù)部分內容可以任意填充,目的主機收到該數(shù)據(jù)包后將類型字段改為0,并在響應報文中填寫標識域和序列號域,選項域原封不動返回給請求端。因此,可以將選項字段的其中一個字節(jié)用來標識發(fā)送端的初始包和后續(xù)數(shù)據(jù)包。實現(xiàn)的方法是將初始數(shù)據(jù)包選項數(shù)據(jù)的第四個字節(jié)填充為0x00,后續(xù)其他數(shù)據(jù)包的選項字段的第四個字節(jié)填充為0x71。選項數(shù)據(jù)的其他字節(jié)填充為Windows系統(tǒng)下ping程序的填充數(shù)據(jù),以起到隱蔽的作用。
下面討論如何將構建好的數(shù)據(jù)包定時發(fā)送出去。延時發(fā)送數(shù)據(jù)包的關鍵在于時間間隔的確定。減少時間間隔會增加數(shù)據(jù)包接收檢測的難度,同時也會增加接收檢測的誤碼率;增加時間間隔則會降低傳輸信息的效率。因此,需要對數(shù)據(jù)包發(fā)包延時進行測試,以確定時間間隔門限。通過局域網(wǎng)內的兩臺Windows 7系統(tǒng)測試,確定20 ms是一個相對較好的時間間隔門限。
發(fā)送數(shù)據(jù)包的具體時間間隔是根據(jù)待發(fā)送的二進制碼流決定。首先,需要將待發(fā)送的隱蔽信息轉換為對應的二進制碼流,假如每次發(fā)送1位,發(fā)送N個字符需要8N+1個數(shù)據(jù)包。第一個數(shù)據(jù)包為起始數(shù)據(jù)包,隨后的每個數(shù)據(jù)包延時特定時間后發(fā)包。發(fā)送端的程序執(zhí)行流程如圖3所示。
延時器用來控制發(fā)送數(shù)據(jù)包的時間間隔,在整個系統(tǒng)中處于核心地址,影響著整個時間信道的數(shù)據(jù)傳輸速率和穩(wěn)定性。簡單的Sleep()函數(shù)的精度約在30 ms,使用它來做延時器效益太低,不滿足時間隱蔽信道的要求。在精度要求較高的情況下,VC可以采用多媒體定時器函數(shù)DWORD timeGetTime(void),定時精度為毫秒級,返回從系統(tǒng)啟動經(jīng)過的毫秒數(shù)。利用該多媒體定時器可以很精確讀出系統(tǒng)的當前時間,并且能夠在非常精確的時間間隔內完成一個事件﹑函數(shù)或者過程的調用。本程序使用多媒體定時器函數(shù)timeGetTime(void),由于使用該函數(shù)是通過查詢的方式進行定時控制的,所以應該建立定時循環(huán)控制定時事件。具體方法是:記錄上一個發(fā)包時刻t2=timeGetTime();之后不斷查詢目前時刻t1=timeGetTime(),直到t1與t2之差為需要的時間間隔再發(fā)包,從而完成一次時間間隔內數(shù)據(jù)包的發(fā)送。
圖3 發(fā)送端程序流程
接收端通過一個線程函數(shù)完成數(shù)據(jù)包的接收和處理。接收端程序處理流程如圖4所示。
圖4 接收端程序流程
接收端程序首先需要對接收到的數(shù)據(jù)包的協(xié)議字段進行判斷,分析是否為自己發(fā)送的ping請求數(shù)據(jù)包。如果數(shù)據(jù)包不滿足要求,則不作處理繼續(xù)收包;滿足條件,則繼續(xù)判斷是否為初始數(shù)據(jù)包,記錄初始數(shù)據(jù)包的收包時刻t0,隨后每次收包修改前一個數(shù)據(jù)包的收包時刻t1,并獲取當前收包時刻t2。計算前后數(shù)據(jù)包發(fā)包時間間隔,將該時間間隔與時間間隔門限TI按照一定算法計算后判決輸出編碼信息0或1。對輸出的編碼信息進行存儲,每8位編碼數(shù)據(jù)對應輸出一個字符。
由于數(shù)據(jù)包經(jīng)過不同局域網(wǎng)和路由器后引起的網(wǎng)絡時延不同,因此實際收包時間間隔與時間間隔門限TI存在較大誤差。時間間隔判決是接收端程序要處理的難點,時間間隔門限可以通過多次測量取平均值獲取。
對于局域網(wǎng)和經(jīng)過路由器后引起的網(wǎng)絡時延,需要通過網(wǎng)絡發(fā)包測試。通過分別在局域網(wǎng)和經(jīng)過路由器的網(wǎng)絡內發(fā)送多個數(shù)據(jù)包測試網(wǎng)絡延時,構建時間門限模型和網(wǎng)絡延時補償值δ(0<δ<TI)。當實際收包時間間隔在[TI-δ,TI+δ]范圍內,則編碼輸出0或1。通過實際發(fā)包統(tǒng)計測試分析,將δ值放大,可以減少誤碼率,但會降低通信效率。因此,需要綜合考慮確定δ值的范圍。
圖5是基于以上原理和方法利用MFC開發(fā)的軟件。打開軟件選擇相應的網(wǎng)卡,即可獲取本網(wǎng)卡對應的IP地址和MAC地址,輸入遠端IP地址,即可獲取遠端主機的MAC地址。設置時間間隔門限20 ms和待發(fā)送的文本數(shù)據(jù)點擊發(fā)送,即可實現(xiàn)數(shù)據(jù)包的構建。程序實現(xiàn)中,當bit為0時,設置時延為時間間隔門限0.5TI;當bit為1時,設置時延為時間間隔門限1.5TI。發(fā)送端設置如圖5所示。
圖5 發(fā)送端軟件設置
發(fā)端數(shù)據(jù)的網(wǎng)絡抓包如圖6所示??梢钥吹?,數(shù)據(jù)包時間間隔有2 ms﹑15 ms﹑31 ms,在接收端按照判決條件(0≤Δt≤TI時輸出0,TI<Δt<2TI時輸出1)輸出0或1,那么圖6所示數(shù)據(jù)包之間的時間間隔2 ms﹑15 ms﹑31 ms﹑31 ms﹑15 ms﹑15 ms﹑15 ms﹑31 ms分別代表了0﹑0﹑1﹑1﹑0﹑0﹑0﹑1。接收端按照此方式進行編碼,就可以還原傳輸信息的二進制比特流。
接收端數(shù)據(jù)接收和操作信息如圖7所示。可以看到接收端只需要設置時間間隔門限20 ms并點擊設置確認即可。為了提高傳輸?shù)碾[蔽性,可對傳輸數(shù)據(jù)包的時間間隔進行編碼。編碼信息在軟件右側的操作日志中顯示。可以看到,編碼信息的前8 bit分別為00110001,即十六進制0x31,對應的字符為‘1’。接口窗口內顯示的是二進制碼流編碼后的文本信息。所有數(shù)據(jù)均可以無誤傳輸,滿足利用數(shù)據(jù)包屬性時間間隔實現(xiàn)信息隱蔽傳輸?shù)哪康摹?/p>
圖6 數(shù)據(jù)發(fā)送后網(wǎng)絡抓包
圖7 接收端接收數(shù)據(jù)結果
可以通過對網(wǎng)絡通信數(shù)據(jù)流量進行大量抓包并統(tǒng)計分析,分別對不同的網(wǎng)絡協(xié)議進行統(tǒng)計,分析各個網(wǎng)絡數(shù)據(jù)包之間的特征屬性與通常情況下的網(wǎng)絡數(shù)據(jù)包之間的差異。網(wǎng)絡數(shù)據(jù)包的延時特性由當時網(wǎng)絡的狀態(tài)決定,可以通過利用Matlab分析各種網(wǎng)絡數(shù)據(jù)的延時特性。如果延時特性具有明顯的特征,則需要進一步分析這些延時特征是否存在某種規(guī)律。如果存在的某種規(guī)律能被解碼為具體的信息,則可能存在隱蔽通道。但是,由于網(wǎng)絡數(shù)據(jù)流量非常大,想在海量數(shù)據(jù)中分析其中部分協(xié)議存在隱蔽通道,并判斷是否傳輸隱蔽信息,則需要大量的分析工作。
本文分析了常見的兩類隱蔽信道構建原理,實現(xiàn)了基于時間間隔的隱蔽通道,最后針對隱蔽通道檢測,分析了檢測方法和面臨的瓶頸。下一步應該重點加強針對時間間隔隱蔽通道檢測技術研究。
[1] 黃永峰,李松斌.網(wǎng)絡隱蔽通信及其檢測技術[M].北京:清華大學出版社,2016.
HUANG Yong-feng,LI Song-bin.Network Hiding Information and Detection Technology[M].Beijing:Tsinghua University Press,2016.
[2] 翟江濤.網(wǎng)絡通信的信息隱藏技術研究[D].南京:南京理工大學,2008.
ZHAI Jiang-tao.A Study of Information Hiding Technology of Network Communication[D].Master Thesis of Nanjing University of Science and Technology,2008.
[3] 盧大航.基于網(wǎng)絡協(xié)議的隱蔽通道研究與實現(xiàn)[J].計算機工程與應用,2003,39(02):183-186.
LU Da-hang.Research and Implementation of Covert Channel based on Network Protocol[J].Cumputer Engineering and Application,2003,39(02):183-186.