数据隐藏的学习笔记

最近刚看完了Michael Raggo的《数据隐藏技术解密》这本书,书中有些内容值得做一些笔记

1.Word中的数据隐藏

右键单击,选择”字体”,勾选“隐藏”复选框即可隐藏文字

我们可以在Word的文件->选项->勾选“隐藏文字”复选框,或者“打印隐藏文字”完成隐藏内容的显示

另外一个识别隐藏文字的方法是使用检查文档选项,在文件->信息->检查文档中,可以检查隐藏元数据,例如作者,批注和可识别的其他信息

在Word的属性区域还有很多可以隐藏信息的选项

2.在PDF文件中隐藏信息

wbStego4open:http://www.bailer.at/wbstego/pr_4ixopen.htm

可以使用wbStego4open工具在PDF文件中隐藏版权信息,文件等,同时还可以设置密码,操作简单,按软件提示做就可以

工具原理:

  1. 将插入数据的每一个ASCII码转换为二进制格式
  2. 根据20代表0,09代表1,进行替换
  3. 最后将这些20 09序列嵌入PDF文件

原理如图:

2.1)【隐写技术】数据的隐藏方法、PDF、可执行 ...

3.在可执行文件中隐藏信息

Hydan:http://justsolve.archiveteam.org/wiki/Hydan

由于Hydan太老了(2004年),目前的环境没有办法正常运行(不过你也可以自己配置一下以前的环境试试),于是我没有使用书上说的Hydan,选择了steg86

steg86: https://github.com/woodruffw/steg86

安装好steg86后,运行

可以使用profile查看一下这个二进制文件隐写适用性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌──(root㉿kali)-[/home/kali]
└─# steg86 --help
A tool for hiding messages in x86(_64) binaries

Usage: steg86 <COMMAND>

Commands:
profile profile a binary for steganographic storage capacity
embed embed some data into a binary steganographically
extract extract the hidden data from a binary
help Print this message or the help of the given subcommand(s)

Options:
-h, --help Print help
-V, --version Print version

┌──(root㉿kali)-[/home/kali]
└─# steg86 profile bash
Summary for bash:
195934 total instructions
31655 potential semantic pairs
39 potential commutative instructions
31662 bits of information capacity (3957 bytes, approx. 3KB)

嵌入信息,运行命令得到了bash.steg可执行文件

1
steg86 embed bash bash.steg <<< "The hidden message"

提取消息

1
2
3
4
5
6
┌──(root㉿kali)-[/home/kali]
└─# steg86 extract bash.steg > my_message

┌──(root㉿kali)-[/home/kali]
└─# cat my_message
The hidden message

4.在HTML文件中隐藏信息

Snow: https://darkside.com.au/snow/

对比原始的HTML文件和嵌入数据的文件,视觉上没有任何差别

实际上我们用010编辑器打开可以看到文件发生了一些细微的变化(发现这个隐写方式和wbStego4open非常相似)

5.免费的隐写分析软件

1.StegSpy

StegSpy是一款著名的检测隐藏信息的签名分析软件,为什么它可以分析,是因为很多隐写程序都有一个共同特性,就是它们还会在文件中嵌入它们自己的唯一标识,比如Hiderman,会在载体文件的尾部追加“CDN”这三个ASCII码。于是可以创建一个签名库,搜集市面上大多数隐写软件的唯一标识,即可进行隐写分析。

Tip: 如果发现运行StegSpy报错“组件COMDLG32.OCX或其依赖项之一未正确注册:文件丢失或无效”:

  1. 去网上找一个大型网站下载 COMDLG32.OCX

  2. 32位系统:将COMDLG32.OCX复制到C:\windows\system32\ 目录下,运行

    1
    regsvr32 c:\Windows\system32\comdlg32.ocx
  3. 64位系统:将COMDLG32.OCX复制到C:\Windows\SysWOW64\ 目录下,运行

    1
    regsvr32 c:\Windows\SysWOW64\comdlg32.ocx
2.Stegdetect

Stegdetect: https://www.provos.org/p/outguess-and-stegdetect-downloads

原理:JPEG和MPEG文件格式使用的是离散余弦变换(DTC)函数来压缩图像,对于这种压缩方法,通过识别每个8x8像素块中相邻像素中的重复像素来减少图像大小,因此DCT是一个有损压缩技术,但是一般不会影响图像或者视频的视觉效果。Stegdetect是评估JPEG文件的DCT频率系数,把检测到的可疑JPEG文件频率与正常文件的频率对比,对比结果偏差很大则说明被检查文件有异常。(由于该原因,不能检测png文件)

使用:

Stegdetect发现图像使用JPhide方法嵌入数据的,但是嵌入的可能性不同,后面的*越多可能性越大

通过使用以下命令还可以递归检测当前目录下的jpg图像文件

1
.\stegdetect.exe -s 10.0 *.jpg

-s 是设置敏感度,可以设置为10.0

Stegdetect 的主要选项:

q – 仅显示可能包含隐藏内容的图像

n – 启用检查 JPEG 文件头功能,以降低误报率。

s – 修改检测算法的敏感度,该值的默认值为 1。

d – 打印带行号的调试信息。

t – 设置要检测哪些隐写工具(默认检测 jopi),可设置的选项如下:

j – 检测图像中的信息是否是用 jsteg 嵌入的。

p – 检测图像中的信息是否是用 jphide 嵌入的。

o – 检测图像中的信息是否是用 outguess 嵌入的。

i – 检测图像中的信息是否是用 invisible secrets 嵌入的。

6.Windows中的数据隐藏

1.交换数据流隐藏数据

Windows NTFS文件系统的交换数据流(ADS)一直为众人所知,它可以追朔到Windows NT3.1,NTFS使用交换数据流来存储文件的相关元数据,包括安全信息,原作者,其他数据。

我们使用powershell创建一个txt文件

我们用原始文本文件(lontano.txt)创建我们的交换数据流

常用的浏览技术对交换数据流都是免疫的,执行完上面命令后,文件大小也没有什么变化

统一文件创建的交换数据流不止一个

1
notepad lontano.txt:hide2.txt
2.卷影技术

新版本的Windows系统都有卷影副本服务,可以备份磁盘卷,以便在安装新的软件、设备驱动器或者其他程序导致系统崩溃时可以还原系统。

我们可以右键此电脑->属性->系统保护->配置中设置卷影副本分配的最大空间

由于很多防病毒软件都不会扫描卷影副本,所以一般认为这里是隐藏数据和恶意软件的好地方

在windows7以上系统中,管理员用户可以在命令行用VSSadmin来管理卷影副本:

通过”List shadowstorage”可以查看卷影副本的存储关联(存储空间大小)

接下来,我们就可以在卷影副本中创建并隐藏文件了,还会演示脱离文件系统访问这个文件

我们在sandbox文件夹下面放了一个待隐藏的pdf文件

还是在系统保护中创建还原点

可以使用命令来查看卷影副本清单

1
vssadmin list shadows

接着我们可以删除那份待隐藏的PDF文件,然后创建符号链接来查看卷影副本的内容,本例中,新卷影副本的名称是“\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\”,执行带有/D选项的mklink命令,为符号链接创建目录,注意mklink命令使用cmd运行,如果用powershell会报错,卷影副本的名称后面一定有 \ ,这是创建符号链接必备的

1
mklink /D hiddendir \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\ 

进入hiddendir目录,可以看到我们之前已经删除的PDF文件

如果隐藏的是可执行文件,可以通过WMIC运行这个可执行文件,这里就不尝试了,有兴趣的小伙伴可以上网查询或看书

7.Linux中的数据隐藏

1.Linux文件名欺骗

总所周知,在文件名前面加上”.”符号可以隐藏该文件,当我们执行ls命令的时候看不到这个文件,但是当我们执行”ls -al”的时候,就原形毕露了

1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[/home/kali]
└─# ls -al
total 147068
drwx------ 30 kali kali 4096 Mar 29 19:10 .
drwxr-xr-x 3 root root 4096 Aug 22 2023 ..
-rwxr-xr-x 1 root root 1277936 Mar 29 14:10 bash
-rw-r--r-- 1 kali kali 220 Aug 22 2023 .bash_logout
-rw-r--r-- 1 kali kali 5551 Aug 22 2023 .bashrc
-rw-r--r-- 1 kali kali 3526 Aug 22 2023 .bashrc.original
-rw-r--r-- 1 root root 1277936 Mar 29 19:08 bash.steg

我们运行“ls -al”的时候,可以发现结果还有一个单点和一个双点符号,单点表示当前目录,双点表示上级目录,比较有趣的是,在点后面加上空格还可以创建新的目录,比如“. ”

1
2
3
4
5
6
7
8
9
10
11
┌──(root㉿kali)-[/home/kali]
└─# mkdir ". "

┌──(root㉿kali)-[/home/kali]
└─# ls -al
total 147072
drwx------ 31 kali kali 4096 Mar 29 22:00 .
drwxr-xr-x 2 root root 4096 Mar 29 22:00 '. '
drwxr-xr-x 3 root root 4096 Aug 22 2023 ..
-rwxr-xr-x 1 root root 1277936 Mar 29 14:10 bash
-rw-r--r-- 1 kali kali 220 Aug 22 2023 .bash_logout

这里和书上不一样,估计是这个漏洞已经被官方修复了,按照书上的结果,应该是这样的,但是”. “这样也看起来很有隐蔽性

1
2
3
4
5
6
7
8
9
10
11
┌──(root㉿kali)-[/home/kali]
└─# mkdir ". "

┌──(root㉿kali)-[/home/kali]
└─# ls -al
total 147072
drwx------ 31 kali kali 4096 Mar 29 22:00 .
drwxr-xr-x 2 root root 4096 Mar 29 22:00 .
drwxr-xr-x 3 root root 4096 Aug 22 2023 ..
-rwxr-xr-x 1 root root 1277936 Mar 29 14:10 bash
-rw-r--r-- 1 kali kali 220 Aug 22 2023 .bash_logout

8.总结

关于本书的笔记还未完结,后续我会发布 “数据隐藏的学习笔记(二)“ ,后续内容会涉及更多Linux系统的数据隐藏,虚拟机中的数据隐藏和网络协议中的数据隐藏,最后还会总结一下电子取证的流程,策略。待所有更新完后,我会将它们整合在一起!😊

这里推荐这本书,内容不是很深奥,通俗易懂,是学习取证的好书!