从一道取证题目谈NTFS交换数据流

这是我出的一道磁盘分析+NTFS数据流隐写的取证题目。

磁盘分析的部分很简单,知道vmdk是虚拟磁盘格式即可利用VMware直接映射。

磁盘空间内得到nothing.rar,打开却是空白的nothing.gif。此时需要你很敏锐,意识到以下两个问题:

1.为什么给的是rar压缩包?CTF中大部分见到的都是zip压缩包,虽然由于加密算法的不同rar包的爆破速度远低于zip的爆破速度,但是这道题又没有加密;

2.查看nothing.gif的基本信息,我们发现GIF图的大小只有3.5KB,但是占用的磁盘空间却达到了44KB,这一点尤为奇怪。

这就来到了题目的重点,NTFS数据流隐写。注意,它同样能实践于Web安全及渗透领域,这点在后文会提到。

介绍

NTFS交换数据流(alternate data streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下每一个文件,都有着主文件流和非主文件流,主文件流能够直接看到;而非主文件流寄宿于主文件流中,无法直接读取,这个非主文件流就是NTFS交换数据流。交换数据流的诞生源于Windows系统与苹果的HFS系统的交互需求,NTFS使用交换数据流来存储文件相关元数据等等。

ADS的作用在于,它允许一个文件携带着附加的信息。例如,IE浏览器下载文件时,会向文件添加一个数据流,标记该文件来源于外部,即带有风险,那么,在用户打开文件时,就会弹出文件警告提示。再如,在网址收藏中,也会附加一个favicon数据流以存放网站图标。

创建一个数据交换流文件的方法很简单,只需要这样一条命令:

type "要隐藏的附加文件">"宿主文件":"要隐藏的附加文件"

例如在这道题目中,我就是用这样一条命令向ADS中写入了图像文件:

type "flag.gif" > "nothing.gif":"flag.gif"

此时需要注意,尽管可以向文本/图像/可执行文件等各类文件类型的ADS中写入数据,但最好保持宿主文件和附加文件文件类型的一致性。我第一次尝试是向png附加gif,结果测试发现这种隐写不够隐蔽,可以直接被foremost察觉并分离…

另一个要点是,你需要用WinRAR这样支持NTFS数据流的压缩软件对压缩包进行操作。如果没有了解到这个点,就一直在坑里找路。WinRAR解压缩不会丢失数据流,但是加压缩时不会默认保存数据流,这一点是我反复尝试失败后,去找pcat师傅求助,才知道压缩高级选项中有保存文件流数据的选项:

使用WinRAR解压后,我们使用lads.exe执行 /s 递归查询,发现被隐写的flag.gif文件

提取数据则可以使用Ntfs Streams Editor

导出得到GIF图,分帧即可看到flag。

拓展

这道题目到这里就告一段落了,但是关于NTFS交换数据流的运用还不止如此。

由于常规的系统命令和文件管理器都检查不到其存在,ADS也被用于隐藏后门,大多数防病毒软件默认不会扫描Windows交换数据流,如果启用这个功能,扫描速度会降低90%。隐藏交换数据流还有一个更隐蔽的方式,就是将交换数据流绑定到一个保留设备名中,这样就算使用LDS或streams.exe也无法检测到交换数据流。Windows有很多不应该用作文件名的保留设备名如CON、PRN、COM1、LPT1等等。这些设备名是用来将输出数据发送到周边硬件设备的,但这些保留设备名是“不应该”作为文件名,但并没有禁止使用。

但是从WindowsXP以后微软就禁止用户从ADS里执行程序了。写入,读出操作都可以,但是不允许执行。可以通过脚本解释器(Wscript.exe)来运行该脚本,详细介绍见

一个用ADS(供选数据流)隐藏Windows后门的方法

实战渗透中也可以利用这种方法隐藏nc,隐藏meterpreter等。

Web安全方面,涉及到php+Windows+IIS环境的冒号截断绕过黑名单上传,在UDF提权中也有利用:

当php邂逅windows通用上传缺陷

NTFS中的ADS的一些安全问题

此考点出现在了HITB-XCTF 2018的upload一题中。

参考:

https://www.cnblogs.com/Chesky/p/ALTERNATE_DATA_STREAMS.html

http://drops.the404.me/1981.html

《数据隐藏技术揭秘》

文章目录
  1. 1. 介绍
  2. 2. 拓展
|