变异数据流
一、变异数据流的由来
变异数据流又称为候补数据流,即Alternate Data Stream。Windows NT 、Windows XP Windows 2000等都支持NTFS流,而变异数据流就是一种NTFS流。微软当初设计了它,虽然达到了预期安全性,但是为了向后兼容,它支持后缀为$data的内部文件类型,在过程中它完全隐藏。NTFS分区的数据流是一个子文件系统允许额外的数据连接到一个特别的文件中,从而实现隐藏。现在的FAT文件系统格式是不支持数据流格式的,而NTFS文件系统中的变异数据流的隐藏特性可以保护文件。
当今ADS的应用很广泛,国外大多数把它用来隐藏文件,很多黑客也注意到了变异数据流的作用,用于上传后门。因为一般的杀毒软件不能查杀隐藏在数据流中的木马等黑客软件。但是国内对它的了解并不多,很少网站有提到它的文章,而且人们认为它是不安全的,都想尽力避开它。但是要想回避它的隐藏特性是很难的,除非你不用NTFS文件系统。
NTFS因为它的稳定性、强大的功能以及它所提供的安全性而成为一种优越的文件系统, ADS的完全隐藏特性是一般隐藏软件无法比拟的,它完全由NTFS文件系统支持,无需任何工具就可以生成。当一个数据流被创建以后,以前的文件大小依然不变,而且所有的Windows枚举方法都不能把它识别出来——真正的无影无踪。而且正好它又鲜为人知,是一种能够简单实现的隐藏方法。并且它支持任何格式文件的隐藏,而且任何类型的隐藏文件都可以直接由Windows系统提供的命令来打开。而微软提供了一种方法通过Windows explorer来创建特殊的ADS,检测这种特殊的ADS的必要工具和功能相当缺乏。
二、变异数据流的实现
变异数据流可以在NTFS文件系统中实现文件隐藏的功能。
在CMD环境下,输入:type filename1 > filename2 : Stream name。(filename1为附着文件,filename2为宿主文件)。系统自动生成数据流,实现对文件的隐藏。你只能浏览filename2的内容,而对于被隐藏的filename1无法直接浏览,连它占用的磁盘空间也无法显示出来。可以用notepad或start命令来打开它。
如果不知道隐藏时的Stream name,攻击者就无法找到受保护的文件。Stream name可以起到特殊密码的作用,就好像你想进入既不知道用户名也不知道密码的系统,成功的可能性是极低的。对于专门的软件,Stream name也是很容易得到的。例如lads.exe就可以直接枚举出数据流的大小和其文件名。 ListStream.exe的功能更加强大,它可以列举出更多的细节。但这类软件并不是很多。Windows Explorer没有任何可用的转换和设置来检测这种新建的ADS的存在,所以ADS隐藏还是很安全的。
三、变异数据流的隐藏特性
变异数据流的完全隐藏特性给了黑客们绕过杀毒软件上传后门的简单方法,下面是其主要的几个性质:
1、当一个隐藏文件创建好了以后,继续对它做以下操作,ADS数据流将丢失。type filename1 > filename2: 或者不要“:”也可以。此外删除变异数据流还有一个方法。就是直接删除宿主文件。需要注意的是,当流文件名为:filename时,不能直接用del命令删除流文件,除非删除整个目录。
2、type filename1 filename2 ... filename… > filename:* 可以同时隐藏多个文件入数据流,对于隐藏的文件,流文件名必须有"."这个后缀,否则无法直接由notepad命令打开。可以直接由notepad读取出来的文件格式有:.txt .xml .c .h .htt .ani .reg等。
3、用start命令可以直接打开任何类型的ADS文件,但是必须写明路径。也可以用MORE命令来控制ADS,用more < ads名来查看数据流的内容。如果在建立数据流文件的时候,冒号后面的名字没有包括文件类型,则不能用START命令直接打开数据流文件,必须经过程序选择来打开。并且指定什么文件类型他就用什么程序打开。
4、ADS是NTFS文件系统的特征,所以带有ADS的文件如果被移动到其他的文件系统,比如FAT,FAT32或者ext2上,ADS会丢失,因为这些文件系统都不支持ADS,如果是在NTFS分区之间移动,ADS就会被保留下来。最重要的是,当打开隐藏文件的时候,只要再将附着文件保存即可将ADS提取出来。这样就可以实现对ADS文件的解密。