目录
写在前面
本文基于《(2019秋季)信息论与编码》课程实验的实验报告撰写,目的在于分享交流。
实验选题:
基于Internet网的隐蔽传输方案设计与实现。
实验任务:
(1)针对Internet网络,采用压缩编码、纠错编码方法,设计并实现一种隐蔽传输的方案;
(2)方案需考虑网络传输实际情况,如丢包等。
实验要求:
(1)信源类型:语音、文本、图片、视频等;
(2)需进行方案的隐蔽效果及性能的评估;
(3)与某一种现有隐蔽方案进行对比。
传统的基于ICMP的隐蔽传输方案是直接利用data字段,隐蔽性较差,容易被探测。
本方案的优势:
①能确保不被防火墙拦截,保证隐蔽传输的顺利进行;
②不改变ICMP报文的默认结构,表现出较高的隐蔽性能;
③通过对ICMP报文的精心设计,较为有效地克服了网络传输实际情况产生的丢包和乱序的干扰,表现出了较高的可靠性。
背景知识:
关于ICMP隐蔽隧道基本介绍可参考《小白必看!ICMP隐蔽隧道从入门到精通》一文。
源码及相关说明已上传至CSDN,喜欢的话请给个好评。
实验报告
【实验名称】
基于Internet网的隐蔽传输方案设计与实现。
【实验目的】
通过实验,了解隐蔽通信工作原理及方式,采用压缩编码、纠错编码方法,考虑网络传输实际情况,设计并实现一种基于Internet网的隐蔽传输方案。
【实验方案】
将隐蔽信息经过哈夫曼编码后提取其二进制值,将这些二进制值进行BCH纠错编码。随后在本地生成一系列携带有隐蔽信息的ICMP报文,实现基于公开Internet信道的隐蔽传输。
ICMP报文的格式如下:
考虑在Internet网络中无时无刻都在传递着数以万计的报文,将报文作为隐蔽信息的载体隐藏在流量巨大的报文之中,这是个可取并合理的选择。但是在这遍布防火墙的公开信道上,并不是所有报文都能顺利地在各个主机间传递。我们选择ICMP报文作为隐蔽传输的载体,就是出于对这方面的考虑。ICMP报文作为判断网络连通有无的工具,几乎所有的防火墙都不会对其进行拦截,而且ICMP报文作为网络层传输的报文,不会受到端口屏蔽的影响。但是并不是所有类型的ICMP报文都是可取的。例如类型字段值为8的ICMP回显请求报文,Windows防火墙默认是对其进行禁止接收的。我们选择类型字段值为0的ICMP回显应答报文作为我们的信息载体,因为这一类型的ICMP报文防火墙不会禁止,如果禁止了接受回显应答报文,那么系统的ping服务就失去了其应有的功能。通过查阅资料发现,绝大多数的文章都是直接将待传输的数据存储在ICMP报文的数据部分,这其实并不安全,因为无论是Windows还是Linux操作系统,其数据部分字段都是默认的,很容易通过数据部分的检查来发现是否有隐蔽信道的存在,甚至直接看见所传递的信息。
因此我们必须自己设计一种新的信息嵌入方式。
ICMP报文中,源IP地址可以是任意的,因为对于事先约定好的收发端而言,源IP地址其实无关紧要。因此我们可以将信息嵌入报文的源IP地址之中,将奇数的IP地址表示二进制信息“1”,将偶数的IP地址表示二进制信息“0”,从而一个ICMP报文便能表示1比特的信息。
考虑到网络传输实际情况,由于网络可能出现拥塞延迟,接收端收到报文的顺序将和发送端不一致,甚至即使发生了丢包,接收端也不知道丢的是哪一位的数据,接收端甚至不知道要发送的信息究竟有多长。为解决上述问题,我们将待传数据的长度嵌入在ICMP的id字段,将顺序嵌入在ICMP的序列号字段,考虑到在ICMP报文中这两字段的任意性,因此嵌入的信息并不会被检测到发现到。由于这两字段分别占两个字节,因此最多只能发送即8KB左右的数据。考虑到IP报文头的id字段也是任意生成的,因此我们可以将IP报文头的id的前一个字节利用起来,将其中的前半个字节给IMCP的id字段作扩展,将其中的后半个字节给ICMP的序列号字段作扩展,从而发送数据的上限便扩大到即128KB左右的大小。此外,我们将IP报文头id字段的后一个字节随机赋值,保持了IP报文头的id字段的随机性。另外,也可以将诸如源ip的部分字段再进一步地利用起来,以类似的方式进一步地扩大发送数据的上限。
此外,为了接收端能在Internet信道中传输的若干报文中有效地筛选到携带着信息的ICMP报文,我们需要将ICMP报文设计成特定格式方便接收端筛选。我们发现Linux下的ICMP报文数据部分前3个字节是任意的,于是我们将第一个字节存储的数据随机生成为3的倍数,将第二个字节的数据随机生成为7的倍数,那么接收端只要对接收的ICMP报文的数据部分进行检查便能针对性地得到所要接收的信息,而这对于不知道这一约定的第三方而言,只是一串无意义的看似正常的随机信息。
通过以上对ICMP报文的精心构造,使得ICMP报文在能够成为传递消息载体的同时,保持了ICMP报文的默认构造,大大加强了信息传递的隐蔽性。
我们设计的方案:
发送端传输文件的过程为:①Huffman压缩编码,②提取二进制值,③BCH纠错编码,④生成一系列携带隐藏信息的ICMP报文,⑤发送;
接收端接收文件的过程为:①接收有预定特征的ICMP报文,②提取二进制信息,③BCH纠错译码,④生成二进制文件,⑤Huffman压缩译码得到源文件。
【实验过程】
(1)实现BCH编码脚本
(2)实现icmp、Huffman脚本
(3)实现send、receive主程序
关键部分参考源码注释,代码说明文档参见read.txt,具体细节比较多,此处不方便详细说明,具体参见源码和说明文档。
【隐蔽效果测试】
本部分将对设计并实现的Internet网的隐蔽传输方案进行功能性测试。
信源类型:英文文本文件(Hello.txt)
在丢包率为5%的网络条件下对Hello.txt文本文件进行传输
开始进行编码传输:
接收端接收解码文件:
接收到的文件:
文件传输成功。
从抓到的包可以看出,携带隐藏信息的ICMP报文与一般的ICMP报文无异,在公开的Internet网络这个大背景下,能够充分体现隐蔽性。
【传输性能测试】
本部分将对不同信源类型在不同丢包率的情况下进行隐蔽传输性能测试。
一、信源类型:英文文本文件(Hello.txt)
① 丢包率:5%
② 丢包率:9%
二、信源类型:中文文本文件(novel.txt)
① 丢包率:4%
② 丢包率:5%
三、信源类型:图像文件(lena.bmp)
① 丢包率:4%
② 丢包率:4.5%
从对不同的信源类型和不同的丢包率下的测试结果可以看出,该方案总体传输性能较好,能够有效地克服实际网络传输中可能会遇到的诸如丢包等问题的影响,在丢包率不大于4%的情况下能完全恢复信源传递的信息,由于使用的是(15,5)BCH码且在Python下采用Petersen译码方法导致纠错范围较小且传输时间较长,在实际应用中可以利用硬件电路实现编译码的功能加快编译码的效率,从而能采用纠错范围更广的BCH码提高对丢包率的克服。
但是从实验结果可以看到,我们设计的方案整体表现出了较高的隐蔽性和较强的传输性能,体现出了该方案在Internet网下较好的隐蔽传输效果。
【实验结论】
由于该方法是直接将文件的二进制信息进行编码传输,所以理论上,能传输任意类型的信源信息。
从实验结果可以看到,无论是对文本文件抑或是图像文件,该隐蔽传输方案在克服Internet的丢包、延迟等影响表现出了较高的可靠性,同时,通过和其他文献的隐蔽传输方案相比,从抓包的结果可以看到,我们设计的隐蔽传输方案较传统的基于ICMP的隐蔽传输方案的隐蔽性更强。以下分别是参考文献1~4所设计提到的基于ICMP的隐蔽传输方案,可以看到这些方案可以直接泄露隐蔽信道的存在和所传的具体信息。
而我们设计的隐蔽传输方案的优势在于:
①能确保不被防火墙拦截,保证隐蔽传输的顺利进行;
②不改变ICMP报文的默认结构,表现出较高的隐蔽性能;
③通过对ICMP报文的精心设计,较为有效地克服了网络传输实际情况产生的丢包和乱序的干扰,表现出了较高的可靠性。
【进行方案比较的参考文献】
[1] 陈春生. 基于网络流隐蔽通信技术研究[D]. 江苏: 江苏科技大学, 2011.
[2] 吴刚, 朱峰. ICMP协议隐蔽信息传输实现[J]. 中国科技博览, 2011(37):85-85.
[3] linuxsec. ICMP隐蔽隧道从入门到精通[EB/OL]. https://www.cnblogs.com/linuxsec/articles/9350572.html, 2018.
[4] goodbyeer. apt攻击之ICMP隐蔽隧道[EB/OL]. https://www.jianshu.com/p/2f9ce666a1f1, 2018.