对于系统管理员而言,打补丁的目的主要是为了保证系统的安全,不被有心人利用一些漏洞入侵到自己管理的系统当中。这其中涉及到很多问题,比如漏洞的安全危害级别,如何查找和检测漏洞,打补丁之前预估好可能产生的影响,进行充分的测试,做好相关备份等。有一些入行不久的系统管理员害怕打补丁,害怕会因此导致系统出现不正常,其实该打的补丁不打往往可能导致更糟糕的后果。那么,系统管理员应如何修补软件、系统漏洞,平稳的打补丁呢?51CTO系统频道特别邀请了李晨光老师来给大家扫盲。
作者简介:李晨光,中科院研究生毕业,IBM软件精英讲师,微软社区精英,ChinaUnix论坛Linux栏目版主.从事网络系统管理、存储及信息安全10年,中国勘察设计协会信息化专家、中国计算机学会高级会员,通过微软Microsoft、思科Cisco、CIW网络认证、获数据库高级管理工程师认证,多年系统管理培训、软件开发管理经验。公开发表专业学术论文四十篇,精彩博文百余篇。
一、程序为什么会有漏洞?
程序只能严格按照规则做编程有要它做的事情。但是,最终编写的程序并不总是与程序员预计让程序完成的事情一致。下面的这个笑话可以说明这一问题:
一个人在森林中行走,在地上发现了一盏魔灯。他本能地捡起了魔灯并且用袖子擦拭它。突然,从瓶子里出来了一个魔鬼。魔鬼感谢这个人使他获得了自由,并答应要满足他的三个愿望。这个人欣喜若狂,他确实知道自己想要什么。 “第一”,这个人说,“我想要十亿美元。” 魔鬼很快地晃了一下手指,满满的一袋子钱出现了。 这个人惊奇地睁大眼睛继续说道:“接下来,我想要一部法拉利。” 魔鬼一晃手指,很快地在烟雾中出现了一部法拉利。 这个人继续说:“最后,我想变得对女人有极大的诱惑力。” 魔鬼一挥手指,这个人变成了一盒巧克力。 |
程序执行正像这个人的最后一个愿望的实现一样。程序按照指令执行,由于软件漏洞结果出了问题并不总是程序员想要的,有时结果甚至是灾难性的。
我们都知道现在软件变得更加复杂,软件越复杂,就越难预测它在各种可能场景下的反应方式,也就越难保证其安全性,当今的操作系统和应用程序的代码行数也越来越多,例如Windows xp大约有4千万行代码,Vista 大约5千多万,Windows 2000有2900万行代码。业界通常使用这样的一个估算方式,即每1000行代码中大约有5~50BUG。因此理论上,从平均意义上能估计出Windows xp中大约有多少个BUG。我们都知道黑客对操作系统的攻击都是利用系统软件中的漏洞进行的。在过去,很多人把漏洞看作是有恶意的人能够利用的软件或硬件的缺陷。然而在近几年中,漏洞的定义发展成为有恶意的人能够利用的软硬件的缺陷及配置错误。
从表面上看,漏洞管理像是个简单的工作,比如在操作系统上装上一些常用的补丁修补工具,然后自动进行修补。然而在大部分组织的网络中,漏洞管理既困难又复杂。一个典型的组织中包含定制们有不同的需求,不能只做简单地保护,更不能置之不理。软件厂商仍会发布不安全的代码,硬件厂商也不会将安全内建在产品中,因此这些问题就留给了系统管理员来处理。
厂商通过不同的途径发现一个漏洞。在理想的情况下,厂商在发布产品之前,会找出并解决所有的安全问题。但是代码的复杂性,加上严格的开发周期,易于产生安全方面的错误。通常,一个独立的/商业的安全研究组织会将漏洞告知厂商;不过在有些情况下,厂商会与公众同时发现漏洞,这时不用事先通知,漏洞就被公开了,就很容易被利用。
二、如何理解漏洞造成的风险?
不管一个漏洞是如何公开的,该漏洞都对一个组织造成了风险。漏洞带来的风险大小取决于几个因素:
- 厂商对风险的评级
- 组织中受影响系统的数量
- 受影响系统的危险程度和暴露程度
比如某些大的银行机构会采取措施,把所有的金融核算系统都放在网络中,并且置于独立的防火墙之后。尽管分离重要的系统是一种很好的策略,但是有一个因素没有考虑到:有大量的员工需要访问这些数据。因此,实际拥有的只是一个用作日志系统的昂贵防火墙,该防火墙允许一部分客户端通过。当然,防火墙可以阻止一些威胁,但是如果威胁来自一个允许通信的通道,那么防火墙就没有帮助了。
正确的解决方案是把整个部门放在隔离的网络中,不允许任何来自网络外部的访问。减少暴露程度虽然与漏洞无关,但是会大大降低漏洞为企业造成的风险。
三、漏洞评估方法和步骤
在一个企业中查找出漏洞需要付出很大的努力,不能简单地在所选的地方安装一个漏洞扫描软件并简单地按下“开始”按钮,那样是不起作用的。因为现在的企业拥有成千上万的服务器和主机,这些服务器和主机又通过上百个速率不同的网络线路连接起来,因此照这个方法,我们在期望的时间内根本无法获得所需的覆盖范围。
那么需要做什么呢?我们需要对漏洞进行评估。所谓漏洞评估,可以理解成跟军队中的侦察差不多的行为。侦察任务的主要目的是向前进入外国的领土,并且查找出敌军的弱点和易攻击的地方。漏洞评估是帮助企业领导、安全专家及黑客在网络、应用和系统中确定安全责任的安全实践活动。
实施漏洞评估的方法和步骤分为:信息收集/发现,列举,以及检测。
1.信息收集/发现
这一步骤包括:
- 为查找目标拥有的所有域名而进行的whois查询
- 为确定与目标相关的IP地址范围而通过网站(如www.arin.net)对可能的目标和IP地址进行的查询
使用Nmap软件,我们能够很快确定网络上哪些主机是在线的。在Nmap中使用-s P(ping扫描)选项对目标网络执行ping扫描。这可以帮助确定哪些主机是活动的和有效的。一旦确定信息后,信息收集/发现的工作就完成了。现在可以继续进行第二步,列举并确定目标运行什么操作系统和应用程序。(51CTO推荐阅读:十条nmap实用命令行技巧)
2.列举
列举是用来
- 判断目标系统运行的操作系统
- 获取操作系统指纹和位于目标上的应用程序
的过程。
在确定操作系统后,就是要确定运行于主机上的应用程序。端口0~1023(共1024个)被称为熟知端口。
仍然使用Nmap。我们用它的-sV选项来确定什么应用程序位于什么端口。端口在漏洞评估中扮演了一个很关键的角色,因为它确保将漏洞对应到各自应用程序。如果确信有问题的主机在端口443上运行的是安全Web服务器而不是一个电子邮件服务器,那么很可能就不会发现该主机的漏洞,从而认为系统将来不可能被渗透。当信息收集工作和列举工作完成后,现在可以在目标系统上检测漏洞了。
3.检测
检测用来确定一个系统或应用程序是否易受攻击。需要注意的是,这一步并不是用于确定漏洞是否存在。检测过程只是报告漏洞出现的可能性,而漏洞是否存在则由渗透测试来完成。