*碎片对象文件* 很多人都应该都见过windows产生的碎片文件,windows中有一种被称为碎片对象的文件(.shs文件)。如果你在邮件附件中收倒一份这样的文件,你敢不敢打开它呢。估计很多人都不会觉得这种文件是一个威胁。原因有几点: 1 碎片对象文件的缺省图标是一个和记事本文件图标相类似的图标,很容易会被误认为是一些文本的文档,用户对他的警惕心理也比较小。 2 .shs是一个无条件隐藏扩展名的文件。即使是在“资源管理器\工具\文件夹选项\查看”属性中将"隐藏已知文件扩展名"属性设为不隐藏,.shs文件仍然是隐藏。很多人都喜欢将文件扩展名显示出来(包括我),这样对文件的情况了解的更清楚些。可是一个test.txt.shs文件在浏览器中显示依然是test.txt.在你已经习惯了看到文件扩展名的情况下,你会对这样一个文件起疑心吗? 3 即使有疑心,你用任何杀毒软件都不会找到这个文件的一点问题,因为这个文件本身就没有病毒,也不是可执行的,而且还是系统文件。你会怀疑这样的文件吗? *测试方法* 那么,碎片对象到底对用户的计算机会造成什么威胁呢?我们一起来作个测试就明白了。(测试环境是在windows 2000server中文版上进行的)。我们先在硬盘上创建一个测试用的文件test.txt(我创建的位置是e:\test.txt),然后我们来制作一个能删除这个测试文件的碎片对象文件。 1 先运行一个对象包装程序(packager.exe),我的win2000 server是在/winnt/system32下 2 新建一个文件后,打开菜单 文件->导入,这时会弹出一个文件对话框,让你选择一个文件。不用考虑,随便选择一个文件就可以了 3 然后打开 编辑->命令行,在弹出的命令行输入对话框中输入 cmd.exe /c del e:\test.txt,确定 4 选然后在菜单中选择 编辑->复制数据包 5 然后随便在硬盘上找个地,我就直接在桌面上了。在桌面上点击鼠标右键,在弹出菜单中选择 "粘贴",这时可以看到桌面创建了一个碎片对象文件。 现在我们可以双击一下这个文件,一闪而过地cmd窗口之后,在到e盘看看,测试文件e:\test.txt已经被删除了。现在知道了,当时在对象包装中输入地命令被执行了。好危险啊,要是这命令是删除系统中一个重要文件,或者是format什么的。不要告诉我你想用这方法去format 别人的硬盘吧。 *技术原理* 试验完了,我们来讲讲原理吧。懒的写了基础知识,到网上找了一段关于OLE的简单介绍,作者看见别骂我啊,多多原谅 ---- OLE(Object Linking And Embedding) ---- 对象链接与嵌入,OLE允许你通过使用来自两个或多个WINDOWS应用程序的资源来创造复杂的 文本,OLE提供了方便的技术用来将文字和来自不同程序的数字表、图象和其他类型的数据组合起 来。为此,OLE定义了将对象附属于宿主文本的两个基本方法,链接与嵌入: ---- 嵌入:一个嵌入对象包含在宿主文本中。要创建或编辑一个嵌入对象的数据时,你可以在不 离开宿主文本的情况下激活源应用程序。此结果对象将保存在宿主文本中,而不是另外其它的文件。例如,你创建了一个字处理文本,其中包含嵌入Excel工作表。为了执行在此工作表上的操作, 你可以在此文本内部激活Excel。在保存了此字处理文件后,你同时也将嵌入的工作表数据保存了下来。 ---- 链接:相比之下,一个链接对象却保存在外部文件中。宿主文本包含了对数据的引用以及对链接对象的映象,而不保存数据本身。在修订对象数据时,所做的改变显示在宿主文本中但却保存在外部文件中。例如,包含一个链接Excel工作表对象的字处理文本提供给你对用于编辑工作表数据的Excel资源的完整访问能力。此文本包含了对分立工作表文件的引用。如果此工作表恰好被链接入任何其它文本中则可以从任何一个它的宿主文本中编辑其数据。Windows在需要时可以更新此链接关系(简称链),这样便可以给每一个宿主文本提供数据的最新版本。 也就是说,我们所输入的命令作为OLE对象嵌入到对象包装程序新建的文件中了,而微软为了能方便的将嵌入到文件的对象进行复制,使用了一种技术Shell Scrap Object(简称SHS),就是说,当你在不同文件间复制对象时,windows是将对象包装成一个碎片对象来进行复制的。因此,一旦我们不是在文件间进行复制粘贴,而是直接将碎片对象粘贴到硬盘上,就会产生一个.shs文件。这个碎片对象文件保存了原来对象的所具备的功能,原来对象包含的命令同样会被解析执行。 *解决方法* 既然这种文件可能会带来危险,那么我们该如何防止来自这种文件的威胁呢? shs文件既然不是可执行文件,当然需要其他的程序来解析执行了,我们去掉解析执行的关联就可以简单防止这种文件中潜伏的威胁了。 打开注册表编辑器:regedit.exe 在[HKEY_CLASSES_ROOT\.shs]主键下,将默认值ShellScrap删除,然后在双击.shs文件,这回不会去执行了,弹出让我们选择打开.shs文件需要的程序的对话框。跟彻底一点的办法是将[HKEY_CLASSES_ROOT\ShellScrap\shell\open\command]下的打开.shs文件的关联完全去掉,现在即使双击.shs文件,连选择运行的程序也对话框也不打开了,直接要求在控制面板重建文件关联。 *题外的话* 在windows系统中,还存在其他一些类似的的文件后缀名,如.shb、.lnk等等,例如攻击者可以在快捷方式文件属性指向中同样嵌入恶意命令,对系统造成危害。 声明:本文仅作技术探讨,使用本文的方法恶意攻击他人找成的严重后果又攻击自负 |