基于HTTP協(xié)議的跳頻隱蔽通道技術(shù)研究
摘 要: 針對目前HTTP隱蔽通道帶寬小和容易被檢測的弱點,提出一種基于HTTP協(xié)議的跳頻隱蔽通道(FHCC_HTTP)技術(shù)。介紹了多種基于HTTP協(xié)議的隱蔽通道構(gòu)建方法,在此基礎(chǔ)上提出了基于跳頻原理的HTTP隱蔽通道技術(shù)的設(shè)計和實現(xiàn)。最后對文件隱秘性、文件傳輸時間進行了分析和仿真測試,結(jié)果表明采用FHCC_HTTP隱蔽通道的網(wǎng)絡(luò)流量更貼近正常用戶瀏覽網(wǎng)頁時的網(wǎng)絡(luò)流量,可有效地避開IDS的檢測,隱秘性好。同時由于FHCC_HTTP切換多種隱蔽通道構(gòu)建方法,文件傳輸時間和隱蔽通道帶寬較RwwwShell有明顯改善。
關(guān)鍵詞: 跳頻; 隱蔽通道; HTTP; 隱秘性
隱蔽通道是信息隱藏的一個重要分支,它最初由Lampson提出,Lampson在“關(guān)于限制問題注釋”論文中這樣定義隱蔽通道:“如果一個通道既不是設(shè)計用于通信,也不是用于傳遞信息,則稱該通道為隱蔽通道”。因為隱蔽通道利用了系統(tǒng)原本不用于數(shù)據(jù)傳送的資源來傳送數(shù)據(jù),所以它能在系統(tǒng)安全機制的監(jiān)控之下將秘密信息外泄。目前常見的網(wǎng)絡(luò)隱蔽通道多構(gòu)建在TCP/IP的應(yīng)用層上,在該層可被用來構(gòu)建隱蔽通道的協(xié)議有超文本傳輸協(xié)議HTTP(Hypertext Transfer Protocol)、簡單郵件傳輸協(xié)議SMTP(Simple Mail Transfer Protocol)、域名解析系統(tǒng)DNS(Domain Name System)。由于基于HTTP的隱蔽通道不易被屏蔽且具有較高的帶寬,故成為近年來信息隱藏研究的熱點,有Reverse www Shell、Firepass、Cooking channels和Cctt等多種基于HTTP的隱蔽通道技術(shù)被提出。
RwwwShell 由THCs van Hauser 用Perl 開發(fā),其特點是數(shù)據(jù)包具有HTTP的特點,且數(shù)據(jù)傳送采用HTTP GET命令,防火墻會將這種數(shù)據(jù)看作是合法信息。其缺點是響應(yīng)時間較長,隱蔽通道帶寬小。Firepass可以穿透防火墻,原理是將信息隱藏到合法的HTTP POST 請求中,然而其缺點也是明顯的:由于正常用戶在瀏覽網(wǎng)頁時,通常不會頻繁地使用HTTP POST 請求,因此這種方法容易被入侵檢測系統(tǒng)IDS(Intrusion Detection System)檢測[1]。鑒于上述技術(shù)存在隱蔽通道帶寬小和容易被檢測的弱點,本文提出一種基于HTTP協(xié)議的跳頻隱蔽通道FHCC_HTTP(Frequency Hopping Convert Channel based on HTTP)技術(shù)。該技術(shù)從多種基于HTTP協(xié)議隱蔽通道構(gòu)建方法入手,進而研究了如何通過切換多種隱蔽通道構(gòu)建方法,使網(wǎng)絡(luò)通信看起來像是正常用戶瀏覽網(wǎng)頁,從而避開IDS的監(jiān)測。
1 HTTP協(xié)議隱蔽通道構(gòu)建方法
1.1 HTTP請求信息隱藏方法
(1)GET 請求URI信息隱藏方法
當(dāng)用戶在瀏覽網(wǎng)頁時,HTTP GET請求是最常用到的命令,GET方法從服務(wù)器指定位置請求一個文件。它是文件檢索的主要方式,服務(wù)器通過一定方式得到GET請求的應(yīng)答結(jié)果,并且返回給客戶端。在客戶端使用GET命令發(fā)出請求后,服務(wù)器返回一個包括狀態(tài)行、頭和客戶端請求的數(shù)據(jù)的應(yīng)答[2]。
對于GET方法來說,適合用來攜帶隱蔽通道數(shù)據(jù)的域有:URI域和script-URI域??蓪⑿畔㈦[藏在HTTP GET請求的URI域,URI的絕對路徑必須能夠被作為請求URI來傳遞,同時URI的網(wǎng)絡(luò)地址必須在頭域Host中進行傳遞。
(2)GET 請求CGI信息隱藏方法
CGI(Common Getaway Interface)協(xié)議中的script-URI 也是一個適合傳送秘密信息的域。若欲傳送信息“our covert channel start”,可以將信息隱藏在script-URI 中,傳送出如下的“GET /test?our=covert&channel=start”。
混合使用HTTP GET 請求URI與HTTP GET 請求CGI兩種信息隱藏方法,可以使利用GET方法所請求的URI更貼近真正使用者瀏覽網(wǎng)頁時的行為,就算IDS針對特定字段作檢測,也不容易發(fā)生異常。
(3)GET Referer URI信息隱藏方法
在HTTP 協(xié)議中,Referer 字段指定用戶端最后一個頁面的URI地址。例如,如果用戶訪問頁面A,然后點擊從頁面A到B的鏈接,頁面B的HTTP請求會包括一個Referer字段,該字段會包含這樣的信息“這個請求來自頁面A”。因此可利用前面所述的URI信息隱藏方法,將秘密信息藏入Referer字段。
(4)HTTP請求Cookie 信息隱藏方法
根據(jù)RFC 2109所述“the name of the state information(“cookie”)is NAME,and its value is VALUE.(…) The VALUE is opaque to the user agent and may be anything the origin server chooses to send,(…)”,這表示在HTTP協(xié)議中,Cookie是可以由用戶自行定義的,因此可將信息隱藏在Cookie中[3]。
(5)POST方法
從客戶端向服務(wù)器端傳送數(shù)據(jù),在要求服務(wù)器和CGI作進一步處理時就會用到POST方法。該方法主要用于發(fā)送HTML文本中FORM的內(nèi)容,讓CGI處理。在POST方法中,可以用來攜帶隱蔽通道數(shù)據(jù)的域有:URI、消息頭和請求消息體。HTTP POST請求信息隱藏方法的好處是當(dāng)存放信息到消息體,基本上是沒有長度限制的。然而在一般使用者瀏覽網(wǎng)頁時,使用到HTTP POST 請求的機會相對較小,若是在隱蔽通道傳遞過程中,HTTP POST請求出現(xiàn)次數(shù)過于頻繁,將被IDS發(fā)現(xiàn)。
1.2 HTTP響應(yīng)信息隱藏方法
(1)HTTP響應(yīng)消息體信息隱藏方法
HTTP響應(yīng)消息體信息隱藏方法將信息隱藏在HTTP協(xié)議的響應(yīng)消息體中。例如,若要傳遞“our covert channel start”,可以直接在響應(yīng)消息體中加入“our covert channel start”的信息。
(2)HTTP Set Cookie方法
HTTP Set Cookie 信息隱藏方法將信息隱藏在服務(wù)器到客戶端的響應(yīng)表頭中的Set Cookie 域。而且HTTP Set Cookie信息隱藏方法可以被允許頻繁傳送不同的Set Cookie值。如在瀏覽購物網(wǎng)站時,若頻繁地更換購物車?yán)锏膬?nèi)容,將會使服務(wù)器一直傳送不同的Set Cookie 值給客戶端。因此頻繁使用HTTP Set Cookie 信息隱藏方法,不會被IDS視為異常。
(3)響應(yīng)文件信息隱藏方法
當(dāng)用戶瀏覽網(wǎng)頁時,通常會請求服務(wù)器回傳某些文件,因此可以將信息隱藏在響應(yīng)文件中進行傳輸??梢岳肔ee 等人所提出的方法,將要傳送的信息隱藏在JPEG文件中,再將文件回傳給客戶端。
2 FHCC_HTTP設(shè)計與實現(xiàn)
FHCC技術(shù)采用了跳頻通信的思想,所謂跳頻,是指用偽隨機碼序列構(gòu)成跳頻指令來控制頻率合成器,并在多個頻率中進行選擇的移頻鍵控。跳頻通信要求提供幾百個,甚至上萬個頻率供隨機選擇,這使得跳頻技術(shù)成為戰(zhàn)術(shù)通信的首選抗干擾技術(shù)。FHCC技術(shù)將不同信息隱藏方法視為不同的頻率,依據(jù)事先定義好的“跳頻序列”交替切換五種請求隱藏方法和三種響應(yīng)隱藏方法,使網(wǎng)絡(luò)通信看起來像是正常用戶瀏覽網(wǎng)頁,從而避開IDS的監(jiān)測。
2.1 FHCC_HTTP 的設(shè)計
如圖1所示,請求方法1為HTTP GET請求CGI信息隱藏方法,請求方法2 為HTTP GET請求URI信息隱藏方法,請求方法3 為HTTP GET Referer URI信息隱藏方法,請求方法4為請求Cookie信息隱藏方法,請求方法5為HTTP POST請求信息隱藏方法;響應(yīng)方法1 為HTTP響應(yīng)消息體信息隱藏方法,響應(yīng)方法2為響應(yīng)文件信息隱藏方法,響應(yīng)方法3為HTTP Set Cookie 信息隱藏方法。
雙方首先通過安全通道得到完全一致的跳頻序列,當(dāng)?shù)谝淮芜M行信息傳遞時,根據(jù)請求序列,第一個數(shù)字4為請求Cookie信息隱藏方法,表示FHCC_HTTP Client將采用HTTP POST請求信息隱藏方法傳送信息給FHCC_HTTP Server;而根據(jù)響應(yīng)序列,數(shù)字3為HTTP Set Cookie信息隱藏方法,表示FHCC_HTTP Server回傳信息時將采用HTTP Set Cookie 信息隱藏方法,以此類推。
2.2 FHCC_HTTP 實現(xiàn)
FHCC_HTTP基于C/S模式,用Perl語言編程實現(xiàn),Perl 語言有很好的網(wǎng)絡(luò)與字串處理能力,在實現(xiàn)時加入多種信息隱藏方法,并加入跳頻序列實現(xiàn)。
(1) 連接控制的實現(xiàn)
在Client每次提出連接請求時,會讓Client先送出一組Client與Server事先定義好的GET請求,如“GET/covert_channel_server.cgi?start”,當(dāng)Server收到這組GET請求,才允許Client此次的連接。
在FHCC_HTTP中,定義X-session字段和X-counter字段,包含在每次請求中,用于控制Client 與Server的連接。X-session 表示不同的會話,每次會話中不同的請求用遞增的X-counter加以區(qū)分[4]。另外僅利用X-session 字段的存在與否來判斷此次請求是否為Covert Channel請求并不能防范replay attack 之類的攻擊,因此在實現(xiàn)時,將利用X-counter 值,來確認每次的請求,若是這次的X-counter值沒有比上一個請求的X-counter 值加1,FHCC_HTTP將不會把這次請求視為Covert Channel連接請求。
數(shù)據(jù)的同步和差錯控制主要是通過數(shù)據(jù)包的編號sequence、數(shù)據(jù)包的個數(shù)sendcount和receivecount來實現(xiàn)的。Client通過發(fā)送CHECK-NUM-AND- ABSTRACT sendcount messageabstract,Server收到后與本地的receivecount和messageabstract進行比較,如果一致則返回CHECK-WRIGHT;如果丟包就返回CHECK-ERROR-COUNT N…,則要求重發(fā)相應(yīng)的數(shù)據(jù)包;如果摘要不一致,就返回CHECK-ERROR- ABSTRACT要求全部重發(fā)。
(2)跳頻序列的實現(xiàn)
依據(jù)網(wǎng)絡(luò)特性的不同,可調(diào)整FHCC_HTTP的五種信息隱藏方法的比率,從而使信息隱藏方法比率最適合當(dāng)下的網(wǎng)絡(luò)環(huán)境。HTTP CC Client 與HTTP CC Server 里定義了多組跳頻序列,如在HTTP CC Client 事先定義了五十組跳頻序列,在HTTP CC Server 也定義了相同的五十組跳頻序列,假設(shè)HTTP CC Client 選定了第七組跳頻序列,則HTTP CC Client 會先傳送一組事先定義好的GET請求:“GET/covert_channel_server.cgi?start7”,請求HTTP CC Server 開始建立此次隱蔽通道并且告知HTTP CC Server 這次隱蔽通道使用第七組跳頻序列。
3 仿真實驗及結(jié)果分析
3.1 隱秘性
隱秘性是隱蔽通道的一個重要參數(shù),目前檢測隱蔽通道的最有效的方法是基于行為模式的檢測方式。首先利用統(tǒng)計、概率或神經(jīng)網(wǎng)絡(luò)等方法建立正常用戶的行為模型,將目前的網(wǎng)絡(luò)流量與正常行為模型進行對比,從而發(fā)現(xiàn)可能的異常行為。因此只要使所建立的隱蔽通道的網(wǎng)絡(luò)流量貼近正常用戶的行為模式,將會有效地避開IDS的檢測。
以某互聯(lián)網(wǎng)網(wǎng)頁服務(wù)器為例,統(tǒng)計出正常用戶使用網(wǎng)頁的行為模式。如圖2所示,通過統(tǒng)計2008年底到2009年初大約一千萬條記錄發(fā)現(xiàn),大約90%以上的請求屬于文件請求(也就是GET URI),且文件類型以jpg與gif類型為最多,因此需調(diào)高“跳頻序列”中的HTTP GET請求URI信息隱藏方法和響應(yīng)文件信息隱藏方法(將信息藏入jpg和gif類型的文件中)的使用頻率,這樣可使隱蔽通道的網(wǎng)絡(luò)流量更貼近正常用戶瀏覽網(wǎng)頁時的網(wǎng)絡(luò)流量。
3.2 文件傳輸時間
測試三種傳送模式 (不使用隱蔽通道、使用FHCC_TTP隱蔽通道和使用RwwwShell隱蔽通道)的文件傳輸時間。測試在100 MB的局域網(wǎng)環(huán)境下進行,分別傳送10 KB、100 KB 以及1 MB 的文件,測試結(jié)果如圖3所示。
由圖3可知,在100 MB的網(wǎng)絡(luò)中,不使用隱蔽通道傳送上述三類文件所需時間都小于1 s。接著利用FHCC_HTTP傳送文件,跳頻序列A指將每種信息隱藏方法比率都調(diào)整為25%,跳頻序列B將跳頻序列調(diào)整為HTTP GET 請求URI 信息隱藏方法比率的90%,HTTP GET請求CGI 信息隱藏方法與HTTP POST 請求信息隱藏方法各為5%??砂l(fā)現(xiàn)采用跳頻序列B數(shù)據(jù)傳輸時間增長,這是因為HTTP POST 請求信息隱藏方法的使用量減少,而利用HTTP POST 請求信息隱藏效率最高,因此每減少一次HTTP POST 請求信息隱藏方法,就必須以多次HTTP GET 請求URI 信息隱藏方法或HTTP GET 請求CGI信息隱藏方法來彌補,因此總請求次數(shù)大幅增加,造成傳輸時間增長。最后采用RwwwShell傳送文件,因為RwwwShell的數(shù)據(jù)傳送完全采用HTTP GET命令,因此其響應(yīng)時間最長,隱蔽通道帶寬最小。
本文以HTTP下的隱蔽通道為研究對象,設(shè)計并實現(xiàn)了一種基于跳頻的新的HTTP隱蔽通道技術(shù)。該技術(shù)以HTTP協(xié)議為載體,通過切換多種隱蔽通道構(gòu)建方法,使網(wǎng)絡(luò)通信看起來像是正常用戶瀏覽網(wǎng)頁,以達到穿透防火墻和躲避入侵檢測的目的。
HTTP隱蔽通道已經(jīng)對防火墻和IDS系統(tǒng)提出了嚴(yán)峻的挑戰(zhàn);因此怎樣檢測HTTP隱蔽通道成為以后工作的重點[5]。目前已經(jīng)發(fā)現(xiàn)了一些方法可以檢測HTTP隱蔽通道,但是怎樣將新的方法做成軟件并且融合到現(xiàn)有的防火墻技術(shù)中去,將是今后工作的重點。
參考文獻
[1] TRABELSI Z. Traceroute based IP channel for sending hidden short messages. Porc.Advaces in information and Computer Security (IWSEC),Oct 2006:421-36.
[2] Wikipedia, Hypertext Transfer Protocol,http://en.wikipedia.org/wiki/HTTP.
[3] CASTRO S. Cooking channels. 2006,http://grayworld.net/pr_cook_cc.shtml.
[4] Exploitation of data streams authorized by a network access control system for arbitrary data transfers:tunneling and covert channels over the HTTP protocol-v1.0-Alex Dyatlov &Simon Castro. June 2003.URL:http://gray-world.net/projects/papers/Covert_paper.txt
[5] CASTRO S. Covert channel and tunneling over the HTTP protocol detection: GW implementation theoretical design. 2003,http://gray-world.net/projects/papers/html/cctde.html