01 隐写术
隐写术(Steganography)是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或信息的内容。隐写术的起源可以追溯到动植物界中存在的“拟态”,是一种很好的自我保护方式。
与加密技术相比,隐写术的主要特点为:隐藏传输的信息是嵌入在一个看似无关联的载体上进行的。而加密通信是通过算法的伪装使信息不可破解。由于隐写术选择的信息载体具有迷惑性,而其信息本身仍然可以使用算法进行混淆,因此,隐写术的检测比一般加密算法的破解更复杂。
在古代,隐写术又叫密写术,古人用明矾水在纸上写字,晾干后看不出痕迹,但只要浸入水中字迹就能显示出来,这是简单的化学原理的应用。除了明矾,古人也用米汤水写字,再用碘酒显形。
到了互联网时代,计算机的普及使隐写术又有了质的飞跃。现代隐写术的发展,主要表现在几个分支:语言隐写、数字媒体信息隐藏、文件系统隐写术、网络流量隐写等。
语言隐写主要是通过对载体文字语言的段落、语序或更换同义词的方式来完成的。数字媒体隐写利用了修改编码、修改显著位使信息暂时不可见,或是将隐藏信息写入到一些不显著位,难以察觉地替换了原有信息并将替换方法告知接收方从而提取隐藏信息。文件系统隐写是指利用当前文件系统的特殊技巧,使隐藏信息的文件不会正常显示出来。网络流量隐写指将数据重新拆分编码为独立的数据流,并将其混入不易察觉的网络流量中进行发送。
02 数字水印
数字水印技术,是指将特定的信息嵌入数字信号中,用来体现版权所有者的技术。数字信号可能是音频、图片或视频等。数字水印可分为浮现式和隐藏式两种,前者是可被看见的水印,一般来说,浮现式的水印通常包含版权拥有者的名称或标志。电视台在画面角落所放置的标志,也是浮现式水印的一种。隐藏式水印是隐写术的一种信息隐藏方法,用来避免数字媒体文件未经授权的拷贝和使用。
因为数字水印的在日常生活中的普遍使用和其代表版权的重要作用,也要求其有如下几个特性。
安全性:水印信息应当难以篡改和伪造。
隐蔽性:水印对感官不可知觉,水印的嵌入不能影响被保护数据的可用性大大降低。不具备这一特性的水印,称为可见水印。
强健性:水印能够抵御对嵌入后数据的一定操作,而不因为一些细微的操作而磨灭。包括数据的传输中产生的个别位错误、图像/视频/音频的压缩。不具备这一特性的水印,称为脆弱水印。
水印容量:载体可以嵌入水印的信息量大小。
水印生成技术:伪随机生成、扩频水印生成、混沌水印生成、纠错编码水印生成、基于分解的水印生成、基于变换的水印生成、多分辨率水印生成和自适应水印生成等。
水印的嵌入技术:加性和乘性嵌入、量化嵌入、替换嵌入、自适应嵌入等。
水印的检测技术:分为3种不同假设方法的实现,即对待检测信号的统计特性的假设、噪声的统计特性的假设和对嵌入技术的假设。
03 文本隐写
文本隐写即是在文本中添加隐藏信息内容,对于不同的载体内容,可分为两类:有格式文本隐写和无格式文本隐写。
有格式文本隐写,如word、html等文件格式,文本内容可以被加上各种语法而表示为不同的显示方式,因此有较多的隐写途径。如设字体颜色与背景色相同起到混淆作用、将字体变小到肉眼难以察觉、用不同的语言隐藏信息、将信息隐藏到注释中等方法。同时也可将信息利用拆分重编码的方式转换成更多更小的信息块,甚至转化为二进制数后以多种方式表示为0和1,如每行行首是否有空格、每行行间距为单倍还是1.5倍、每个字字间距倍数,字体的大小和颜色等都可以作为信息的隐藏方式。
无格式文本隐写,如txt等纯文本文件,隐藏信息的方式也有多种,如每个字间的空格、标点符号的布局、单词和拼音的首字母组等方式,也可能是大量可读或不可读文本中隐藏了一小句关键信息等。
04 图片隐写
图片隐写即是在图片中添加隐藏信息,信息可以隐藏在图片头部、图片中间以及图片末尾的等地方。
隐藏在头部,可以是图片信息的摘要、日期、作者、标题等说明信息。
隐藏在图片中,可以根据图片格式的特殊性质,在每一个模块的最后添加隐藏信息而不破坏原图的显示,或添加在一些特殊作用不被显示的模块中以达到隐藏效果。同时,也可以采用一些隐写算法进行写入,如典型空域隐写中的LSB隐写,将隐藏信息转化为二进制数据,以较低位按位写入信息的方法,将数据写入而不引起较大的色差。扩张方法还有MLSB,对多位隐写减少被发现的可能性。此外,还有 DCT 域隐写,利用多点比较的逻辑结果隐藏二进制0或1,较常见的有Jsteg隐写、F5隐写、OutGuess隐写、MB隐写等算法。
如图1所示是一张基于LSB隐写信息的图,但是根本看不出有任何异样。
图1 基于LSB隐写示例
隐藏在图片末尾,由于图片格式的规定,用一些特殊字符作为图片的结尾,在这一字符后的部分不再被当作图片内容处理,因此,可以将任意多的隐藏信息写在图片末尾而对图片的显示没有任何影响。网上流传的将图片后缀名改为 zip 即可解压的文件就是在正常图片后面追加了一个zip文件做成的。
1. StegSolve
最经典的图片隐藏信息查看工具是一款 Java 环境下的小工具 StegSolve。该工具不仅可以自动分析图片格式,得出隐藏在文件头、文件块、文件末尾等处的冗余信息,还可以按位查看图片,分析其中的隐藏内容,也支持双图比较,用于得出图片差隐藏的信息。对于动态图片,StegSolve 可以将其分解为单帧保存查看,是一款用于隐写图片分析的强大工具,图2即为利用StegSolve查看红色第4位像素。
图2 利用StegSolve查看红色第4位像素
同样利用StegSolve分析上述隐写图片,可以发现隐藏信息,该信息隐藏在RGBA中的绿色通道最低位,再按列排列所有二进制串,将二进制串相连每 8个二进制数解释为一个ASCII字符,即可得到隐藏字符内容,如图3所示。
图3 隐藏信息
2. Binwalk
Binwalk 本身是一款文件分析工具,可用来提取文件及帮助完成逆向工程等工作。通过自定义签名,提取规则和插件模块,且有很强的可扩展性。在这里同样可以利用Binwalk分析图片中隐藏的文件。对于上述图片,可以执行如下命令。
- binwalk(图片名)
得到分析结果如下。
- >binwalk puppy.png
- * suggest: you'd better to input the parameters enclosed in double quotes.
- DECIMAL HEXADECIMAL DESCRIPTION
- -------------------------------------------------------------------------------
- 0 0x0 PNG image,256 x 256,8-bit/color RGBA,non-interlaced
- 41 0x29 Zlib compressed data,default compression
- 49613 0xC1CD RAR archive data,first volume type: MAIN_HEAD
从结果中可以看出该文件从0~40位为PNG图片的头部信息,标注了其规格和位数。从40~49 612位为Zlib压缩数据,其中,PNG、Gzip、Zlib用的是同一种压缩算法default,因此,这一块也就是PNG图片的数据部分。而最后49 613~文件末尾还有一块却标注了RAR格式数据,这并不属于 PNG 的正常文件部分,因此它是隐藏数据信息,同样可利用如下命令分离每一块数据部分。
- binwalk –e(图片名)
得到一个_(图片名).extracted 文件夹,其中为原图分离出来的各个部分内容,可以看到之前分析得到的隐藏数据压缩包,在对其解压得到的txt文件中发现了隐藏内容。
05 音频隐写
同图片一样,存在着大量冗余信息和噪声的音频同样可以用来隐藏信息,不同于图片对每个点的像素进行描述,音频是对每一个时间点的声音信息进行描述,并且该声音中仍旧存在“不重要信息位”,利用对它的修改,可以达到信息隐藏的目的。
此外,音频也存在着一些有趣的隐写方式,如将另一段需要隐藏的音频减小音量、降低频率等处理后插入原有音频,或加入多个声道。也可以将其反转、快放、慢放等方式使其变得不引人注目,从而达到隐藏目的。
另一种方法,还可以在其波形图中加入信息,如图4所示的Morse密码形式。
图4 Morse密码形式
同样,在音频的频谱图中也可以隐藏信息,如图5所示是通过频谱图分析得到的效果。
图5 频谱图分析
1. Audacity
Audacity 是一款免费的音频处理软件,其操作界面简单却有着专业的音频处理能力。它支持WAV、MP3、Ogg Vorbis或其他的声音文件格式,支持MP4、MOV、WMA、M4A、AC3等视频格式,可用于录音与放音,对声音做剪切、复制、粘贴(可撤消无限次数),波封编辑杂音消除,支持多音轨混音、多声道模式,采样率最高可至96 kHz,每个取样点可以以24 bit表示。在隐写分析上,其操作简单、显示效果直观,便于分析和测试。
2. FFmpeg
FFmpeg是一套可以用来记录、转换数字音频和视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库 libavcodec,支持 Windows和Linux 平台,可以用于视频等文件的隐写及分析。
06 文件修复
数据以一定的格式存储在硬件设备中,由于硬盘老化、外力作用或程序出错、病毒破坏等原因,造成了数据损坏,因此,需要文件修复方法使损失降到最低。
1. TestDisk
TestDisk是一款开源磁盘修复工具,可以修复由于软件缺陷或某些病毒导致的分区丢失或分区表丢失导致磁盘无法启动的问题。TestDisk通过BIOS(DOS/Win9x)或操作系统(Linux、FreeBSD)查询硬盘特性(LBA大小和CHS参数)。然后会快速检查磁盘数据结构并恢复分区表,同时也能用来恢复误删除的文件。图6所示为使用TestDiskgui版本恢复已删除文件。
图6 TestDisk文件修复
2. Pcapfix
Pcapfix是一款修复损坏pcap文件的工具。它会检查一个完整的pcap全局头,如果有任何损坏字节,就会修复它,如果缺少一个字节,它会创建和补充一个新的字节到文件的开头,然后试图找到pcap头并检查和修复它。使用方法如下。
- pcapfix x.x.0(c)2012-2021 Robert Krause
- Usage: pcapfix[OPTIONS]filename
- OPTIONS: -d ,--deep-scan Deep scan(pcap only)
- -n ,--pcapng force pcapng format
- -o<file>,--outfile<file> set output file name
- -t<nr> ,--data-link-type<nr> Data link type
- -v ,--verbose Verbose output
3. Winhex
Winhex 是一款Windows平台下功能强大的十六进制文件编辑器,利用该软件,可以查看和修改文件存储在硬盘中的具体数值,甚至是内存中程序动态存放的数值也可以进行操作。利用该工具可以查看基于文件格式的隐藏数据。如图7所示为利用Winhex查看文件十六进制发现最后的隐藏rar文件。
图7 Winhex查看文件