3.5 Windows 2000/2003 Server安全设置
目前,Windows 2000/2003 Server是比较流行的服务器操作系统之一,但是要想安全地配置微软的这个操作系统,却不是一件容易的事。本节就对Windows 2000/2003 Server的安全配置进行初步的介绍。
1. 定制自己的Wⅰndows 2000/2003 Serⅴer
(1)版本的选择:Windows 2000/2003 Server有各种语言的版本,用户可以选择英文版或简体中文版,在语言不成为障碍的情况下,这里建议使用英文版。因为微软的产品是以Bug和Patch而著称的,中文版的Bug远远多于英文版,而且中文版的补丁一般还会比英文版的补丁迟至少半个月(也就是说一般微软公布了漏洞后使用中文版的用户的计算机还会有半个月处于无保护状况下)。
(2)组件的定制:Windows 2000/2003 Server在默认情况下会安装一些常用的组件,但是正是这个默认安装是极度危险的(著名的黑客米特尼科说过,他可以进入任何一台默认安装的服务器),用户应该确切地知道自己需要哪些服务,而且仅仅安装用户确实需要的服务——根据安全原则,最少的服务+最小的权限=最大的安全。比如,典型的Web服务器需要的最小组件选择是:只安装IIS的ComFiles,IISSnap-In,WWWServer组件。如果用户确实需要安装其他组件,需要慎重选择,特别是Indexing Service,FrontPage 2000 Server Extensions,Internet Service Manager(HTML)这几个公认的服务。
(3)管理应用程序的选择:选择一个好的远程管理软件是非常重要的事,这不仅仅是安全方面的要求,也是应用方面的需要。Windows 2000/2003 Server的Terminal Service是基于RDP(远程桌面协议)的远程控制软件,它的速度快,操作方便,比较适合用来进行常规操作。但是,Terminal Service也有其不足之处,由于它使用的是虚拟桌面,再加上微软编程的不严谨,当用户使用Terminal Service进行安装软件或重启服务器等与真实桌面交互的操作时,往往会出现哭笑不得的现象。例如使用Terminal Service重启微软的认证服务器(Compaq,IBM等)可能会直接关机。所以,为了安全起见,建议用户再配备一个远程控制软件作为辅助(比如PcAnyWhere就是一个不错的选择)和Terminal Service互补。
2. 正确安装Wⅰndows 2000/2003 Serⅴer
(1)分区和逻辑盘的分配
有一些用户为了省事,将硬盘仅仅分为一个逻辑盘,所有的软件都装在系统分区上,这是很不好的习惯。建议最少建立两个分区,一个系统分区,一个应用程序分区,这是因为,微软的IIS经常会有泄露源码/溢出的漏洞,如果把系统和IIS放在同一个驱动器会导致系统文件的泄露甚至入侵者远程获取admin权限。微软推荐的安全配置是建立三个逻辑驱动器,第一个大于2 GB,用来装系统和重要的日志文件;第二个放IIS;第三个放FTP。这样无论IIS或FTP出了安全漏洞都不会直接影响到系统目录和系统文件。要知道,IIS和FTP是对外服务的,比较容易出问题。而把IIS和FTP分开主要是为了防止入侵者上传程序并从IIS中运行。
(2)安装顺序的选择
在Windows 2000/2003 Server的安装过程中的一个误区就是认为安装顺序无关紧要,事实上,在Windows 2000/2003 Server的安装过程中有几个顺序是一定要注意的:
● 首先,何时接入网络。Windows 2000/2003 Server在安装时有一个漏洞,在用户输入Administrator密码后,系统就建立了ADMIN$的共享,但是此时并没有用用户刚刚输入的密码来保护它,这种情况将一直持续到系统再次启动后。在此期间,任何人都可以通过ADMIN$进入用户的计算机。同时,只要安装一完成,各种服务器就会自动运行,而这时的服务器是满身漏洞,非常容易进入的,因此,在完全安装并配置好Windows 2000/2003 Server之前,一定不要把主机接入网络。
● 其次,补丁的安装。补丁的安装应该在所有应用程序安装完之后,因为补丁程序往往要替换/修改某些系统文件,如果先安装补丁再安装应用程序有可能导致补丁不能起到应有的效果,例如:IIS的HotFix就要求每次更改IIS的配置都需要安装。
3. 安全配置Wⅰndows 2000/2003 Serⅴer
即使正确地安装了Windows 2000/2003 Server,系统还是有很多的漏洞,需要进一步进行细致的配置,具体配置如下:
(1)端口
端口是计算机和外部网络相连的逻辑接口,也是计算机的第一道屏障,端口配置正确与否直接影响到主机的安全,一般来说,仅打开用户需要使用的端口会比较安全。端口配置的方法如下:
在网卡属性中选择“Internet协议(TCP/IP)”,然后单击“属性”按钮,如图3-10所示。
图3-10 网卡属性
在弹出的“Internet协议(TCP/IP)属性”对话框中单击“高级”按钮,如图3-11所示。
图3-11 Internet协议(TCP/IP)属性
在弹出的“高级TCP/IP设置”对话框中,打开“选项”选项卡,然后选择“TCP/IP筛选”,单击“属性”按钮,如图3-12所示。
图3-12 TCP/IP筛选
在弹出的对话框中勾选“启用TCP/IP筛选(所有适配器)”复选框,然后根据协议的类型(这里提供了3种协议选择,分别是TCP端口、UDP端口和IP协议)设置相应的端口策略(这里提供了两种选择,分别是全部允许或只允许),如图3-13所示。
图3-13 端口策略
注意:
Windows 2000/2003 Server自带的这种端口过滤机制,有一个缺陷,就是只能规定开放哪些端口而不能规定关闭哪些端口。对特定端口的关闭只能借助防火墙等特定的工具来实现。
(2)IIS
IIS是微软的组件中漏洞最多的一个,平均两三个月就要出一个漏洞,而且微软的IIS默认安装也是漏洞百出,这里介绍一下针对IIS的安全配置:
首先,把C盘的Inetpub目录彻底删除,在D盘建一个Inetpub(如果不放心用默认目录名也可以改一个名字),在IIS管理器中将主目录指向D:\Inetpub。
其次,将IIS安装时默认的scripts等虚拟目录一概删除。注意此时虽然已经把Inetpub从系统盘移出来了,但还是应该小心——需要什么权限的目录自己建、需要什么权限开什么权限(特别注意写权限和执行程序的权限,没有绝对的必要千万不要给)。
再次,应用程序配置。在IIS管理器中删除必须之外的任何无用映射,“必须”指的是ASP、ASA和其他用户确实需要用到的文件类型,例如用户用到stml等(使用server side include),实际上90%的主机有了上面两个映射就够了,其余的映射只会增加服务器的漏洞。删除漏洞的步骤为:在IIS管理器中右击主机,依次选择“属性”→“WWW服务编辑”→“主目录配置”→“应用程序映射”,然后逐个删除即可。
接着在“应用程序调试”书签内将脚本错误消息改为发送文本,否则在ASP出错的时候该站点的用户就会知道站点的程序/网络/数据库结构,错误文本只要随便定义即可。最后在单击“确定”按钮退出时,需要让虚拟站点继承用户设定的属性。
为了对付日益增多的CGI漏洞扫描器,还有一个小技巧可以参考:在IIS中将HTTP 404 Object Not Found出错页面通过URL重定向到一个定制HTM文件,可以让目前绝大多数CGI漏洞扫描器失灵。其实原因很简单,大多数CGI扫描器在编写时为了方便,都是通过查看返回页面的HTTP代码来判断漏洞是否存在的,如果用户通过URL将HTTP 404出错信息重定向到其他文件,那么所有的扫描无论存不存在漏洞都会认为用户的计算机什么漏洞都有,结果反而掩盖了真正的漏洞,让入侵者茫然无处下手。当然扎扎实实做好安全设置是更重要的事情。
最后,为了保险起见,用户可以使用IIS的备份功能,将刚刚的设定全部备份下来,这样就可以随时恢复IIS的安全配置。还有,如果用户担心IIS负荷过高导致服务器满负荷死机,也可以在性能中打开CPU限制(比如将IIS的最大CPU使用率限制在70%)。
(3)账号安全
Windows 2000/2003 Server的账号安全是另一个重点。
首先,Windows 2000/2003 Server的默认安装允许任何用户通过空用户得到系统所有账号/共享列表,这个功能本来是为了方便局域网用户共享文件的,但是一个远程用户也可以得到用户列表并使用暴力法破解用户密码。
可以采取如下方法解决:在注册表编辑器中找到“Local_Machine \ System \ Current
Control-Set\Control\LSA”分支,将“RestrictAnonymous”的键值更改为1,这样就可以禁止139空连接。
实际上Windows 2000/2003 Server的本地安全策略(如果是域服务器就是在域服务器安全和域安全策略中)就有这样的选项Restrict Anonymous(匿名连接的额外限制),这个选项有3个值:
● 0:None,Rely on default permissions(无,取决于默认的权限)——这个值是系统默认的,什么限制都没有,远程用户可以知道用户计算机上所有的账号、组信息、共享目录、网络传输列表等,对服务器来说这样的设置非常危险。
● 1:Do not allow enumeration of SAM accounts and shares(不允许枚举SAM账号和共享)——这个值是只允许非NULL用户存取SAM账号信息和共享信息。
● 2:No access without explicit anonymous permissions(没有显式匿名权限就不允许访问)——这个值是在Windows 2000中才支持的,需要注意的是,如果用户一旦使用了这个值,其所有共享都将不再存在。
至此,入侵者现在没有办法拿到该计算机的用户列表,账户就安全了。可是至少入侵者可以得知系统内建的用户administrator,还会有一定的危险。可以通过更改administrator名称的方法来防御,具体步骤如下:依次打开“计算机管理”→“系统工具”→“本地用户和组”→“用户”,在右侧的用户名列表中右击administrator,在弹出的快捷菜单中选择“重命名”,输入新的名称即可,如图3-14所示。
图3-14 重命名administrator
此时,入侵者仍然可以通过在本地或者Terminal Service的登录界面看到使用的用户名,可 以 通 过 如 下 方 法 更 正:在 注 册 表 编 辑 器 中 找 到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\winlogon”分支,将右侧的“Don’tDisplay- LastUserName”的键值改成1,这样系统不会自动显示上次的登录用户名。然后在注册表中找到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon”分支,将右侧的“Don’tDisplayLastUserName”的键值改成1,这样就可以隐藏上次登录控制台的用户名。
(4)安全日志
Windows 2000/2003 Server的默认安装是不开任何安全审核的,如果想审核设置,依次打开“本地安全策略”→“安全设置”→“本地策略”→“审核策略”,修改右侧的策略的审核,推荐采用的审核有:
● 账户管理成功、失败。
● 登录事件成功、失败。
● 对象访问失败。
● 策略更改成功、失败。
● 特权使用失败。
● 系统事件成功、失败。
● 目录服务访问失败。
● 账户登录事件成功、失败。
同样,Terminal Service的安全日志默认也是不开的,用户可以在Terminal Service Configration(远程服务配置)中配置安全审核,一般来说只要记录登录、注销事件就可以了。
(5)目录和文件权限
为了控制好服务器上用户的权限,同时也为了预防以后可能的入侵和溢出,还必须非常小心地设置目录和文件的访问权限。NT的访问权限分为读取、写入、执行、修改、列目录和完全控制。在默认的情况下,大多数的文件夹对所有用户(Everyone这个组)是完全敞开的,用户根据应用的需要进行权限重设。
在进行权限控制时,应记住以下几个原则:
● 权限是累计的:如果一个用户同时属于两个组,那么他就有了这两个组所允许的所有权限。
● 拒绝的权限要比允许的权限高:如果一个用户属于一个被拒绝访问某个资源的组,那么不管其他的权限设置给他开放了多少权限,他也一定不能访问这个资源。所以要非常小心地使用拒绝,任何一个不当的拒绝都有可能造成系统无法正常运行。
● 文件权限比文件夹权限高。
● 利用用户组来进行权限控制是一个成熟的系统管理员必须具有的优良习惯之一。
● 权限的最小化原则:仅给用户真正需要的权限是安全的重要保障。
(6)预防DoS
在注册表“HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters”中更改以下值可以帮助用户防御一定强度的DoS攻击:
● SynAttackProtect REG_DWORD 2。
● EnablePMTUDiscovery REG_DWORD 0。
● NoNameReleaseOnDemand REG_DWORD 1。
● EnableDeadGWDetect REG_DWORD 0。
● KeepAliveTime REG_DWORD 300,000。
● PerformRouterDiscovery REG_DWORD 0。
● EnableICMPRedirects REG_DWORD 0。
(7)ICMP攻击
ICMP的风暴攻击和碎片攻击也是NT主机比较头疼的攻击方法,其实应对的方法也很简单,Windows 2000/2003 Server自带一个Routing & Remote Access工具,这个工具初具路由器的雏形,用户可以轻易地定义输入输出包过滤器,例如,设定输入ICMP代码255丢弃就表示丢弃所有的外来ICMP报文。