[转]NTFS交换数据流打造文件隐藏…

NTFS文件系统大家应该都不陌生吧?它是微软从NT系统就开始推出的一种有利于计算机安全的磁盘格式。它通过使用一系列的安全措施来对用户组和用户进行权限等方面的管理,确实起到了增强系统安全的作用。NTFS交换数据流(alternate data streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中(在下文的实验中可以说明)。但在像Windows 98一类的不支持NTFS格式的操作系统中,一个文件一次只能访问一个数据流,所以不支持NTFS格式的操作系统不在本文讨论范围之内。
一些资料中显示ADS是为了和Macintosh的HFS文件系统兼容而设计的,它使用资源派生来维持与文件相关的信息(引自H. Carvey原著由幻影旅团翻译组翻译的The Dark Side of NTFS一文中的描述)。我们的系统中自带的许多工具都提供创建和执行ADS的功能,但是这些工具又不能很完全的支持ADS。这一点在下文的实验中会有所显示。微软也承认在基于API的Win32系统不能很好地兼容ADS,正是因为兼容性欠佳才导致系统不能准确识别数据交换流文件的大小以及一些宿主文件被修改的痕迹。这篇文章只是围绕初探这个ADS是如何被创建以及它的一些特性展开的。本人才学浅薄,仅希望大家能够对ADS的一些最基本的方面大致有所了解,并且希望大家能够提出自己的见解,共同进步!
创建一个数据交换流文件的方法很简单,基本的命令格式为“宿主文件:准备与宿主文件关联的数据交换流文件”,这里的宿主文件可以是任意格式的普通文件,数据交换流文件最开始也只是一个任意格式的普通文件,正是因为它与宿主文件进行了关联,所以它才叫做数据交换流文件。下面我们就创建一个普通的宿主文件,下文中多以TXT格式的文件为主。需要注意的是,为了方便起见最好复制一个CMD命令提示符到一个NTFS格式的分区上的根目录或者文件夹内,在实验完成后为了安全起见最好将这个CMD删除。下面我们开始吧!
 

测试1.C:\stream test>echo "this is a stream test" > File.txt 
建立一个名为“File.txt”的文本文件(宿主文件)并将“this is a stream test”这句话写入到File.txt这个文本文件中。
测试2.C:\stream test>dir 
驱动器 C 中的卷没有标签。
卷的序列号是 4825-5920
C:\stream test 的目录
2005-02-06 21:22 <DIR> .
2005-02-06 21:22 <DIR> ..
2004-08-16 16:39 470,528 cmd.exe
2005-02-06 21:22 26 File.txt
2 个文件 470,554 字节
使用DIR命令列出当前目录下的文件,显示File.txt文件创建成功,大小为26字节。
测试3. C:\stream test>type File.txt 
"this is a stream test"
使用TYPE命令查看File.txt这个文件,查看成功(在后文请注意TYPE命令是否能显示数据交换流文件的内容)。
测试4. C:\stream test>notepad.exe File.txt 
使用记事本程序显示这个文件,显示成功(在后文也请注意Notepad记事本程序是否能显示数据交换流文件的内容)。
测试5. C:\stream test>echo "this is a stream test123" > File.txt:test.txt
这是关键的命令,建立了一个数据交换流文件“File.txt:test.txt”,这个命令没有显示任何失败的提示,其实它已经成功地创建并且关联了一个名为“File.txt:test.txt”的数据交换流文件。
测试6. C:\stream test>notepad.exe File.txt 
通过记事本程序来显示刚才创建的普通文本文件中的内容,成功显示了宿主文件File.txt的内容,看来宿主文件并没有因为关联了流文件而被破坏。
测试7. C:\stream test>notepad.exe File.txt:test.txt 
通过记事本查看刚才创建的数据交换流文件“File.txt:test.txt”,显示成功。看来记事本还是支持查看ADS流文件的。
需要特别注意的是,这时候你在目录中找不到刚才创建的数据交换流文件“File.txt:test.txt”,并且通过双击的方式打开宿主文件File.txt时只能看到宿主文件中的内容而不能看到数据交换流文件里的内容。
测试8. C:\stream test>type File.txt:test.txt 
文件名、目录名或卷标语法不正确。 
使用TYPE命令查看刚才创建并且关联的流文件,会出现错误。这时候使用Edit命令也会提示出现了未知错误,流文件与普通文件的区别就崭露头角了。这就是上文所提到的虽然Windows系统支持了数据交换流文件,但是一些系统自带的程序并不能很好的支持与处理流文件。
测试9. C:\stream test>dir 
驱动器 C 中的卷没有标签。
卷的序列号是 4825-5920
C:\stream test 的目录
2005-02-06 21:49 <DIR> .
2005-02-06 21:49 <DIR> ..
2004-08-16 16:39 470,528 cmd.exe
2005-02-06 21:51 26 File.txt
2 个文件 470,554 字节
使用DIR命令列出该目录下的文件,发现普通文件File.txt的大小并没有发生变化,但这个26字节确实不准确,因为刚才执行的“Notepad.exe File.txt:test.txt”这个命令已经显示了“File.txt:test.txt”这个数据交换流文件里面的内容了,所以这个File.txt宿主文件的大小肯定要增加。
到了这里,我们已经成功的创建并关联了一个数据交换流文件,如果想要看到这个流文件里的内容,就需要使用“宿主文件:数据交换流文件”这样的格式,否则无法直接查看流文件的内容。建立这样的流文件的前提是必须存在或者建立一个宿主文件,下面的方法可以建立一个完全隐藏的流文件,隐藏得可真是十分透彻——我个人觉得使用数据交换流的方法来隐藏文件不失为一种好方法!
测试10. C:\stream test>echo "this is a stream testabc" > :test2.txt
直接建立一个流文件,命令成功完成。然后使用TYPE,Notepad等命令和程序查看一下,再使用DIR命令去看看,咦?居然没有这个文件,再将系统的显示隐藏文件的属性打开,在目录里也找不到,如同蒸发了一般。来有影,去无踪?那我们尝试删除它!
测试11. C:\stream test>del :test2.txt
文件名、目录名或卷标语法不正确。
呵呵,也报错了,真正想删除这个文件的方法只能是将这个文件夹一起删除,微软的操作系统升级换代还不够全面,我使用的已经是Windows XP SP2了,依然是这个样子。
现在你的感受是不是觉得流文件如同幽灵一般时隐时现啊?再加上一段恐怖的背景音乐,够吓人了吧?对使用者来说,我们首要面对的一个问题就是如何鉴别一个普通文件是不是关联了流文件,试着想想:这个流文件要是一个病毒程序会怎样?不仅你自己无法发现,就连杀毒软件也有可能让它在各种监控与扫描下泰然长存——空口无凭,我们可以试验一小下。尝试一下这个环节,也许这样你才能体会到其中潜在的危险性。
喜欢研究病毒的朋友可能知道这段简短的无害代码。它可以测试病毒防火墙的工作状态,是杀软厂家公认的测试代码。代码如下:
X5O!P%@AP[4\PZX54(P^)7CC]7]$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
将这段代码保存为.txt格式的文件,试着运行一下,如果发现防火墙的实时监控没有报警,你就要检查一下你的防火墙的设置是否全面或者工作是否正常了。反正我的防火墙是报警了并且拒绝打开该文件。那么我们通过上述的方法将这段代码添加到关联的流文件中,并且试着看一下这个文件,看效果如何。
测试12.C:\stream test>echo virus > virus.txt
建立一个普通的名为virus.txt宿主文件,内容为virus,也可为空,但一定要确保建立成功。
测试13.C:\stream test>echo X5O!P%@AP[4\PZX54(P^)7CC]7]$EICAR-STANDARD
-ANTIVIRUS-TEST-FI LE!$H+H* > virus.txt:virus1.txt
建立一个流文件virus1.txt,并且将这段代码加入其中,再使用杀毒软件扫描一下流文件virus1.txt,防火墙没有报警,很恐怖吧!这岂不是好比给程序加了一个“壳”?不仅起到了躲避杀软的作用,还能够有隐藏文件的功效,这等好“壳”实在难寻。
如此另类的使用方法,绝对让人眼前一亮!我在一些文章上看到有人将一些恶意文件通过这种流文件的方式来达到隐藏和运行的目地,但是在经过我查询资料和实验之后发现这种说法并不完全成立。因为当流文件随着宿主文件一起加载入内存的时候,它的代码就会在内存中暴露,这样可以对内存进行监控的防火墙自然就会将其杀的片甲不留。不过能够让防火墙达到这种查杀效果的前提是必须将实时监控设置为检测所有文件。否则一些格式的文件将会成为漏网之鱼。对于一些非恶意的文件,也不是没有这种可能。我们还是可以通过一些命令来达到隐藏和运行的目地。For example就明白了!

随意准备一个非恶意文件作为准备关联的数据交换流文件,在命令行下输入命令:“type 数据交换流文件 > 宿主文件:数据交换流文件”,回车,然后在CMD里输入Start命令即可运行。不过需要注意的是,Start命令好像只能运行在根目录下或者与CMD同一目录中的文件。在根目录下的命令使用形式为“start X:(盘符)\宿主文件:数据交换流文件”,与cmd在同一目录下的命令使用形式为“start ./宿主文件:数据交换流文件或者start .\宿主文件:数据交换流文件”。
最后还有两种有意思的实验大家可以利用自己的环境尝试一下。第一个实验是先建立一个1.txt作为宿主文件,再选一个t.exe程序文件作为准备关联的数据交换流文件,然后为宿主文件建立一个快捷方式,然后在CMD下使用“type t.exe > 1.txt:t.exe”回车,再将快捷方式属性中的目标从原有的“C:\stream test\1.txt”改为“C:\stream test\1.txt:t.exe”,快捷方式的图标是不是有所变化?第二个实验我通过命令来说明吧:
C:\stream test>echo n > 1.txt

C:\stream test>echo nn > 1.txt:2.txt

C:\stream test>echo nnn > 1.txt:3.txt

C:\stream test>echo nnnn > 1.txt:4.txt

C:\stream test>echo nnnnn > 1.txt:5.txt
到了这步,一个宿主文件1.txt已经关联了多个流文件了,而且通过记事本查看不同的流文件,内容均可独立显示。我们再尝试下一步:
C:\stream test>echo nnn3 > 1.txt:3.txt
这一步做到了在不破坏宿主文件和其他流文件的前提下对“1.txt:3.txt”这个流文件的内容进行了修改。奥秘还很多,就不一一列举了,大家若有兴趣的话可以自己探索一下其中数据交换的奥秘所在。
说了这么多,我倒是觉得数据交换流文件可以被我们用来隐藏一些文件,或许在入侵当中也有它的用武之地,具体的就看各位的实际用途了。不过在安全问题日益凸现的今天,如果自己的机器被别人通过用数据交换流文件这种方式利用了怎么办?它的隐藏性又很好,这岂不是一个很棘手的问题?没有关系,现在已经有了一些工具可以检查系统中的数据交换流文件了!常见的工具有Lads.exe和ForensicToolkit工具包中的Sfind.exe。具体使用可以查看一下使用帮助,这里就不详说了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值