网络协议信息隐藏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 上图中的Code就是文件test.txt所对应字 符的ASCII码。需要说明的是,上文给出 的提取程序在解析嗅探到的数据包时可支 持ICMP、TCP和UDP三种协议,嵌入程序在 发送时将识别号和序列号设置为“1234” 与“5678”,实际上还可以用函数 GetCurrentProcessId()提取当前进程ID 赋给识别号,将每个ICMP数据包的序列号 依次设置为一个递增的整数。另外,在模 拟Ping的过程中,发现Windows系统自带 的Ping程序默认发送的选项数据是32字节 的一段小写字母,其内容为“abcdefghijklmnopqrstuvwabcdefghi”,为了不使 隐写分析者发现选项数据的异常,可将选 项数据填充成和系统一致。
第五章
网络协议信息隐藏
5.1 基于网络层协议的信息隐藏
• 【实验目的】 • 【实验环境】 • 【原理简介】 • 【实验步骤】 • 【实验结果】 • 【思考题】
【实验目的】
• 掌握网络层信息隐藏的原理, 理解在网络层两种主要协议上 进行信息隐藏的基本方法,使 用VC设计并实现一种网络层信 息隐藏算法。
=0
• 该方法只完成了正常三次握手中的第一 步就实现了秘密信息的传输。由于事先 已对此种报文做过定义,接收端将不会 发送ACK信息,因此避免了接收端认为 受到了SYN Flood攻击。发送端间隔1秒 发送数据包是为了防止在接收端一方发 生数据包乱序的现象。SEQ域的信息可 以经过编码或加密,在实际实现中一般 是将隐匿信息的ASCII码乘以256。该方 法的可靠性较差,在理想情况下,嵌入 效率为每个数据包16比特。
U R G A C K P S H R S T S Y N F I N
16位目的端口号
16位窗口大小 16位紧急指针
选项(若有) 填充
• TCP序列号是一个32位的字段,用以标识从TCP发送端 向TCP接收端发送的数据字节流,它保证了传输的可 靠性。正常的TCP连接建立分三步,具体原理如下图 所示。
2.数据结构
• 协议 20字节的IP头 typedef struct _IPHeader 定义ICMP报头(回显请求与回 显应答) typedef struct _ICMPHeader
3.算法实现
算法分为两个部分实现: • 嵌入算法 • 提取算法
【实验结果】
• 下面对上文的内容进行实验验证,嵌入程序发送一个名为 “test.txt”的文件, 内容为“Network covert communication has been a key technology in the research of network security technologies.”,提取程 序在接收端主机上运行,显示被隐写的数据包的相关信息, 实验结果如图所示。
D:
嵌入 进程 嵌入 进程
正常数据包
携密数据包
携密数据包
E:
正常数据包
F:
携密数据包
携密数据包
• 上图中的嵌入进程即为隐蔽通信的发送方,提取进程 为接收方。根据网络通信的实际情况,6种模式中其 实只有模式A和模式C是可行的。由于模式C需要重写 操作系统的网络协议驱动,故此处采用模式A,即发 送方自己产生载体(即正常协议数据包),发送方和 接收方分别是数据流的始点和终点,如下图:
SYN:SEQ =ISN(a),A CK=0
(a)+1 N S I = K C SN(b),A I = Q E S : SYN|ACK
请求端:a
ACK:SEQ
=ISN(a)+ 1
,ACK=IS N
服务器端:b
(b)+1
• 请求端发送一个SYN段指明请求端打算连接的服务器的端口以及ISN; • 服务器发回包含服务器ISN的SYN报文段作为应答,同时将确认号设置 为请求端的ISN加1以对请求端的SYN报文段进行确认; • 请求端必须将确认号设置为服务器的ISN加1对服务器的SYN报文段进行 确认。
• 利用协议隐写进行隐蔽通信时,发送端在协议数据 包中使用嵌入算法嵌入秘密信息,得到携密数据包, 可将隐蔽通信划分为6种模式:
A:
嵌入 进程 正常数据包 嵌入 进程 嵌入 进程 嵌入 进程 携密数据包 携密数据包 携密数据包 提取 进程 携密数据包 提取 进程 正常数据包
B:
C:
正常数据包
提取 进程 提取 进程 提取 进程 提取 进程
公开信道(overt channel)
发送端
嵌入进程
检测进程
接收端
隐蔽通道(covert channel)
• 在上图中,发送端的嵌入进程将秘密信息嵌入数据包的首部, 通过网络传输后,接收方利用检测进程检测出携带秘密信息 的数据包后提取出信息,根据用户的需要可以保存成文件, 也可立即显示。 • 最早被用来进行协议隐写的协议是IP协议,其首部如下图所 示,图中灰色阴影部分可直接用于隐藏信息。
• 【实验目的】 • 【实验环境】 • 【原理简介】 • 【实验步骤】 • 【实验结果】
• 【思考题】
【实验目的】
• 掌握传输层信息隐藏的原理, 理解在传输层两种主要协议上 进行信息隐藏的基本方法,使 用VC设计并编程实现一种传输 层信息隐藏算法。
【实验环境】
• (1) 网络环境:100Mbps交换式以太 网,2台主机,其中包括发送端 (192.168.0.1/24)与接收端 (192.168.0.2/24); • (2) 操作系统:Windows2000或 2.4.20以上版本的Linux(如Redhat9 和Fedora系列); • (3) 编程工具:Microsoft Visual C++ 6.0,WinPcap开发包(版本3.0 以上)。
【原理简介】
• 在传输层中,TCP和UDP都使用相同的网络层,TCP向应 用层提供一种面向连接的、可靠的字节流服务,而UDP 提供的是无连接的、不可靠的字节流服务。在TCP与 UDP上都可以进行信息隐藏,本节以TCP为例进行说明 ,其首部格式如下图所示。
0 8 16 24 31
16位源端口号 32位序列号 32位确认号 4位首部长 度 保留(6位) 16位TCP校验和
0 8 16 24 31
4位版本
4位首部长 度
8位服务类型(TOS)
wenku.baidu.com
16位总长度(字节)
16位标识
8位生存时间(TTL) 8位协议
3位标 志
13位片偏移 16位首部校验和
32位源IP地址 32位目的IP地址
选项(若有)
填充
• 网络层的另一种协议是ICMP(互联网控制报文协议), 它通常被IP层或更高层协议用来传递差错报文,下面 介绍利用ICMP的8位代码字段进行协议隐写的原理。 • ICMP的报文格式根据前16个字节的变化而各有不同, 下图是回显应答和回显请求报文的格式。
【原理简介】
• IPV4网络协议设计时存在漏洞,首部存在 冗余或可选字段,网络设备对某些字段限 制过于宽松,通过精心设计和构造,可以 利用这些字段进行信息隐藏以实现隐蔽通 信。这种通信不增加额外带宽,很难被网 络防火墙和入侵检测系统检测到,容易逃 避网络监控,实现信息隐藏的目的。 • 传统信息隐藏的载体是静态的多媒体数据, 而网络隐蔽通道的载体是动态的网络协议 的首部,这种载体上的区别是两者最根本 的区别;前者依赖于人的视觉或听觉不敏 感性,而后者是基于网络协议在语法或语 义上的冗余;前者的隐匿性主要对于人感 官上的不可感知,而后者的隐匿性是对于 网络监控设备而言的。
• 由于使用原始套接字发送数据包,数据包的某些 字段还被用来隐藏信息,接收端不能用普通的 Recv( )或Recvfrom( )来接收数据包,只能采用 嗅探的方式接收发送方的数据。但网络中的数据 包很多,这又会产生识别特定数据包的问题,在 程序实现时,除在接收端根据源IP地址、目的IP 地址、协议等字段设置规则进行过滤外,还在发 送端对IP标志的最高位进行了置位,只有符合这 些规则的数据包才会被接收。 • 流式套接字编程对上层应用提供了可靠的服务, 而使用Raw Socket发送数据包则没有这样的保证 ,容易造成丢包等情况,程序仅为验证隐蔽通信 的可行性,没有考虑对乱序、丢包、数据错误的 处理。另外,仅给出关键代码,有关界面编程的 内容不再赘述,可参考附件中的源程序。
提 取的 秘密 信息

• 由于WinPcap嗅探的数据包中包含14字节的 以太网首部,加上IP、TCP首部的40字节和 TCP测试数据(This is a test \r\n)的17 字节,图中的长度为71。需要说明的是,提 取程序设置了每20个数据包显示一次消息, 故长度为104字节的消息只能在对话框中显 示出80字节,图中的最后一个序列号 1953984370就是对话框最后四个字符 “twor”的ASCII码。除此之外,提取程序 定义了过滤规则,只有满足IP分片R标记和 TCP的SYN标记被置位、IP源地址为 192.168.0.1的数据包才会被处理。提取程 序还可将对方发送的信息存储为 ISN_Data.dat文件,并将每个ISN的数字按 序号保存在TCP_SYN.txt中,以便进行进一
【实验步骤】
• 1.算法描述 • 2.数据结构 • 3.算法实现
1.算法描述
• 实验的主要思路是在网络层实现信息发送 及接收程序,由于在底层实现该程序,需 要手工构造IP报文的首部字段来自定义发 送数据包,因此必须使用Raw Socket编程。 Raw Socket允许程序绕过系统内核而直接 访问底层协议,因此IP层的封装工作就要 用手工填充数据的方法实现,而不是由操 作系统自动完成。由于Raw Socket经常被 用来编写网络扫描程序等恶意软件,微软 在Windows XP的协议驱动tcpip.sys中, 基于安全考虑已经对利用Raw Socket发送 数据包进行了限制,故底层数据包发送程 序在Windows 2000下通过VC6.0实现。
【实验步骤】
• 1.算法描述
实验的主要思路与5.1节相似,为掌握更 多协议隐写的实现手段,这里介绍使用 WinPcap进行数据嗅探的方法。
• 2.数据结构
20字节的TCP头、定义TCP伪报头
• 3.算法实现
算法分为两个部分实现: 嵌入算法 提取算法
【实验结果】
• TCP隐写的嵌入程序
• TCP隐写的提取 程序
【思考题】
• 1.根据图5.1.3,设计并实现一种基 于IP标识字段的协议隐写方法。 • 2.分析IP数据包的选项字段(共5种 类型),思考利用IP数据包的选项 字段实现协议隐写的可行性。 • 3.查阅IPv6的文档(RFC2460)或相 关资料,分析在IPv6上进行协议隐 写的可能性。
5.2 基于传输层协议的信息隐藏
• 多媒体数据中存在大量的信息冗余,网络 协议数据包中的冗余显然要少许多;多媒 体有着复杂的数据结构,任取其中的一个 数据(像素、视频帧等)进行数值改写,几 乎不会对它的感官效果产生影响,而网络 协议的数据包中的各个首部字段都是最简 单的“01”比特串,对首部字段取值的改 写不但彻底改变了数据包的类型,而且有 可能使得这个数据包由于畸形而被丢弃。 • 网络协议信息隐藏(协议隐写)是一种利用 数据包作为掩护载体,将秘密信息隐匿在 网络协议的数据包之中的信息隐藏技术, 它可以通过网络协议数据包中的保留、可 选、未定义等字段和数据包的顺序、数量、 到达时间、特定时间流量以及其它可被利 用的特征,在网络中不同的主机之间建立 隐蔽通信。
• 利用TCP数据包的32位序列号隐藏信息的方法原理如下 图所示。
SYN:SEQ
等待1秒
=‘H’,A CK
=0
等待1秒
SYN:SEQ =‘E’,A SYN:SEQ =‘L’,A SYN:SEQ =‘L’,A SYN:SEQ
忽略返回ACK
CK=0 CK=0
接收端b
等待1秒
发送端a
等待1秒
CK=0
=‘O’,A CK
0 8 16 24 31
8位类型(0或8) 16位标识符
8位代码(0)
16位校验和 16位序号
选项数据
• 针对ICMP协议,实现信息发送程序,在接 收端利用原始套接字进行嗅探接收。先对 一个首部字段填写自定义数值、其它字段 填充正常值,然后发送该数据包,记录嗅 探器的嗅探结果。以ICMP为例,测试隐写 载体的发送程序如下页图所示。 • 对ICMP的所有首部字段进行实验,发现所 有的首部字段都可随意设置,虽然RFC规 定了ICMP回显请求和回显应答的报文格式, 但8位代码字段的取值对报文的功能没有 任何影响,模拟Ping程序在8位代码字段 设置为任意值的情况下仍能从远端主机返 回回显应答,表明此字段是协议隐写的良 好载体。
【实验环境】
• (1) 网络环境:100Mbps交换 式以太网,2台主机,其中包 括发送端(192.168.0.1/24)与 接收端(192.168.0.2/24); • (2) 操作系统:Windows2000 或2.4.20以上版本的Linux (如Redhat9和Fedora系列); • (3) 编程工具:Microsoft Visual C++ 6.0。
相关文档
最新文档