网络安全 频道

企业系统安全管理和强化的十个建议 二

  6、运行过程避免使用超级用户特权

  许多运行在的服务器上的服务并不需要超级用户权限来执行他们的功能。通常,他们不需要任何特殊权限以外的读取和写入数据目录的能力。但由于Unix安全措施规定由超级用户权限的运行的开放的TCP / IP端口必须低于1024,加上这一事实,大多数著名的端口都低于1024,意味着用户的守护进程必须在超级用户权限下开放其端口。

  这种困境有几个解决方法。第一,最安全的并不是运行所有的服务。如果守护进程没有运行,那么它不需要作为超级用户运行。然而,这并不是每次都管用的。有时候用户也需要为守护进程提供运行服务。在这种情况下,创建一个专门的用户ID来运行守护进程,并且尽可能的严格控制它。只使用这个ID写入可写的目录,并且不要给这个ID特别高的权限。然后更改启动脚本,守护进程只属于这个新的用户ID。现在如果攻击者利用漏洞攻击用户的服务器并且损害用户的守护进程,攻击者将获得非特权账户并且必须做进一步的工作来获得超级用户权限,在更多的损失发生之前将给予用户更多的时间来跟踪和阻止他或她。

  7、扫描并处理高权限文件

  所有系统都有设置用户ID(SUID)和设置组ID(SGID)文件。这些文件可以使用特定的用户或组来运行应用程序、脚本和守护进程,而不是个人用户ID或组ID来运行。top命令是一个很好的例子,它的运行权限较高,所以它可以扫描内核空间中的进程信息。因为大多数用户的默认权限不能读取这些信息,top需要运行更高的权限是有必要的。

  许多操作系统允许用户的指定某些磁盘不支持SUID和SGID,通常是通过在用户的系统挂载文件中使用一个命令来完成。在Solaris中,用户会在/etc/vfstab中指定nosuid命令。例如,使用nosuid命令将/users安装在磁盘c2t0d0s3上,用户可以输入如下命令:

  /dev/dsk/c2t0d0s3 /dev/rdsk/c2t0d0s3 /users ufs 2 yes nosuid

  这个/users安装引导并禁用了SUID和SGID应用程序。应用程序仍然可以运行,但是SUID和SGID位将会被忽略。在所有的文件系统上禁用SUID和SGID是一个良好的安全实践。

  不过,用户需要定期扫描用户的系统并获得一个所有存在SUID和SGID进程中的列表。查找SUID的命令是:-perms +4000,而查找SGID的命令则是:-perms +2000。在整个服务器扫描所有SUID文件,运行这个命令:

  # find / -type f -perms +4000 -ls

  -type f命令只是查看“常规”的文件,无法查看目录或通过其他命名管道的特殊文件等。这个命令可以列出每个文件上的SUID位设置。仔细检查和验证所有输出和真正需要SUID和SGID的文件,对于不需要的,毫不犹豫地进行清除处理。

  8、掌控开放的端口

  在用户向外界发布用户的系统之前,用户需要知道哪些端口是打开的并且允许连接。有些端口是在用户不知情的情况下开放的,用户应该在人们通过这些端口访问用户的服务器之前关闭它们。有一些工具可以让用户知道用户的系统是暴露的。

  可以使用Netstat工具来进行排查。几乎每一个操作系统都附带Netstat命令。Netstat是一个简单的工具,可以显示用户的网络信息,如网络端口、路由表和网络连接信息。Netstat工具显示了/etc/services下所有已经被使用类似人名定义的端口,使其更容易解析和导出。这是一个确保用户系统上/etc/services持续更新的好理由。在用户的系统上使用man命令来发现netstat的能力。

  下面我们将通过一个简单的例子来说明:

  # netstat

  Local Address Remote Address Swind Send-Q Rwind Recv-Q State

  server.smtp 192.168.3.4 6144 0 65700 0 CONNECTED

  在这个例子中,有人从IP地址192.168.3.4连接到用户服务器的SMTP服务。用户应该运行SMTP吗?应该允许这个人连接到服务器吗?注意,重大漏洞。用户打开了远程连接,用户最起码应该使用TCP Wrappers安全机制来保护它。用户应该禁用它吗?

  # netstat -a | more

  UDP: IPv4

  Local Address Remote Address State

  localhost.ntp Idle

  TCP: IPv4

  Local Address Remote Address Swind Send-Q Rwind Recv-Q State

  *.telnet *.* 0 0 24576 0 LISTEN

  建议用户花些时间去学习netstat吧。如果用户学会了如何使用,它将为用户提供丰富的网络信息,并且让用户清楚地看见是谁在什么时间连接到了用户的系统。

  另一个有用的实用程序是lsof (打开的文件列表) 工具。刚开始它只是一个用来显示有哪些进程打开了文件的简单工具,但是现在已经进化到可以显示端口、通道和其他通信。一旦用户安装了lsof工具,尝试一下。只运行lsof来查看系统上打开的所有文件和端口。用户可以感受一下lsof工具能做什么,同时它也是一个快速审核系统的较好方式。lsof | grep TCP命令将显示系统上所有打开的TCP协议的连接。这个工具功能非常强大,当用户需要卸载文件系统,而文件系统报告忙碌时也是很有帮助的,lsof可以快速的显示那个进程正在使用该文件系统。

  9、使用一个集中的日志服务器

  如果用户负责维护多个服务器,那么检查每台服务器的日志将非常繁琐。为此,建立一台专用服务器来搜集其他所有服务器的日志消息。通过整合用户的日志,用户只需要扫描一台服务器,将大大节省用户的时间。在用户的服务器被攻破后,这也是一个好的归档文件;用户仍然可以在别的地方查阅这些日志文件。

  创建一个核心日志服务器,使用高速CPU和大量的磁盘可用空间。关闭除syslogd之外的其他所有端口和服务,这个系统受到损害的几率降到最低,可能除了使用TCP-wrapped SSH守护进程来限制用户的工作站进行远程访问。然后验证syslogd可以从远程系统接收消息。这不同于从消息提供服务器到消息提供服务器。有些服务器默认接收消息,用户可能需要关掉它;有些默认不接收消息,用户需要打开它。

  创建一个系统来归档旧日志并形成文件。如果用户的日志曾经被用作为证据,用户需要能够证明它们没有被更改过,用户需要出示他们是如何创建的。建议用户压缩一个星期以上的所有带时间戳的日志并且通过只读的媒体,例如CD光盘来复制他们。

  一旦用户有了一个接收日志的服务器,用户需要启动其他服务器指向它。编辑/etc/syslog.conf并且确定用户想复制的信息。最起码,用户应该复制最高的紧急程度状态,紧急状态,重要信息,临界状态和警告信息和更多用户认为有用的信息。当用户知道什么是用户想要复制的信息,添加一个或多个像下面这样的/etc/syslog.conf命令行:

  *.emerg;*.alert;*.crit;*.err;*.warning;*.notice @ip.of.log.srvr

  在这个例子中,我们将所有最高的紧急程度状态,紧急状态,重要信息,临界状态,警告和出现不寻常的事情日志信息发送到远程服务器。值得注意的是:用户可以让它们在同一时间将日志归档到远程服务器。用户也可以复制到多个日志服务器。Syslog.conf扫描的是所有匹配的条目—syslogd守护进程不会在找到第一个后停止。

  10、保持软件更新

  每款软件都有漏洞。大多数厂商对代码进行审计并且删除发现的所有漏洞,但也有些不可避免地发布到外界。某些人花大量的时间去试图找出这些漏洞;有的人会报告给厂商,但有的人则是自己个人利用。

  实际上,偶尔发现的漏洞会补丁修补程序来修正它们。除非脆弱性严重,或在外界存在一个已知的漏洞攻击,那通常不会大张旗鼓地宣布发布这些补丁。用户的责任是偶尔查看下哪些补丁适合用户并且可以从软件厂商处下载。

  许多厂商会提供一个工具来帮助您保持您的系统上的补丁。HP-UX有软件更新管理软件、Solaris有patchdiag和patchpro,AIX使用SMIT,等等。至少每月运行用户的诊断工具一次,看看用户的系统可以更新的补丁,并决定是否需要安装它们。每个周日下午留出至少一个小时 (或者更多的时间) 专门作为系统维护时间,利用这段时间来安装补丁和执行其他必要的维护。

  用户应该养成为一个习惯经常去网站上查看用户安装的每个应用程序是否有bug修复或安全补丁发布。使用前面创建的应用程序列表来确定是否有适用于用户的补丁。当用户更新完补丁后记得更新用户的列表信息。

0
相关文章