viking'blog

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • 个人日记(12) (rss)
  • 品位人生(1) (rss)
  • 学习日记(5) (rss)
  • 技术分享(18) (rss)

随笔档案

  • 2009年5月 (1)
  • 2009年4月 (1)
  • 2008年7月 (19)
  • 2008年6月 (15)

搜索

  •  

最新评论

  • 1. re: Spring创建bean实例
  • 评论内容较长,点击标题查看
  • --ms

阅读排行榜

  • 1. Spring创建bean实例(2834)
  • 2. Spring注入属性值(1729)
  • 3. 沈星《两生花》(1370)
  • 4. Spring依赖关系配置(1106)
  • 5. Spring注入field值(737)

评论排行榜

  • 1. Spring创建bean实例(1)
  • 2. 莫扎特的力量(转)(0)
  • 3. 关于arp病毒与清除方案(转)(0)
  • 4. 疯狂的ARP,痛苦的路由器(0)
  • 5. 疱丁解马-木马查杀深度剖析之自启动项篇(六)(转)(0)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

疯狂的ARP,痛苦的路由器
   最近2天都没上网,不是因为不想上,是因为整个局域网内都在通过ARP欺骗限制人家网速!事情是这样的!因为暑假无聊,没事当然想看看电影!但是我又懒得去下!所以就使用了PPLIVE,PPLIVE里在放神雕侠侣(古天乐版的)虽然看过好几遍了,但是其中的内容还是让我无法拒绝啊!看得正爽时,发现下载速度变慢了!难道有人在用P2P下东西?打开P2P终结者一看,没人下载东西啊!为什么网速会变慢?难道有人限制我的网速?试着用了下反P2P终结者,速度果然有所回升!心想:“估计是他们看我这占用的带宽高吧!”于是跑去下了个彩影---ARP欺骗防火墙,刚刚用上,果然提示正遭受ARP攻击!郁闷,既然这样我也来限制一下你们的网速!OK,这下爽了吧!继续看我的神雕---忽然发现原来郭芙长得还不错,估计是以前小时候眼光不同,一直喜欢小龙女!正在YY当中,忽然发现下载速度变为0KB了,QQ也掉了!我也明白是什么会事了,ARP-A,一看网关的MAC地址被改了,ARP欺骗,OK,既然你们不让我上网,我也不会让你们爽!我一样断了他们的网络,就这样僵持了2天,谁都没上网,对方估计也是一知半解,发现自己上不了网了,也急了,跑去找房东,房东拿着路由器去换了个新的,一样ARP,没用!今天晚上跳舞回来,看见一位大叔,拿着笔记本电脑在路由拿东试试西试试,估计是他们请来的吧,看他弄了半天也弄不出个所以然来,索性去帮他一把,我也不想自己晚上上不了网!事后得知限制断我网络的43IP和23IP是我隔壁的!哼!开始还不承认他们做了,等我把防火墙打开给他们看,他们知道无语了!当然这事只要他不限制我,我不限制他也就好办了,因为2天没上网,晚上大家都想上下网,估计也打算冲下电,第2天继续作战吧!大家都退了一步,就这样,今天晚上我得以来此写日记!
posted @ 2008-07-02 00:27 viking 阅读(381) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之自启动项篇(六)(转)

4、自启动项的隐藏、保护与查杀




自启动项的隐藏与保护,跟进程的差不多,不外乎还是HOOK,系统提供给程序开发人员对注册表操作的功能函数常用的有如下几个:RegCreateKey 、RegOpenKey用于打开创建注册键;RegDeleteKey、RegDeleteValue用于删除注册键及注册值;RegEnumKey、RegEnumValue用于枚举注册键及注册值;还有RegQueryValu来获取值。另外还有一套*Ex函数,其实功能都是一样的。




而系统查看或删除注册键与值时,也是用的上面的几个API。而上面的一些个API是用于应用层的,它们又会调用系统内核中的Nt*系统的功能服务来进行接下来的处理(*代表了Nt开头的那些与注册表相关的系统服务),而Nt*系统服务又调用了Cm*底层功能代码来进行操作,当然了,最终的操作都要实现在HIVE文件上面去。




进程篇中的SSDT-HOOK、SSDT-INLINE—HOOK在注册表HOOK时是完全有效的,HOOK应用层的RegCreateKey、RegOpenKey或RegDeleteKey都可以实现注册键的防删除,而HOOK RegEnumKey就可以实现注册键的隐藏,这种HOOK可以对付系统与大多数应用层的安全工具的检查;而HOOK NtCreateKey等则同样可以实现隐藏与防删除且层次更深,而HOOK Cm*系统注册表操作函数,则更加邪恶,且已经有这类程序出现。总之,在注册表操作的任何一个环节进行HOOK,都可以实现隐藏与防删除的目的。




我们再来看看图03-33:






在安装了著名的虚拟光驱程序Daemon Tools后,此工具的驱动会禁止用户删除其注册项,SPTD.sys就是它的驱动。再看下图03-34:






打开狙剑,选择“扩展功能”à“SSDT检查”就可以看到sptd.sys对注册表相关函数的HOOK。




有了进程篇的相关例子,这里就不再细说了,原理都是一样的,还有对Inline-HOOK的检测可以用“内核代码扫描”。内核代码扫描不仅能找到Inline-HOOK Nt*系列函数木马,同样能找到Inline-HOOK Cm*系列函数的木马。只不过HOOK Cm*系统函数的木马层次更深一些而已。




而如果直接用狙剑的自启动项管理对自启动项进行操作,则无须手动检查与恢复HOOK,狙剑在扫描与清除自启动项时,会自动恢复相关的HOOK(有些HOOK有防恢复机制,也很难用手工来恢复,所以也就没必要非手工恢复它,交给工具去做就可以了)。




注册表由于其特殊性,使得我们多了一个检查与清除木马自启动项的终极手段,那就是直接操作HIVE文件,当然了,HIVE文件的重要性使得系统对其保护很严密,这对直接操作HIVE文件造成了一定的麻烦,而风险性也进一步的提高。这使得当前绝大多数安全软件,对操作HIVE文件来查杀木马都望而却步,但其效果却无疑是目前最好的。




我们先看看下图03-35:






打开狙剑,选择“其它功能”à“注册表编辑器”就可以打开如上图所示的狙剑注册表编辑器,这个编辑器跟系统自带的那个Regedit.exe最大的不同就是,狙剑注册表编辑器是直接操作的HIVE文件,而没有使用任何的Reg*、Nt*、Cm*等系统的注册表操作函数,这样,所有的注册表相关HOOK对这里的操作将完全没有任何效果。




注意看上图的:HKEY_LOCAL_MACHINE"SYSTEM键,再与我们上面讲到的,复制System注册表文件后,用Regedit.exe的加载配置单元,加载后的内容是不是一样的?都缺少CurrentControlSet这一个子键。




在左侧的列表中按右键,可以选择“仅显示自启动相关项”,这时与自启动无关的项将被隐藏,方便使用注册表编辑器进行木马的查找。而如何使用注册表编辑器在HIVE级别上清除木马的自启动项呢?




我们看下图03-36:






仍然以我们上面用到的系统还原的驱动为例来说明,找到这个键:




HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"sr




注意在右则,是这个驱动的注册内容,在上面按右键,可弹出操作菜单,里面提供了几个功能“清除项值”、“修改项值”、“修改项名”。




l         清除项值:这个功能用于一般的自启动项,结果是会将“数据”那一栏的内容清零。比比如我们可以将ImagePath一项的数据清零,那么对于一般的驱动来说这个操作就可以禁止驱动的加载了。




l         修改项值:这个功能是修改“数据”那一栏的内容,这个用来做什么呢?呵,充分发挥想像,可以做很多事情。比如:将Start那一项的值改为4 ! 为什么改为4呢?如果上面注册表基础知识那一章看得仔细就应该知道,改为4是禁用此驱动的意思。或将ImagePath一项的数据中原来的Sr.sys改为:SS.sys 只改了一个字母,但驱动的加载是铁定会失败的,因为系统会在加载时努力的寻找SS.sys,结果当然是找不到了。




l         修改项名:这个修改的是第一列的项名字,也就是“Start、ImagePath……”等。呵,如何用,我就不多说了,相信也不用我多说了。项名字都是固定了,稍加改动就会使得系统认为这是无效项。




操作HIVE无疑是最底层的也是功能强大的,但用起来肯定不如使用自启动项管理方便,所以,一般情况下,这个是用不到的。




但一旦遇到变态的木马时,有这个功能,会让我们感到心里有底。比如:一旦清除木马的启动项,系统马上就蓝屏的情况我就遇到过,这是木马变态般的自我保护,而其保护的基理就是注册了注册表改变通知的消息,一旦其注册表项被改变,他就会接到系统的通知,而他一旦接到通知,就会马上使系统崩溃,让我们对其所做的修改无效。




为什么马上系统崩溃就会使修改无效呢?这是因为系统的缓存机制在起作用,正常情况下,我们的修改只体现在了缓存中,系统通常是5秒钟为间隔的将缓存中的数据向磁盘中更新,而修改后马上崩溃,将使得系统来不及向磁盘中写入修改后的信息,导致修改无效。(后面删除文件一章中我们还会讲到这个。)




对这个变态的木马,我的处理,只是简单的将其“Start”中的值改为了4,重启系统后,它就自然死亡了。原理也很简单,直接操作HIVE文件绕过了系统所有的注册表操作环节,系统也不知道我们做了更改,即然系统都不知道,木马自然也得不到通知了。




总之,越向底层走,功能越强大,但操作就越不方便,风险也就越大。像狙剑的“终极修复”就是一个例子。终极修复其实也是一个操作注册表文件的例子,在系统初装时,系统会在Windows"Repair目录下,保存一份注册表HIVE文件的完整备份,这是最原始的也是最简洁干净的注册表文件。




终极修复利用的就是这个备份的注册表文件,用这一套文件取代现有文件,将会使得系统的全部配置回复到初装系统时的状态,那些木马病毒的自启动项自然也就不存在了。回复后的系统将是高效的、简洁的、干净的。好像微软的官方网站上也曾有过利用这种方法修复崩溃系统的思路,但现实中,却偶有修复后,无法进入系统的情况发生。原因肯定是安全相关的,但具体机理却一直不清楚,微软在安全方面的确开放的资料很少很少。




因为这种风险的存在,使得这种修复被灌以了“终极”这个名字,终极的意思就是最终的手段,不到最后关头切勿使用。而有的朋友看漫画看多了,认为终极就是最利害的意思,为此强烈批评狙剑的终极修复其实原理很简单,不配终极这个词,这实在是让人无言以对。




至此,自启动项的内容我们就聊完了,下面我们准备继续聊的就是文件篇,还喜欢这篇文章的朋友们,还请多支持多转载,毕竟写这个东西是很辛苦的,能让更多的人看到,也算充分发挥了其价值,也算我的熬夜辛苦没有白废,大家的支持就是我继续下去的动力。




最后再习惯性的加上一段:此文作者为MuseHero您可任意在网络上传播与转载,但请保持完整性,并标明作者与出处。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:19 viking 阅读(344) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之自启动项篇(五)(转)

B、自动播放式的触发启动。




自动播放本是用于光盘的,当插入一个电影光盘到光驱时,系统会自动播放里面的内容,这就是自动播放的本意,播放什么是由光盘中的AutoRun.inf文件指定的。此文件的内容,通常如下:




———————————




[autorun]




open=AutoRun.exe




icon=AutoRun.ico




       ———————————




Open那一行,指出了自动播放时系统自动运行的程序,icon指出了所显示的图标。后来有人用于了硬盘与U盘,在U盘或硬盘的分区,创建Autorun.inf文件,并在Open中指定木马程序,这样,当你打开硬盘分区或U盘时,就会触发木马程序的运行。




这类启动,大部分安全工具都进行了监管,在狙剑的自启动项中会列出每个磁盘或分区的自动播放式的自启动程序。




C、感染式的触发启动




这就涉及到病毒了,电脑病毒通过感染正常的程序来实现自己的传播与启动。




计算机病毒是什么呢?其实也是一段程序,只是其完成的是特殊的工作。上面我们说过了,程序就是一份计划书,里面存的是指令序列,标明了程序所完成的工作流程。那么病毒程序的工作流程是什么样子的呢?通常情况下,病毒程序的工作流是这样的“查找其它符合感染条件的程序à判断是否已经感染à如果是则查找下一个,如果不是则修改其工作流程进行感染à执行其它任务。”




病毒程序又是如何感染其它程序的呢?病毒的感染其实就是对正常程序工作流程的修改,仍然用我们在进程篇中的那个例子来说明:正常情况下,一个程序存储的是一个工作的流程,如:动手取原料--à加工---à组装---à验收等等。而一旦被病毒感染后,这个流程就会被病毒修改,修改成这个样子:找老马分派工作-à老马执行了病毒体 -à动手取原料 -à加工---à组装---à验收等等,前两步工作就是病毒感染时硬给加上去的,以后每次执行被感染的程序时,都将从“找老马分派工作”开始,然后由老马完成自己的工作后,再转而执行此程序本应该进行的工作。




也就是说,病毒将自己的病毒体附加到了正常的程序上面,并修改了程序的入口地址为病毒体的执行地址,最后再由病毒体执行完毕后跳回原程序的入口地址来执行原程序的功能,这一切对用户来说都是不可见的。




用户一旦运行被感染的程序,实际上也就完成了病毒木马的触发启动。




病毒的清除并不复杂,不外乎就是一个分析,从被感染程序中找到病毒体,清掉,再恢复原程序的入口地址,就OK了。但难就难在病毒与病毒是各不相同的,而新病毒又层出不穷,这就使得这种分析与清除工作需要大量的人力与精力。所以,也只有有实力的大公司才有可能很好的维护一个病毒库,并不断的分析新病毒来更新病毒库。




所以,朋友们遇到感染型的病毒后,最先要做的就是提交样本给杀毒软件公司,而不是找安全工具的开发者求助,一个安全工具的开发者,我相信是有能力清除病毒的,但我同样相信,他是没有精力去做这些事情的,这种工作不是一个人可以做得来的。




D、修改式的触发启动




修改式的触发启动,主要是指修改原本为正常启动的环节,实现自身的启动,这个与感染式的比较像,但又不同。他们的修改并非大量的,而是有针对性的。




有修改引导扇区的、有修改系统文件的。修改方法与病毒感染大致相同,就是在正常的指令序列中插入自己调用病毒或木马程序的指令,以实现在自己的启动。




这种方式隐蔽性很强,但却很难逃过以数字签名验证为主要手段的启动项检查,因为一旦系统文件被修改,即不再能通过数字签名验证,前面提到的修改Userinit.exe的木马就是这样的一个例子。




这种方法启动的木马,还使得清理起来比较困难,因为他们修改了系统文件,需要用原有的文件进行还原性的替换修复,如果手头有系统安装盘还好一点,没有就比较麻烦了。




狙剑提供了系统文件修复的功能,其实这一功能也是调用的系统本身自带的系统文件修复,只是进行了少许的加工罢了。比如:有的光盘系统安装目录与原版系统盘并不相同,这样,用系统自带的系统文件修复功能时,即使你插入了系统安装盘,也会提示你找不到系统盘,而改进后的就可以手选择安装目录了。再比如,装机器时,有些装机员习惯在机器上拷贝一份安装目录,这样就不用频繁的插入系统光盘了。而这个硬盘上的目录,通常是不能用于系统文件修复的。改进后的多了一个全盘扫描系统安装目录的功能,你可以指定或让狙剑自动扫描安装目录后,再进行修复。




修改引导区的,现在已经很少见到了,很多杀软都提供了恢复引导区的功能,相反,这种很少见的木马启动方式,安全工具反而很少有提供恢复的。




E、事件触发启动




呵,分类是我自己分的,名字也是自己取的,是否贴切很难说,大家就凑合着看吧。事件是指当你进行某项工作时,比如:下载




与文件关联不同的是这种触发并不区分你下载的是哪一类的文件,也无须打开下载的文件,只要有下载的事件发生,就会触发。




用过迅雷的朋友可能有体会,一旦下载东西,迅雷就会自动打开,而无论先前迅雷是否已经运行。试想,如果木马也有同样的本事,我们一下载东西就打开木马,那岂不是很可怕?




目前我只发现了迅雷有这种功能,是否还有其它事件触发启动的程序存在,还不得而知。




总之,启动的方式多种多样,手法也是各有不同,想一网打尽几乎是不可能的,只能是尽力的发现、加入、再有发现、再加入。而以上说的也只是常见的,还有一些并不常见的,我也就不多说了,因为没发现有利用的,这里也就不提了,以免被坏人利用。




下面我们开始聊聊自启动项的隐藏与保护,虽然分成了隐藏与保护,但两者使用的也大多是相同的技术,也就合在一起聊了,能保护也就能隐藏,反之亦然。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:18 viking 阅读(249) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之自启动项篇(四)(转)

3、触发式启动的程序




什么叫做触发式启动的程序呢?触发式启动程序是指需要用户进行某一操作来触发而启动的程序。




A、最常见的就是文件关联式的触发启动。




比如说修改exe文件关联的木马,每当你运行exe文件时都将触发木马程序的执行,同样的,如果修改了gif文件关联,那么每当你打开gif文件时,就会触发木马程序的执行。




下面我们就详细讲解一下修改文件关联的木马,我们以gif文件为例,先看下图03-28:






如果在“注册基础知识”一章中看仔细了,那么应该知道HKEY_CLASSES_ROOT键下存储的正是文件关联信息。看上图,各子键大都是以“.”开始的后面跟三个字母,想一想跟什么比较为像?呵,当然是文件的扩展名了。Explorer.exe 、Regedit.exe ……后面的扩展名说明了文件的类型,.exe是Windows可执行文件。A.gif、B.gif……后面的扩展名GIF说明了文件是GIF图片,那么我们如何查看哪一类型的文件是由哪个程序来打开的呢?




看上图中的.gif键,其“默认”值是“giffile”。然后,我们再在HKEY_CLASSES_ROOT键下找到“giffile”子键,如下图03-29:






在giffile下的shell"open"command 键的默认值,标明了当你双击gif文件时,系统所要做的动作,这里的数据是“rundll32.exe C:"WINDOWS"system32"shimgvw.dll,ImageView_Fullscreen %1”,也就是说当你打开GIF图片时,系统会执行上面的命令,解释如下:运行rundll32.exe来调用C:"WINDOWS"system32"shimgvw.dll这个动态库,而参数就是ImageView_Fullscreen,后面的%1在执行中会用你双击的图片名字替换掉。




       结果就是打开了图片浏览器来浏览这个图片,我们下面修改一下这个值,改成:"D:"Adobe"Photoshop CS"Photoshop.exe" "%1" 那么再次双击GIF图片文件时,执行的结果就是运行Photoshop.exe来编辑这个图片了,而不是再用图片浏览器浏览。(当然了,D:"Adobe"Photoshop CS"Photoshop.exe是我机器上Photoshop.exe安装的路径,你需要改成你机器上的路径,其实你也可以改成任何一个程序)




       如果木马修改了这个值呢?改成了“C:"木马.exe %1”那么,一旦你双击GIF图片文件想浏览一下图片时,系统就会很忠实的依照注册表中的这个值,启动“C:"木马.exe”,从而将木马触发启动,而木马也会在自己启动后,再度调用原有的程序将图片打开,这样,对你来说,是没有任何感觉的,你只知道双击一个图片后,图片打开了,而不会知道发生在这中间的一切。




       当前常见的木马对文件关联的修改都是以exe、com、txt等常见类型居多,而大多数安全软件也都对这几个常见的关联项进行了检查,但是木马开发者不是傻瓜应该是毫无疑问的事实,明知道常见类型会被安全软件监管后,他们还会修改常见的类型吗?呵,系统中可供修改的文件关联简直太多了。Rar文件,是常见的压缩格式文件,从网上下载的文件有很多是以这种格式压缩的,修改了它,一旦你打开下载的压缩包时就将启动木马。BMP、GIF、JPEG等图片文件、AVI、RM等电影文件,修改任何一个,都将有很大机会被触发,而修改多个呢?




       狙剑提供了对所有文件关联进行检查的功能,看下图03-30:






打开狙剑,在基本功能中选择“注册项扫描”,就可以对所有的文件关联及COM注册项等进行扫描。




查找规则是列出所有非系统程序的文件关联,也就是说如果某一类型的文件并不是由系统程序打开的,那么就会被列出。虽然已经隐藏了上千个系统文件的文件关联,但剩下的仍然会有很多。不过,虽然不少,可是并不难判断,一个程序通常对应着很多种类型的文件,比如,一个暴风影音就对应叫几十种文件类型,很容易就可以判断出这是正常的关联。




当然了,这功能平时用的机会并不多,但是一旦一只马儿清掉后,过几天就又死灰复燃时,检查文件关联也许会有意外的收获。




下面呢,我们再说一说文件关联的设置,如果一个文件关联被木马修改了,我们如何改回正常的呢?通过上面的讲解,也许有基础的朋友已经可以通过修改注册表来实现文件关联的修改了。但是我们还有更简单的方法来进行文件关联的修改与设置,看下图03-31:






当打开一个未注册的文件时,或我们在清掉了一个原有的文件关联后,如上图所示,系统会弹出提示一个窗口。




ABC.Test的扩展名是“.Test”这是我自己随便取的一个名字,系统当然不知道,对于不知道类型的文件,文件的图标通常就是上面图中的样子,一个标准的文件图标。




这个类型的文件网上也不会有,所以也不用偿试在网上找了,不过,如果一般的可以偿试在网上找一找。这里我们自己来选择相应的文件关联程序,所以,我们选了上图中下面的一个选项“从列表中选择程序”。这个选项的意思是,由我们自己来选择用哪一个程序来打开扩展名是“Test”的文件。




单击确定后,会出现下图所示的窗口,看图03-32:






Windows列了当前系统中安装的所有程序来供我们选择,这里我们选中了记事本,然后勾选下面的“始终使用选择的程序打开这种文件”,然后,点确定,就完成了.Test这种文件的文件关联设置。如果列表中没有我们需要的程序,还可以点击“浏览”自己找需要的程序。




设置完成后,以后一旦我们双击扩展名为Test的文件,系统就会自动的调用记事本来打开这个文件。




说完文件关联的,我们再接着说下一种。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:17 viking 阅读(322) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之自启动项篇(三)(转)

2、开机自运行的程序




“开机自动运行程序”是操作系统为方便用户的使用而提供的一个方法,让每次开机都须频繁操作的一些工作得到自动的执行。而木马只是利用了这一方法,来完成自己的非法启动目的罢了。




最经典的启动位置,也是操作系统特别提供给用户的位置就是“启动文件夹”,在开始菜单中选择“所有程序”,里面的“启动”就是了。放在此文件夹中的所有程序,都将在下次启动时用户登录后,自动启动起来。这里面涉及到“用户”这个概念,先看下图03-24:







红框中的就是当前系统中的用户,由上到下分别是“所有用户”、“默认用户”、“本地服务账户”、“网络服务账户”、“SnipeSword用户(当前用户)”。前面四个是系统创建的,后面的那个是我们自己创建的用户(名字是我们自己取的)。在“所有用户”、“默认用户”与“当前用户”中都有一套大致相同的配置文件,也就是说都有一个“启动文件夹”。




启动文件夹是系统提供给我们使用的,但不知道从什么时候开始,就已经很少有人再用这个位置来启动程序了,包括一些正常的需要自启动的第三方程序,也都不再利用这里来启动,而是直接操作注册表来实现程序的自启动。




与启动文件夹相比,注册表操作对用户来说,是更神秘而不易查看与操作,我不知道没有技术原因放弃启动文件夹而利用注册表来启动的那些正常软件是出于什么考虑或出于什么目的,但这种形为,却有必要BS一下儿。




下面我们就接着讲注册表中的自启动项,将那些正常的、或非正常的自启动程序,从我们的机器中揪出来,我们的机器我们作主,即使是正常的程序,大量的开机自运行也会造成系统资源的不必要的浪费与消耗,使系统的运行速度减慢。所以,清理自启动项,并不仅仅是查杀木马,这同时也是优化系统时很重要的一步。




我一直对那些为了商业竞争而漠视用户权力与自由的所谓正当软件深恶痛绝,我绝不想因为一年中仅用了一次某一软件的某一功能,而就任由这软件在365天中每天都自动运行起来,消耗掉我宝贵的系统资源。而菜鸟的机器在同样硬件配置的情况下,通常要比高手的机器慢上很多、难用上很多,这些垃圾软件对资源的无谓占用就是很大的一个原因。




OK,闲话少说,我们下面步入正题。




       最早加载启动的是驱动程序,这是可以理解的,因为硬件设备与底层功能是由它们来实现的,不先加载它们哪行呢?比如:在加载文件系统驱动之前,所有对文件的读写都是无法实现的,你想能不先加载这些驱动吗?




       系统启动时,由引导程序Ntldr来读入system注册表文件,加载里面列出的驱动程序。细心的朋友这时可能会有个疑问,文件系统驱动是在这时加载的吗?回答是肯定的“是的”,那按上面的说法,文件系统加载前,对文件的读取是无法实现的,那么Ntldr又如何读取system注册表文件的呢?呵,能看到这个问题的,我不得不赞一句真是细心啊。答案是:因为Ntldr中内置了只读的NTFS与FAT文件系统代码,虽然很简单但足够用了。再追问下去,Ntldr也是以文件形式存在的,那Ntldr这个文件又是如何读取的呢?Ntldr是引导扇区中的引导代码加载的,而引导扇区中有更加简单的文件系统读取代码,区别是越向上越简单,一直到文件系统驱动接手后,才是完整的文件系统代码。引导代码中的文件系统代码简单到只能读取根目录中的文件,所以Ntldr只能放在根目录;而Ntldr中文件系统代码已经能读取子目录中的文件了,所以驱动是可以放到任意目录的。




       我们接着来讲驱动的加载,驱动肯定不是一个,那先加载哪个后加载哪个呢?我们先来看一个图03-25:







上图中是一个典型的驱动在注册表中的注册内容,系统加载时,就是依照这里的内容进行驱动加载的,这个驱动在注册表中的:HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Services"sr键下,也就是在System注册表文件中。这是XP-系统还原所需要的一个文件过滤系统驱动。




注册内容中的各项含义如下:




l         DisplayName:这是服务名称,在前面一章中我们讲到服务管理器时讲过,这个名字就是在服务管理器中显示的名称,没什么要紧的,随便起一个就行。




l         ErrorControl:错误控制码,可以取值为,0 à忽略任何错误;1 à如果出错,显示一个警告;2 à如果出错,且有最后一次正确配置则启动最后一次正确配置,否则继续引导过程;3 à如果出错,且有最后一次正确配置,则使用最后一次正确配置,否则显示蓝屏崩溃。这里的“最后一次正确配置”是指在启动过程中按F8键进入高级菜单后的其中的一个选项,利用这个选项通常可以正常进入系统。




l         Group:组的名称,这个根加载顺序就有关系了,我们放到后面详细讲。




l         ImagePath:驱动或服务的执行文件路径。需要注意的是,如果一个驱动有这一项,那么系统会根据这一项中标明的文件进行加载,如果驱动中没有这一项,系统会自动在Windows"System32"Drivers"目录下寻找与注册键同名的驱动加载。




l         Start:驱动或服务的加载启动顺序。可取值为,0 à Ntldr预先加载此值为零的驱动,在引导过程中这类驱动一直待在内存中;1 à在标明为0的驱动初始化之后,值为1的驱动开始被加载到内存中并初始化,其是在内核初始化的过程中加载的(参见进程篇的系统启动过程)。2 à在Services.exe启动后,由该进程来加载启动值为2的驱动或服务(Service.exe的情况请参阅进程篇);3 à Services.exe根据需要加载这类的驱动或服务,也就是在服务管理器的启动一项中标明为“手动”的。呵,这里有个概念性的误区,标明为手动并不是指一定要由用户来手动启动,而是由系统识情况启动,当系统需要相应的驱动或服务提供的功能时,系统就将自动启动此服务,而无须用户手动操作;4 à驱动或服务并不加载到内存,当然也不启动了。也就是服务管理器中标为“禁用”的服务,这一类的服务,即使系统需要用到其提供的功能,也不会自动加载。




l         Tag :在组中的顺序,这也是根加载顺序有关系的,我们同样放到后面讲。




l         Type :服务的类型,可取值为,1à设备驱动程序;2 à内核模式的文件系统驱动程序;4 à已废弃;8 à文件系统识别器驱动程序;16 à该服务运行在一个只能容纳一个服务的进程中;32 à该服务运行在一个可容纳多个服务的进程中;256 à允许该服务在控制台显示窗口,并接收用户输入。




除了上面的Start决定了加载顺序外,还有Group与Tag来共同作用决定驱动的加载顺序,下面我们来讲一讲这两个,先来看图03-26:







HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Control"ServiceGroupOrder键如上图所示,表明了一个组的概念,驱动是分组并按组来分别按顺序加载的,Group决定了驱动是在哪一个组中,而Tag却决定了在同一个组的哪一个位置上。注意一下儿就会发现,Start值为0的驱动基本上都是分到了靠前的几个组中。




       了解了上面的知识后,只要你有足够的耐心,那么你就可以将系统中的驱动加载顺序搞出来了。




       驱动加载后,还有一些系统启动过程中需要的程序会得到加载执行的机会,可以参考进程篇中的系统引导过程来看,这里就不多说了,而且应用程序的启动顺序永远无法超越高启动级别的驱动,所以讲他们启动顺序也没多大意义。




在注册表中可以启动程序的地方很多,不可能一个个的都讲一讲,也没那个必要。同样的,我们也不可能手动来从注册表中查找每一个启动项,启动项的查找只有依靠专业工具来进行,才是最佳的选择。


启动项管理软件中最出名的无疑是Sysinternals出品的AutoRuns.exe这是国外的一个专业启动项管理工具,很出名。但是如果用于清除木马,这个工具很显然是远远不够的,就像它的名字一样,这是一个“启动项管理”工具,它虽然列出了很全的自启动项,但却缺少反黑工具所特有的查找被隐藏的启动项、清除被保护的启动项的能力,我相信我这个评价还是很客观的。在后面的“自启动项的保护与清除”一单中我会再详细讲解。


       现在我们再看看狙剑的自启动项管理,狙剑毫无疑问是借签了AutoRuns.exe的启动项,另外加入了一些AutoRuns.exe并没有列出的启动项,从全面上来说应该是更胜一筹了,呵,说来也惭愧,站在巨人的肩上总会比巨人高一头的。当然了,最关键的还是狙剑做为一个专业的安全工具来对自启动项进行管理,充分考虑到了木马病毒对自启动项的隐藏与保护,加入了隐藏HOOK的恢复,所以,更适合安全相关的自启动项管理,我们看看下图03-27:


 



注意,下面标明了自启动项的数量是810,只是这个数包括了分类条目,所以实际的会少一些,但怎么也应该在790+,这种数量的启动项,用手工来找,很显然是不现实的。另外需要注意的是,在驱动与服务的枚举中,狙剑将启动值为4也就是标为禁用的驱动与服务同样列了出来,这是为了防止有些恶意驱动,在加载完成后,就将自己改为禁用,等关机时再改回0值优先启动而考虑的。


对于这大量自启动项的判断上,我们也将用进程判断的方法来进行判断,也就是数字签名验证,在启动列表中按右键选择“隐藏微软签名项”后,就会将全部有微软签名的启动项隐藏,剩下的也就没多少了。


       在正常情况下,清除掉所有的非微软签名启动项,是不会影响系统正常使用的。但有些情况是需要注意的,比如:Tcpip.sys是网络驱动,正常情况下是可以通过微软数字签名验证的。但有些下载软件比如迅雷会修改此驱动以达到最大的连接数,而由于Tcpip.sys被改动后,将不再能够通过微软的数字签名验证,所以,在不特别注意下,清除所有非微软认证的自启动项时,就会将这个驱动清掉,导致无法上网。


       另外,向进程篇中提到的Userinit.exe的情况也是类似的,Userinit.exe同样为系统必须的程序,但如果这种程序被感染了,那么,直接清掉就会存在问题,当然了,安全程序在清这类启动必须的程序时是不会删掉启动项的,但作为我们用户来说一定要搞清除哪些是木马的启动项,那些是被修改或感染的系统启动项,对这种被修改或感染的系统文件的处理,最佳方式无疑就是利用“系统文件修复”功能了。而千万不要直接手动清除相应的启动项,清掉后,将导致系统功能出现问题甚至不能进入系统。


       所以,对启动项进行清理时,在隐藏微软验证的文件后,仍然要对剩余的进行判断,有针对性的清理,当然,判断的过程是需要经验的,但是,想成为一个高手,这份经验的积累是必须的,世界上没有白吃的午餐,不想做一个使用傻瓜式软件的傻瓜,那么一些必要的学习与充电也就是必须的。第一次清理时不知道,上网查询或求助,第二次就知道了。相信,不长时间就可以完成经验的积累。


       最后需要说明的是,新的启动位置仍然在不断的挖掘中,没有哪个软件敢说全,只能是比较全而已,仍然需要不断的补充与完善。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:13 viking 阅读(248) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之自启动项篇(二)(转)

下面我们再简单的说一说SID(安全标识符)也就是上面的“S-1-5-XX-XXX”,其后面部分我用“XXX”取代了,后面是不定值。




       SID前面的定义是固定的,比如:S-1-5-18是本地系统账户(Local System)S-1-5-19是本地服务账户、S-1-5-20是网络服务账户等(更多信息,请参考专业资料)




       而SID后面的部分是全球唯一的,就是:329068152-606747145-682003330-1003那部分,在注册表中这个是保存了当前用户的配置信息,也就是HKEY_CURRENT_USER指向的部分。(关于用户的概念请参考后面的相关章节)




       接下来,我们再看看每个键中都存储了哪些信息:




l         HKEY_CURRENT_USER中存储了一些与当前登录用户有关联的数据,也就是你个人的一些设定都存在了这里。




l         HKEY_CLASSES_ROOT中存储的是文件关联和COM对像的注册信息,什么样的文件由什么程序来打开就是存在了这里。




l         HKEY_LOCAL_MACHINE中存储的是系统相关的信息,比如:驱动、服务等。




l         HKEY_USERS存储的是所有账户的信息。




l         HKEY_CURRENT_CONFIG中存储的是当前硬件配置信息。




呵,上面都是一些基本的知识,看起来有些枯燥,能理解就理解,理解不了就算了,并不影响后面对木马的查杀。这里之所以讲这些,是提供给想深入了解系统知识的朋友的,要想成为高手就不能不了解这些。




下面我们再来点动手的,提一提精神。那些禁止我们打开、修改甚至不让我们复制的注册表文件我们难道真的就没办法看看里面是什么吗?嘿,不知道有没有好奇心跟我一样重的朋友。想当年,我可是想尽办法也想看看怎么把那些文件给打开的,呵,没办法,好奇心就是重。我们下面就动手来看看,那里面都是些什么神秘的东西,系统居然看都不让我们看。




先看下图03-21:








打开狙剑,选择“磁盘文件管理”,在打开的选择框中选择系统盘,然后找到Windows"System32"config"目录下的注册表文件,按右键,选择“复制文件”。在弹出的保存框中,给新文件起个名字。OK了,我们成功的复制出了系统本来不想让我们看到的注册表文件。(怎么复制这些不能复制的文件、怎么删除不能删除的文件等我们会在后面的“木马的查杀之文件篇”中统一讲解”)




       文件复制出来了,我们怎么来看里面都是什么呢?两种方法,一种是用十六进制编辑器查看,当然了,这种文件是特殊格式的文件,用十六进制编辑器看,看得一定是有些晕的,要做好心理准备哦。第二个方法就是利用Regedit.exe(注册表编辑器)的“加载配置单元”的功能。




       这里,我们讲一讲第二种方法,打开注册表编辑器,先选中HKEY_LOCAL_MACHINE键(注意:这一步不要省略,不然加载配置单元项是灰的,也可以选中USER键),然后依次选择“文件”à“加载配置单元”。如下图03-22:






在弹出的选择框中选择我们刚才复制出来的注册表文件,在项名字中随便输入一个名字,这里我输入的是“Test”,然后,就加载成功了,看下图03-23,是不是多出了一个Test键呢?这个键跟System键的内容是一样的,因为我们复制的就是System注册表文件:






注意一下儿,Test里面少了这个键“CurrentControlSet”,为什么会少一个呢?不用我说朋友们也应该知道为什么吧?什么,不知道?那再看看他的名字“Current-Control-Set”这回知道了吧?对了,这个键也是个链接键,是从ControlSet001与ControlSet002中链接的内容,是“当前的”设置。所以,文件中是没有的。而注册表编辑器是从内存中读取的注册表内容,因此是有的。




选中“Test”键,在文件菜单中选择“卸载配置单元”就可以卸掉这个键了。




       好了,基础知识讲到这里,应该是够用了,我们接下来就分别讲解一下子,开机自动运行的程序与触发式启动的程序。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:10 viking 阅读(264) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之自启动项篇(一)(转)

四、木马的查杀之自启动项篇




自启动项的检查与清除,毫无疑问是查杀木马的关键手段与方法。而且,清掉木马的自启动项,让其自然而亡,是最优雅的杀马方法,不那么暴力也就轻易不会遇到反击。对驱动级的或注入型的木马,这种手段更显其优越性。




而自启动项的选择与设置,更是一种创意的体现,一些非技术型的木马通常可在此看到其作者非同一般的创造性思维。




自启动,顾名思义,就是无须用户干预而自行启动的程序,按启动方式又分为两种,一种是开机自运行的程序;一种是触发式启动的程序。




下面我们将分别来解剖之,但在此之前,我们先要学习一些基础的知识:




1、注册表基础




由于大多数的自启动位置都在注册表中,所以,首先,我们需要了解“注册表”是什么。




注册表从功能上说,它是一个存储各种设置信息的数据仓库,系统的全部设置几乎都存在那里,比如:你用的是什么墙纸、什么屏保、IE的首页、IE窗口的大小等等。当然了,开机时需要加载的驱动、开启的服务、运行的程序等等也都存储在这里。




而从实质上来说呢,注册表其实是由一些记录配置信息的文件组成的,这些文件中的大部分存在“"Windows"System32"Config"”目录下,还有一部分存在用户配置文件夹中,也就是下面将要讲到的03-24图中的用户文件夹中。




这些文件有一个很难听的名字叫做储巢,也就是朋友可能听过的HIVE文件。




由于注册表对系统实在是太重要的了,任何损坏都有可能造成系统彻底的崩溃,所以,系统对注册表的保护也是很严密的,正常情况下,你无法对注册表HIVE文件进行任何的直接操作,看下图03-18:






你不仅无法打开、修改,你甚至无法进行拷贝操作。而系统保护注册表的手段,就是由系统以独占的方式打开注册表文件,这样你的任何针对此文件的操作,都将被拒绝。下面,我们来验证一下,看下图03-19:






打开狙剑,选择“进程管理”,在进程列表中选中“system”进程,再选择“查看打开的文件”,就可以看到系统打开的所有文件,看上图中蓝条选中的那一项,是不是就是我们无法进行操作的“"Windows"System32"Config"system”文件呢?




       注意:狙剑提供了关闭其它进程打开的文件的功能,关闭后,本来无法操作的文件就可以进行正常的操作了。但是,那是对付木马的,而不是对付系统的,因为木马也同样可以利用独占打开的方式来禁止我们对其文件的访问。关闭系统打开的关键文件将发生无可预料的结果,切勿偿试!(关于文件相关的内容,我们在以后的章节中会有详细的讲解。)




       那我们是否就无法操作注册表了呢?当然不是,系统在保护注册表文件的同时,也提供了操作注册表的工具-“注册表编辑器”。

       在“开始”菜单中,选择“运行”,输入“regedit.exe”就可以打开注册表编辑器,打开后的情况是这样的,看下图03-20:





上面的各项称为“键”,最上层的是“根键”下面的叫做“子键”,其与上面我们说的注册表文件一一对应,对应关系如下:




l         HKEY_LOCAL_MACHINE"SAM à Windows"System32"config"sam




l         HKEY_LOCAL_MACHINE"SECURITY à Windows"System32"config"security




l         HKEY_LOCAL_MACHINE"SOFTWARE à Windows"System32"config"software




l         HKEY_LOCAL_MACHINE"SYSTEM à Windows"System32"config"system




l         HKEY_USERS".DEFAULT à Windows"System32"config"Default




l         HKEY_USERS"S-1-5-XX_XXX à "Documents and Settings"<用户名>"Ntuser.dat




l         HKEY_USERS"S-1-5-XX_XXX_Classes à"Documents and Settings"<用户名>"Local Settings"Application Data"Microsoft"Windows"Usrclass.dat




还有其它的键呢?又对应哪些文件呢?呵,这要从注册表的数据类型说起了,除了上面的键外,其它的几个键是属于REG_LINK类型,直翻过来就是“注册表链接”了,这种类型的键是透明的指向另一个键的一个链接,也可以理解成这些键只是另外的某个子键的快速入口或某类相似键的汇总而已,本身并没有文件,其链接的键对应如下:




l         HKEY_CLASS_ROOT中的内容来自于下面的两个注册键: HKEY_LOCAL_MACHINE"SOFTWARE"Classes




HKEY_CURRENT_USER"SoftWare"Classes




l         HKEY_CURRENT_USER中的内容是当前用户的信息,来自于HKEY_USERS"S-1-5-XX-XXXX à "Documents and Settings"<用户名>"Ntuser.dat




l         HKEY_CURRENT_CONFIG中的内容来自于HKEY_LOCAL_MACHINE"SYSTEM"CurrentControlSet"Hardware Profiles"Current




当你修改有链接关系的任一键中的数据时,对应的链接键也会体现出来,比如:你修改了HKEY_CLASS_ROOT中的内容,那么你的修改也同时体现在了HKEY_LOCAL_MACHINE"SOFTWARE"Classes中,因为这本就是同一个文件中的同一部分数据。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:10 viking 阅读(268) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之进程篇(七)(转)

第四种无进程木马就是利用技术手段隐藏进程的木马




这显然就不属于无进程了,上面说的三种,的确是没有自己的进程,只是利用了其它的进程。而利用技术手段隐藏进程的木马,则是有自己的进程,但是如果你破解不了他的隐藏技术,那你就看不到它的进程。就像上面我们拿出来的那个HIDE.exe一样,在任务管理器中看不到它的进程,而在狙剑中却能看到,这就是隐藏与破解隐藏后的结果了。




进程是如何隐藏的呢?这无可避免的会涉及到一些技术问题,下面我们尽量简单明了的说一说,详细的实现细节,请参阅相关资料。在这里,我所想达到的目的,并非是让您也同样写出一个能隐藏自身的木马,而是让您明白,什么样的手段可以隐藏木马的进程,木马又为什么会隐藏,而想破解这种解藏将它揪出来,又需要什么样的技术,好有针对性的选择一些专业工具。




同时,需要注意的是,隐藏进程的技术同样适用于隐藏DLL模块程序、隐藏驱动程序,下面为了描述方便,统一说为进程。




Windows系统给我们的开发人员提供了几种列出系统中所有的进程、模块、与驱动程序的方法,最常见的也是最常用的方法就是调用系统API:CreateToolHelp32Snapshot、EnumProcess、EnumProcessModules等,如果您不是开发人员,您不用关心这几个是什么东西,只需要明白,他们是获取进程列表的第一层手段,我们调用这几个其实就是在告诉系统,我们需要进程列表,然后系统就会将列表返回给我们。




而这几个API在接到请求后又做了什么呢?他们会调用ZwQuerySystemInformation,ZwQuerySystemInformation会调用KiSystemService切入内核进入R0权限,然后自SSDT表中查取得NtQuerySystemInformation的地址,并调用其指向的实际代码,而NtQuerySystemInformation的作用则是自系统的数据结构中取相应的数据,再顺原路返回去。




在中间任何一个环节进行拦截都可以实现隐藏进程的目的,这种拦截有一个名字叫做“HOOK”,在切入内核进入R0权限前进行HOOK,称为应用层HOOK,而在之后进行HOOK则是内核HOOK,后者需要用驱动才能实现了。




什么是HOOK?什么是SSDT?我们来举例说明:




Windows操作系统就像一个为我们管理电脑的服务公司,而他的工作机制是逐级上报,各负其责的,他派了一个服务人员时刻的跟着我们,看我们都有什么要求。




当我们想查看系统中都有什么进程时,我们会告诉服务员,我们想了解当前都有哪些进程,那么服务员就会把我们的要求报上去,报给谁呢?他要先知道哪个部门负责哪个工作才行,SSDT表就是做这个的,SSDT表就像是一个路标,指明了什么样的工作应该由哪一个部门负责处理。通过查表得知负责的部门后,工作就被移交到了那个部门,工作完成后,部门会把工作结果交回给服务员,服务员再交给我们,而我们也就得到我们想要的结果了。




 应用层HOOK呢,就像是服务员被木马偷偷的替换了,当我们提出要求时呢,他会检查是否对他有害,或将对他有害的信息去掉,比如我们想查看进程,那他在将结果交给我们时,却把木马的进程自结果中抹去了,这样,我们自然是看不到木马进程了。




而最常见的内核HOOK,则是HOOK-SSDT,上面说了SSDT就是一张表,标明了什么工作应该由什么部门负责。而SSDT HOOK也就是木马将表上的内容给改了,本来交给A部门负责的工作被改成了交给由木马负责,这样,服务员在上报我们的请求时,一查表发现查看进程的工作是由木马负责的,他就把这请求交给木马了,而木马呢?他可是知道表中原来的内容是什么的呀,他只是对请求进行一下过滤,发现没有对自己有害的,就直接转交给原部门了,对自己有害的,自然也就视情况滤掉或涂改了。




我们先看看SSDT到底是什么样子的,看下图(04-14):






依次选择狙剑---à扩展功能---àSSDT检查---à筛选可疑项,就可以看到上图,那就是一个SSDT表,从左到右依次是序号、当前地址、所在模块、HOOK类型、原地址、函数名。




上面都是狙剑自己对SSDT的HOOK,当前安全软件很多也用到了SSDT-HOOK技术来实现对系统的安全防护。




例如上面的第11号函数,所在模块是“D:"workspace"狙剑"SnipeSword.sys”,HOOK类型是“HOOK”,函数是“NtAdjustPrivilegesToken”。这是狙剑本身对SSDT的一个HOOK,用的技术就是HOOK,HOOK的函数是用于增加进程权限的。HOOK这个的目的是“在木马进程为自己增加权限的时候进行拦截,提醒用户注意”这在主动防御一章中会详细讲解。




每一个函数都实现了某一种功能,比如:结束进程是由NtTerminateProcess来完成的(上图中最后的那个257号函数),如果HOOK了这个,那么在进程结束前,就有机会更改结果了,可以拒绝被结束。看下图(03-15)






当你试图在任务管理器中结束狙剑的进程时,系统会拒绝你的操作,其实这并不是系统拒绝的,而是狙剑自己,由于狙剑HOOK了SSDT,所以,结束进程的工作服务员都交给他去做了,他一旦发现结束的就是他自己,那他直接告诉服务员这个进程不能结束,然后服务员就把这个结果给我们了,其实我们的这个请求并没有真的到达应该送交的部门。




而上面提到的查看进程用的NtQuerySystemInformation也在这里面,注意找一找就会发现了,如果想隐藏进程就可以把这个给HOOK了。




需要特别注意一下子“HOOK类型”,上面的显示是“HOOK”,还有一种是“Inline-HOOK”,什么是Inline-HOOK呢?




上面说过了,SSDT就像是一个标明了什么工作由哪个部门来做的表,SSDT-HOOK就是更改了这个表的指向。而Inline-HOOK呢?他并没有更改表的指向,查找进程的工作在表中仍然指向了负责查找进程的部门。但是呢,木马却把那个部门中的人员替换了,这样仍然能达到它的目的。




Inline-HOOK更加的复杂、更加的邪恶、也更加的不稳定,而应用范围却是更加的广泛,查找起来更加的困难。要知道,对比SSDT表中的指向是否正确,是否指向了正确的部门,要简单一些,不就是一张表么,拿原来的表对比一下就知道了。但Inine-HOOK却是替换的公司人员,Windows就像一个大公司,有成千上百的人,天知道他替换了哪一个,我们先看看下面的图(03-16):






当试图结束IceSword.exe时,会出来上面的图,IceSword.exe是另一款知名的安全程序“冰刃”的主程序,当您试图在任务管理器中结束IceSword.exe的进程时,就会出来“无法中止进程”的对话框。




但是,当你检查SSDT表时,却发现,它并没有对SSDT进行HOOK,那它是如何实现进程不被结束的呢?看下图03-17:






选择狙剑---à扩展功能---à内核代码扫描就可以得到上图。




       当然了,正常情况下,列表应该是空的,但当我运行起IceSword.exe(冰刃)后,再检查,就会出来上图中的7个Inline-HOOK项了。




内核代码扫描,是对内核代码中的Inline-HOOK进行检查,并列出被InlineHOOK的项。




上图中,IceSword.exe的驱动IsDrv122.sys,HOOK了7个函数,前六个的功能分别是“结束线程、结束进程、创建进程、创建线程、打开线程、打开进程”后面的那个与进程无关我们不去理它。但从上面6个Inline-HOOK来看,你应该知道为什么他不会被结束了吧?




       还不能确定吗?那么,选中这些Inline-HOOK项,然后再在Inilne-HOOK的列表中按右键,选则“恢复选中的Inline-HOOK”,然后,你再打开任务管理器,试试结束IceSword.exe的进程,是不是可以结束了?




讲到这里,不知朋友是否发现了一问题?我上面说了,NtQuerySystemInformation是负责查询进程的,但是那个隐藏进程的测试程序Hide.exe运行起来后,无论在“SSDT检查”中还是在“内核代码扫描”中,都没有任何有关这个函数的任何HOOK或Inline-HOOK的痕迹,这又是怎么回事呢?




不要着急,我们接着讲更深层次的进程隐藏技术。




简单的总结一下:程序就像是为了实现某一目的而定的计划书;进程呢?就是组织工人分配资源开始执行这份计划;而Windows操作系统呢?就是一个为我们管理电脑也是管理这些执行计划的工人的服务管理公司;我们有什么要求呢?就交给服务员将我们的要求提要给Windows,由Windows来组织工人执行我们的要求,并将结果返回给我们。如果木马替换了服务员、更改了SSDT表、或替换了Windows服务公司某职能部门的人员,我们得到的可能就是一个错的结果,或我们的要求得不到执行,就像结束进程一样。




如果不替换任何人员,也不更改SSDT表,还有没有办法隐藏进程呢?有的,那就是更改系统的数据结构。




举例来说,我们查询进程其实就是向Windows发出“查询当前正在有哪几组工人正在工作”的请求,而Windows在内部又是如何查询的呢?他当然会去人力部,因为人力部有工人的档案啊,在职的离职的都有,只要将档案一翻,就明白当前有多少工人了,再把结果给我们,它的工作就完成了。




更改数据结构,也就是更改档案了,虽然人员都没问题,但档案已经被修改了,木马会偷偷的潜入人力部把它自己的档案从人力部的档案柜中偷偷的销毁,这样,当系统去查询的时候,就查不到他的档案了,系统会认为没有这组工人,虽然查询过程与查询的人员都没有问题,但结果仍然是错误的。当然了,进入人力部是需要有一定权限的,不是谁都可以进去销毁东西的,注意到与Hide.exe在一起还有一个Sys.sys文件吗?这个文件也是一个驱动程序,它的工作就是获取R0权限,以便顺利的进入内核更改数据。




而Hide.exe之所以可以隐藏,就是因为它把系统活动进程链中(即人力部)的进程数据更改了。




那为什么Windows查不到它,专业工具却可以查到呢?这个道理很简单,因为Windows是正规公司,它的工作流程是固定的,查询工人的事情,他就是去人力部,人力部没有相关工人的信息,他就认为没有这工人,他并不会偿试去其它地方看一看。




其实,工人们是不可能只在一个地方登记的,进入公司要在人力部登记、领工具却还要在仓库登记、发工资要在财务部登记、吃饭要在食堂登记……。




如果木马只是抹去了活动进程链中的数据,那么还可以从窗口、线程、句柄、对像、Csrss.exe中等许多地方找到它的信息。




当然了,木马也会尽力的把自己的痕迹全部抹去,并且已经有马儿这么做了。




于是,基于线程调度链的进程枚举技术就出现了,什么叫线程调度链呢?在系统中CPU的时间分配是以线程为单位的,一个程序要想得到执行,必须要有线程存在于这个线程调度链中,不然,他得不到时间的分配,也就得不到执行的机会。




还以我们上面的例子来说明,木马可以抹去人力部的资料,反正已经进来了,那里有没有也无所谓了;也可以抹去仓库中的资料,工具已经到手了,抹就抹去吧;也可以抹掉财务的资料,豁出去了,为了完成木马大业就不要钱了;但是他不能抹去食堂的资料,不是么?食堂可是按人员档案备饭的,抹掉了,没他的资料也就意味着没他们的饭吃,还不得给饿死啊?而这关键的他无法抹去的资料也就是系统中的“线程调度链”,抹去了,他自己活不下去。




但不要小瞧了木马的智慧,它们也有自己的法子,什么办法呢?他们准备了一份假资料,在有人查询时呢,就用假资料替换掉真资料,而在食堂做饭时呢,再用真资料替换掉假资料,也就是自己构造了一个进程调度链。




开始时还真是没人发现,不过,没有不透风的墙,出来混总是要还的,这技术最后还是让人知道了,即然知道了他们会随时替换,那查询时当然也就知道注意了,于是它又开始想其它办法,斗争就这么持继了下去。




总之,安全与木马的斗争还远远没有结束,胜负还仍然没有分出(好像也很难分出),剿杀木马的工作仍然任重而道远,还我清净河山的愿景,还需我们大家齐心合力的来实现。




上面对“进程”从外到里由浅到深的都讲了讲,当然了,讲的绝不对不全,因为实在太多了,就以隐藏来说,各路高人的各种奇思妙想多不胜数,多到根本无法尽述,比如欺骗眼睛的技术,就是你查时不管你,但你看时却自列表中抹掉,让你看不到,就像明明真实的资料放到了你面前,但偏偏有一个阴影档住了某处。




但不管如何,邪恶永不能战胜正义,只要我们都关注,总有它们无处藏身的一天。




另外,不得不说的是,查看进程只是检查手段的一种,结束进程也绝不意味着就清除了木马。所以,我们还要继续下去。看看还有什么地方可以抓到它,清除它。




而下一章,就是另一个关键点,自启动项的检查、隐藏与清除。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:08 viking 阅读(200) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之进程篇(六)(转)

按上面说的方法,你可以查看所有系统中加载的驱动程序,但很显然,这么做的确是很麻烦,那有没有省事点的方法呢?有,我们看下图03-12:





看到上面这张图是不是有点眼熟?对了,就是上面我们查找模块时用到的图,打开方式同上,向上翻就可以看到了。蓝条选中的那个,不就是与图03-11中显示的是一个么。这里面列出了所有的驱动程序,不用一个一个找了。




到这里是不是有朋友有点火大了?明明有简单的法子,却带着我们绕了这么大一个圈子。呵,上图中的系统信息,其实也就是系统自带的一个工具,属于专业工具范围内的,且并不是太好使,木马想在这里隐藏信息很容易,而且禁止这个的运行也很简单。我们需要多了解几个法了,以备不时之需,另外,我们需要的是尽量多的学一些知识,这才是根本,了解了原理、懂得了知识,才能真正的成为高手,高手绝非只会使用工具。




说到工具,那我们再看看专业工具对驱动程序的显示:






打开狙剑--à选择基本功能中的“内核模块”,看到没?dmload.sys不就在这里么。这么多,又如何来区分哪个是正常的哪个是可疑的呢?很简单,方法与我们筛选进程是一样的,按右键---à选择“隐藏微软签名项”,剩下的,就是非系统的驱动了。




这里同样提供了“停止运行”、“卸载模块”等功能,但我还得遗憾的告诉大家,卸载它也得它自己愿意才行,但想来木马是不会愿意被卸载吧,那我们就没办法了么?有,方法仍然与上面的相同,从自启动程序入手,禁止它的加载;或强制删除它的文件。




那驱动级木马是不是就是真正的无进程呢?进程列表中找不到任何一个驱动程序的进程,而它也不像模块与线程一样,在其它进程内能够找到,是不是真的可以无进程运行呢?当然不是,我前面已经说了,一个程序的运行,一定、确定以及肯定的会依托一个进程,那这些驱动在哪个进程里呢?那就是System进程,它们是做为系统的一部分来运行的。
--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn

posted @ 2008-06-28 18:02 viking 阅读(163) | 评论 (0) | 编辑 收藏
 
疱丁解马-木马查杀深度剖析之进程篇(五)(转)

第三种无进程木马是纯驱动型木马




什么是驱动型木马呢?就是全部功能放到了驱动程序中去完成(当然了,纯驱动型的并不多见,大多驱动型木马都是配了一个程序。)




什么又叫驱动程序呢?驱动程序顾名思义就是驱使设备动起来的程序。^-^ 呵,可能不准确,但却很容易理解。其作用是让特殊的硬件和Windows操作系统可以交换数据,比如我们按下了键盘的A键,那键盘驱动就要告诉Windows系统“这家伙按下了A键,你看咋办吧”,它只是告诉一声,后面的工作就由系统来处理了,系统会根据不同的情况进行不同的处理,如果你是在打字,那就把A这个字符显示在你的输入页面中,如果你用的是五笔,显然直接显示个A是不行的,Windows系统就会把你输入A的这个信息转给了输入法程序……最终实现你按A的目的。




但驱动又怎么会与木马有了关系呢?这就要从头说起了,话说当年木马与驱动本来是分处于两个天地,互不相干的。但随着杀毒软件、安全工具等木马杀手对木马的围追堵截越来越是凶狠,木马终于感到有点穷途未路了,在最后关头,它盯上了驱动程序!为什么盯上了驱动呢?因为驱动程序由于其特殊性,使得它在系统中有着超越一切的权力,而且有着优先加载执行的优势,它是做为操作系统的一部分来运行的。详细情况涉及到系统权限的划分与优先级设定,有兴趣的可以查阅相关资料,这里只要明白一点就行“系统的权限分为两种R0与R3,一般的程序全部为R3权限,其行为受到了很多限制;而操作系统与驱动则为R0权限,拥有对整个计算机的全部权力,可以为所欲为”。




举例来说,杀毒软件就像一个公司的人力部,对员工的行为进行考核,发现不好的就给予惩罚或辞退。如果木马总是隐藏在员工群里,那么就会受到严格的检查与监管,一旦被查出有问题就会被立即辞退。而操作系统就是公司的董事会或股东大会,驱动程序是董事或股东,有着超出人力部门监管的权力。




为了逃脱追杀,开始有木马以驱动程序的身份出现,当然了,木马这个驱动是没有硬件设备的,呵,如果中一个木马它就附带一个设备,那么,哪怕它只是给一支鼠标,我也会冲天大喊“木马们,都到我这里来吧”。所以它们有一个好听且很容易听明白的名字“虚拟设备驱动程序”。




当木马成为公司的董事的时候,身为人力部门的安防程序开始感到郁闷,明明发现那家伙就有问题,但偏偏没权力辞退它。于是,杀毒软件开始谋求同样的身份,于是杀毒软件也开始挂驱动,使其有了董事的身份来兼人力监管,于是,新一轮的斗争开始了。而这一轮的斗争更是残酷,本来在员工层的斗争转到了高层,本来斗争的结果也就是员工被辞退,还不至于伤筋动骨涉及公司根本,但现在却是一不小心就让公司整个解体了。对应于我们这些可怜的用户来说,杀软与木马的斗争,一个不好惹来的就是蓝屏死机、系统崩溃。




OK,了解了驱动程序后,我们就要回到正题来了,我们如何知道系统加载了哪些驱动呢?又如何知道哪些驱动是正常的系统驱动,哪些是木马的驱动呢?看下图03-9:






在桌面我的电脑图标上按右键,依次选择“属性---à硬件---à设备管理器”就可以打开上面的窗口了,再勾选上“查看----à显示隐藏的设备”就可以看到“非即插即用驱动程序”。




除了非即插即用外,其它的同级项目都是您机器上的硬件及它们的信息、资源、驱动等,他们是根正苗红的正经设备。由于这些都与硬件有关,所以,木马动它们的可能性很小,必竟木马也不想你的机器崩溃啊。因此,大多数木马驱动都隐藏在“非即插即用驱动程序”下面,而这里面的则是那些虚拟设备了(注:非即插即用驱动程序并非就是虚拟设备驱动程序,这涉及到以前老版系统中的一些个问题,这里不再细说,您只需要明白,在当前的情况下,这里面大多都是虚拟设备驱动程序就可以了。)




       选中某一个项点鼠标右键,再选属性,得到下图03-10:






一看到这张图,你最感兴趣的一定是“停止”这个按钮,但我不得不很遗憾的告诉您“是否能停止驱动程序的运行,还要看这个驱动程序是否愿意停止运行”,是不是失望了?呵,应该是意料中的,如果木马可以这么轻易的停掉,它们还混什么呐?从这里不要奢望得到额外收获,我们只需要了解一点就够了,这个驱动的状态是“已经启动”。




       接下来要看的是“驱动程序详细信息”这一栏。点一下,得到下面的这张图03-11:






看到没?这里面的就是驱动程序对应的文件了,至于下面的提供商、版权什么的,参考一下也就得了,如果木马愿意,它可以说它是“天宫”出品,版权属于“玉皇大帝”,那这里会丝毫不打折扣的给它显示出来,你说能信吗?

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn
posted @ 2008-06-28 18:01 viking 阅读(178) | 评论 (0) | 编辑 收藏
 
仅列出标题
共4页: 上一页 1 2 3 4 下一页