我们经常听到安全漏洞的定义,但什么是安全漏洞呢?其实很难给它一个清晰完整的定义。如果你搜索漏洞的定义,你基本上会发现高大的学术界和实用的工业界都有自己的观点。研究人员、制造商、用户等漏洞相关角色对漏洞的理解也非常不一致。多年来,我一直没能找到满意的定义,因此我定义了一个问题:安全漏洞是信息系统在生命周期的不同阶段(设计、实施、操作和维护),它会影响到系统的安全(机密性、完整性和可用性)。
这是一个狭义的定义,从研究人员的角度来看,影响的主要范围仅限于信息系统,以尽量不要拉进我们不熟悉的对象。漏洞之所以被描述为问题,是因为我发现它不能简单地用脆弱性、缺陷和bug等概念来覆盖,更像是这些概念的超集。漏洞将在系统生命周期的各个阶段引入,如设计阶段引入的加密算法,实现代码缓冲区溢出问题,运行维护阶段的错误安全配置,最终可能成为漏洞。对安全的定义只涉及三个方面:机密性、完整性和可用性。攻击造成敏感信息的泄漏,导致数据库的机密性破坏;非法篡改数据库中的信息,造成完整性的破坏;服务器程序崩溃导致可用性的损失。漏洞也可能同时破坏多个安全属性。
安全漏洞与bug的关系与bug不同。它们之间的关系基本上可以描述为:大多数bug影响功能,不涉及安全,不构成漏洞;大多数漏洞来自bug,但不是全部。它们之间只有一个很大的交集。它们之间的关系可以用下图来显示:已知漏洞的数量。每一个漏洞数据库和索引都包含了许多已知的安全漏洞。事实上,即使排除了未知漏洞,只要订购一些与漏洞相关的电子邮件列表,你就会知道并非所有的漏洞数据库都会被包括在内,即使将上述数据库中的所有项目加起来重复,也只包括一些已知漏洞,实际已知漏洞的数量远高于总数。