注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

★ ★ ★ 卡多 - K.D

DELPHI

 
 
 

日志

 
 

木马查杀深度培析之自启动项篇(二)  

2011-01-13 18:47:23|  分类: ‖ 杂文 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

木马查杀深度培析之自启动项篇(二)

2、开机自运行的程序
“开机自动运行程序”是操作系统为方便用户的使用而提供的一个方法,让每次开机都须频繁操作的一些工作得到自动的执行。而木马只是利用了这一方法,来完成自己的非法启动目的罢了。
最经典的启动位置,也是操作系统特别提供给用户的位置就是“启动文件夹”,在开始菜单中选择“所有程序”,里面的“启动”就是了。放在此文件夹中的所有程序,都将在下次启动时用户登录后,自动启动起来。这里面涉及到“用户”这个概念,先看下图03-24:
木马查杀深度培析之自启动项篇(二) - 卡多℡[K.D] - ♂-卡多の博客℡- K.Dscreen.width-461) window.open('http://bbs.itjmz.com/attachment/100_21478_054d5c6288f4bb0.jpg');" src="http://bbs.itjmz.com/attachment/100_21478_054d5c6288f4bb0.jpg" border=0> 
红框中的就是当前系统中的用户,由上到下分别是“所有用户”、“默认用户”、“本地服务账户”、“网络服务账户”、“SnipeSword用户(当前用户)”。前面四个是系统创建的,后面的那个是我们自己创建的用户(名字是我们自己取的)。在“所有用户”、“默认用户”与“当前用户”中都有一套大致相同的配置文件,也就是说都有一个“启动文件夹”。
启动文件夹是系统提供给我们使用的,但不知道从什么时候开始,就已经很少有人再用这个位置来启动程序了,包括一些正常的需要自启动的第三方程序,也都不再利用这里来启动,而是直接操作注册表来实现程序的自启动。
与启动文件夹相比,注册表操作对用户来说,是更神秘而不易查看与操作,我不知道没有技术原因放弃启动文件夹而利用注册表来启动的那些正常软件是出于什么考虑或出于什么目的,但这种形为,却有必要BS一下儿。
下面我们就接着讲注册表中的自启动项,将那些正常的、或非正常的自启动程序,从我们的机器中揪出来,我们的机器我们作主,即使是正常的程序,大量的开机自运行也会造成系统资源的不必要的浪费与消耗,使系统的运行速度减慢。所以,清理自启动项,并不仅仅是查杀木马,这同时也是优化系统时很重要的一步。
我一直对那些为了商业竞争而漠视用户权力与自由的所谓正当软件深恶痛绝,我绝不想因为一年中仅用了一次某一软件的某一功能,而就任由这软件在365天中每天都自动运行起来,消耗掉我宝贵的系统资源。而菜鸟的机器在同样硬件配置的情况下,通常要比高手的机器慢上很多、难用上很多,这些垃圾软件对资源的无谓占用就是很大的一个原因。
OK,闲话少说,我们下面步入正题。
    最早加载启动的是驱动程序,这是可以理解的,因为硬件设备与底层功能是由它们来实现的,不先加载它们哪行呢?比如:在加载文件系统驱动之前,所有对文件的读写都是无法实现的,你想能不先加载这些驱动吗?
系统启动时,由引导程序Ntldr来读入system注册表文件,加载里面列出的驱动程序。细心的朋友这时可能会有个疑问,文件系统驱动是在这时加载的吗?回答是肯定的“是的”,那按上面的说法,文件系统加载前,对文件的读取是无法实现的,那么Ntldr又如何读取system注册表文件的呢?呵,能看到这个问题的,我不得不赞一句真是细心啊。答案是:因为Ntldr中内置了只读的NTFS与FAT文件系统代码,虽然很简单但足够用了。再追问下去,Ntldr也是以文件形式存在的,那Ntldr这个文件又是如何读取的呢?Ntldr是引导扇区中的引导代码加载的,而引导扇区中有更加简单的文件系统读取代码,区别是越向上越简单,一直到文件系统驱动接手后,才是完整的文件系统代码。引导代码中的文件系统代码简单到只能读取根目录中的文件,所以Ntldr只能放在根目录;而Ntldr中文件系统代码已经能读取子目录中的文件了,所以驱动是可以放到任意目录的。
    我们接着来讲驱动的加载,驱动肯定不是一个,那先加载哪个后加载哪个呢?我们先来看一个图03-25:
木马查杀深度培析之自启动项篇(二) - 卡多℡[K.D] - ♂-卡多の博客℡- K.Dscreen.width-461) window.open('http://bbs.itjmz.com/attachment/100_21478_57beca1f0d04873.jpg');" src="http://bbs.itjmz.com/attachment/100_21478_57beca1f0d04873.jpg" border=0>
上图中是一个典型的驱动在注册表中的注册内容,系统加载时,就是依照这里的内容进行驱动加载的,这个驱动在注册表中的:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sr键下,也就是在System注册表文件中。这是XP-系统还原所需要的一个文件过滤系统驱动。
注册内容中的各项含义如下:
lDisplayName:这是服务名称,在前面一章中我们讲到服务管理器时讲过,这个名字就是在服务管理器中显示的名称,没什么要紧的,随便起一个就行。
lErrorControl:错误控制码,可以取值为,0à忽略任何错误;1à如果出错,显示一个警告;2à如果出错,且有最后一次正确配置则启动最后一次正确配置,否则继续引导过程;3à如果出错,且有最后一次正确配置,则使用最后一次正确配置,否则显示蓝屏崩溃。这里的“最后一次正确配置”是指在启动过程中按F8键进入高级菜单后的其中的一个选项,利用这个选项通常可以正常进入系统。
lGroup:组的名称,这个根加载顺序就有关系了,我们放到后面详细讲。
lImagePath:驱动或服务的执行文件路径。需要注意的是,如果一个驱动有这一项,那么系统会根据这一项中标明的文件进行加载,如果驱动中没有这一项,系统会自动在Windows\System32\Drivers\目录下寻找与注册键同名的驱动加载。
lStart:驱动或服务的加载启动顺序。可取值为,0àNtldr预先加载此值为零的驱动,在引导过程中这类驱动一直待在内存中;1à在标明为0的驱动初始化之后,值为1的驱动开始被加载到内存中并初始化,其是在内核初始化的过程中加载的(参见进程篇的系统启动过程)。2à在Services.exe启动后,由该进程来加载启动值为2的驱动或服务(Service.exe的情况请参阅进程篇);3àServices.exe根据需要加载这类的驱动或服务,也就是在服务管理器的启动一项中标明为“手动”的。呵,这里有个概念性的误区,标明为手动并不是指一定要由用户来手动启动,而是由系统识情况启动,当系统需要相应的驱动或服务提供的功能时,系统就将自动启动此服务,而无须用户手动操作;4à驱动或服务并不加载到内存,当然也不启动了。也就是服务管理器中标为“禁用”的服务,这一类的服务,即使系统需要用到其提供的功能,也不会自动加载。
lTag:在组中的顺序,这也是根加载顺序有关系的,我们同样放到后面讲。
lType:服务的类型,可取值为,1à设备驱动程序;2à内核模式的文件系统驱动程序;4à已废弃;8à文件系统识别器驱动程序;16à该服务运行在一个只能容纳一个服务的进程中;32à该服务运行在一个可容纳多个服务的进程中;256à允许该服务在控制台显示窗口,并接收用户输入。
除了上面的Start决定了加载顺序外,还有Group与Tag来共同作用决定驱动的加载顺序,下面我们来讲一讲这两个,先来看图03-26:
  
木马查杀深度培析之自启动项篇(二) - 卡多℡[K.D] - ♂-卡多の博客℡- K.Dscreen.width-461) window.open('http://bbs.itjmz.com/attachment/100_21478_fff2ddea36aa5e9.jpg');" src="http://bbs.itjmz.com/attachment/100_21478_fff2ddea36aa5e9.jpg" border=0>
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder键如上图所示,表明了一个组的概念,驱动是分组并按组来分别按顺序加载的,Group决定了驱动是在哪一个组中,而Tag却决定了在同一个组的哪一个位置上。注意一下儿就会发现,Start值为0的驱动基本上都是分到了*前的几个组中。
    了解了上面的知识后,只要你有足够的耐心,那么你就可以将系统中的驱动加载顺序搞出来了。
    驱动加载后,还有一些系统启动过程中需要的程序会得到加载执行的机会,可以参考进程篇中的系统引导过程来看,这里就不多说了,而且应用程序的启动顺序永远无法超越高启动级别的驱动,所以讲他们启动顺序也没多大意义。
在注册表中可以启动程序的地方很多,不可能一个个的都讲一讲,也没那个必要。同样的,我们也不可能手动来从注册表中查找每一个启动项,启动项的查找只有依*专业工具来进行,才是最佳的选择。
启动项管理软件中最出名的无疑是Sysinternals出品的AutoRuns.exe这?****獾囊桓鲎ㄒ灯舳罟芾砉ぞ撸艹雒5侨绻糜谇宄韭恚飧龉ぞ吆芟匀皇窃对恫还坏模拖袼拿忠谎馐且桓觥捌舳罟芾怼惫ぞ撸淙涣谐隽撕苋淖云舳睿慈鄙俜春诠ぞ咚赜械牟檎冶灰氐钠舳睢⑶宄槐;さ钠舳畹哪芰Γ蚁嘈盼艺飧銎兰刍故呛芸凸鄣摹T诤竺娴摹白云舳畹谋;び肭宄币坏ブ形一嵩傧晗附步狻?br />    现在我们再看看狙剑的自启动项管理,狙剑毫无疑问是借签了AutoRuns.exe的启动项,另外加入了一些AutoRuns.exe并没有列出的启动项,从全面上来说应该是更胜一筹了,呵,说来也惭愧,站在巨人的肩上总会比巨人高一头的。当然了,最关键的还是狙剑做为一个专业的安全工具来对自启动项进行管理,充分考虑到了木马病毒对自启动项的隐藏与保护,加入了隐藏HOOK的恢复,所以,更适合安全相关的自启动项管理,我们看看下图03-27:
木马查杀深度培析之自启动项篇(二) - 卡多℡[K.D] - ♂-卡多の博客℡- K.Dscreen.width-461) window.open('http://bbs.itjmz.com/attachment/100_21478_2ba76b1689f2b38.jpg');" src="http://bbs.itjmz.com/attachment/100_21478_2ba76b1689f2b38.jpg" border=0>
注意,下面标明了自启动项的数量是810,只是这个数包括了分类条目,所以实际的会少一些,但怎么也应该在790+,这种数量的启动项,用手工来找,很显然是不现实的。另外需要注意的是,在驱动与服务的枚举中,狙剑将启动值为4也就是标为禁用的驱动与服务同样列了出来,这是为了防止有些恶意驱动,在加载完成后,就将自己改为禁用,等关机时再改回0值优先启动而考虑的。
对于这大量自启动项的判断上,我们也将用进程判断的方法来进行判断,也就是数字签名验证,在启动列表中按右键选择“隐藏微软签名项”后,就会将全部有微软签名的启动项隐藏,剩下的也就没多少了。
    在正常情况下,清除掉所有的非微软签名启动项,是不会影响系统正常使用的。但有些情况是需要注意的,比如:Tcpip.sys是网络驱动,正常情况下是可以通过微软数字签名验证的。但有些下载软件比如迅雷会修改此驱动以达到最大的连接数,而由于Tcpip.sys被改动后,将不再能够通过微软的数字签名验证,所以,在不特别注意下,清除所有非微软认证的自启动项时,就会将这个驱动清掉,导致无法上网。
    另外,向进程篇中提到的Userinit.exe的情况也是类似的,Userinit.exe同样为系统必须的程序,但如果这种程序被感染了,那么,直接清掉就会存在问题,当然了,安全程序在清这类启动必须的程序时是不会删掉启动项的,但作为我们用户来说一定要搞清除哪些是木马的启动项,那些是被修改或感染的系统启动项,对这种被修改或感染的系统文件的处理,最佳方式无疑就是利用“系统文件修复”功能了。而千万不要直接手动清除相应的启动项,清掉后,将导致系统功能出现问题甚至不能进入系统。
    所以,对启动项进行清理时,在隐藏微软验证的文件后,仍然要对剩余的进行判断,有针对性的清理,当然,判断的过程是需要经验的,但是,想成为一个高手,这份经验的积累是必须的,世界上没有白吃的午餐,不想做一个使用傻瓜式软件的傻瓜,那么一些必要的学习与充电也就是必须的。第一次清理时不知道,上网查询或求助,第二次就知道了。相信,不长时间就可以完成经验的积累。
    最后需要说明的是,新的启动位置仍然在不断的挖掘中,没有哪个软件敢说全,只能是比较全而已,仍然需要不断的补充与完善。

  评论这张
 
阅读(363)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017