2024年5月5日发(作者:)

如何修补软件、系统漏洞?

北京 李晨光

一、程序为什么会出错?

程序只能严格按照规则做编程有要它做的事情。但是,最终编写的程序并不总是与程序

员预计让程序完成的事情一致。下面的这个笑话可以说明这一问题:

一个人在森林中行走,在地上发现了一盏魔灯。他本能地捡起了魔灯并且用袖子擦拭它。突

然,从瓶子里出来了一个魔鬼。魔鬼感谢这个人使他获得了自由,并答应要满足他的三个愿

望。这个人欣喜若狂,他确实知道自己想要什么。

“第一”,这个人说,“我想要十亿美元。”

魔鬼很快地晃了一下手指,满满的一袋子钱出现了。

这个人惊奇地睁大眼睛继续说道:“接下来,我想要一部法拉利。”

魔鬼一晃手指,很快地在烟雾中出现了一部法拉利。

这个人继续说:“最后,我想变得对女人有极大的诱惑力。”

魔鬼一挥手指,这个人变成了一盒巧克力。

正像这个人的最后一个愿望的实现是基于他的言语,而不是他的真实想法一样,程序按

照指令执行,由于软件漏洞结果出了问题并不总是程序员想要的。有时结果甚至是灾难性的。

我们都知道现在软件变得更加复杂,软件越复杂,就越难预测它在各种可能场景下的反应方

式,也就越难保证其安全性,当今的操作系统和应用程序的代码行数也越来越多,例如

Windows xp大约有4千万行代码,Vista 大约5千多万,Windows 2000有2900万行代码。

业界通常使用这样的一个估算方式,即每1000行代码中大约有5~50个BUG。因此,从平

均意义上能估计出Windows xp中大约有多少个BUG(只是理论上。)我们都知道黑客对操作

系统的攻击都是利用系统软件中的漏洞进行的。那么我们怎么理解什么是漏洞呢?在过去,

很多人把漏洞看作是有恶意的人能够利用的软件或硬件的缺陷。然而,在近几年中,漏洞的

定义发展成为有恶意的人能够利用的软硬件的缺陷及配置错误。

我们知道了软件有漏洞如何来管理呢,从表面上看,漏洞管理像是个简单的工作。通常

是在操作系统上装上一些常用的补丁修补工具,然后自动进行修补,不幸的是,在大部分组

织的网络中,漏洞管理既困难又复杂。一个典型的组织中包含定制们有不同的需求,不能只

做简单地保护,更不能置之不理。软件厂商仍会发布不安全的代码,硬件厂商也不会将安全

内建在产品中,因此这些问题就留给了系统管理员来处理。加入这些必须遵守的规定使管理

者感到紧张,并且处于一种高压状况下,容易导致犯严重的错误。

厂商通过不同的途径发现一个漏洞。在理想的情况下,厂商在发布产品之前,会找出并

解决所有的安全问题。但是代码的复杂性,加上严格的开发周期,易于产生安全方面的错误。

通常一个独立的或商业的安全研究组织会将漏洞告知厂商,并且在有些情况下,厂商会与公

众同时发现漏洞,这时不用事先通知,漏洞就被公开了(这时候就会被利用啊)。

二、如何理解漏洞造成的风险?

不管一个漏洞是如何公开的,该漏洞都对一个组织造成了风险。漏洞带来的风险大小取

决于几个因素:厂商对风险的评级、组织中受影响系统的数量、受影响系统的危险程度和暴

露程度。比如一个大的银行机构采取措施把所有的金融核算系统都放在网络中,并且置于独

立的防火墙之后。尽管分离重要的系统是一种很好的策略,但是有一个因素没有考恕到有大

量的员工需要访问这些数据。因此,实际拥有的只是一个用作昂贵钓日志系统的防火墙,该

防火墙允许一部分客户端通过。当然,防火墙可以阻止一些威胁,但是如果威胁来自一个允

许通信的通道,那么防火墙就没有帮助了。正确的解决方案是把整个部门放在隔离的网络中,

不允许任何来自网络外部的访问。

三、漏洞评估方法和步骤

在一个企业中查找出漏洞需要付出很大的努力,不能简单地在所选的地方安装一个漏洞

扫描软件并简单地按下“开始”按钮,那样是不起作用的。这不是因为现在的企业拥有成千

上万的服务器和主机,这些服务器和主机又通过上百个速率不同的网络线路连接起来,只是

我们在期望的时间内根本无法获得所需的覆盖范围。那么需要做什么呢?我们需要对漏洞进

行评估,看到这里有的人可能会把漏洞评估跟军队中的侦察任等同起来,侦察任务的主要目

的是向前进入外国的领土,并且查找出敌军的弱点和易攻击的地方。漏洞评估是帮助企业领

导、安全专家及黑客在网络、应用和系统中确定安全责任的安全实践活动。实施漏洞评估的

方法和步骤分为:信息收集/发现、列举和检测。

1.信息收集/发现

包括为查找目标拥有的所有域名而进行的whois查询以及为确定与目标相关的IP地址范

围而通过网站如对可能的目枴标和IP地址进行的查询。

使用Nmap软件,我们能够很快确定网络上哪些主机是在线的,如图2. 2所示。在Nmap

中使用-s P(ping扫描)选项对目标网络执行ping扫描。这可以帮助确定哪些主机是活动的

和有效的。一旦确定信息后,信息收集/发现的工作就完成了。现在可以继续进行第二步,

列举并确定目标运行什么操作系统和应用程序。

2.列举

列举是用来判断目标系统运行的操作系统获取操作系统指纹和位于目标上的应用程序的过

程。在确定操作系统后,下一步就是确定运行于主机上的应用程序。端口0~1023(共1024

个)被称为熟知端口。

仍然使用Nmap,我们用它的-sV选项来确定什么应用程序位于什么端口。端口在漏洞评

估中扮演了一个很关键的角色,因为它确保将漏洞对应到各自应用程序。如果确信有问题的

主机在端口443上运行的是安全Web服务器而不是一个电子邮件服务器,那么很可能就不

会发现该主机的漏洞,从而认为系统将来不可能被渗透。当信息收集工作和列举工作完成后,

现在可以在目标系统上检测漏洞了。

3.检测

检测用来确定一个系统或应用程序是否易受攻击。这一步并

不是确定漏洞是否存在,漏洞是否存在由渗透测试来完成。检测

过程只是报告漏洞出现的可能性。

为了检测漏洞,我们需要使用一个漏洞评估工具,如Tenable

Network Secuitye 的Nessus工具或者eEyeDigital Security

的Retina工具。这两个工具都是收费的。