文献标识码: A
文章编号: 0258-7998(2010)10-0102-04
http://www.chinaaet.com/tags/隐蔽通道" title="隐蔽通道" target="_blank">隐蔽通道是信息隐藏的一个重要分支,它最初由Lampson提出,Lampson在“关于限制问题注释”论文中这样定义隐蔽通道:“如果一个通道既不是设计用于通信,也不是用于传递信息,则称该通道为隐蔽通道”。因为隐蔽通道利用了系统原本不用于数据传送的资源来传送数据,所以它能在系统安全机制的监控之下将秘密信息外泄。目前常见的网络隐蔽通道多构建在TCP/IP的应用层上,在该层可被用来构建隐蔽通道的协议有超文本传输协议HTTP(Hypertext Transfer Protocol)、简单邮件传输协议SMTP(Simple Mail Transfer Protocol)、域名解析系统DNS(Domain Name System)。由于基于HTTP的隐蔽通道不易被屏蔽且具有较高的带宽,故成为近年来信息隐藏研究的热点,有Reverse www Shell、Firepass、Cooking channels和Cctt等多种基于HTTP的隐蔽通道技术被提出。
RwwwShell 由THCs van Hauser 用Perl 开发,其特点是数据包具有HTTP的特点,且数据传送采用HTTP GET命令,防火墙会将这种数据看作是合法信息。其缺点是响应时间较长,隐蔽通道带宽小。Firepass可以穿透防火墙,原理是将信息隐藏到合法的HTTP POST 请求中,然而其缺点也是明显的:由于正常用户在浏览网页时,通常不会频繁地使用HTTP POST 请求,因此这种方法容易被入侵检测系统IDS(Intrusion Detection System)检测[1]。鉴于上述技术存在隐蔽通道带宽小和容易被检测的弱点,本文提出一种基于HTTP协议的跳频隐蔽通道FHCC_HTTP(Frequency Hopping Convert Channel based on HTTP)技术。该技术从多种基于HTTP协议隐蔽通道构建方法入手,进而研究了如何通过切换多种隐蔽通道构建方法,使网络通信看起来像是正常用户浏览网页,从而避开IDS的监测。。
1 HTTP协议隐蔽通道构建方法
1.1 HTTP请求信息隐藏方法
(1)GET 请求URI信息隐藏方法
当用户在浏览网页时,HTTP GET请求是最常用到的命令,GET方法从服务器指定位置请求一个文件。它是文件检索的主要方式,服务器通过一定方式得到GET请求的应答结果,并且返回给客户端。在客户端使用GET命令发出请求后,服务器返回一个包括状态行、头和客户端请求的数据的应答[2]。
对于GET方法来说,适合用来携带隐蔽通道数据的域有:URI域和script-URI域。可将信息隐藏在HTTP GET请求的URI域,URI的绝对路径必须能够被作为请求URI来传递,同时URI的网络地址必须在头域Host中进行传递。
(2)GET 请求CGI信息隐藏方法
CGI(Common Getaway Interface)协议中的script-URI 也是一个适合传送秘密信息的域。若欲传送信息“our covert channel start”,可以将信息隐藏在script-URI 中,传送出如下的“GET /test?our=covert&channel=start”。
混合使用HTTP GET 请求URI与HTTP GET 请求CGI两种信息隐藏方法,可以使利用GET方法所请求的URI更贴近真正使用者浏览网页时的行为,就算IDS针对特定字段作检测,也不容易发生异常。
(3)GET Referer URI信息隐藏方法
在HTTP 协议中,Referer 字段指定用户端最后一个页面的URI地址。例如,如果用户访问页面A,然后点击从页面A到B的链接,页面B的HTTP请求会包括一个Referer字段,该字段会包含这样的信息“这个请求来自页面A”。因此可利用前面所述的URI信息隐藏方法,将秘密信息藏入Referer字段。
(4)HTTP请求Cookie 信息隐藏方法
根据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协议中,Cookie是可以由用户自行定义的,因此可将信息隐藏在Cookie中[3]。
(5)POST方法
从客户端向服务器端传送数据,在要求服务器和CGI作进一步处理时就会用到POST方法。该方法主要用于发送HTML文本中FORM的内容,让CGI处理。在POST方法中,可以用来携带隐蔽通道数据的域有:URI、消息头和请求消息体。HTTP POST请求信息隐藏方法的好处是当存放信息到消息体,基本上是没有长度限制的。然而在一般使用者浏览网页时,使用到HTTP POST 请求的机会相对较小,若是在隐蔽通道传递过程中,HTTP POST请求出现次数过于频繁,将被IDS发现。
1.2 HTTP响应信息隐藏方法
(1)HTTP响应消息体信息隐藏方法
HTTP响应消息体信息隐藏方法将信息隐藏在HTTP协议的响应消息体中。例如,若要传递“our covert channel start”,可以直接在响应消息体中加入“our covert channel start”的信息。
(2)HTTP Set Cookie方法
HTTP Set Cookie 信息隐藏方法将信息隐藏在服务器到客户端的响应表头中的Set Cookie 域。而且HTTP Set Cookie信息隐藏方法可以被允许频繁传送不同的Set Cookie值。如在浏览购物网站时,若频繁地更换购物车里的内容,将会使服务器一直传送不同的Set Cookie 值给客户端。因此频繁使用HTTP Set Cookie 信息隐藏方法,不会被IDS视为异常。
(3)响应文件信息隐藏方法
当用户浏览网页时,通常会请求服务器回传某些文件,因此可以将信息隐藏在响应文件中进行传输。可以利用Lee 等人所提出的方法,将要传送的信息隐藏在JPEG文件中,再将文件回传给客户端。
2 FHCC_HTTP设计与实现
FHCC技术采用了跳频通信的思想,所谓跳频,是指用伪随机码序列构成跳频指令来控制频率合成器,并在多个频率中进行选择的移频键控。跳频通信要求提供几百个,甚至上万个频率供随机选择,这使得跳频技术成为战术通信的首选抗干扰技术。FHCC技术将不同信息隐藏方法视为不同的频率,依据事先定义好的“跳频序列”交替切换五种请求隐藏方法和三种响应隐藏方法,使网络通信看起来像是正常用户浏览网页,从而避开IDS的监测。
2.1 FHCC_HTTP 的设计
如图1所示,请求方法1为HTTP GET请求CGI信息隐藏方法,请求方法2 为HTTP GET请求URI信息隐藏方法,请求方法3 为HTTP GET Referer URI信息隐藏方法,请求方法4为请求Cookie信息隐藏方法,请求方法5为HTTP POST请求信息隐藏方法;响应方法1 为HTTP响应消息体信息隐藏方法,响应方法2为响应文件信息隐藏方法,响应方法3为HTTP Set Cookie 信息隐藏方法。
双方首先通过安全通道得到完全一致的跳频序列,当第一次进行信息传递时,根据请求序列,第一个数字4为请求Cookie信息隐藏方法,表示FHCC_HTTP Client将采用HTTP POST请求信息隐藏方法传送信息给FHCC_HTTP Server;而根据响应序列,数字3为HTTP Set Cookie信息隐藏方法,表示FHCC_HTTP Server回传信息时将采用HTTP Set Cookie 信息隐藏方法,以此类推。
2.2 FHCC_HTTP 实现
FHCC_HTTP基于C/S模式,用Perl语言编程实现,Perl 语言有很好的网络与字串处理能力,在实现时加入多种信息隐藏方法,并加入跳频序列实现。
(1) 连接控制的实现
在Client每次提出连接请求时,会让Client先送出一组Client与Server事先定义好的GET请求,如“GET/covert_channel_server.cgi?start”,当Server收到这组GET请求,才允许Client此次的连接。
在FHCC_HTTP中,定义X-session字段和X-counter字段,包含在每次请求中,用于控制Client 与Server的连接。X-session 表示不同的会话,每次会话中不同的请求用递增的X-counter加以区分[4]。另外仅利用X-session 字段的存在与否来判断此次请求是否为Covert Channel请求并不能防范replay attack 之类的攻击,因此在实现时,将利用X-counter 值,来确认每次的请求,若是这次的X-counter值没有比上一个请求的X-counter 值加1,FHCC_HTTP将不会把这次请求视为Covert Channel连接请求。
数据的同步和差错控制主要是通过数据包的编号sequence、数据包的个数sendcount和receivecount来实现的。Client通过发送CHECK-NUM-AND- ABSTRACT sendcount messageabstract,Server收到后与本地的receivecount和messageabstract进行比较,如果一致则返回CHECK-WRIGHT;如果丢包就返回CHECK-ERROR-COUNT N…,则要求重发相应的数据包;如果摘要不一致,就返回CHECK-ERROR- ABSTRACT要求全部重发。
(2)跳频序列的实现
依据网络特性的不同,可调整FHCC_HTTP的五种信息隐藏方法的比率,从而使信息隐藏方法比率最适合当下的网络环境。HTTP CC Client 与HTTP CC Server 里定义了多组跳频序列,如在HTTP CC Client 事先定义了五十组跳频序列,在HTTP CC Server 也定义了相同的五十组跳频序列,假设HTTP CC Client 选定了第七组跳频序列,则HTTP CC Client 会先传送一组事先定义好的GET请求:“GET/covert_channel_server.cgi?start7”,请求HTTP CC Server 开始建立此次隐蔽通道并且告知HTTP CC Server 这次隐蔽通道使用第七组跳频序列。
3 仿真实验及结果分析
3.1 隐秘性
隐秘性是隐蔽通道的一个重要参数,目前检测隐蔽通道的最有效的方法是基于行为模式的检测方式。首先利用统计、概率或神经网络等方法建立正常用户的行为模型,将目前的网络流量与正常行为模型进行对比,从而发现可能的异常行为。因此只要使所建立的隐蔽通道的网络流量贴近正常用户的行为模式,将会有效地避开IDS的检测。
以某互联网网页服务器为例,统计出正常用户使用网页的行为模式。如图2所示,通过统计2008年底到2009年初大约一千万条记录发现,大约90%以上的请求属于文件请求(也就是GET URI),且文件类型以jpg与gif类型为最多,因此需调高“跳频序列”中的HTTP GET请求URI信息隐藏方法和响应文件信息隐藏方法(将信息藏入jpg和gif类型的文件中)的使用频率,这样可使隐蔽通道的网络流量更贴近正常用户浏览网页时的网络流量。
3.2 文件传输时间
测试三种传送模式 (不使用隐蔽通道、使用FHCC_TTP隐蔽通道和使用RwwwShell隐蔽通道)的文件传输时间。测试在100 MB的局域网环境下进行,分别传送10 KB、100 KB 以及1 MB 的文件,测试结果如图3所示。
由图3可知,在100 MB的网络中,不使用隐蔽通道传送上述三类文件所需时间都小于1 s。接着利用FHCC_HTTP传送文件,跳频序列A指将每种信息隐藏方法比率都调整为25%,跳频序列B将跳频序列调整为HTTP GET 请求URI 信息隐藏方法比率的90%,HTTP GET请求CGI 信息隐藏方法与HTTP POST 请求信息隐藏方法各为5%。可发现采用跳频序列B数据传输时间增长,这是因为HTTP POST 请求信息隐藏方法的使用量减少,而利用HTTP POST 请求信息隐藏效率最高,因此每减少一次HTTP POST 请求信息隐藏方法,就必须以多次HTTP GET 请求URI 信息隐藏方法或HTTP GET 请求CGI信息隐藏方法来弥补,因此总请求次数大幅增加,造成传输时间增长。最后采用RwwwShell传送文件,因为RwwwShell的数据传送完全采用HTTP GET命令,因此其响应时间最长,隐蔽通道带宽最小。
本文以HTTP下的隐蔽通道为研究对象,设计并实现了一种基于跳频的新的HTTP隐蔽通道技术。该技术以HTTP协议为载体,通过切换多种隐蔽通道构建方法,使网络通信看起来像是正常用户浏览网页,以达到穿透防火墙和躲避入侵检测的目的。
HTTP隐蔽通道已经对防火墙和IDS系统提出了严峻的挑战;因此怎样检测HTTP隐蔽通道成为以后工作的重点[5]。目前已经发现了一些方法可以检测HTTP隐蔽通道,但是怎样将新的方法做成软件并且融合到现有的防火墙技术中去,将是今后工作的重点。
参考文献
[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