首页 未分类

1.什么是NTFS数据交换流(ADS)

在NTFS文件系统中存在着NTFS交换数据流(Alternate Data Streams,简称ADS),这是NTFS磁盘格式的特性之一。每一个文件,都有着主文件流和非主文件流,主文件流能够直接看到;而非主文件流寄宿于主文件流中,无法直接读取,这个非主文件流就是NTFS交换数据流。

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

ADS也被用于一些恶意文件隐藏自身,作为后门。

2. ADS原理

NTFS使用Master File Table (MFT) 来管理文件。windows系统中的每个文件都对应一个MFT记录。而每一个MFT记录由若干个属性(attribute)组成,用来描述该文件的具体信息。比如 $FILE_NAME 属性描述了该文件的文件名和创建修改访问时间,而$DATA属性包含了该文件的具体内容。

举个例子,我现在有一个文本文件,名称为test.txt,文本内容为”Hello, world!”
ads.jpg
其MFT记录结构如图,$FILE_NAME属性包含了该文件名test.txt。 $DATA属性则包含了内容 “Hello, world!”。这里说个题外话,由于该内容长度小于1kb,所以文件的内容就直接存储在MFT记录里面了(称为resident)。如果内容长度大于1kb,文件内容会被存储在别的地方 (称为non-resident),在这种情况下$DATA属性只包含其存储地址。这里“Hello, world!”很短,所以直接保存在了MFT记录里面。

很多人想当然的认为一个文件只能有一个$DATA属性,这是错误的。
在NTFS中, 一个文件可以有多个$DATA属性 。比如我现在想给test.txt加入一个名为ThisIsAnADS的$DATA属性:

c:\test>echo Hello, freebuf! > test.txt:ThisIsAnADS

那么,该文件的MFT记录就变成了下图所示
>_>图片没了---

你可能发现了这两个$DATA属性还是略有不同的,第一个没有名称,而第二个有名称(ThisIsAnADS)!通常人们称第一个为主数据流(primary data stream )。主数据流在文件创建的同时就被创建了,并且默认没有名称,所以也叫做未名数据流 (unnamed data stream)。第二个是我们后来创建的,并且赋予了名称(ThisIsAnADS)。这个就是供选数据流 (alternate data stream,ADS)。绝大多数用户只会和主数据流打交道,从某种意义上来说,ADS对用户是隐藏的。用常规的dir命令和windows文件管理器都没法发现ADS。而当我们查看文件内容的时候也仅仅显示主数据流的内容。

3.ADS应用

最好在管理员模式下操作(需要文件的写权限)
格式为 宿主文件:关联的数据流文件

3.1.向ADS中写入文本文件

首先需要创建一个文本文件,这里的测试文件是001.txt
然后向这个文件写入ADS

echo .txt:hidden.txt
/*echo "隐藏内容" >宿主文件:关联文件*/

可以看到,文件字节没有改变,但是时间改动了。
还可以使用type命令,将已经存在的文件附加上去。

type "test002.txt" > "001.txt":"test002.txt"
/*type "要隐藏的附加文件">"宿主文件":"要隐藏的附加文件"
最好使用引号括起来,否则会引起误解
*/

3.2 向ADS中写入图像/音频/可执行文件

类似于写入文本文件,可以使用如下命令:

type "hidden.jpg" > "targe.jpg":"hidden.jpg"
type "hidden.mp4" > "targe.jpg":"hidden.mp4"
type "hidden.exe">>"targe.txt":"hidden.exe"
type "hidden.exe">>"targe.exe":"hidden.exe"

3.3 在Windows平台下使用ADS构造后门

在Windows XP中,可执行文件可以隐藏并且被执行。但是,微软已经发现了这个问题并进行了修复,目前在Windows Vista及后续系统中已经无法直接运行ADS中的可执行文件了。

我们可以使用mklink命令来建立一个链接,但必须要管理员权限才能完成。

mklink D:\moha.exe "hidden.txt":moha.exe

这里有一个在普通用户权限下也可操作的方法,使用Powershell的脚本。
项目地址

这个脚本只有两个参数:

Arguments “BadFunction -Lhost 192.168.1.11 -LPort 3333 -Payload weeeeee”

-URL即payload,-Arguments是Payload所需要的参数。

这个后门被运行后,会在注册表下

HKCU:SoftwareMicrosoftWindowsCurrentVersionRun中建立一个键值为
update的键,注册表的键值调用wscript.exe来执行隐藏的VBS。执行完毕后,
VBS脚本会解析执行在AppData目录下的payload(当然,是隐藏的)。

在Windows10下,这个方法已经意义不大了,WD会对该脚本进行查杀。不过也可以考虑Winrar自解压文件,但是这个方法……呃……

从目前公开的资料来看,对ADS的利用主要集中于Web方面,但是我暂时不打算发展这方向的,这一块以后写一写。

4.NTFS交换数据流在CTF中的应用

4.1 Windows系统工具

WinRAR

如果文件原本是在压缩包内的,这时使用除WinRAR以外的软件进行提取会造成数据流丢失。所以务必使用WinRar进行文件解压。

最好不使用CMD命令(notepad)查看,这些命令对ADS的支持不是很好。

AlternateStreamView

可以扫描隐藏的文件

NTFS Streams Info

使用工具查看是最快捷方便的方法了,可以使用NTFS Streams Info这个软件进行查看,但似乎是收费的。
地址:https://ntfs-streams-info.en.softonic.com/
在做CTF题时,我用的是Ntfs Streams Editor这个软件。
网盘下载:http://pan.baidu.com/s/1c2zbNaC

labs

将labs.exe放入需要检测的文件的所在目录下。

lads.exe File /S
/*这条命令会检测File这个目录下所有文件的隐藏流文件*/
lads.exe /S
/*检测根目录下的隐藏流文件*/

可以清楚地看到001.txt有着一个ADS:test002.txt。
知道了Hidden的文件,就可以进行查看了。

notepad.exe test.txt:hidden.txt
mspaint.exe test.txt:hidden.jpg

4.2 Linux系统工具

暂时没找到,后续更新

5.清除ADS

这里可以采用之前的Ntfs Streams Editor这个软件直接删除ADS文件。
也可以用streams.exe进行清除。

streams.exe -d <File>

若出现 Error deleting,说明这个进程还在运行,需要先结束该进程再进行删除操作。

6. 参考文献

一个用ADS(供选数据流)隐藏Windows后门的方法
文件隐藏 之 NTFS 交换数据流
NTFS交换数据流隐写的应用
UNCTF杂项题Hidden secret 之NTFS交换数据流隐写
Windows-NTFS-ADS在渗透测试中的利用




文章评论

目录