近来出现了不少专门针对Windows NT和Windows 2000 (2K)的特洛伊、蠕虫和病毒(总称为恶意软件或malware)。总的来说,大多数恶意软件都是利用了一直在增加的补丁中的弱点。例如,Nimda 蠕虫病毒利用了IIS中的Web Server Folder Traversal弱点,其实微软在2000年11月就发布了解决这个漏洞的补丁。实际上,好象最近出现的许多蠕虫包括Nimda、Code Red和Code Blue,都是为了激励管理人员来修补其系统而发布的。
对于许多管理人员来说,防止恶意软件就如同是与恶意软件的作者进行一场持续的赛跑。经常,每当有一段针对Microsoft产品弱点的新恶意软件出现,不管它是蠕虫、病毒还是特洛伊木马,都会紧接着发布识别这个弱点的建议。通常,这意味着管理人员有一些机会能下载补丁、测试它并将其应用到企业中。可是经常地,管理人员还没有完成这个“下载-测试—应用”的循环,恶意代码就已经开始扩散了。那么管理人员如何才能保护他们的系统,避免恶意代码的安装,至少在它们发生的时候能够检测出来呢?
下面我就为大家介绍NT和Win2K操作系统的管理人员如何防止和检测出恶意代码在其系统中的安装。这些措施基本上是配置应用程序设置(如关闭IIS中的脚本映射)并安装补丁。通过利用操作系统本身的内在功能,管理人员就可以防止或有效阻碍恶意代码的安装,并且当这样的安装发生时能够检测出来。
系统是如何被感染的
为了保护系统不受恶意代码的感染,管理人员首先要理解恶意代码是如何安装到系统中的。基本上,利用Web服务器和Email客户端软件的弱点是感染系统普遍使用的方法。具体地,主要包括以下几种情况:
·当不知情的用户运行了一个从朋友那里或其它“可靠”的来源处得来的可执行程序或脚本,并草率执行它们时,它们中的一些恶意分子就会在系统的某些位置写下文件或修改注册关键字,从而在系统上做下标记。
·象Nimda蠕虫病毒这样的恶意代码将命令解释程序cmd.exe复制为webroot 下的/scripts/root.exe。
·特洛伊木马将文件复制到硬盘驱动器,并在某些注册表关键字中创建条目,以在计算机重新启动和用户注册过程中能够自动激活。
如果系统不幸被恶意代码感染,安全管理人员就要尽快确定感染是何时发生的、感染带来了什么样的损害。管理人员要想看到恶意代码在安装过程中对系统造成了什么样的变化,可以使用两种办法:
第一种方法:实际安装恶意代码,如一个特洛伊木马,同时使用一个安装监控程序,如InControl5。InControl5首先建立一个程序安装前的系统快照(snapshot),然后将其与恶意代码安装以后的系统相比较,如果文件或注册表关键字等内容有创建或修改操作,管理人员可以很清楚地看到,从而进一步采取措施清理计算机。InControl5的运行界面例示如下:
第二种方法:反病毒软件供应商的网站,如F-Secure和Symantec,都提供一个恶意代码的百科全书,其中包括了蠕虫、特洛伊木马、病毒对其所感染的系统带来变化的信息。其它站点,如CERT/CC 和CIAC 也提供了大量不同恶意代码的信息。管理人员可以使用从这些站点获取的信息来保护他们的 NT/2K系统免受感染。
管理人员需要牢记,许多特洛伊木马、病毒以及蠕虫都是被安装在它们被执行的用户账号安全环境下的,这意味着安装的过程只能使用那个特定用户所能使用的资源。这是防止恶意代码安装的关键!如果用户没有对某个特定目录的“写许可”以及创建或修改特定注册表关键字的许可权限,而恶意代码的安装和运行又需要使用这些权限,那么这时候就能防止恶意代码的安装,或者至少安装是不完整的。来看看几个保护措施:
·Potok蠕虫的一个目的是试图在被感染系统上创建一个新用户,但是如果该蠕虫在运行时对应的用户没有增加用户的权限,那么Potok就失效了。
·许多恶意代码都在如下的注册表键值中存放激活引擎:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
HKEY_CLASSES_ROOT\exefile\shell\open\command
然后在系统目录如winnt\system32中存放实际的程序。为此,管理人员可以配置其系统使用户不能在winnt\system32 目录下创建文件,或不能在以上列出的注册表关键字中创建子关键字或设置值,这样就可以防止许多特洛伊木马或其他形式的恶意代码的完整安装。
·许多恶意代码安装时,会向系统中增加额外的文件。例如,NTSecurity.nu网站提供了一个假的 GINA.DLL,当用户登录到系统中时,可以用它来获取用户的口令。为了防止恶意用户或由一个无意识的用户执行的特洛伊木马利用这个DLL 来提升其特许权或者掠取对其它系统的访问权,管理人员必须保证使用强键的口令策略,并防止用户向以下注册关键字中创建子关键字:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\
CurrentVersion\WinLogon
||||||在Win2K Professional上,这个注册关键字的默认安全设置是用户只有读访问权。
·rootkits是管理人员必须要处理的另一个问题。rootkits是攻击者用来隐藏自己踪迹的工具。比如,一个常见的rootkits就是lrk4,通过执行它,有许多有用的程序将在一瞬间被替换以便使入侵者消失于无形。随着更加复杂的特洛伊木马和蠕虫的出现,这类问题在NT/2K平台上将会越来越普遍。管理人员应该采取必要的预防手段,防止恶意用户通过在文件、目录和注册表关键字上设置DACLs (自主访问控制表)来安装一个rootkit。DACLs是NT/2K系统中客体的一个安全属性,主要在用户访问客体时使用。DACL的表项说明了给予一个用户或用户组的访问允许(或拒绝)。
例如,有些rootkit被下载并解压后,管理人员可以键入depoly来安装那个rootkit,然后用“net start”和“net stop”命令管理rootkit的功能。由于这个特定的rootkit象一个服务那样运行,管理人员就应防止用户向以下注册表关键字中创建子关键字,为它设置好必要的DACL权限:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
然后,管理人员还应设置好SACL(系统访问控制列表system access control list),以确保创建或修改子关键字的失败企图在安全事件日志中作了记录。
检测恶意代码的安装企图
一旦管理人员在文件、目录和注册表关键字上配置了DACLs以防止用户向这些对象中写入,他们就可以再为这些对象设置SACLs 以审核写入失败的企图。为了实现这个目的,管理人员首先要确保审核功能是打开的,然后要确保至少是对文件和对象存取的失败事件能够被审核到。在这个过程中,管理人员要调整事件日志(EventLog)的默认容量设置,从而容纳将要进行记录的信息量。要想没有覆盖地将所有的事件进行记录,512KB 的默认容量通常是不够的。如果事件日志的条目被覆盖,有关一个重要事件的重要数据就可能要丢失。管理人员还要确保事件日志本身的安全性,以防被修改或删除。
管理人员可以通过工具从一个中心位置对系统日志执行设置与查看工作。这些工具很多,但使用Perl语言的相关程序非常丰富且强大,比如:产自Dave Roth的Win32::Perms 能允许管理人员远程地设置和校验DACLs及SACLs,Win32::Lanman允许管理人员设置、校验审核功能以及收集事件日志条目,Win32::TieRegistry允许管理人员设置和校验事件日志对应的不同注册表信息,如事件日志大小。
DACLs和SACLs恰当地地设置好后,如果发生对受保护资源的写企图,那么在安全事件日志中就会生成一个失败事件,事件标识号(EventIDs)为560。例如,当修改一个被保护注册表关键字时,将会产生以下事件(以下内容使用Perl脚本获取):
当对一个受保护目录执行写入企图时,上述内容中除“Description”部分有所区别外,其他内容相同。
为了更全面、更有效地监控系统,我们可以对进程运行的成功事件和失败事件都启动审核功能,这样,管理人员就能够清楚地看到系统上创建的进程、哪个用户创建了它们以及它们运行的时间长短。比如,当创建一个新进程时,就会生成一个标识号为592的事件,其中包含了进程ID号和用户名等信息。当进程退出时,会生成一个标识号为593的事件。通过这些信息,管理人员就可以了解到创建了哪个进程、哪个用户创建的以及这个进程运行了多长时间。
收集和分析事件日志
事件日志包含了非常丰富的信息,我们可以通过一些工具尽可能多地自动收集和分析这些信息。
收集信息的工具有很多,以下提供一些参考:
·使用WdumpEvt、dumpevt.pl或者NT资源工具箱中的DumpEl.exe,在本地收集和管理事件日志条目。
·使用BackLog类工具将NT/2K事件日志转换为syslog格式。
·使用SL4NT、Syslog Daemon或者MonitorWare来收集信息。
收集了事件日志信息后,我们可以编写 Perl 脚本对其内容进行自动分析。因为Perl语言处理字符串的功能非常强大,所以可以很方便地编写Perl脚本在事件日志中寻找特定的项,查找特殊事件的信息。
另外,管理人员还应该建立一些手段来收集有关NT/2K 系统的安全状况信息,并且经常校验这些设置是否被修改。前面提及的使用Perl语言的相关程序,不仅允许管理人员执行必要的设置,还可以作为日常扫描工具检测这些设置,以验证它们是否被修改。我们来看几个例子:
·使用Win32::Perms,不仅可以对某个特定文件设置DACLs和SACLs,也可以验证这些设置是否被修改,并确定文件的所有权。
·使用Win32::AdminMisc,可以从可执行文件和DLL文件的资源区(resource section)部分获取作者和版本信息。finfo.pl也可以实现同样的功能。
·使用Mac.pl 记录文件最后修改、访问和创建的时间。
·使用以上程序并结合Digest::MD5,我们可以创建一个脚本,执行全面的文件完整性校验,就象Unix上的文件安全检查器Tripwire一样。管理人员应该每隔一定时间就运行这个脚本以验证安全策略的连贯性。Fsw.pl是一个实时文件系统监控脚本,当有一个新文件被添加到winnt\system32目录时,它可以对管理人员发出警告。
结 语
通过安全策略连贯性的自动校验、事件日志的自动收集以及审核数据的自动分析,管理人员可以更好地管好企业。最重要的是:管理人员必须在特定的对象上配置好DACLs 和SACLs ,特别是恶意代码安装期间要访问的那些对象,这样,不仅能阻止恶意代码的完整安装,还能向管理人员提供有关恶意代码试图安装的审核信息。