电脑技术学习

Windows注册表修改实例完全手册(下)

dn001
  7.检查Windows启动时的程序(适用范围:Windows 2000/XP)

  在Windows环境下,由于病毒必须获得CPU的控制权,因此很多病毒都需要在Windows启动后,自动地运行起来。另一方面,越来越多的病毒采用了高级语言的形式,象宏病毒,采用的是VB语言,本身不能直接由CPU来执行,必须由相关程序解释执行,因此它们必须在操作系统正常启动后,才能加载自身,进行病毒传播。因此说,很多病毒必须在Windows启动后自动地运行起来,并且是依赖于Windows的自动启动程序的功能。这是这些病毒的一个特点,也是一大弱点。我们可以根据这个特点,分析Windows启动时有那些程序自动运行,通过检查这些程序来防范病毒的侵袭。

  (1)注册表项HKEY_LOCAL_MacHINESYSTEMCurrentControlSetServices

  该项下存放了Windows NT/2000/XP的服务程序。下面的每一个子项对应于一个服务:

  ImagePath值项存放了该服务的程序文件路径。这些服务都有一个Start值项。值为0,表示由核心装载器装载;值为1,表示由I/O子系统装载。Start值为0和1的,都是非常低级和关键的Windows服务,它们必须正常启动,Windows NT/2000/XP才能继续启动。通常病毒不会将自己放在这里面,因为这时候WindowsNT/2000/XP只装载了核心部分,只有最基本的功能。Start值为2,表示自动启动,值为3,表示手工启动,值为4,表示禁止启动。这三类服务,可以在"控制面板"→"管理工具"→"服务"中查看到。

  我们需要检查的是,那些Start值为2的服务,其对应的程序文件(ImagePath值项定义)是否可疑。

  (2)注册表项HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ControlSession Manager

  该项下存放了会话管理器(Smss.exe)的信息。在Windows NT/2000/XP的内核启动阶段,需要启动该项下定义的几个程序。在REG_MULTI_SZ类型的值项BootExecute中,定义了会话管理器装载服务前需要运行的程序。默认值为AutoCheck autochk *和Dfsinit。该默认值表示运行磁盘检查程序,以及启动DFS文件系统的初始化程序。

  我们需要检查的是,值项BootExecute存放的是否是默认的执行文件,是否还定义了其他的执行程序。

  (3)注册表项HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrent VersionWinlogonUserinit

  该值项类型为字符串值,定义了用户注册进入时执行的初始化程序。在用户注册时,注册管理程序(Winlogon)启动该初始化程序,默认值是Userinit.exe。该程序首先运行注册脚本,建立网络连接,然后启动用户界面程序(Explorer.exe)。用户可以替换该初始化程序为自己的初始化程序(当然,病毒也可以做到)。一般地,用户自己的初始化程序可以在处理完自己需要进行的工作后,再调用Userinit.exe程序即可。

  我们需要检查的是,Userinit值项的值是否是Userinit.exe。同时检查WinntSystem32下的Userinit.exe文件的大小和时间是否是正常的。

  (4)注册表项HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrent VersionWinlogonShell

  该值项类型为字符串值,定义了用户界面程序,默认值为Explorer.exe。正常情况下,注册管理程序(Winlogon)启动Userinit定义的初始化程序,该初始化程序会启动用户界面程序,因此不需要运行Shell值项定义的程序。如果注册管理程序没有能成功启动Userinit定义的初始化程序,则注册管理程序会过来启动该Shell值项定义的用户界面程序。

  我们需要检查的是, Shell值项的值是否是Explorer.exe。

  (5)注册表项HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrent VersionWinlogonSystem(适用于Windows NT)

  该值项类型为字符串值,该值项中存放了安全管理器程序,默认值为Lsass.exe。安全管理器就是Windows NT启动时,或者屏幕保护后,要求输入用户和密码的画面。用户可以替换该安全管理器程序。

  我们需要检查的是System值项的值是否是Lsass.exe。

  (6)注册表项HKEY_CURRENT_USERSOFTWAREMicrosoftWindows CurrentVersionPolicIEsExplorerRun

  在该项下可以有若干个字符串类型的值项,每个值项的名称从1开始,值为程序或者文档的名称。在用户注册进入Windows时,该项下定义的程序将被启动起来。例如该项下有两个值项,第一个是1,值为Notepad.exe,第二个是2,值为C:readme.doc,则在用户注册进入Windows 2000时,系统会首先运行起Notepad.exe程序,然后会使用DOC的关联程序打开C:readme.doc文档。

  我们需要检查的是,如果定义了自动启动程序,则查找该程序是哪个软件对应的,是否为可疑程序。默认情况下,该注册表项下应该为空。

  (7)注册表项HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion PoliciesExplorerRun

  该项与HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersion PoliciesExplorerRun的作用一样,不同之处在于,由于它位于HKEY_LOCAL_MACHINE下,所以它将应用于所有的用户。在启动顺序上,系统首先启动HKEY_LOCAL_MACHINE下的Run中的程序,再去启动HKEY_CURRENT_USER下Run中的程序。

  (8)注册表项HKEY_CURRENT_USERSoftwareMicrosoftWindows CurrentVersion下的Run、RunOnce、RunEx和RunOnceEx子项(适用于Windows 9x/Me/NT/2000/XP)

  由于是位于HKEY_CURRENT_USER下,因此该项只适用于当前这个用户,不适用于其他的用户。在用户注册进入Windows系统时,自动地运行该项下定义的程序或文档。其中Run子项中定义了每次系统启动时都需要运行的程序,值项类型是字符串值,值项的名称是该运行程序的说明,值项的值是程序的名称;RunOnce子项中定义了只运行一次的程序,在该项下的值项中定义的程序运行起来后,该项下的值项就会被删除掉,这通常用于程序的安装过程;RunEx和RunOnceEx的作用和Run、RunOnce是一样的,是Run、RunOnce的扩充形式。

  (9)注册表项HKEY_LOCAL_MACHINESoftwareMicrosoft WindowsCurrentVersion下的Run、RunOnce、RunEx和RunOnceEx子项(适用于Windows 9x/Me/NT/2000/XP)

  该项和HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersion下的Run、RunOnce、RunEx和RunOnceEx作用一样,不同之处在于,由于它位于HKEY_LOCAL_ MACHINE下,所以它将应用于所有的用户。在启动顺序上,系统首先启动HKEY_LOCAL_MACHINE下定义的启动项目,再去启动HKEY_CURRENT_USER下定义的启动项目。

  我们需要检查的是,对于默认情况以外定义的程序,需要检查其对应的软件。很多软件将自动启动程序放在注册表中的这个位置。例如Norton Antivirus防毒软件,就会在注册表项HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionRun下新建一个值项NPS Event Checker,值为C:PROGRA~1Navnt npscheck.exe。

  下表中列出了默认情况下,Windows系统中Run下的自动运行项目。

  (10)检查非注册表部分

  首先检查启动文件和磁盘引导扇区。对于Windows 9x/Me,启动文件是启动盘目录下的IO.sys和Command.com文件。同时,还包括Autoexec.bat文件中定义的程序文件,以及Config.sys文件中装载的程序文件。对于Windows NT/2000/XP,启动文件是启动盘目录下的Ntldr,Ntdetect.com、Ntbootdd.sys(如果boot.ini文件使用SCSI语法)、Bootsect.Dos(如果使用了多重启动,对应于启动到DOS环境),以及Winnt目录下的Ntoskrnl.exe(核心程序文件)和Hal.dll(硬件抽象层)。

  其次,对于Windows 9x,还需要检查Win.ini文件和System.ini文件。Win.ini文件中的"run="和"load="行,定义了Windows 9x启动时需要装载的程序。

  最后,需要检查"开始"菜单中"程序"中的"启动"程序组,"启动"程序组中存放了Windows正常启动起来后,需要启动的程序。

  8.禁止旧版本的"自动运行"程序列表(适用范围:Windows 2000/XP)

  注册表项HKEY_LOCAL_MACHINE_SoftwareMicrosoftWindowsCurrentVersionRun和HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce下存放的是"自动运行"的程序列表,它们是旧版本的"自动运行"程序列表,在Windows95/98/NT中就已经有了。在注册表中有两个值项,可以禁止这两个旧版本列表起作用,替代它们的是RunEx和RunOnceEx注册表项。

  这两个值项位于注册表项HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer下。

  9.禁止远程访问光盘和软盘(适用范围:Windows NT/2000/XP)

  在C2级别的安全要求中,必须对可移动介质的安全作保护,它要求当本地用户在使用计算机时,光盘和软盘称为本地用户的专有资源,网络上的其他用户,包括系统管理员,都不能够访问光盘和软盘。这是因为此时使用的可移动介质,通常是本地用户私人的,因此不应该给其他人看到。 下表的值项存放在注册表项HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionWinlogon中。

  10.设定口令的最小长度(适用范围:Windows 9x/Me/NT/2000/XP)

  默认情况下,口令可以设置为空。为了加强安全性,我们可以强行指定口令的最小长度。

  在注册表项HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionPoliciesNetwork下,创建二进制类型的值项MinPwdLen,并修改其值为口令的长度,例如6。这样,用户在设定口令时,最少要设定6位的长度。

标签: