hanjinixng00 2011-08-08
最有效的Linux安全审计方式是在服务器上运行专门为之量身打造的应用程序及服务项目。这意味着我们必须首先了解自己所要审计的运行环境,进而判断安全风险可能会隐藏在哪些部位,最终决定安全扫描应该从何处着手。举例来说,运行中的网页服务器,其最薄弱的环节无疑是Web脚本风险,这也正是黑客们最常见的攻击目标之一。更不用说网页服务器本身或者是其中的任何模块都可能存在着过期、脆弱或是不安全的配置。
要想部署一套成功的审计流程,我们还需要了解一些关于网络、编程(如Perl、PHP或者是其它服务器上支持的语言)及Linux系统的知识。这可能要求我们花费时间来学习一些自己尚不能运用自如的技术。然而,在某些情况下我们似乎没有更好的选择。举例来说,如果大家有关服务器的投诉中得知自己所在的数据中心存在如垃圾邮件或黑客攻击之类的可疑活动,那么安全审计是必不可少的。专门在企业中设立相关职位、聘请了解此类技术的专业人士当然是不错的选择,然而如果大家无法承受常设人员所带来的经济负担,也可以考虑暂时雇用一家Linux服务器管理公司,或是将业务平台整体迁移至某家负责的共享服务器供应商处。
一旦大家准备好着手实施安全审计,请按照下列步骤进行操作:
◆执行渗透测试
◆检查日志文件
◆比较及扫描文件
◆检查可疑活动及rootkits
◆从外部挂载调用服务器驱动器
下面一一说明。
渗透测试
渗透测试能够帮助大家找出存在于自己服务器上的漏洞并对设备的整体安全性进行评估。这种评估是任何形式的安全审计工作的基础。它能够就如何提高服务器安全性给出实用的结论,并为即将开展的进一步安全审计提供有关扫描侧重点的重要信息。
要执行渗透测试,我们可以使用诸如Nessus之类的漏洞扫描程序,这款工具具备能够接入几乎任何在线服务项目的端口。不过虽然Nessus是公认最流行、最先进的漏洞扫描工具,大家仍然可以尝试其它选择,例如Nmap,虽然它总体来说只是个端口扫描器,还不能完全称之为漏洞扫描器;Metasploit,功能强大但使用复杂、售价昂贵;或者是Backtrack Linux,已发布的Linux渗透测试工具大合集。无论大家最终选择哪款工具或者说如何部署自己的渗透测试工作,总会有一些漏洞被揪出来,尽管它们可能并不是情况最严重、影响最恶劣的。这种情况其实证明了当下流行的一套理论:任何暴露在公众视野内的资源或服务项目都应被视为具有潜在安全隐患,并且应对其加以密切监测。这也正是安全审计接下来要做的工作:检查日志并扫描文件。
检查日志
检查服务器日志文件能够为安全事件提供详尽的参考信息。如果大家对日志记录进行了正确配置,那么黑客的攻击及行迹其实完全可以被追踪到。而如果手头要审计的几台服务器很少使用,那么整个检查过程就相对简单,只需使用简单的Linux命令,例如Splunk。Splunk为快速搜索多套系统中的大量日志文件提供了一套直观的网页接口。它也可以在发现特定预设事件时及时通知大家,并协助阻止安全危害的发生。不过,要准确判断哪些日志文件有必要被监测实际上要求我们具备相当高的技术水平,尤其是必须了解每个服务项目本身的情况。由于应用程序与日志文件间有着极大的差异,因此我们所能给出的建议只能是尽量关注那些异常动向。
比较及扫描文件
安全审计的下一步是比较并扫描服务器上的文件。查获恶意内容绝不轻松,因为攻击代码可以很容易地被混淆、编码及加密,进而变得难以识别,连最选择的扫描工具及安全产品也使它们没辙。另外,不管大家在编程方面的经验多么丰富,藏身于成千上万其它代码中的恶意代码片段仍然极有可能成为漏网之鱼。这时大家可以求助于AIDE(高级入侵检测环境),它会跟踪那些两次安全审计之间内容发生了变化的文件。但是,我们要在之前的安全审计中至少将其运行一次,以使其创建针对当时情况的数据库镜像。另外,大家必须能够跟踪到所有发生了变化的文件。如果服务器上的文件变动程度较大,这一点恐怕很难甚至不可能实现。在这种情况下,大家可以选择直接搜索那些包含恶意内容的文件。为此,使用诸如卡巴斯基在内的通用防病毒应用程序或者有针对性地为类似Web脚本恶意代码创建内部工具都是可行的。在执行此类文件扫描工作之前,请大家务必牢记:该流程属于系统资源密集型,尽量把此类工作安排在服务器负载较轻的时段。如果必要的话,大家也可以将扫描范围设定为那些允许公开访问的文件。
检查可疑活动及rootkits
接下来的阶段是安全扫描流程中最复杂的部分:寻找服务器上的可疑活动及rootkits。这一步非常必要,因为无论大家对日志及文件进行怎样严谨的审查,服务器安全都无法仅通过这种措施得到万全的保障。对于攻击者来说,只要获得一定资源及权限,隐藏踪迹可谓相当轻松。首先,我们要使用netstat-ntuap命令对自己服务器上的TCP及UDP端口或活动连接加以侦测。不要忘记程序名称是可以反复更改的,因此攻击者们常常会使用诸如“apache 2”这样的名称让我们误以为这是服务器工作中的正常进程。如果对正在运行的程序抱有任何疑问,立即运行lsof –p XXXX指令,这里的XXXX是可疑程序的进程号。此命令将列出所有接入此进程号的运行文件,包括已被删除的对象。
在Linux环境下,前1000个端口是为那些具有超级用户权限的应用程序所预留的。由于攻击者往往并不具备此类超级权限,这就意味着他们所制作的脚本大部分必须运行于编号为1000以上的端口。例如看到6667端口上运行着某个名为apache 2、由用户johnb发起的程序,而且与其相关联的文件(包括已被删除的)包含在/tmp目录中,则可以初步断定该程序有问题。
检查可疑的网络活动也很重要,因为几乎所有的攻击者都希望留下一道后门,这样他就可以轻松地再次连入受害者的计算机。由此,我们可以使用ps auxwf命令搜索包括网络在内的任何可疑进程。此命令将显示所有正在运行的进程以及其启动的方式,包括雇用这些进程的原始文件。
如果攻击者已然获得了超级用户权限,那么我们恐怕无法查出任何可疑活动,因为他们往往会在第一时间安装rootkit。Rootkit能够完全篡改我们的环境,变更那些重要的可执行项目如ps、netstat以及who,并加载恶意Linux内核模块。这也正是安全审计中总是不能落下诸如Rootkit Hunter这类rootkit扫描工具的原因。这种工具易用且高效,能够通过MD5校验手段可靠地确保系统中二进制文件的完整性。它还会对服务器进行扫描,以寻获那些已被加载的、内核级别的rootkit。
从外部挂载调用服务器驱动器
上面提到的各个步骤对于应付大多数Linux服务器部署中的风险都绰绰有余,包括网页、电子邮件、DNS及数据库任务。但是,如果我们的Linux服务器中存储的是有关财务或重要机密文件等敏感信息,那安保手段恐怕还要再进一步。在完整的安全审计流程中,我们可以将自己的Linux服务器硬盘接入另一台计算机,并通过手动或使用主流Linux杀毒软件的方式检查其上的全部文件。有些时候服务器发生了严重故障,那么通过外部硬盘启动计算机可能是我们找出蛛丝马迹的惟一机会。在某些情况下,攻击者在服务器上的最后操作是将其瘫痪化并加以摧毁。当前最受技术人员青睐的应对方法是利用诸如System Rescue CD之类的绿色Linux系统盘以硬盘接入的形式激活瘫痪设备。然而,这套方案具体实施起来并不简单——它会导致宕机,而我们也很可能没有额外的物理设备能够应付这一时段内的访问——但相对来说它还是较为可行的,尤其是当我们使用虚拟服务器时,存储文件在此方案下能够被直接访问。
专家总结:Linux服务器安全审计不应被视为一次性工作加以处理。相反,此类审计必须定期进行。一旦大家真正着手执行,绝对能从流程中找到一些可以通过自动化处理以简化任务操作的方法。而一旦大家的Linux服务器在安全审计中获得了令人满意的结果,我们就可以将更多的精力投入到数据存储以及提高服务正常运行时间的工作中去,进而对自己的商业运作状态充满信心。
备注:PCI标准