漏洞与Bug并不等同,他们之间的关系基本可以描述为:大部分的Bug影响功能性,并不涉及安全性,也就不构成漏洞;大部分的漏洞来源于Bug,但并不是全部,它们之间只是有一个很大的交集。可以用如下这个图来展示它们的关系:
安全漏洞与BUG的关系说明
我们只有对安全威胁/漏洞的原理了然于心并紧扣公司的核心业务进行研究,才可能对我们的基础安全技术的安全性做出正确的评价,以及更加全面的判断和有效验证我们公司的工程实现的安全性。
安全漏洞是信息系统在生命周期的各个阶段(设计、实现、运维等过程) 中产生的某类问题,这些问题会对系统的安全(机密性、完整性、可用性)产生影响。安全漏洞会在系统生命周期内的各个阶段被引入进来,比如设计阶段引入的一个设计得非常容易被破解的加密算法,实现阶段引入的一个代码缓冲区溢出问题,运维阶段的一个错误的安全配置,这些都有可能最终成为漏洞。
和其他事物一样,安全漏洞具有多方面的属性, 也就可以从多个维度对其进行分类,下面提到的所有分类并不是在数学意义上严格的,也就是说并不保证同一抽象层次、 穷举和互斥,而是极其简化的出于实用为目的分类。基于漏洞成因技术的分类具体说明如下:
编号 | 大类 | 子类型 | 基于漏洞成因技术的描述 |
A. | 设计错误类 | A-1.协议设计问题 | 协议设计问题是指在协议设计过程中的错误或不严谨导致的问题,从而导致泄密、崩溃、可远程控制、不可用等后果,此问题影响面非常大。实例:WEP协议的协议设计漏洞 |
A-2.算法设计问题 | 算法设计的脆弱性或者某些弱点导致攻击者得到口令HASH后可以非常容易地暴力猜测出等价的明文口令。实例:双椭圆曲线确定性随机比特生成器的问题 | ||
A-3.系统设计问题 | 系统设计上对安全机制的考虑不足导致的在设计阶段就已经引入的安全漏洞。 | ||
B. | 内存破坏类 |
| 此类漏洞的共同特征是由于某种形式的非预期的内存越界访问(读、写或兼而有之),可控程度较好的情况下可执行攻击者指定的任意指令,其他的大多数情况下会导致拒绝服务或信息泄露。 |
C. | 逻辑错误类 |
| 涉及安全检查的实现逻辑上存在的问题,导致设计的安全机制被绕过。 |
D. | 配置错误类 |
| 系统运维过程中默认不安全的配置状态, 大多涉及访问验证的方面。 |
E. | 输入验证类 | E-1.SQL 注入 | Web 应用对来自用户的输入数据未做充分检查过滤,就用于构造访问后台数据库的 SQL 命令,导致执行非预期的 SQL 操作,最终导致数据泄露或数据库破坏。 |
E-2.跨站脚本执行 | Web 应用对来自用户的输入数据未做充分检查过滤,用于构造返回给用户浏览器的回应数据,导致在用户浏览器中执行任意脚本代码。 | ||
E-3.远程或本地文件包含 | PHP 语言支持在 URL 中包含一个远程服务器上的文件执行其中的代码,这一特性在编码不安全的 Web 应用中很容易被滥用。如果程序员在使用来自客户端的 URL 参数时没有充分地检查过滤,攻击者可以让其包含一个他所控制的服务器上的文件执行其中的代码,导致远程文件包含命令执行。 | ||
E-4.命令注入 | 涉及系统命令调用和执行的函数在接收用户的参数输入时未做检查过滤, 或者攻击者可以通过编码及其他替换手段绕过安全限制注入命令串,导致执行攻击指定的命令。 | ||
E-5.目录遍历 | 涉及系统用于生成访问文件路径用户输入数据时未做检查过滤,并且对最终的文件绝对路径的合法性检查存在问题,导致访问允许位置以外的文件。多见于 CGI 类应用,其他服务类型也可能存在此类漏洞。 | ||
F. | 拒绝服务类 |
| 拒绝服务 (DoS) 是指攻击者通过禁用或破坏网络、系统或服务来拒绝为特定用户提供服务的一种攻击方式。DoS 攻击包括使系统崩溃或将系统性能降低至无法使用的状态。但是,DoS 也可以只是简单地删除或破坏信息。大多数情况下,执行此类攻击只需简单地运行黑客程序或脚本。 |