信息安全漏洞分类及介绍
本文是一个安全漏洞相关的科普,介绍安全漏洞的概念认识,漏洞在几个维度上的分类及实例展示。
1 安全漏洞及相关的概念
本节介绍什么是安全漏洞及相关的概况。
1.1 安全漏洞的定义
我们经常听到漏洞这个概念,可什么是安全漏洞?想给它一个清晰完整的定义其实是非常困难的。如果你去搜索一下对于漏洞的定义,基本上会发现高大上的学术界和讲求实用的工业界各有各的说法,漏洞相关的各种角色,比如研究者、厂商、用户,对漏洞的认识也是非常不一致的。
从业多年,我至今都找不到一个满意的定义,于是我自己定义一个:
安全漏洞是信息系统在生命周期的各个阶段(设计、实现、运维等过程)中产生的某类问题,这些问题会对系统的安全(机密性、完整性、可用性)产生影响。
这是一个从研究者角度的偏狭义的定义,影响的主体范围限定在了信息系统中,以尽量不把我们所不熟悉的对象扯进来。
漏洞之所以被描述为某种”问题”,是因为我发现无法简单地用脆弱性、缺陷和Bug等概念来涵盖它,而更象是这些概念的一个超集。
漏洞会在系统生命周期内的各个阶段被引入进来,比如设计阶段引入的一个设计得非常容易被破解的加密算法,实现阶段引入的一个代码缓冲区溢出问题,运维阶段的一个错误的安全配置,这些都有可能最终成为漏洞。
定义对安全的影响也只涉及狭义信息安全的三方面:机密性、完整性和可用性。漏洞造成的敏感信息泄露导致机密性的破坏;造成数据库中的信息被非法篡改导致完整性的破坏;造成服务器进程的崩溃导致可用性的丧失。漏洞也可能同时导致多个安全属性的破坏。
1.2 安全漏洞与Bug的关系
漏洞与Bug并不等同,他们之间的关系基本可以描述为:大部分的Bug影响功能性,并不涉及安全性,也就不构成漏洞;大部分的漏洞来源于Bug,但并不是全部,它们之间只是有一个很大的交集。可以用如下这个图来展示它们的关系
1.3 已知漏洞的数量
各个漏洞数据库和索引收录了大量已知的安全漏洞,下表是一个主流漏洞库的数量的大致估计,漏洞一般最早从20世纪90年代开始: 漏洞条目库 特点 数量 URL SecurityFocus 全揭露,带POC OSVDB Secunia ISS XForce CVE CNVD >60000 http://www.securityfocus.com/bid/ 数量最大,索引丰富 >100000 http://www.osvdb.org/ 产品分类细 描述信息专业 最全的索引 >58000 http://secunia.com/community/advisories/ >90000 http://xforce.iss.net/ >60000 http://cve.mitre.org/cve/cve.html 国内的中文数据库 >60000 http://www.cnvd.org.cn/flaw/list.htm 事实上,即便把未知的漏洞排除在外,只要订了若干漏洞相关的邮件列表就会知道:并不是所有漏洞数据库都会收录,就算把上面的所列的数据库中的所有条目加起来去重以后也只是收录了一部分的已知漏洞而已,实际的已知漏洞数比总收录的要高得多。
2 安全漏洞的分类
和其他事物一样,安全漏洞具有多方面的属性,也就可以从多个维度对其进行分类,重点关注基于技术的维度。注意,下面提到的所有分类并不是在数学意义上严格的,也就是说并不保证同一抽象层次、穷举和互斥,而是极其简化的出于实用为目的分类。
2.1 基于利用位置的分类
2.1.1 本地漏洞
需要操作系统级的有效帐号登录到本地才能利用的漏洞,主要构成为权限提升类漏洞,即把自身的执行权限从普通用户级别提升到管理员级别。
实例:
Linux Kernel 2.6 udev Netlink消息验证本地权限提升漏洞( CVE-2009-1185 ) 攻击者需要以普通用户登录到系统上,通过利用漏洞把自己的权限提升到root用户,获取对系统的完全控制。
2.1.2 远程漏洞
无需系统级的帐号验证即可通过网络访问目标进行利用,这里强调的是系统级帐号,如果漏洞利用需要诸如FTP用户这样应用级的帐号要求也算是远程漏洞。 实例:
- Microsoft Windows DCOM RPC接口长主机名远程缓冲区溢出漏洞(MS03-026)(CVE-2003-0352)
攻击者可以远程通过访问目标服务器的RPC服务端口无需用户验证就能利用漏洞,以系统权限执行任意指令,实现对系统的完全控制。
2.2 基于威胁类型的分类
2.2.1 获取控制
可以导致劫持程序执行流程,转向执行攻击者指定的任意指令或命令,控制应用系统或操作系统。威胁最大,同时影响系统的机密性、完整性,甚至在需要的时候可以影响可用性。
主要来源:内存破坏类、CGI类漏洞
2.2.2 获取信息
可以导致劫持程序访问预期外的资源并泄露给攻击者,影响系统的机密性。 主要来源:输入验证类、配置错误类漏洞
2.2.3 拒绝服务
可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。
主要来源:内存破坏类、意外处理错误处理类漏洞。
2.3 基于技术类型的分类
基于漏洞成因技术的分类相比上述的两种维度要复杂得多,对于目前我所见过的漏洞大致归纳为以下几类:
- 内存破坏类
- 逻辑错误类
- 输入验证类
- 设计错误类
- 配置错误类
以下是对这几类漏洞的描述和实例分析。
2.3.1 内存破坏类
此类漏洞的共同特征是由于某种形式的非预期的内存越界访问(读、写或兼而有之),可控程度较好的情况下可执行攻击者指定的任意指令,其他的大多数情况下会导致拒绝服务或信息泄露。
对内存破坏类漏洞再细分下来源,可以分出如下这些子类型:
- 栈缓冲区溢出
- 堆缓冲区溢出
- 静态数据区溢出
- 格式串问题
- 越界内存访问
- 释放后重用
- 二次释放
2.3.1.1 栈缓冲区溢出
最古老的内存破坏类型。发生在堆栈中的缓冲区溢出,由于利用起来非常稳定,大多可以导致执行任意指令,威胁很大。此类漏洞历史非常悠久, 1988年著名的Morris蠕虫传播手段之一就是利用了finger服务的一个栈缓冲区溢出漏洞。在2008年之前的几乎所有影响面巨大的网络蠕虫也基本利用此类漏洞,汇总情况可以见下表:
中文名MS 公告号 号 蠕虫 CVE ID 漏洞名 Microsoft SQL Server预验证过程远程缓冲区Slammer 蠕虫王 MS02-056 CVE-2002-1123 溢出漏洞 Microsoft Windows DCOM RPC接口长主机名远MSBlast 冲击波 MS03-026 CVE-2003-0352 程缓冲区溢出漏洞 Sasser 震荡波 MS04-011 CVE-2003-0533 Microsoft Windows LSASS远程缓冲区溢出漏洞 Conficker 飞客蠕MS08-067 CVE-2008-4250 Microsoft Windows Server服务RPC请求缓冲