什么是安全漏洞?可能您觉得问题的答案会非常简单。然而,事实并非如此。在微软安全响应中心,我们每年都要处理成千上万份安全漏洞报告。很多情况下我们发现这些漏洞报告确实反映出了存在于微软产品中的安全漏洞,为此我们在第一时间发布了相关的安全更新修复了这些漏洞,因为挖掘和修复安全漏洞是我们的职责。同时,我们也收到了许多错误的报告。也有一些报告处于这两种情况之间,比如它们指出的确实是安全问题,但这些安全问题并非由于微软产品中的安全漏洞所导致。这篇文章将讨论微软安全响应中心对安全漏洞的定义。同时,阅读这篇文章也能帮助您更好地理解出现在微软安全公告中的相关词汇。
字典中对“安全漏洞”的解释为:安全漏洞即任何会引起系统的安全性受到破坏的事物,包括不恰当的操作指导、病毒、没有被正确配置的系统、弱密码或者写在纸条上的密码等。需要指出的是,这里所提到实际上并非安全漏洞本身,还包括一些威胁等。在计算机信息安全领域所讨论的安全漏洞的涵义与字典中的定义有所区别。
注:在以下的文字叙述中,除非特别声明,所有“产品”均指代“微软产品”,“安全漏洞”均指代“微软产品中存在的安全漏洞”。
| 安全漏洞的定义 | |
| 实际情况中的操作 | |
| 补充声明 |
即使使用者在合理配置了产品的条件下,由于产品自身存在的缺陷,产品的运行可能被改变以产生非设计者预期的后果,并可最终导致安全性被破坏的问题,包括使用者系统被非法侵占、数据被非法访问并泄露,或系统拒绝服务等。我们将这些缺陷称为安全漏洞。
对于以上定义,我们将详细讨论该定义中出现的名词,并且举例说明如何在实际案例中运用这个定义。
产品:产品中的缺陷可以导致安全漏洞。但是,因为遵从不安全的,但是被广泛接受的标准而导致的缺陷,不属于安全漏洞。
例子:当使用浏览器连接至FTP站点时,其连接会话是明文的,这不是安全漏洞,因为FTP协议标准中规定使用明文会话。但是,如果浏览器在SSL会话中使用了明文通信,这就产生了一个安全漏洞,因为SSL标准中规定了会话必须加密。
缺陷:安全漏洞可能是由于设计者或开发者的不慎而造成的产品缺陷。但并不是所有的产品缺陷都是安全漏洞。
例子:尽管在产品中使用一个40比特的密码可能会由于保护强度弱而产生安全隐患,但这并不属于安全漏洞。相反,如果一个设计者由于疏忽在一个128比特的密码中只使用了64比特,那么这一缺陷属于安全漏洞。
合理配置:任何产品的帮助文档都对其配置方法有着详细的介绍。除此之外,产品的最佳实践描述了产品的合理配置方式。因此,只有那些在产品被正常和合理的配置情况下仍可能导致安全性问题的产品缺陷,才可能称之为安全漏洞。
例子1:假如一台Web服务器存在一个缺陷,但它仅在访问该网站的用户拥有Web服务器管理员权限的前提下才会造成安全问题,那么该缺陷不属于安全漏洞,因为管理员具有完全控制服务器的权限,不应授予网站访问者管理员权限是众所周知的常识。但是,假如访问该网站的用户只具有普通权限,而仍能利用该缺陷从而引发同样的安全问题,那么就属于安全漏洞。
例子2:假如一个需要使用前进行用户身份认证的软件,用户配置了弱密码从而引起被轻易猜解,这并不属于安全漏洞带来的问题。而如果该软件初始安装时存在默认密码且并未强制用户在使用前进行密码更改,或者使用明文进行密码保存,则属于安全漏洞。
侵占:在使用者允许(且没有被欺骗),或系统授权范围内进行的行为,例如控制系统或变更配置等,则不是侵占,不属于安全漏洞。只有造成的后果同时违背了使用者的意愿和产品配置的安全策略的行为,才有可能是安全漏洞。
例子1:如果一个产品的缺陷会导致管理员具有修改计算机上所有文件的权限,那么他不属于安全漏洞,因为管理员本身具有这些权限。相反,如果产品缺陷导致非特权级别用户(如普通用户)具备这些权限,这就属于安全漏洞。
例子2:Microsoft Windows系统默认识别具有某些类型扩展名的文件(如.exe,.pif等)为可执行程序,这些程序一旦被使用者主动(可能无意或被欺骗)运行,系统会授予这些程序在使用者运行权限范围内做任何事情的权利,这类程序的典型是病毒等恶意软件。并非所有恶意软件利用安全漏洞进行传播和破坏,当您遇到可疑的可执行程序时,请通过http://www.microsoft.com/security/portal/提交程序样本。如果确认为利用未知的微软产品的安全漏洞传播和破坏,我们会及时进行处理。
例子3:假设使用者在访问某个网页时,浏览器弹出警告窗口,告知使用者该网页正试图运行某些程序。这时如果使用者选择允许程序的运行,而这个程序的运行导致了某些安全性问题,这不属于安全漏洞。因为程序的执行符合使用者本身的意愿。同样的,如果该网页属于受信任区域,并且浏览器被配置为允许运行来自受信任区域的程序,那么这个行为符合系统安全策略,因此也不存在安全漏洞。然而,如果浏览器没有弹出警告窗口,该网页也不属于受信任区域,但是程序在使用者不知情的情况下就下载并运行了,那么这个缺陷就有可能是安全漏洞。
例子4:如果浏览器的地址栏被当前浏览的非信任网站伪造为可信任的网址,从而使用者受到欺骗,那么该问题表明浏览器可能存在安全漏洞。然而,使用者是基于对人的信任被欺骗,比如攻击者通过社会工程的方式(通过电话或聊天的方式)诱骗使用者运行木马程序,则和安全漏洞无关。
泄露:在未经文件所有者或管理员授权的情况下,若产品的缺陷使得攻击者能够使用这些数据,那么该缺陷属于安全漏洞。这些使用行为包括对数据的访问、添加和修改等。
例子:假设操作系统提供了基于文件的访问控制功能。如果一个产品缺陷允许一个使用者访问另一使用者的数据,而没有对使用者的权限和文件的访问限制进行正确检查,那么这个缺陷属于安全漏洞。反之,如果一个新建的文件的默认权限为全局可读,不属于安全漏洞。同样,如果操作系统本身并没有提供基于文件的访问控制功能,并且在其相关文档中说明了这一点,那么它也不属于安全漏洞。
拒绝服务:单纯的拒绝服务实际上属于可用性问题,也是侵占使用者权限的特例,但是我们将它单独进行讨论,因为这种攻击在目前非常普遍。产品拒绝服务意味着使用者的请求无法得到正常响应,但需要指出的是,产品的运行状况受多种因素影响,这些因素包括资源限制如硬件配置,产品设计负载能力等,所以并非所有的无法正常响应,都因产品缺陷或者安全漏洞而起。
例子:Microsoft Windows XP Professional 自动设置了在 IIS 上最多 10 个连接的限制,当连接数量达到10个以上,系统不会处理新的连接请求,这样的问题不属于拒绝服务。而假设一个网络服务在运行资源满足的条件下,由于不恰当的处理了连接请求而导致服务或整个系统停止响应,则属于产品缺陷,进而可能属于安全漏洞。
需要强调的是,漏洞报告的内容符合安全漏洞的定义仅仅是发布安全公告的前提条件之一,并不代表微软最终会发布安全公告。当我们收到客户提交的漏洞报告后,我们会对该报告进行研究。在验证漏洞报告的过程中,我们会确认以下两个问题来最终决定是否需要发布安全公告:
| • | 该问题是否符合安全漏洞的定义? |
| • | 该问题是否违反了产品的安全策略,即是否违反了产品的“安全承诺”? |
首先,所有报告中指出的安全问题都必须符合安全漏洞的定义。如果一个特定安全问题不符合安全漏洞的定义,那么它不可能发布成安全公告,虽然这并不意味着我们不会采取措施解决这些问题。例如:如果我们的研究发现某一问题源自产品的缺陷,但这个缺陷并不会导致安全危害,我们也会与产品组合作,并且会将该缺陷作为Service Pack或在产品的后续版本中修复。
如果某一问题符合安全漏洞的定义,接下来的问题是:它是否违反了产品的安全策略。每一产品对其使用方式都有一系列的定义及对其安全性的承诺。例如:Microsoft Windows® 2000产品承诺:如果其安装于NTFS文件系统中,它将启用“文件所有者”功能,以限制特定的使用者访问文件的权限。然而,Windows 95产品并没有作这个承诺,而是假设文件所有者会对计算机作好保护工作。因此,很有可能在Windows 2000与Windows 95中存在的同样问题,但它仅违反了Windows 2000的安全策略,因此我们仅发布Windows 2000版本的补丁。
目前我们正与多个产品组合作制定每一产品的安全策略文档,并将在第一时间发布。在此之前,您也可以通过阅读产品帮助文档,通过查看其正确使用方法与产品的安全特性,从而判断其安全策略。
必须声明的是:这并非一份法律上生效的文档。该文档主要目的是将安全漏洞的定义解释得尽可能清晰,并且方便读者理解。因此,我们指出:
定义并非保证:这份定义仅仅是帮助我们评估是否需要发布安全公告的一个工具文档。我们会本着尽最大可能保护客户安全的原则,决定是否将某一安全问题发布成安全公告。有时我们甚至会发布在严格意义上并不在安全漏洞定义范围之内的安全公告。同样,如果某一安全问题严格符合安全漏洞的定义,但是它几乎不发生或在非常特殊的条件下发生,那么我们优先分析和解决那些更严重的、更可能造成攻击的问题上。
该定义并非微软公司的标准文档:这是一个非正式的定义文档,仅在微软安全响应中心使用,因为它对我们的职责提供帮助。这份定义并非必须,也不是其他公司的标准文档。
在实践中运用该定义
您会发现,安全漏洞的定义范围存在较大弹性。然而,我们会本着尽最大可能保护客户安全的原则,对安全漏洞进行判断。如果您发现了微软的某一产品中存在安全漏洞,请将其报告给微软安全响应中心——我们将在第一时间对其进行研究并通知您该问题是否符合安全漏洞的定义。