第一章
前言
我们从公开的统计资料可以看到,在2003年全球有80%的大型企业遭受病毒感染而使得业务系统运作受到干扰,即使这些大型企业已经具备了良好的边界安全措施,也普遍部署了病毒防御机制。造成困境的原因,一方面当然是由于现有防御体系的缺陷,是由于现有的边界防御、基于签名的入侵检测和防病毒系统从原理上就决定了其不擅长对付基于漏洞进行感染的病毒,单单具备这些措施,不足以遏制病毒的泛滥。另一方面,也是由于基于漏洞进行感染的病毒传播速度极快,以至来不及采取措施,病毒就已经大规模爆发了。这恰好说明企业需要一些应付这种情况的措施,最好在病毒前面就消灭漏洞隐患,杜绝病毒传播的可能,补丁管理就是这一思想的产物,因为它的原理就是对软件进行修补从而根本上消灭漏洞,杜绝了病毒利用漏洞的可能。这个原理很简单并且直截了当,容易为大家理解和接受,因而得到了普遍的关注。一些企业基于这样的考虑,不但把补丁管理纳入企业的安全体系,而且还纳入审计范围;另外一些企业甚至认为,补丁管理的意义已经超出了传统的安全领域,成为维护企业信息系统正常操作所必须具备的措施。
本文正是从这一点出发关注补丁管理,在这里我们感兴趣的是,企业网络面对利用漏洞进行感染的病毒这样一种重大威胁,如何对感染的主要对象------企业网络上广泛存在的客户端有效地打上补丁,如何建立合适的补丁管理框架;在这里我们不关心高深的补丁技术,也不研究漏洞的各种各样的危害,而且对重要服务器补丁管理的特别需求也不关心。
企业网络的客户端广泛采用Windows系列的操作系统,利用操作系统的漏洞进行感染则是病毒常用的手段。对漏洞进行修补的困难主要有2个:
1.及时为企业分布广泛数量众多的客户端修补漏洞;
2.随着新的漏洞不断发现,对每一个可能造成重大安全隐患的漏洞,都有必要重复一次这种修补过程。
明显地,没有好的指导思想和管理框架,做好这样一件复杂的工作是不可能的;单纯依靠人力资源来做不但耗费资源而且枯燥无味,无法保证及时性,也很难确认工作的有效性。为此,采用好的管理思想,建立合适的补丁管理框架,引进合用的补丁管理产品就是必须的。
第二章
漏洞和补丁
我们知道,从信息安全这个层面看,漏洞和补丁的关系是先有漏洞才有补丁,如果不是有了漏洞以及可能的攻击,补丁是不会出现的。所以,从这个意义上说,漏洞是在先的,而补丁是在后的,补丁依赖于漏洞而存在。
漏洞和补丁的关系既然如此密切,我们应该看看软件厂商说法,并且考察一下在我们生活的现实环境中漏洞和补丁发布的顺序,这对了解什么是我们能做的和不能做的,以及极限在那里是有用的。
软件厂家通常将漏洞表述为软件的小缺陷,这些小缺陷可以通过补丁、软件升级或者更改配置予以纠正。这里我们留意到,在开发商的语境里这三个措施是并列的,打补丁并不是修补漏洞的唯一手段,替代不了软件升级,也替代不了配置更改,尽管补丁管理目前看来是最重要的手段。所以,我们明白了补丁管理的第1个限制,它替代不了软件升级和配置更改。
在现实生活中,漏洞和补丁的发布已经形成了一个事实上的标准过程,稍微了解一下这个过程,可以使得我们知道补丁管理的切入点在那里,并且明白,在切入点之前,我们是做不了任何工作的。这个标准过程可以看作是一个依照时间先后顺序串起来的若干阶段组成的过程:
1.某些人或者组织进行研究并发现了一个漏洞;
2.这个漏洞被提交给安全组织和厂商,等待确认并为开发补丁争取时间;
3.漏洞确认并公布;
4.补丁公布。
从这个顺序可以清楚地看到,在漏洞公布前我们做不了任何工作,这是补丁管理的第2个限制。在漏洞公布后,我们才知道这个漏洞的存在并可以着手评估其可能带来的威胁,而同一时间,攻击者也在试图利用这个漏洞和并开发恶意代码。但是直到补丁发布前,企业没有办法直接面对漏洞的威胁,只能采取一些其他的规避措施,尽量避免危险或者缩减可能的危害面积,这是补丁管理的第3个限制。补丁发布后,我们还需要一系列的动作才能为企业的客户端完成修补。
漏洞发布的时间、补丁发布的时间以及企业完成补丁部署的时间是有差异的。企业和攻击者,谁赢得了时间竞争,谁就取得了对企业网络的控制权。但是事情不像表面看起来这么简单,首先,漏洞公布后攻击者就可以开始行动了,而企业必须等到补丁公布后才能真正开始部署补丁,企业在时间上不占优势。其次,从实际要完成的工作量说,攻击者只需要写出病毒就可以了,而企业在这段时间内,则要完成包括漏洞评估,补丁测试、部署补丁以及对部署结果的确认等一系列的工作;依照目前的情况看,病毒发布的时间还是比补丁发布的时间迟一些,但是留给企业的实践已经不多了,只有2个星期左右。这是一场非对称的游戏,只有建立严谨有效的工作流程才能在这严酷的环境下为企业带来一丝清凉。
时间竞争的残酷看一看xfocus.net的benjerry的这段话我们就明白了:“从一个漏洞发现到攻击代码实现,到蠕虫病毒产生,几年前可能是几个月甚至半年多,而现在几周甚至一天就可以完成。特别是近期,在微软发布MS04-011公告时,NGS的David在看到公告的8分钟后写出了攻击代码,Xfocus成员也在6小时内写出了通用的攻击代码。因此补丁管理也就需要有很强的及时性,如果补丁管理工作晚于攻击程序,那么企业就有可能被攻击,造成机密信息泄漏,比如去年9月份发生的Half Life2源代码泄漏事件就是由于企业内部的客户端没有及时打补丁,而导致被IE漏洞攻击,造成重大损失。”
第三章
补丁管理框架
企业安全的外在动力来自于现实的威胁,不过,当企业不得不寻求某种管理机制来认真对待这一威胁的时候,就有了将安全管理纳入企业管理机制的要求,这外部的动力就转换成了企业内部的安全动力,安全真正成为管理上的要求;这种需求与头疼医头、脚疼医脚的安全需求是完全不同的,因为已经与企业的业务和管理体系相融合。
当企业决定推行补丁管理的时候,我们说,企业有了决心,只是这种决心必须来自高层;下层管理人员的决心是不能够成为企业的决心的;每个企业对IT的依赖程度不同,病毒能够造成的影响也不相同,这样,企业对待补丁管理的态度应该也不相同,但是,现实中的多数企业采取宁多无缺的态度。
很有意思的是,很多企业采取了宁多勿缺的补丁管理态度,但其实心中是没底的,于是又提出这态度到底是否正确的问题,其实事情大可不必如此,既然采取了这种态度,那么就不要犹疑,当作绝对正确,照着走下去就可以了,遇到困难可以找办法克服,自然能够走出一条道路,到了山穷水尽的时候,总是能够找到柳暗花明的;心中存着犹豫和怀疑是不能办好事情的。
宁多勿缺的态度用在补丁管理上,通常会产生4个困难:一个是无谓的部署补丁会消耗大量的资源;一个是担心部署补丁后发反而产生新问题,甚至导致企业某些应用软件失效;一个是难以确认补丁部署的效果,如果有疏漏,难免造成隐患;一个是部署完补丁后如果发现问题,如何处理,如果回到当初。其实我们将补丁管理的过程按照时间顺序划分为若干个阶段,仔细厘定各个阶段需要完成的工作,并且对各项工作仔细加以考察,就可以很容易地解决问题。
第一个困难产生的原因是部署补丁非常消耗资源,每一次部署都要对整个企业的全部客户端重复一次部署行动;但是,这个部署过程很清楚是重复性的,而且是可以标准化的工作,只要将这个机械的重复行动抽出来自动化,就可以使得补丁部署的次数与消耗资源的多少脱钩,喜欢部署多少次补丁都可以,代价是需要一套自动化的补丁部署工具。
第二个困难是担心部署补丁后发反而产生新问题,甚至导致企业某些应用软件失效。对这个困难没有很好的办法,只有老老实实的对每一个将要部署的补丁进行测试,确保其符合企业的生产环境,不会产生冲突或者至少找到避免的办法。不过,准确地说,这个困难是任何一种补丁管理都无法避免的,与采取宁多勿缺的态度无关;这个困难更多的来源于那些纯粹依靠厂商的想法,一厢情愿的以为厂商的补丁都没有问题,以为厂商能够提供足够的保证,这种想法都是错误的,最终对企业负责的不是厂商,而是企业自己。因此,企业无论对待补丁管理采取什么态度,只要这个态度是理性的,是为了企业的利益着想,必然都要求对补丁进行测试。
第三个困难是难以确认补丁部署的效果,如果有疏漏,难免造成隐患。如果企业依照科学的规律办事情,必然要求在部署完补丁后确认补丁部署的效果。如果是用人工来完成这个工作,不但工作量巨大,而且由于人总是趋向于犯错误,收集数据的可靠性和可信性都得不到保证,但是使用自动化的部署工具就能够很好地解决这个问题,自动化的部署工具能够在部署完成后自动的收集数据用于确认。
第四个困难是部署完补丁后如果发现问题,如何处理,如果回到当初。这个困难等于提出部署完成后的回滚问题,如果由人工来完成,几乎是不可能的,但是使用自动化工具就可以做到。
企业有了决心和态度还是不够的,还要有方法以及指导思想。一来可以统一的组织和协调行动,二来可以规范补丁管理,三来还可以发展出对规范的约束标准和评价标准。这样就可以使得补丁管理走上科学的管理道路。
我们认为,补丁管理是一个基于时间顺序组织起来的由若干阶段组成的过程。在企业环境下,会对其所要完成的目标,达成目标的手段等都有所要求和限制。这就需要有一套管理方法来支持这种管理,不依规矩不成方圆。
如果我们深入考察一下补丁管理过程,补丁管理可以看作是以某种思想作为指导的,在一个管理框架的支持下的安全实践。补丁管理框架由3个层次的东西组成:
第一个层次是指导思想和管理框架(操作模型),奠定了补丁管理的理论框架和操作方式;
第二个层次是一