主机加固 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

主机加固(host harden)究竟指什么?在计算机安全领域内,包含这样几个意思,如通过传统的关闭不必要的服务,防火墙或者强制认证来限制对系统的网络接入。几乎所有人只要安装了现代版本的Microsoft WindowsMicrosoft CorpWindows 2000之前的操作系统称作经典Windows,而Windows 2000~Windows Server 2003 r2称作现代Windows,之后的称作下一代Windows),都已经自带了基本的防火墙,在下一代Windows当中——Windows VistaWindows Server 2008Windows 7——自带的防火墙,已经摆脱了“基本”二字,提供更加灵活、安全的主机防护功能。一种易用的防火墙也内嵌在了MacOSX系统当中。近些年来,各种Linux发行版也都具有强大的防火墙功能。

主机加固也可以是指某种服务只在特定的时间对特定的用户开放。也可能是指一般只给用户较低权限进行操作,而只在需要的时候才赋予用户更高的权限。大多数Unix用户都熟悉su命令,Ubuntu的忠实爱好者跟用户们可能更习惯sudo命令。对于Windows系统用户来平,可以选择非特权用户运行系统,而通过run as(以运行)服务来将程序运行在Administrator(管理员)权限之下(大多数人不会这样做),而是选择以Administrator[管理员]账户登录系统然后进行日常操作。

也可以通过测试系统通常的脆弱点,并相应做些安全对策来进行主机加固。例如,可以检查是否所有用户的密码都是健壮口令,这种口令极难被猜测与破译。也可以运行自动升级软件,以保证系统及时从厂商或第三方被信任机构进行了安全更新。同时,可以对系统的配置进行安全审计,打开或关闭内部子系统来防护计算机。

主机加固也指能够在发生状况时降低潜在损害。在类Unix系统上,可以这样来做:在公共目录/tmp禁止执行文件(或脚本、应用程序)。继续深入,还有一种加固技术涉及修改内核,给内存块标记为“不可执行”来防止执行内存代码。或者通过chroot命令对进程或网络服务进行分离,也叫“沙盒(sandbox)”,以此来降低损害。做的更绝的一点,甚至可以通过使用虚拟机来进程脱离所在系统。

上述文字包罗以下几个方面:

控制监听服务和端口(可能利用防火墙);

将不需要的服务关闭;

使用某种访问控制机制;

降低漏洞程序和可能引起损害。

控制服务

关闭某项服务应该的极其简单的,但令人遗憾的是,几乎安装的每个程序都希望在系统启动或用户登录的时候能够自动激活运行自己——聊天客户端、音乐播放器、浏览器或某种下载软件;总之,所有程序都希望自己的重要的。

Windows系统上,可能有数十种方法能够在系统启动或用户登录时启动程序。Sysinternals工具包里的Autoruns是我见过的用来搜索系统自动加载的最好工具了。如果读者使用的是Windows系统,那么强烈建议大家从微软官方站点所提供的地址当中(http://www.microsoft.com/technet/sysinternals/utilities/autoruns.mspx)地址下载一个Autoruns。该工具运行画面如下:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

在类Unix系统上,情况稍微复杂一些。几乎所有自启动程序都通过系统initinetdLinux系统上是xinetd)守护进程开始运行。一些Linux发行版本,诸如Red HatUbuntu,拥有强大的GUIGraphic User Interface,图形用户界面/接口)实用工具,通过这些工具可以显示出系统在启动时将会加载哪些东西;但也有一些,如Slackware,只有CLICommand Line Interface,命令行界面/接口)形式的命令。在任何情况下,还需要检查是否通过cron或守护进程进行自启动了一些东西。还应该检查各种放置守护进程文件的地方,假如不十分了解,可以在/var目录下使用命令find来进行查找:

[huaplee@mail]# find /var –iname “*cron*”

控制服务守护进程最困难的部分是判断哪些是系统运行需要的,哪些不需要,可以关闭。假如不熟悉你的系统;就会不敢动,担心因为关闭必要的服务而使系统无法启动或出现故障。实际上,大色数类Unix系统只需要很少的服务来启动系统。很多发行版本启动了所有X11的东西(字体服务、事件守护进程、X显示管理等),或者启动了不必要的打印服务等。假如这是一台服务器,能够通过远程接人,那么最好将这些都关掉。系统真的需要邮件服务器还是只需要将邮件中继到另外一台SMTP服务器?明星的建议是,“只运行必需的”。

关闭不需要的服务

看一下系统,是否运行了50种不同进程,而且你对这些进程一点都不了解?(当然对于下一代Windows,尤其是Windows Vista,开机之后运行的进程数,往往远远大于50个)如果我们随便找一台Windows XP系统,并在其CMD窗口下运行netstat –aon,会发现什么?

Active Connections

  Proto  Local Address            Foreign Address      State           PID

  TCP    0.0.0.0:80              0.0.0.0:0           LISTENING       3652

  TCP    0.0.0.0:135             0.0.0.0:0           LISTENING       772

  TCP    0.0.0.0:445             0.0.0.0:0           LISTENING       4

  TCP    0.0.0.0:1025            0.0.0.0:0           LISTENING       520

  TCP    192.168.1.100:139       0.0.0.0:0           LISTENING       4

  TCP    192.168.1.100:1046      209.107.214.65:80   CLOSE_WAIT      2880

  TCP    192.168.1.100:1047      209.107.214.24:80   CLOSE_WAIT      2880

  TCP    192.168.1.100:1048      77.67.30.42:80      CLOSE_WAIT      2880

  TCP    192.168.1.100:1076      121.194.13.12:22    ESTABLISHED     3060

  TCP    192.168.1.100:1470      211.103.156.236:80  TIME_WAIT       0

  TCP    192.168.1.100:1497      121.10.120.174:9877 CLOSE_WAIT      3652

  TCP    192.168.1.100:1508      219.159.248.70:80   TIME_WAIT       0

  TCP    192.168.1.100:1511      221.238.25.105:80   TIME_WAIT       0

  TCP    192.168.1.100:1512      61.183.55.220:80    TIME_WAIT       0

  TCP    192.168.1.100:1524      221.238.25.93:3076  TIME_WAIT       0

  TCP    192.168.1.100:1526      61.183.55.220:80    TIME_WAIT       0

  TCP    192.168.1.100:1548      199.7.52.190:80     ESTABLISHED     4044

  TCP    192.168.1.100:1564      202.108.43.246:80   TIME_WAIT       0

  TCP    192.168.1.100:1576      221.238.25.105:80   TIME_WAIT       0

  TCP    192.168.1.100:1584      221.238.25.141:80   TIME_WAIT       0

  TCP    192.168.1.100:1630      221.238.25.92:80    TIME_WAIT       0

  TCP    192.168.1.100:1694      65.55.116.181:80    TIME_WAIT       0

这些都是什么?为什么它们都运行在和监听在所有这些端口上?如果想了解哪些进程在使用网络,那就开打 CMD 窗口,并且运行 netstat –aonbv 命令,其中, -n 关闭了 DNS 解析(为了提高命令执行的响应速度), -o 显示父进程的进程标识符, -b-v 联合使用显示正在使用连接大执行文件名。 GNU/Linux 管理员应该习惯于 netstat –aopl –number-hosts ,效果一样,只是命令的选项不太一样罢了。假如系统被严重***了,或者运行了 rootkit ,那就不要期望 netstat 能够显示出真实数据。 Windows 管理可以下载 TCPView 小工具,如下图所示,可以从微软官方站点( http://www.microsoft.com/technet/sysinternals/utitlities/tcpview.mspx )。我十分喜欢这个工具,它很像一个将 netstat 和任务管理员功能结合的工具,可以通过右击进程来检查进程的属性或者杀掉进程。

如果计算机被人通过利用 MS RDP 漏洞安装 VNC 而被控制了,在这种情况下,会安装 BitTorrent 之类的客户端和 SMTP 中继来发送一些垃圾邮件。谢天谢地的是,系统运行在虚拟机上,我们保存了被攻主机的压迫映像以供后续分析,然后重新导入备份映像,打上补丁,编辑防火墙阻止通过 MS RDP 端口的连接。