网络协议信息隐藏_第1页
网络协议信息隐藏_第2页
网络协议信息隐藏_第3页
网络协议信息隐藏_第4页
网络协议信息隐藏_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章网络协议信息隐藏5.1 基于网络层协议的信息隐藏 【实验目的】【实验目的】 【实验环境】【实验环境】 【原理简介】【原理简介】 【实验步骤】【实验步骤】 【实验结果】【实验结果】 【思考题】【思考题】【实验目的】【实验目的】 掌握网络层信息隐藏的原理,理解在网络层两种主要协议上进行信息隐藏的基本方法,使用VC设计并实现一种网络层信息隐藏算法。【实验环境】 (1) 网络环境:100Mbps交换式以太网,2台主机,其中包括发送端(/24)与接收端(/24); (2) 操作系统:Windows2000或2.4.20以上版本的Linux(如Redhat

2、9和Fedora系列); (3) 编程工具:Microsoft Visual C+ 6.0。【原理简介】【原理简介】 IPV4网络协议设计时存在漏洞,首部存在冗余或可选字段,网络设备对某些字段限制过于宽松,通过精心设计和构造,可以利用这些字段进行信息隐藏以实现隐蔽通信。这种通信不增加额外带宽,很难被网络防火墙和入侵检测系统检测到,容易逃避网络监控,实现信息隐藏的目的。 传统信息隐藏的载体是静态的多媒体数据,而网络隐蔽通道的载体是动态的网络协议的首部,这种载体上的区别是两者最根本的区别;前者依赖于人的视觉或听觉不敏感性,而后者是基于网络协议在语法或语义上的冗余;前者的隐匿性主要对于人感官上的不可

3、感知,而后者的隐匿性是对于网络监控设备而言的。 多媒体数据中存在大量的信息冗余,网络协议数据包中的冗余显然要少许多;多媒体有着复杂的数据结构,任取其中的一个数据(像素、视频帧等)进行数值改写,几乎不会对它的感官效果产生影响,而网络协议的数据包中的各个首部字段都是最简单的“01”比特串,对首部字段取值的改写不但彻底改变了数据包的类型,而且有可能使得这个数据包由于畸形而被丢弃。 网络协议信息隐藏(协议隐写)是一种利用数据包作为掩护载体,将秘密信息隐匿在网络协议的数据包之中的信息隐藏技术,它可以通过网络协议数据包中的保留、可选、未定义等字段和数据包的顺序、数量、到达时间、特定时间流量以及其它可被利用

4、的特征,在网络中不同的主机之间建立隐蔽通信。 利用协议隐写进行隐蔽通信时,发送端在协议数据包中使用嵌入算法嵌入秘密信息,得到携密数据包,可将隐蔽通信划分为6种模式: 上图中的嵌入进程即为隐蔽通信的发送方,提取进程为接收方。根据网络通信的实际情况,6种模式中其实只有模式A和模式C是可行的。由于模式C需要重写操作系统的网络协议驱动,故此处采用模式A,即发送方自己产生载体(即正常协议数据包),发送方和接收方分别是数据流的始点和终点,如下图: 在上图中,发送端的嵌入进程将秘密信息嵌入数据包的首部,通过网络传输后,接收方利用检测进程检测出携带秘密信息的数据包后提取出信息,根据用户的需要可以保存成文件,也

5、可立即显示。 最早被用来进行协议隐写的协议是IP协议,其首部如下图所示,图中灰色阴影部分可直接用于隐藏信息。 网络层的另一种协议是ICMP(互联网控制报文协议),它通常被IP层或更高层协议用来传递差错报文,下面介绍利用ICMP的8位代码字段进行协议隐写的原理。 ICMP的报文格式根据前16个字节的变化而各有不同,下图是回显应答和回显请求报文的格式。 针对ICMP协议,实现信息发送程序,在接收端利用原始套接字进行嗅探接收。先对一个首部字段填写自定义数值、其它字段填充正常值,然后发送该数据包,记录嗅探器的嗅探结果。以ICMP为例,测试隐写载体的发送程序如下页图所示。 对ICMP的所有首部字段进行实

6、验,发现所有的首部字段都可随意设置,虽然RFC规定了ICMP回显请求和回显应答的报文格式,但8位代码字段的取值对报文的功能没有任何影响,模拟Ping程序在8位代码字段设置为任意值的情况下仍能从远端主机返回回显应答,表明此字段是协议隐写的良好载体。【实验步骤】【实验步骤】 1.算法描述 2.数据结构 3.算法实现1.算法描述 实验的主要思路是在网络层实现信息发送及接收程序,由于在底层实现该程序,需要手工构造IP报文的首部字段来自定义发送数据包,因此必须使用Raw Socket编程。Raw Socket允许程序绕过系统内核而直接访问底层协议,因此IP层的封装工作就要用手工填充数据的方法实现,而不是

7、由操作系统自动完成。由于Raw Socket经常被用来编写网络扫描程序等恶意软件,微软在Windows XP的协议驱动tcpip.sys中,基于安全考虑已经对利用Raw Socket发送数据包进行了限制,故底层数据包发送程序在Windows 2000下通过VC6.0实现。由于使用原始套接字发送数据包,数据包的某些字段还被用来隐藏信息,接收端不能用普通的Recv( )或Recvfrom( )来接收数据包,只能采用嗅探的方式接收发送方的数据。但网络中的数据包很多,这又会产生识别特定数据包的问题,在程序实现时,除在接收端根据源IP地址、目的IP地址、协议等字段设置规则进行过滤外,还在发送端对IP标志

8、的最高位进行了置位,只有符合这些规则的数据包才会被接收。流式套接字编程对上层应用提供了可靠的服务,而使用Raw Socket发送数据包则没有这样的保证,容易造成丢包等情况,程序仅为验证隐蔽通信的可行性,没有考虑对乱序、丢包、数据错误的处理。另外,仅给出关键代码,有关界面编程的内容不再赘述,可参考附件中的源程序。2.数据结构 协议20字节的IP头typedef struct _IPHeader定义ICMP报头(回显请求与回显应答)typedef struct _ICMPHeader3.算法实现算法分为两个部分实现: 嵌入算法 提取算法【实验结果】【实验结果】下面对上文的内容进行实验验证,嵌入程序

9、发送一个名为“test.txt”的文件, 内容为“Network covert communication has been a key technology in the research of network security technologies.”,提取程序在接收端主机上运行,显示被隐写的数据包的相关信息,实验结果如图所示。 上图中的Code就是文件test.txt所对应字符的ASCII码。需要说明的是,上文给出的提取程序在解析嗅探到的数据包时可支持ICMP、TCP和UDP三种协议,嵌入程序在发送时将识别号和序列号设置为“1234”与“5678”,实际上还可以用函数GetCurre

10、ntProcessId()提取当前进程ID赋给识别号,将每个ICMP数据包的序列号依次设置为一个递增的整数。另外,在模拟Ping的过程中,发现Windows系统自带的Ping程序默认发送的选项数据是32字节的一段小写字母,其内容为“abcdefgh-ijklmnopqrstuvwabcdefghi”,为了不使隐写分析者发现选项数据的异常,可将选项数据填充成和系统一致。【思考题】【思考题】 1.根据图5.1.3,设计并实现一种基于IP标识字段的协议隐写方法。 2.分析IP数据包的选项字段(共5种类型),思考利用IP数据包的选项字段实现协议隐写的可行性。 3.查阅IPv6的文档(RFC2460)或

11、相关资料,分析在IPv6上进行协议隐写的可能性。5.2 基于传输层协议的信息隐藏 【实验目的】【实验目的】 【实验环境】【实验环境】 【原理简介】【原理简介】 【实验步骤】【实验步骤】 【实验结果】【实验结果】 【思考题】【思考题】【实验目的】 掌握传输层信息隐藏的原理,理解在传输层两种主要协议上进行信息隐藏的基本方法,使用VC设计并编程实现一种传输层信息隐藏算法。【实验环境】 (1) 网络环境:100Mbps交换式以太网,2台主机,其中包括发送端(/24)与接收端(/24); (2) 操作系统:Windows2000或2.4.20以上版本的Linu

12、x(如Redhat9和Fedora系列); (3) 编程工具:Microsoft Visual C+ 6.0,WinPcap开发包(版本3.0以上)。【原理简介】 在传输层中,TCP和UDP都使用相同的网络层,TCP向应用层提供一种面向连接的、可靠的字节流服务,而UDP提供的是无连接的、不可靠的字节流服务。在TCP与UDP上都可以进行信息隐藏,本节以TCP为例进行说明,其首部格式如下图所示。 TCP序列号是一个32位的字段,用以标识从TCP发送端向TCP接收端发送的数据字节流,它保证了传输的可靠性。正常的TCP连接建立分三步,具体原理如下图所示。请求端发送一个SYN段指明请求端打算连接的服务器

13、的端口以及ISN;服务器发回包含服务器ISN的SYN报文段作为应答,同时将确认号设置为请求端的ISN加1以对请求端的SYN报文段进行确认;请求端必须将确认号设置为服务器的ISN加1对服务器的SYN报文段进行确认。 利用TCP数据包的32位序列号隐藏信息的方法原理如下图所示。 该方法只完成了正常三次握手中的第一步就实现了秘密信息的传输。由于事先已对此种报文做过定义,接收端将不会发送ACK信息,因此避免了接收端认为受到了SYN Flood攻击。发送端间隔1秒发送数据包是为了防止在接收端一方发生数据包乱序的现象。SEQ域的信息可以经过编码或加密,在实际实现中一般是将隐匿信息的ASCII码乘以256。

14、该方法的可靠性较差,在理想情况下,嵌入效率为每个数据包16比特。【实验步骤】【实验步骤】 1.1.算法描述算法描述实验的主要思路与5.1节相似,为掌握更多协议隐写的实现手段,这里介绍使用WinPcap进行数据嗅探的方法。 2.2.数据结构数据结构20字节的TCP头、定义TCP伪报头 3.3.算法实现算法实现算法分为两个部分实现: 嵌入算法 提取算法【实验结果】 TCP隐写的嵌入程序 TCP隐写的提取程序 提取的秘密信息 由于WinPcap嗅探的数据包中包含14字节的以太网首部,加上IP、TCP首部的40字节和TCP测试数据(This is a test rn)的17字节,图中的长度为71。需要

15、说明的是,提取程序设置了每20个数据包显示一次消息,故长度为104字节的消息只能在对话框中显示出80字节,图中的最后一个序列号1953984370就是对话框最后四个字符“twor”的ASCII码。除此之外,提取程序定义了过滤规则,只有满足IP分片R标记和TCP的SYN标记被置位、IP源地址为的数据包才会被处理。提取程序还可将对方发送的信息存储为ISN_Data.dat文件,并将每个ISN的数字按序号保存在TCP_SYN.txt中,以便进行进一步分析。【思考题】【思考题】 1.根据本节介绍的TCP隐写原理,分析UDP协议的相关字段,实现基于UDP的协议隐写。 2.采集win

16、dows系统原始的TCP数据包,对其序列号字段进行统计分析,思考如何检测出这种协议隐写。5.3 基于应用层协议的信息隐藏 【实验目的】【实验目的】 【实验环境】【实验环境】 【原理简介】【原理简介】 【实验步骤】【实验步骤】 【实验结果】【实验结果】 【思考题】【思考题】【实验目的实验目的】 掌握应用层信息隐藏的原理,理解在应用层主要协议上进行信息隐藏的基本方法,利用VC设计并编程实现一种应用层信息隐藏算法。【实验环境实验环境】 (1) 网络环境:100Mbps交换式以太网,2台主机,其中包括发送端(/24)与接收端(/24); (2) 操作系统:W

17、indows2000或2.4.20以上版本的Linux(如Redhat9和Fedora系列); (3) 浏览器:IE5.0 (4) 编程工具:Microsoft Visual C+ 6.0,WinPcap开发包(版本3.0以上)。【原理简介】【原理简介】 低层协议中的协议隐写健壮性不强、隐写效率不高,实现过程复杂、容易被检测器检测,难以穿越NAT和代理型防火墙,并且由于使用预留、填充、可选字段,容易受主动攻击破坏。近年来,协议隐写有向上层协议发展的趋势。由于防火墙和路由器一般不检查应用层协议,这使得应用层协议隐写更容易实施。TCP/IP协议族中的应用层协议十分丰富,包括SMTP、FTP、SSH

18、、LDAP(分布式路径协议)等,每个应用层协议都具有复杂的通信和控制机制,十分适合隐藏信息。 HTTP协议产生的流量仅次于P2P位列第二,是互联网中应用最广泛的应用层协议之一。同时,该协议具有复杂的报头,是穿透防火墙等网络访问控制系统的理想协议,本节主要介绍如何使用HTTP协议来隐藏信息。HTTPHTTP概述概述HTTP(超文本传输协议)建立在请求/响应(Request/Response)模型上,首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URL、协议版本以及相关的MIME(Multipurpose Internet Mail Extensions)样式

19、消息。服务器返回响应报文,包含消息的协议版本、一个成功或失败码以及相关的MIME式样消息(包含服务器的信息、资源实体的信息和可能的资源内容)。HTTP是一个无状态的协议,使用TCP作为底层运输协议。HTTP客户机发起一个与服务器的TCP连接,一旦连接建立,浏览器和服务器进程就可以通过套接字进行面向连接的交互通信。HTTP的报文有两种,请求报文和响应报文。 HTTP请求报文的一般格式如下图所示:图中SP表示空格(Space),CRLF表示回车换行(Carriage Return and Line Feed)。HTTP请求报文每行用一个回车换行符结束,最后一行后跟有附加的回车换行符。第一行叫做请求

20、行,后继的行叫做首部行。 请求行有三个字段:方法字段、URL字段和HTTP协议版本字段。方法字段可以取值GET、POST、HEAD、OPTION、PUT、DELETE、TRACE、CONNECT,最常用的是前面三种,其含义如下:GET请求,返回Request-URI所指定的任意信息。HEAD请求,类似于GET请求,但服务器程序只返回指定文档的首部信息,而不包含实际的文档内容。该请求通常被用来测试超文本链接的正确性、可访问性和最近的修改。POST请求用来发送电子邮件、新闻或发送能由交互用户填写的表格。这是唯一需要在请求中发送实体主体(Body)的请求。使用POST请求时需要在报文首部Conten

21、t-Length字段中指出Body的长度。HTTP协议仍在不断发展,现在的较新版本是1999年在RFC2616中公布的HTTP/1.1,它已经成为互联网草案标准。有关HTTP的其它技术细节可参阅有关文献,在此不再赘述。 协议机制分析协议机制分析 HTTP是一种应用层协议,由于面向用户,协议的制定者基于友好性的考虑,为HTTP设计了自容错、强纠错的特性。协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行会话。同时,HTTP是建立在TCP基础上的请求响应模式的协议,该模式的基本工作原理如图示。 上图中的第一步和最后一步是TCP连接的建立和释放,

22、与一般的TCP应用没有区别,在关键的中间两步,客户机与服务器实现了HTTP报文的交互。这个交互过程不是严格正确的理想过程,经常出现由于种种原因产生畸形报文的情况。 HTTPHTTP报文构造试验报文构造试验 HTTP请求包括三种方法,下面以GET方法为例,通过报文构造试验研究HTTP中的协议隐写。实验的主要思路是利用自编的CovertHTTP_Sender来构造自定义HTTP请求报文,反复模拟IE向Web服务器发送GET请求,同时捕获服务器对每一个请求的HTTP响应报文,并判断其是否正常,以此来发现HTTP中的语义冗余。 获得获得IEIE的标准的标准GETGET请求请求 首先需要得到普通浏览器软

23、件产生的标准HTTP请求报文,下面考察Microsoft Windows 2000 SP4下Internet Explorer 5.0的GET请求头数据,下文所有的协议隐写将全部以此为例。通过IE访问IP地址为7的Web服务器,该服务器安装的信息服务软件为Microsoft-IIS/5.1,同时运行自编嗅探器IPMonitor,得到的结果如下页图所示。 第一行是HTTP请求报文的请求行,指明了该请求采用的是GET方法,后续的行是首部行,分别指明了客户端浏览器接受的媒体类型、语言、编码方式和浏览器版本、远端主机、连接选项。上述每个字段都有明确的用途,似乎不存在冗余。 下面是

24、截获到TCP三次握手成功后HTTP请求报文中数据段的内容: IE5.0的GET请求报文 向服务器发送自定义向服务器发送自定义HTTPHTTP请求请求在得到标准GET请求的数据内容后,开始以此内容为基础模拟IE向Web服务器发送请求报文,报文构造试验的原理如图所示。 在报文发送过程中,由于请求报文可能非法,Web服务器会产生各种响应报文,当返回的报文头为“HTTP/1.1 200 OK”时,说明此报文可从服务器正常返回网页,故该次试验所产生的报文在功能上可以等同于IE的标准请求报文。 利用自编CovertHTTP_Sender产生与IE的标准请求一样的HTTP报文,然后将报文中数据段的首部行不断

25、减少,发现服务器的响应报文全部正常。经过数次试验,发现上述数据报文可简化到请求行,在只剩“GET / HTTP/1.1”的情况下仍可从服务器正常返回网页,实验效果如图所示。 在得出首部行全部为冗余行的同时,经过进一步实验,发现包括上述首部行在内的所有首部行(不同操作系统下Opera、Firefox、Netscape等浏览器的多个版本会产生不同的首部行)中,存在如标识符号不敏感、大小写无关等诸多冗余,这为协议隐写创造了条件。 【实验步骤实验步骤】 1.1.算法描述算法描述 2.2.算法实现算法实现1.算法描述在HTTP协议中,可通过空白隐写术、大小写混排编码、非默认首部字段值、微调URI特殊符号

26、、自定义消息报头域、二进制对象排序隐藏等几种方法实现协议隐写,算法实现时仅介绍利用自定义消息报头域进行信息隐藏的方法。 空白隐写术空白隐写术 所谓空白隐写术就是在文本文件一行的末尾附上Space和Tab等不可显示字符,由于Space和Tab出现在行尾时是不可见的,这就使得信息可以隐藏在文本文件中,并且不会影响整个文本的显示。HTTP报头中,首部字段名后都可以随意嵌入Space和Tab,无论是首部字段值之中还是行尾,都不会影响报文的功能。 下面以示例请求报文为例说明隐写过程,为方便显示,以SP表示Space,HT表示Tab(Horizontal Tab),CRLF表示回车换行。 上例中的请求行“

27、GET / HTTP/1.1”未隐藏信息,将SP编为“0”、HT编为“1”,则该请求报文隐匿传送了“HELLO!”。 大小写混排编码大小写混排编码HTTP报文由普通ASCII文本书写,因此它只能表示英文字母、数字和简单标点符号,请求报文的请求行严格区分英文字母的大小写,但首部行对大小写的变化却不敏感。这种大小写无关意味着HTTP报文提供了近12.5%的空间隐藏秘密信息。例如: 将小写字母编为“0”、大写字母编为“1”,则该请求报文隐匿传送了“EVE BETRAY US”。但是,若此报文被网络上的隐写分析者捕获到,很容易引起怀疑,因为没有哪个程序员会有这样怪异的书写习惯。改进方法是将原始报文全部

28、置为小写,然后改动报文英文单词的首字母大小写方式,首字母小写编为“0”、首字母大写编为“1”。例如: 上述HTTP报文隐藏了16比特的信息“0 xDC53”,而这样的编码方式不至于引人注目,但代价是大大减小了隐写效率。 非默认首部字段值非默认首部字段值 上文提到的HTTP请求报文仅用一句“GET / HTTP/1.1”就可替代,原因在于特定浏览器发送请求报文的报头域参数都有默认值,如果报文中没有此报头域,服务器端就会认为浏览器使用相应的默认选项。比如Windows 2000下IE 5.0的GET请求头数据中,Accept的默认值是“*/*”,而实际上该值还可以为“image/ gif, tex

29、t/html, application/vnd.ms-excel”等。例如: 因此,如将使用默认值编为“0”、使用其它值编为“1”,则该请求报文隐匿传送了比特串“110001”,该方法具有强健壮性,不容易遭受蓄意攻击,但隐写效率较差。 微调微调URIURI特殊符号特殊符号URI即统一资源标识符(Uniform Resource Identifiers),它用于唯一地标识元素或属性的数字或名称,常用的URL就是一种特殊的URI。HTTP程序在实现时屏蔽了用户之间可能存在的差异,包括用户的错误输入、简化输入等。最明显的例子在“/”、默认端口和单双引号上,比如“http:/ :/”、“ http:/

30、 :80”在HTTP中代表同样的含义。而在查询资源Cookie时报头域要用到的If-None-Match默认使用双引号来标识资源哈希值,如:If-None-Match: 0c41a86ad11c11:1aec HTTP报头中还有几种标点符号括号、冒号、逗号、分号和等于号,它们本身不具有冗余性,但它们对周围的空格变化不敏感。前四种在每一个首部行都中有使用,等于号在短时间内再次发送同样资源请求的HTTP报头中存在。举例如下: 标点符号左右以不出现空格编为“0”,出现空格编为“1”,每个符号可携带2比特信息,上例隐匿传送了比特串“100101100111100101”,该方法具有很强隐蔽性,报文即使

31、被攻击者截获也很难发现存在隐蔽通信。 自定义消息报头域自定义消息报头域HTTP报文首部行常用字段接近20种,请求报文常用字段共9种。HTTP程序的多样化,使新版本客户端发送的HTTP报头经常出现服务器端无法识别的情况(如HTTP/1.1的请求报文发送到了只支持HTTP/1.0的服务器上),此时服务器会忽略这样的字段,只提供可识别字段所对应的服务,HTTP代理也会原样转发这样的字段。因此,可以通过自定义消息报头域来隐藏秘密信息,例如: 该方法与上文的区别是采用了直接嵌入的形式,使得隐藏信息的容量可以随意扩充,隐写效率也很高,但由于秘密信息以明文存在,透明性不强,可以采用加密算法(如DES、AES)对秘密信息加密传输。需要注意的是,经过加密后,输入信息的比特流成随机分布,很可能出现一个字节的第一比特为1的情况,而标准ASCII的最高位恒为0。这样,HTTP在传输过程中可能会将每字节的最高位置零,在到达接收端后,解密得不到原始秘密信息。解决该问题可采用BASE64编码,将3个8比特的信息编码成4个6比特的信息,便不会在传输时受到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论