5.防范黑客攻击(适用范围:Windows 9x/Me/NT/2000/XP)
  注册表中有些参数,设置合适的话可以防范一些黑客技术的攻击。DoS(拒绝服务)攻击是一种常见的黑客攻击方式,其中SYN淹没攻击是DoS中比较常见的。我们在这里给出一个防范SYN攻击的设置方法。
  (1)减小等待SYN-ACK包的时间
  TCP在发送SYN-ACK包后,首先等待3秒钟,如果仍然没有回应,则将时间加大一倍,从3秒增大到6秒,再重发一次SYN-ACK,然后继续等待回应。重发的次数定义在注册表中的一个双字节值项TcpMaxConnectResponseRetransmissions 里,该值项位于注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\Tcpip\Parameters中。默认值为3,表示重发次数为3次,先等待3秒后发送一次,然后等待6秒后发送一次,然后等待12秒发送一次,最后等待24秒,如果仍然接收不到回应,不再继续发送SYN-ACK,而是清除此次连接,并释放所有资源。这样总共经过了45秒钟。值为2表示重发次数为2次,总共的耗费时间为21秒,值为1表示重发次数为1次,总共的耗费时间为9秒。0表示不重发SYN-ACK,耗费时间为3秒。耗费时间越短,SYN攻击造成的影响就相应的要小一些。此值项的默认值为3次。如果系统容易受到SYN淹没攻击,可以将此值项修改为2。 (2)增大NetBT的连接块增加幅度和最大数目
  NetBT(基于TCP/IP的NetBIOS)使用139号TCP端口,一般用在微软网络中,例如文件和打印服务。在建立连接时,如果BetBT发现可用的连接块数目小于2个,会自动的再分配可用连接块。
  NetBT每次增加的连接块的数目定义在注册表中的双字节值项BacklogIncrement中,该值项位于注册表项注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\NetBt\Parameters下。默认值为3,最小值为1,最大值位20。增大此值可以在有众多连接时提升性能。每个连接块消耗87个字节。
  NetBT最多可以使用的连接块的数目定义在注册表项中双字节值项MaxConnBackLog中,默认为1000个,最大值可以取到40000个。可以适当的增大此参数的值以允许更多的同时连接。
  (3)配置动态Bakclog(适用于Windows NT/2000/XP)
  对于使用Sockets的Windows服务,如FTP,可以通过配置动态Backlog来提升在网络繁忙时的性能。使用动态Bakclog,系统会预先分配一定的资源用于建立连接,这样就省去了给连接分配资源的时间和CPU消耗。如果需要再增加资源,可以一次性的增加若干个连接所需的资源空间。
  在注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters中新建下面的双字节值项:
  EnableDynamicBacklog,该值项的默认值为0,表示是否允许动态Backlog。默认值为0。对于网络繁忙或者易遭受SYN攻击的系统,建议设置为1,表示允许动态Backlog。
  MinimumDynamicBacklog,该值项的默认值为0,表示动态Backlog分配的自由连接的最小数目。当自由连接数目低于此数目时,将自动的分配自由连接。默认值为0,对于网络繁忙或者易遭受SYN攻击的系统,建议设置为20。
  MaximumDynamicBacklog,该值项的默认值为0,表示定义最大"准"连接的数目。"准"连接包括自由连接和半连接。对于网络繁忙或者易遭受SYN攻击的系统,应该设置此值,大小取决于内存的多少。一般来说,每32M内存最大可以增加5000个。
  DynamicBacklogGrowthDelta,该值项的默认值为5,表示定义每次增加的自由连接数目。对于网络繁忙或者易遭受SYN攻击的系统,建议设置为10。
  (4)启用SYN淹没攻击保护特性(适用于Windows 2000/XP)
  Windows 2000/XP针对SYN淹没攻击提供了一个叫做SYN淹没攻击保护的特性。当出现了SYN淹没攻击的征兆时,Windows 2000/XP自动降低对那些无法确认的连接请求的响应时间。
  在注册表项HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters中新建下面的双字节值项:
  SynAttackProtect,该值项的默认值为0,表示定义是否允许SYN淹没攻击保护特性。保证该值为1,表示允许启用SYN淹没攻击保护特性。
  TcpMaxConnectResponseRetransmissions,该值项的默认值为3,表示定义了对于连接请求回应包的重发次数。如果该值为1,则SYN淹没攻击不会有效果,但是这样会造成连接请求失败几率的升高。SYN淹没保护特性只有在该值大小大于或等于2时才会被启用。该值的默认值为3。
  以上两个值项定义了是否允许SYN淹没攻击保护。下面三个值项则定义了激活SYN淹没攻击保护特性的条件。当满足下面三个值项定义的条件之一时,系统会自动激活SYN淹没攻击保护。
  TcpMaxHalfOpen,该值项的默认值为100或者500,表示定义了能够处于SYN_RECEIVED状态的TCP连接的数目。由于SYN淹没攻击通常会造成大量的SYN_RECEIVED状态的TCP连接,因此保护特性将该值作为SYN淹没攻击发生的一个征兆。当处于SYN_RECEIVED状态的TCP连接的数目超过该值项的定义时,系统认为SYN淹没攻击发生了,自动启用保护特性。
  对于Windows 2000 Server,该值项默认值为100。对于Windows 2000 Professional,该值项默认值为500。Professional之所以比Server的值高,是因为Professional通常不用作服务器,也就不会受到SYN淹没攻击。
  TcpMaxHalfOpenRetried,该值项的默认值为80或者40,表示定义了在重新发送连接请求后,仍然处于SYN_RECEIVED状态的TCP连接的数目。当这种状态的TCP连接的数目超过该值项的定义时,系统认为SYN淹没攻击发生了,自动启用保护特性。
  对于Windows 2000 Server,该值项默认值为80。对于Windows 2000 Professional,该值项默认值为400。
  TcpMaxPortsExhausted,该值项的默认值为5,表示定义了系统拒绝连接请求的次数。当系统保留的连接端口都被使用掉时,系统将拒绝所有的连接请求。SYN淹没攻击通常会发生这种情况,因此保护特性将该值作为SYN淹没攻击发生的一个征兆。当被拒绝的连接请求的数目超过该值项的定义时,系统认为SYN淹没攻击发生了,自动启用保护特性。
7.检查Windows启动时的程序(适用范围:Windows 2000/XP)
  在Windows环境下,由于病毒必须获得CPU的控制权,因此很多病毒都需要在Windows启动后,自动地运行起来。另一方面,越来越多的病毒采用了高级语言的形式,象宏病毒,采用的是VB语言,本身不能直接由CPU来执行,必须由相关程序解释执行,因此它们必须在操作系统正常启动后,才能加载自身,进行病毒传播。因此说,很多病毒必须在Windows启动后自动地运行起来,并且是依赖于Windows的自动启动程序的功能。这是这些病毒的一个特点,也是一大弱点。我们可以根据这个特点,分析Windows启动时有那些程序自动运行,通过检查这些程序来防范病毒的侵袭。
  (1)注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
  该项下存放了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_MACHINE\SYSTEM\CurrentControlSet\ Control\Session Manager
  该项下存放了会话管理器(Smss.exe)的信息。在Windows NT/2000/XP的内核启动阶段,需要启动该项下定义的几个程序。在REG_MULTI_SZ类型的值项BootExecute中,定义了会话管理器装载服务前需要运行的程序。默认值为AutoCheck autochk *和Dfsinit。该默认值表示运行磁盘检查程序,以及启动DFS文件系统的初始化程序。
  我们需要检查的是,值项BootExecute存放的是否是默认的执行文件,是否还定义了其他的执行程序。
  (3)注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon\Userinit
  该值项类型为字符串值,定义了用户注册进入时执行的初始化程序。在用户注册时,注册管理程序(Winlogon)启动该初始化程序,默认值是Userinit.exe。该程序首先运行注册脚本,建立网络连接,然后启动用户界面程序(Explorer.exe)。用户可以替换该初始化程序为自己的初始化程序(当然,病毒也可以做到)。一般地,用户自己的初始化程序可以在处理完自己需要进行的工作后,再调用Userinit.exe程序即可。
  我们需要检查的是,Userinit值项的值是否是Userinit.exe。同时检查\Winnt\System32下的Userinit.exe文件的大小和时间是否是正常的。
  (4)注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon\Shell
  该值项类型为字符串值,定义了用户界面程序,默认值为Explorer.exe。正常情况下,注册管理程序(Winlogon)启动Userinit定义的初始化程序,该初始化程序会启动用户界面程序,因此不需要运行Shell值项定义的程序。如果注册管理程序没有能成功启动Userinit定义的初始化程序,则注册管理程序会过来启动该Shell值项定义的用户界面程序。
  我们需要检查的是, Shell值项的值是否是Explorer.exe。
  (5)注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon\System(适用于Windows NT)
  该值项类型为字符串值,该值项中存放了安全管理器程序,默认值为Lsass.exe。安全管理器就是Windows NT启动时,或者屏幕保护后,要求输入用户和密码的画面。用户可以替换该安全管理器程序。
  我们需要检查的是System值项的值是否是Lsass.exe。
  (6)注册表项HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\ CurrentVersion\Policies\Explorer\Run
  在该项下可以有若干个字符串类型的值项,每个值项的名称从1开始,值为程序或者文档的名称。在用户注册进入Windows时,该项下定义的程序将被启动起来。例如该项下有两个值项,第一个是1,值为Notepad.exe,第二个是2,值为C:\readme.doc,则在用户注册进入Windows 2000时,系统会首先运行起Notepad.exe程序,然后会使用DOC的关联程序打开C:\readme.doc文档。
  我们需要检查的是,如果定义了自动启动程序,则查找该程序是哪个软件对应的,是否为可疑程序。默认情况下,该注册表项下应该为空。
  (7)注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Policies\Explorer\Run
  该项与HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ Policies\Explorer\Run的作用一样,不同之处在于,由于它位于HKEY_LOCAL_MACHINE下,所以它将应用于所有的用户。在启动顺序上,系统首先启动HKEY_LOCAL_MACHINE下的Run中的程序,再去启动HKEY_CURRENT_USER下Run中的程序。
  (8)注册表项HKEY_CURRENT_USER\Software\Microsoft\Windows\ 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_MACHINE\Software\Microsoft\ Windows\CurrentVersion下的Run、RunOnce、RunEx和RunOnceEx子项(适用于Windows 9x/Me/NT/2000/XP)
  该项和HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion下的Run、RunOnce、RunEx和RunOnceEx作用一样,不同之处在于,由于它位于HKEY_LOCAL_ MACHINE下,所以它将应用于所有的用户。在启动顺序上,系统首先启动HKEY_LOCAL_MACHINE下定义的启动项目,再去启动HKEY_CURRENT_USER下定义的启动项目。
  我们需要检查的是,对于默认情况以外定义的程序,需要检查其对应的软件。很多软件将自动启动程序放在注册表中的这个位置。例如Norton Antivirus防毒软件,就会在注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Run下新建一个值项NPS Event Checker,值为C:\PROGRA~1\Navnt\ npscheck.exe。
  下表中列出了默认情况下,Windows系统中Run下的自动运行项目。