中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: [原创]NTFS数据流 上一主题 | 下一主题
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『楼 主』:  [原创]NTFS数据流

又是一篇关于Windows,NTFS 和 cmd 的帖子哈~~~貌似本板块可以改名为 中国cmd联盟 了~~~~嘻嘻~~~废话不多说,进入正题

你用过卡巴斯基么?是不是每次复制文件都会显示这个:

哈哈,这个就是今天我们要讨论的话题:NTFS数据流。

NTFS分区的数据流是一个子文件系统允许额外的数据连接到一个特别的文件中,现在的FAT文件系统格式是不支持数据流格式的。 简单点说就是给在NTFS分区格式的文件添加了一个标记。除了上面举的卡巴斯基的例子,在WinRAR添加压缩文件时,在 高级 选项中就有“保存文件数据流”的选项。再看看卡巴斯基对NTFS数据流干了些什么,Kaspersky把文件的验证指纹信息保存到NTFS数据流里面,如果病毒/木马修改了这个文件,Kaspersky就会很快发现文件校检有误,这就是为什么Kaspersky安装完毕要必须“全盘检查”一次,这样可以大幅度加快以后的病毒检查速度!那么,怎样添加NTFS数据流呢?这就和cmd有关了
dir C:>1.txt
看看1.txt里的内容,记住哦~~

然后
dir c:>2.txt:stream.txt
怎么样,糊涂了吧~~~先看看2.txt的属性:0 Bytes,打开2.txt看看有什么?什么都没了~~~

然后在输入:
notepad 2.txt:stream.txt
看看,出来什么了?惊讶吧~~

其实每个文件都可以有多个流的,用这个NTFS的特性我们可以隐藏文件哦~~~而且,还可以,隐藏木马 ^_^ 实际上, 流还可以不依赖于文件, 下面的命令也是合法的(先不要试, 否则可能会有点麻烦):
dir e:>:stream.txt
这是把流绑到了文件夹上, 这种流就更隐蔽了,一般情况下要想删除流只有将其宿主删除,如果你执行了刚才的命令,并且是在根文件夹上执行的,如果你想删除它, 那就恭喜你要格盘了:),不过有现成的工具可以使用的,这个就是:

Streams v1.53
Reveal NTFS alternate streams
http://www.sysinternals.com/Utilities/Streams.html

这么样,又是sysinternal的作品哦~~

我要说的就说完了,下面是网上收集的关于NTFS流的资料了

  Quote:
NTFS上的交换数据流NTFS上的交换数据流

转载:来源不详
----目录--------
1、前言
2、概念
3、性质和应用
-3.1 创建
-3.2 删除
-3.3 检测与提取
-3.4 保存与传输
-3.5 文件隐藏
-3.6 运行
-3.7 与IIS相关
4、附言
5、参考文章
----------------






1、前言




交换数据流(alternate data streams,以下简称ADS)也不是什么新东西,但用户和管理员对它的认识知之甚少,本文将结合前人的资料对ADS做一番探讨。如有错误,还望高手赐教。




2、概念




先来看看微软对多文件流的解释:



在 NTFS 文件系统下,每个文件都可以有多个数据流。值得一提的是,流不是 NTFS 2000 的功能,但是从 Windows NT 3.1 开始流已存在。当在非 NTFS 卷(如 Windows 98 计算机的磁盘分区)下读取文件内容时,只能访问一个数据流。因此,您会觉得它是该文件真正的且"唯一"的内容。这样的主流没有名称,并且是非 NTFS 文件系统可以处理的唯一一个流。但是当在 NTFS 卷上创建文件时,事情可能不一样。参看图 1 了解此重要概念。

ADS是NTFS文件系统特有的性质,也就是前面说的多数据流文件除了主流之外的流,但基于API的Win32却不能很好的支持ADS。例如我们可以把一个文件以流的形式附加到另一个文件(载体)中,但是对于Windows资源管理器来说载体文件没有发生任何变化(包括其大小、修改时间等)。由此将会产生一系列问题。

下面就让我们来看看ADS的一些性质及应用吧。






3、性质和应用




3.1 创建



创建ADS很简单,语法是<载体文件名>:



看个命令行下面的例子:echo This is lake2's stream > a.txt:stream.txt



通过上面的例子我们就很简单的创建了一个ADS,它在windows下并不可见,不信你可以用资源管理器或者dir命令看看a.txt文件的大小是不是0。打开a.txt,可是里面什么内容都没有。当然没有内容,这里ADS是a.txt:stream.txt,内容应该在这个文件里。注意,这里用type命令并不能显示文件a.txt:stream.txt,但是记事本却可以。还是在命令行下输入notepad a.txt:stream.txt,呵呵,看到"This is lake2's stream"了吧。现在我们用记事本打开a.txt随便修改内容,这并不会影响到流的内容;同样,对a.txt:stream.txt的修改也不会影响到载体文件a.txt。



3.2 删除



删除ADS最为简单,直接删载体文件就是;但是如果只想删ADS而保留载体文件的话最简单的办法就是把载体文件拉到非NTFS分区去走一趟。因为ADS是NTFS的"专利",离开了NTFS文件系统ADS也就烟消云散了。



如果你只想在NTFS分区删除ADS的话,可以用下面这个批处理:



type a.txt > a.txt.bak
rem type不能支持ADS,所以拿它来备份载体
del a.txt
rem 删除载体及ADS
ren a.txt.bak a.txt
rem 恢复载体文件



3.3 检测与提取



关于ADS的检测涉及到API编程了,呵呵,这方面我还在努力学习,这里就抄微软的话:"Win32 备份 API 函数(BackupRead、BackupWrite 等)可用于枚举文件中的流"。



不过好在已经有检测ADS的软件了,下面几个软件都可以检测:



LADS (List Alternate Data Streams) - http://www.heysoft.de/nt/ntfs-ads.htm
Streams v1.1 (Sysinternals) - http://www.sysinternals.com/ntw2k/source/misc.shtml
NT Objectives Forensic Toolkit (sfind.exe) -(http://www.ntobjectives.com/)



要提取ADS必须要第三方工具,NTRootKit工具包里的cp可以做到(cp也可以用于创建流);NTRootKit工具包我一直没有找到,google上一搜全是那个NTRootKit后门,只好自己用C写了一个。这也不会要求你是编程高手,C语言里的文件函数完全可以支持ADS的创建、删除、提取,只需把ADS当成一个文件来处理就是了。



3.4 保存与传输



前面说了,ADS在非NTFS分区就会丢失,那么说来在非NTFS分区就无法保存ADS了吗?直接保存没有办法,我们可以间接保存啊。呵呵,这样需要借助一个软件,你也应该有的,它就是WinRAR。对含有ADS的文件加压时,找到高级选项,那里有一个"保存文件流数据",打上勾(图2),呵呵,你就可以把ADS压缩到rar文件里了。这个rar文件可以保存到非NTFS分区的——注意啊,是保存,不能解压出来的。



【图2】


如果要传输ADS,最好是用资源管理器打开对方的共享再复制粘贴;如果你想用其他方式传输的话大概就只能传输包含ADS的rar文件了。

3.5 信息隐藏



要保密信息,传统的做法是加密。虽然加密后信息内容变成了无法直接读出的密文,不过也等于告诉人家这是秘密,就不安全了;但是如果我把信息藏起来让你找不着不就ok了吗,所以一种叫做"信息隐藏"的技术就被提出来了。



古装戏里常常有隐写术,就是一张白纸在平时就是一张普通的白纸,但在特殊的作用下预先写好的字就会显示出来。用这个来比喻信息隐藏是最为恰当的了。信息隐藏是目前信息安全研究的热门领域,实现方法也很多,最流行的大概就是以bmp图像文件为载体,通过替换文件每个字节无关紧要的最低的一位来实现的。



呵呵,不过有一种实现简单的信息隐藏技术就在我们眼前。对,就是利用ADS!既然Windows不能很好的察觉ADS,那么我们就可以把要保密的文件以ADS方式保存。不过这里提醒一下,利用ADS实现信息隐藏的安全性不是很高,不过也不是很低——我想应该没有人没事就花大量时间用lads.exe检测着玩吧。



另外,大多数杀毒软件并不能检测ADS,所以我们可以利用流让杀毒软件pass后门。例:type nc.exe > a.txt:nc.exe



原文件nc.exe会被金山毒霸查出来,处理之后尽管a.txt:nc.exe内容与nc.exe完全一样,但并不会被金山毒霸发现。



3.6 运行



前面说了可利用ADS让后门躲避杀毒软件,但如果不能运行的话还不是没用。那怎么运行呢?



命令行下面直接运行a.txt:nc.exe是不行的,应该用start命令。关于这个命令的详细用法你自己打help start看看吧。



start命令运行可执行的ADS时要用绝对路径或者当前路径用./加文件名。看例子:start ./a.txt:nc.exeorstart c:\a.txt:nc.exe



在Win2000下查看进程只能看到载体文件,而XP下则可以发现整个ADS。图3是在XP下用tlist的截图。






3.7 与IIS相关



在IIS中访问ADS会有一些有趣的事情发生,这个参见我的另一篇Blog《交换数据流(ADS)与IIS的前世与今生》(http://blog.csdn.net/lake2/archive/2005/01/26/269659.aspx)。




4.附言




谢谢你看完我的文章 :)




5.参考文章




bigworm翻译,《NTFS不利的一面》(http://www.xfocus.net/articles/200212/466.html)
xundi,《关于NTFS文件系统中的数据流问题》(http://www.xfocus.net/articles/200103/81.html)
H. Carvey,《The Dark Side of NTFS》(_side.html" rel=nofollow>http://patriot.net/~carvdawg/docs/dark_side.html)
Damon Martin,《Windows, NTFS and Alternate Data Streams》(_Martin_GSEC.pdf" rel=nofollow>http://www.giac.org/practical/gsec/Damon_Martin_GSEC.pdf)
《NTFS Streams - Everything you need to know》(http://www.diamondcs.com.au/index.php?page=archive&id=ntfs-streams)



  Quote:
NTFS不利的一面
翻译+整理: By Bigworm 不当之处请指正
这篇文章是根据H. Carvey的The Dark Side of NTFS (Microsoft’s Scarlet Letter)

翻译的,可以自由转载,但请保持译者和来源以及文章的完整性.

简介:微软的平台不断在增加.公司用的服务器和桌面操作系统运行的一般是winNT和win2000,而家庭用户和学生用的系统一般是winXP.这些平台是很受欢迎的并且被大范围的使用.可是使用这些操作系统的用户和管理员却对NTFS文件系统的某个特性知道的很少,那就是”交换数据流”(alternate data streams).

NTFS因为它的稳定性 强大的功能 以及它所提供的安全性而成为一种更优越的文件系统,NTFS交换数据流(ADSs)是为了和Macintosh的HFS文件系统兼容而设计的,它使用资源派生(resource forks)来维持与文件相关的信息,比如说图标及其他的东西.而微软提供了一种方法通过Windows explorer来创建特殊的ADSs,检测这种特殊的ADSs的必要工具和功能相当缺乏.说来也奇怪,系统一直以来都有允许用户创建ADSs以及在这种流文件中执行隐藏代码的功能和工具.Microsoft KnowledgeBase 中Q101353号文章承认了基于API的win32不能很好的支持ADSs.

    这篇文章的目的是详细的介绍ADSs是怎么被创建和利用的,以及隐藏在ADSs中的代码是怎么被执行的.基于不同的系统(NT 2K XP)处理ADSs也是很不同的.

   创建ADSs

创建ADSs的语法相对比较简单和直接.比如说创建和文件myfile.txt相关联的ADSs,只需简单的用冒号把文件名和ADSs名分开即可.

D:\ads>echo This is an ADS > myfile.txt:hidden

此外,ADSs还可用另外一个文件的内容来创建.

D:\ads>echo This is a test file > test.txt

D:\ads>type test.txt > myfile.txt:hidden

然后你可以用记事本去检验一下看看,命令如下:

d:\ads>notepad myfile.txt:hidden

可是,用dir命令去看不出任何变化,Windows Explorer也没有任何可用的转换和设置来检测这种新建的ADSs的存在.

此外,ADSs可以被创建以及与目录列表相关联,而不是与一个文件关联.这种特性在文章的后面将会显示出他的重要性,但现在我们介绍怎么创建ADSs以及足够了.

D:\ads>echo This ADS is tied to the directory listing > :hidden

这种类型的ADSs也可以通过type和notepad命令来创建.

ADSs文件的内容并不只限于text(文本)数据,任何二进制信息的流都可以组成一个文件,而且ADS也就是一个文件而已.可执行的东西也能够相当容易的隐藏在ADSs中,看下面的例子:

D:\ads>type c:\winnt\notepad.exe > myfile.txt:np.exe

D:\ads>type c:\winnt\system32\sol.exe > myfile.txt:sol2.exe

同样,像图片文件,声音文件或任何其他的数据流都可以隐藏在ADSs中.

最后,Windows Explorer提供了一种方法来创建特殊的ADSs(RUSS00)

看下图:我们在值那一栏可以填入很多东西

http://www.3389.net/bbs/uploadImages/20021221731511210.gif
图一
如果某个用户没有写文件的权限,那么他就不能在该文件上添加ADS.

此外,windows 文件保护功能可以防止系统文件被替换,但是他不能阻止有适当权限的用户在这些系统文件上添加ADSs,有个工具System File Checker(sfc.exe)可以检查受保护系统文件是否被覆盖,可是它不能检测ADSs.

检测,查看,利用ADSs

如前所述,微软并没有提供工具来检测ADSs的存在.现在检测ADSs最好的工具是由Frank Heyne写了Lads.exe.这个工具现在的版本是3.10,它是一个命令行工具

看下图:
http://www.3389.net/bbs/uploadImages/2002122174413189.jpg
图二
从上图我们可以看出lad.exe多有用了,不仅可以显示ADSs的存在,还可以显示ADSs的路径和大小.我们仔细注意和myfile.txt相关联的四个文件,其中三个是以很像扑克里黑桃形状的ASCII开头的,另外一个就是在花括号中有一大串数字和字母的那个文件,这四个文件就是我们用图一所示方法创建的.

既然找到了这些文件,我们应该怎么看文件的内容那?其实notepad就是一个很好的工具,但是这中间还有个陷阱.

比如,以下命令就出现我们不希望的结果

d:\ads>notepad myfile.txt:hidden

执行这个命令时notepad就会问是否创建一个新文件,这个就很奇怪了,因为myfle.txt:hidden我们早就创建了.为了执行的结果是我们所希望的,应该输入下面的命令:

d:\ads>echo This is another ADS > myfile.txt:hidden.txt

d:\ads>notepad myfile.txt:hidden.txt

这样就出现了我们所希望的结果,文件名后增加的扩展名允许用notepad打开ADSs,这种方法也同样适用于其他的ADSs,比如:

d:\ads>notepad myfile.txt:np.exe

ADSs是NTFS文件系统的特征,所以带有ADS的文件如果被移动到其他的文件系统,比如FAT,FAT32或者ext2上,ADS就会被删掉,因为这些文件系统都不支持ADS,如果是在NTFS分区之间移动,ADSs就会被保留下来.

删除ADSs相对简单,用下面的命令即可

d:\ads>type myfile.txt > myfile.bat

d:\ads>del myfile.txt

d:\ads>ren myfile.bat myfile.txt

现在用lads.exe看一下,可以看到所有的ADSs都不见了.

执行ADSs

前面的例子中,我们已经把可执行的代码藏在ADSs中,这个看起来好像没什么用处,除非代码可以自动执行.其实,start命令就可以用来执行这些代码,现在我们再来创建ADSs

d:\ads>type d:\winnt\notepad.exe > myfile.txt:np.exe

但是在2000上执行时会出现错误,这时因为我们提供的路径信息不够

所以,我们应该指明路径,不管时绝对路径还是相对路径.比如,下面的任何一个命令都可以:

d:\ads>start d:\ads\myfile.txt:np.exe

d:\ads>start .\myfile.txt:np.exe

是不是出现了记事本??

当命令执行时进程会出现比较有意思的现象.例如,运行pslist.exe会出现下图情况
http://www.3389.net/bbs/uploadImages/200212217153098127.jpg
图三
出现的进程名是myfile.txt:

看看任务管理器中的情况:
http://www.3389.net/bbs/uploadImages/20021221774639617.jpg
图四

再看看下图:
http://www.3389.net/bbs/uploadImages/20021221785933109.jpg
图五


我们来看看在xp的管理器中进程的情况:

http://www.3389.net/bbs/uploadImages/20021221710248550.jpg
图六

还有一种可选择的用来执行隐藏文件流的方法,我们来示范一下,先在桌面上创建一个快捷方式,项目位置填入d:\ads\myfile.txt.假设你创建的流文件是sol2.exe(也就是用这个命令type d:\winnt\system32\sol.exe > myfile.txt:sol2.exe),现在我们到创建的快捷方式的属性里修改,让快捷方式指向d:\ads\myfile.txt:sol2.exe,观察一下快捷方式的图标,是不是起了变化?

现在我们双击这个图标,就可以执行这个文件了.看执行后的结果:
http://www.3389.net/bbs/uploadImages/200212217105442063.jpg

图七

还有一种比较简便的方法是直接在注册表中的run键下添加数据流文件的完整路径:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run,下次系统启动时就会自动运行该隐藏文件

在开始的运行框中也可以执行ADSs比如: file:///d:/ads/myfile.txt:sol2.exe

对于使用perl的管理员可用下面的代码执行ADSs

my $file = 'd:\ads\myfile.txt:sol2.exe';

`$file`;

把文件存为ads.pl,用下面的命令即可执行

d:\perl>ads.pl

其实用windows的WSH也可以执行ADSs:

d:\ads>echo MsgBox "VBS file to test ADSs" > ads.vbs

d:\ads>wScript ads.vbs

d:\ads>type ads.vbs > myfile.txt:ads.vbs

d:\ads>wScript myfile.txt:ads.vbs

或者:

D:\ads>start .\myfile.txt:ads.vbs



总结:

ADSs是NTFS的一个特征,它是为了和HFS兼容而设计的.可是由于比较难于被发觉,所以对于管理员来说是一种危险,现在29A这个组织的Bennie和Ratter已经发布了一种叫做W2K.Stream病毒,这个病毒就是利用ADSs的.

我们并不能以不使用NTFS来作为解决这个问题的办法,因为NTFS在安全性和可靠性方面是有很大作用的.其实,管理员应该对文件和目录正确的使用DACLs(discretionary access control lists),并且经常使用工具比如说lads.exe来扫描他们自己的系统.

文章中有些地方经过我自己的整理,删除了有些无关紧要的内容

如果想看原文可以参http://patriot.net/~carvdawg/docs/dark_side.html.

上面提到的工具链接如下:lads  http://www.heysoft.de/nt/lads.zip

pslists: http://www.sysinternals.com/files/pslist.zip



  Quote:
关于NTFS文件系统中的数据流问题

会员推荐 2006-1-23 转载注明:www.chinageren.com  

在NTFS文件系统里存在的数据流形式已经是几年前的事情了,而防病毒供应商
没有充分的检查这一方面的文件,这样导致病毒扫描程序发现不了而已代码或者
病毒扫描程序本身就会有可能破坏文件系统的文件。

NTFS分区的数据流是一个子文件系统允许额外的数据连接到一个特别的文件中,
现在的FAT文件系统格式是不支持数据流格式的。我们可以看看下面的例子来
了解下NTFS的数据流是怎样工作的:

WINDOWS操作系统中使用NTFS文件系统,我们建立下面的一个文件:

echo "this is the main file" > file1.txt

上面这个命令会建立一个叫file1.txt的文本文件并在文件中存在文本字符串
"this is the main file",你可以使用下面的命令验证文件是否成功建立:

type file1.txt
edit file1.txt
notepad file1.txt

使用dir命令就会显示大约26字节大小的文件,上面文件成功建立是因为你存储
到文件系统的有名流分区(the named stream portion of the file system)。

下面我们来建立一个刚才预备的数据文件,在提示符下运行下面的命令:

echo "this is the stream" > file1.txt:stream1.txt

这上面的一个命令可以成功的完成而且没有任何错误显示,其中":"号就是你
指定关联一个流文件。在你尝试运行下面的命令:

type file1.txt:stream1.txt
edit file1.txt:stream1.txt
notepad file1.txt:stream1.txt

除了Notepad,你可以发现所有上面的命令退出的时候会出现某中种形式的错误,
这是由于其中的一些WINDOWS工具对处理有关数据流文件的能力不是很强,因为
在当时写有关NTFS文件系统的数据流存储的时候很多WINDOWS工具没有相应的
更新。OK,现在我们关联一个大的数据流到file1.txt文件中,并俩看看现在
的dir出现的情况,查看文件的字节大小之间的区别:

dir c:\winnt\* > file1.txt:stream2.txt

命令可以成功的执行,但我们建立的数据流文件中增加了将近6,500字节的数据,
可是dir显示的file1.txt显示的仍然只有26个字节,如果我们使用WINDOWS的
资源管理器检查我们照样看到的26个字节的误报数。

为了证实你确实增加了6,500字节的信息,你可以执行下面的命令:

notepad file1.txt:stream2.txt

你可以看到一个包含WINNT 目录的目录列表的文本文件,现在你试试选择
文件-->另存为,你会接受到错误的对话框信息。这是因为notepad有能力
打开和建立流文件,但它不能浏览NTFS这方面的范围。

上面是关联一个文件为流文件,但有趣的是你也可以直接创建一个流文件,
请用下面的命令测试:

echo "this is a stream file" > :file3.txt

OK,这样创建了的流对于dir或者资源浏览器是完全不可见的,就是说是隐藏的,
其中流文件也不能被del文件删除:

del file1.txt:stream2.txt
del :stream3.txt

上面两个删除命令都失败了,这是因为del命令是另一个没有升级到能处理流的
工具,唯一的方法删除挂付的流只能是删除前面的一个主文件,这样的操作就会
自动删除了所追加的流。:stream3.txt的情况你就必须上删除整个目录来删除
这个文件,呵呵。

其中关于流的最大的问题是难于鉴别它们是否存在,编程人员可以使用API函数
CreateFile()来查看一个数据流文件是否存在,但这是假定编程人员在知道
数据流名字的前提下才能操作,例如:在上面的实践中我们能打开数据流文件是
因为我们提供给notepad相应的文件名,但你从上面应该知道,当我们使用"另存
为"的操作时我们失败了,因为"另存为"的操作需要浏览文件系统数据流部分的能力。
CreateFile()只是当你给它提供特定的信息的时候才能工作。

这就出现了一个有趣的问题,"是否存在一种方法,当你不知道文件名的时候也
能鉴别数据流的存在?"经过研究,发现只有API函数中的BackupRead()有能力
发现数据流的存在,不幸的是,很少有工具使用了这个功能。

关于讨论NTFS文件系统的数据流存在问题不是一个新的问题了,在BUGTRAQ上也
讨论过这个问题,见URL:http://www.securityfocus.com/templates/archive.pike?
list=1&date=1998-03-15&msg=Pine.SUN.3.94.980320114349.19659S-100000@dfw.dfw.net

当然微软公司也有关于流这方面的信息和它们怎样的工作,参考URL如下:
http://www.securityfocus.com/templates/archive.pike?list=1&date=
1998-03-15&msg=Pine.SUN.3.94.980320114349.19659S-100000@dfw.dfw.net

Advisory Details
我们测试了最新三个主要病毒扫描开发商的最新版本的病毒扫描程序,所有程序
都不能很好的鉴别存在于数据流中的病毒。例如你建立一个MyResume.doc:ILOVEYOU.vbs
和在数据流文件中保存了I LOVE YOU病毒内容的WORD文件,没有一个测试的病毒
扫描程序在扫描整个磁盘的时候有能力发现这个病毒,即使是选择了"check all files"
选项。这表示一个恶意变成人员可以使用数据流文件系统来隐藏恶意代码来逃避
病毒扫描程序的检查。

当然也存在检测出病毒的可能,前提是驻留在你的内存里的病毒扫描存在必须能
设置成检查所有文件(但这势必要增加资源的负担),这样,当有名的流文件(the
named stream)里的内存读入存在的时候,其中的数据流也会被读到内存里,这
时候驻留在内存中的病毒扫描程序就能探测到有已知病毒特征串的病毒,呵呵,
但这种情况对于新的病毒,没有已知病毒特征串的病毒就无能为力了,而且要知道
的是现在的大多数病毒扫描程序为了减少对系统的负担,病毒扫描程序一般
不设置检查全部文件的选项,驻留内存的病毒扫描程序一般仅仅检查一些带有特定
后缀名如.com,.exe,.vbs等的有名文件流(the named stream)。

所以因为大多数扫描程序没有包括对.ini文件的检查,一个编程人员可以关联一个
带有恶意代码而且不会被检查的文件类型写入到磁盘,在加上编的新病毒如果没有
使用已知的特征串就很难被驻留在内存里的病毒扫描程序发现。

但是问病毒扫描开发商为何没有对数据流文件进行处理?回答的答案是”数据流
可以插入,但你不能直接执行数据流文件,所以是没有威胁的"。这是回答是正确的,
你如果使用命令打开resume.doc:NastyEvilVirus.com所附的病毒码是不会被执行的。

但是如果病毒制作者把病毒代码和执行的代码--(简单的调用和处理的命令)追加到流
文件中,就有破坏系统的可能,下面解释如下:

大家知道病毒扫描程序的扫描是基于特征字符串的,这表示扫描程序检查病毒
代码中的唯一类型来区别其他的文件,如果病毒扫描程序没有能力检查使用数据流
的文件,那病毒扫描程序可以控制使用流数据文件的唯一方法就是控制存在在
流文件系统的中的执行代码部分。

所以一个攻击者可以写一段新的病毒程序,可以执行破坏的任务,他没有马上
发表出来,而是装载一个WORM或者其他投递程序中,这个WORM只是简单的并病毒
代码作为数据流追加到到NTFS文件系统中一些很重要的文件中,如cmd.exe,
Poledit.exe,Regedt32.exe或者其他的。

过几星期后,攻击者再发布了这个病毒代码,其作用就是写入到有名数据流中,
这样病毒供应商就回响应并产生此类病毒的特征字符串记性更新并让用户下载,
然后到第一次被插入数据流的文件被执行的时候,驻留在内存里的病毒扫描程序
就探测到这个装入到内存处的恶意代码。这样,病毒扫描程序就简单的把它作为
了有名数据文件,而不是更改了的数据流,然后就根据其设置提示相应的措施:
如"delete infected files"被选择了的话,一些被插入数据流的重要文件将被
删除,如果选择了"move infected files",那这个重要文件系统就会被移到一个
默认的位置,使系统处于不可操作的状态。如果"prompt for user intervention"
被选择了的话,就会停止执行这个文件并让用户手工删除。因此无论这个病毒
生成的数据流文件有没有执行以后的危害,都会使病毒扫描程序检测为不正常
文件,而使系统处于不稳定的状态。

那么到底有什么方法可以对付这些流文件系统呢?

1,对NTFS文件系统的数据流做一些常规的检查,NTOBJECTive开发了一个很好的
工具Sfind.exe可以很好的找到被更改了的数据流。其地址可以在这里找到:
http://www.ntobjectives.com/,你可以通过AT命令定时的来执行。

2,根据第一步所做的,如果你检查到一个新的数据流,就应该值得可疑,因为
测试情况下默认的NT和WIN2000的安装没有建立任何数据流文件。当然也可能是
第三放的软件造成的,如当一个Macintosh volume建立的时候,流会用来保存
派生的文件信息。因此你在NT系统中存储Macinitosh文件就可以看到数据流。

3,如果你找到可疑的数据流并想从系统中清除出去,第一步执行一个文件的
备份操作。注意你要知道这个备份文件是否支持流文件系统。如果数据流没有
备份,你可以map一驱动盘在一个远程的NTFS分区中并COPY文件到远程系统中。

然后在要把清理的数据流简单的拷贝到non-NTFS分区中,如使用FAT的系统,
WIN98系统或者LINUX,然后在拷贝到本地系统上,因此当你把带有数据流的文
件移到或则拷贝到远程系统里的时候,其中追加的数据流是不会被保存的。

要注意的上述移动会更改一些重要文件的权限,所以为了保证你文档的属性,你
最好使用FileStat或者其他工具来移动文件,这个工具也可以到NTOBJECTIVE里
找到。

当然有扫描程序的供应商进行支持是最好的方法,呵呵。

上面所有东西我本人觉得最有趣的是可以建立一个隐藏的文件,这个问题我记得
ADAM讨论这个情况,大家也可以向他请教。呵呵.....

谢谢大家有耐心看完这个文章。



  Quote:
交换数据流(ADS)与IIS的前世与今生

    关于交换数据流(alternate data streams)的概念请参看bigworm翻译的文章《NTFS不利的一面》,本文只是讲一下在IIS上访问ADS的情况。

    先请大家看一个很古老的漏洞:Microsoft IIS 3.0/4.0 ::$DATA请求泄露ASP源代码漏洞。大概这是能找到的ADS与IIS的最早的报告了。

    $DATA是在NTFS文件系统中存储数据流的属性之一,即文件的主数据流(NTFS文件系统允许一个文件有多个流,但是至少有一个未命名流即主流),当我们访问a.asp::$DATA时就是请求的a.asp本身的数据,如果a.asp还包含了其他数据流,比如a.asp:lake2.asp,请求a.asp:lake2.asp:$DATA即是a.asp中的流数据lake2.asp的流数据内容。微软的补丁似乎解决了IIS泄漏主流数据的内容问题,但是如果我请求的是附加流数据呢?呵呵,问题变得有趣了!

    IIS3和IIS4的时代已经过去,关于这个问题的测试,IIS版本是5.1,系统为Windows XP SP1。

    我在web目录创建一个文本文件a.txt,又将文件cmd.asp(一个执行cmd.exe的webshell)以流的形式附加到a.txt中,现在虽然只能看到a.txt,但实际上还有一个a.txt:cmd.asp(呵呵,不能用眼睛看事物,要用心^_^)。好了,让我们在IIS里看看访问a.txt:cmd.asp及a.txt:cmd.asp:$DATA的结果吧。

【图1】执行asp文件!(注意url)


【图2】泄漏asp源代码


    我们在IIS里不仅可以访问非主流文件内容,还可以执行流形式的脚本文件!呵呵,是不是想到利用这个可以做一个隐藏的webshell。嗯,我当时也相当激动,不过很快就从头寒到脚咯,因为这个只是XP下的结果——没有人拿XP做服务器吧……

    在2000和2003上情况就不那么有趣了,他们都不会执行流脚本(显示找不到该页)。但是2000 SERVER版本可以访问到不用IIS解释的流(例如jpg文件;呵呵,可以拿来做一个隐藏的静态主页哦);2000 Advance SERVER 会出现“Not enough storage is available to process this command”的错误;2003以前试过,但结果忘记了。另外,stm等几种文件也是由服务端解释执行的,可以试试,嘿嘿,说不定有happy的事情发生哦。

    嗯,该说的差不多了,最后来感谢一下bigworm,要是没有他的翻译只怕现在我都还不知道ADS为何物。From Internet , For Interner !

补充几点哈,才发现的:
1.NTFS文件流的名称中可以包含 * ? 但是不能有 : \ / ,所以和NTFS文件系统规定的有点不一样

2.由于在 explorer 里面 含NTFS 流的文件大小不会被显示的,Microsoft出了一款专门看NTFS流的工具,和详细的ADS介绍

http://msdn.microsoft.com/librar ... fs5.asp?frame=false
中文的哈http://www.microsoft.com/china/M ... y/techart/ntfs5.asp


3.很多Internet临时文件都有 :Zone.Identifier 这个流,这是因为XP把它标记为:这个文件是从 Zone 3 (Internet) 下载的,你打开这个文件,WinXP就会问你:“打开文件 - 安全警告 你想打开次文件吗?名称xx发行者xxx类型xxx发送者xxx"

4.ADS似乎对 .lnk 快捷方式的支持不是很好~~~做一个指向1.txt:cmd.exe的.lnk,双击居然说 “不能打开此类型的文件”~~~~

[ Last edited by electronixtar on 2006-8-1 at 23:24 ]

   此帖被 +17 点积分          点击查看详情   
评分人:【 jvive 分数: +2  时间:2008-5-6 21:46
评分人:【 plp626 分数: +15  时间:2009-6-29 07:10





C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-25 12:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fujianabc
金牌会员





积分 3467
发帖 1616
注册 2004-6-21
状态 离线
『第 2 楼』:  

感谢楼主的文章,ntfs的特性真多啊。

2006-6-25 16:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 3 楼』:  

最近还在研究HardLink,也是NTFS的一大特性,只是和DOS没什么关系,就没发帖子~~呵呵




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-25 17:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
220110
荣誉版主




积分 718
发帖 313
注册 2005-9-26
状态 离线
『第 4 楼』:  

请问NTFS数据流有没有大小限制?

2006-6-25 21:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fujianabc
金牌会员





积分 3467
发帖 1616
注册 2004-6-21
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by electronixtar at 2006-6-25 05:30 PM:
最近还在研究HardLink,也是NTFS的一大特性,只是和DOS没什么关系,就没发帖子~~呵呵

hardlink我玩的时间比较长了,可以让多个相同的文件只存储一遍,节约磁盘空间。

2006-6-26 11:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 6 楼』:  



  Quote:
请问NTFS数据流有没有大小限制?

没有哦~~




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-26 11:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Scott0902
中级用户





积分 466
发帖 237
注册 2005-10-12
状态 离线
『第 7 楼』:  

一个字--强

2006-6-26 23:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 8 楼』:  

今天才看到,ntfs的特性真多, 强

2006-9-26 08:39
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
okace
初级用户




积分 130
发帖 15
注册 2004-7-30
状态 离线
『第 9 楼』:  

又长见识了,谢

2006-10-2 19:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 10 楼』:  

总算知道NTFS流是怎么回事了!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-6 09:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 11 楼』:  

好贴啊,一定要顶一把

2006-10-8 23:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  


  记得以前在一个关于电脑的杂志上面看见一点关于数据流的文章,但是只知道用CMD命令来创建数据流,达到隐藏数据的目的。今天看到这个帖子,又长了见识了,对数据流的认识也加深了不少。

  感谢楼主~顶一个~


2006-10-14 07:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lpclimber
初级用户





积分 168
发帖 85
注册 2005-8-26
状态 离线
『第 13 楼』:  

强贴!我佩服得五体投地了!谢谢!

2007-3-4 23:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Chief
新手上路





积分 16
发帖 7
注册 2007-3-12
状态 离线
『第 14 楼』:  

没用过NTFS格式

2007-3-12 10:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
songdan
初级用户





积分 21
发帖 11
注册 2006-9-20
状态 离线
『第 15 楼』:  

又长见识了,谢谢

2007-4-22 23:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: