当前位置:文档之家› 安全漏洞概念及分类

安全漏洞概念及分类


蠕虫 中文名号 MS 公告号 CVE ID
漏洞名
Slammer 蠕虫王
MS02-056 CVE-2002-1123 Microsoft SQL Server 预验证过程远程缓冲区溢出漏洞
MSBlast 冲击波 MS03-026 CVE-2003-0352 Microsoft Windows DCOM RPC 接口长主机名远程缓冲区溢出漏洞
从业多年,我至今都找不到一个满意的定义,于是我自己定义一个:
安全漏洞是信息系统在生命周期的各个阶段(设计、实现、运维等过程)中产生的某类问 题,这些问题会对系统的安全(机密性、完整性、可用性)产生影响。
这是一个从研究者角度的偏狭义的定义,影响的主体范围限定在了信息系统中,以尽量不把 我们所不熟悉的对象扯进来。
特点
全揭露,带 POC 数量最大,索引丰富 产品分类细 描述信息专业 最全的索引 国内的中文数据库
数量
URL
>60000 >100000 >58000 >90000 >60000 >60000
/bid/ / /community/advisories/ / /cve/cve.html /flaw/list.htm
Novell eDirectory HTTPSTK Web 服务器栈溢出漏洞
无长度检查的 memcpy 调用。
FlashGet FTP PWD 命令超长响应栈溢出漏洞
Imatix Xitami If-Modified-Since 头远程栈溢出漏洞。 极其危险的 sscanf 类调用。
Borland StarTeam Multicast 服务用户请求解析远程栈溢出漏洞( CVE-2008-0311 ) Microsoft DirectShow MPEG2TuneRequest 溢出漏洞( CVE-2008-0015 )
Sasser 震荡波 MS04-011 CVE-2003-0533 Microsoft Windows L MS08-067 CVE-2008-4250 Microsoft Windows Server 服务 RPC 请求缓冲区溢出漏洞
上面表格里列出的蠕虫即使经过多年,在当前的互联网上还经常被捕捉到。
漏洞之所以被描述为某种“问题”,是因为我发现无法简单地用脆弱性、缺陷和 Bug 等概念 来涵盖它,而更象是这些概念的一个超集。
漏洞会在系统生命周期内的各个阶段被引入进来,比如设计阶段引入的一个设计得非常容易 被破解的加密算法,实现阶段引入的一个代码缓冲区溢出问题,运维阶段的一个错误的安全 配置,这些都有可能最终成为漏洞。
Android 应用内购买验证绕过漏洞 Google Play 的应用内购买机制的实现上存在的漏洞,在用户在 Android 应用内购买某些 数字资产时会从 Play 市场获取是否已经付费的验证数据,对这块数据的解析验证的代 码存在逻辑问题,导致攻击者可以绕过验证不用真的付费就能买到东西。验证相关的代 码如下:
典型的先分配后使用的堆溢出问题。
PHP (phar extension)堆溢出漏洞 堆溢出特有的溢出样式:由于整数溢出引发 Malloc 小缓冲区从而最终导致堆溢出。
静态数据区溢出
发生在静态数据区 BSS 段中的溢出,非常少见的溢出类型。
实例: Symantec pcAnyWhere awhost32 远程代码执行漏洞(CVE-2011-3478)
释放后重用
这是目前最主流最具威胁的客户端(特别是浏览器)漏洞类型,大多数被发现的利用 0day 漏洞进行的水坑攻击也几乎都是这种类型,每个月各大浏览器厂商都在修复大量的此类漏洞。 技术上说,此类漏洞大多来源于对象的引用计数操作不平衡,导致对象被非预期地释放后重 用,进程在后续操作那些已经被污染的对象时执行攻击者的指令。与上述几类内存破坏类漏 洞的不同之处在于,此类漏洞的触发基于对象的操作异常,而非基于数据的畸形异常(通常 是不是符合协议要求的超长或畸形字段值),一般基于协议合规性的异常检测不再能起作用, 检测上构成极大的挑战。
定义对安全的影响也只涉及狭义信息安全的三方面:机密性、完整性和可用性。漏洞造成的 敏感信息泄露导致机密性的破坏;造成数据库中的信息被非法篡改导致完整性的破坏;造成 服务器进程的崩溃导致可用性的丧失。漏洞也可能同时导致多个安全属性的破坏。
安全漏洞与 Bug 的关系
漏洞与 Bug 并不等同,他们之间的关系基本可以描述为:大部分的 Bug 影响功能性,并不 涉及安全性,也就不构成漏洞;大部分的漏洞来源于 Bug,但并不是全部,它们之间只是有
栈缓冲区溢出
最古老的内存破坏类型。发生在堆栈中的缓冲区溢出,由于利用起来非常稳定,大多可以导 致执行任意指令,威胁很大。此类漏洞历史非常悠久, 1988 年著名的 Morris 蠕虫传播手段 之一就是利用了 finger 服务的一个栈缓冲区溢出漏洞。在 2008 年之前的几乎所有影响面巨 大的网络蠕虫也基本利用此类漏洞,汇总情况可以见下表:
实例: Microsoft IE 非法事件操作内存破坏漏洞(CVE-2010-0249)
著名的 Aurora 攻击,涉嫌入侵包括 Google 在内的许多大互联网公司的行动,就使用了 这个 CVE-2010-0249 这个典型的释放后重用漏洞。
二次释放
一般来源于代码中涉及内存使用和释放的操作逻辑,导致同一个堆缓冲区可以被反复地释放, 最终导致的后果与操作系统堆管理的实现方式相关,很可能实现执行任意指令。
手抖,缓冲区的指针被当做缓冲区本身被数据覆盖溢出。
堆缓冲区溢出
导致堆缓冲区溢出的来源与栈溢出的一致,基本都是因为一些长度检查不充分的数据操作, 唯一不同的地方只是发生问题的对象不是在编译阶段就已经确定分配的栈缓冲区,而是随着 程序执行动态分配的堆块。 实例: HP OpenView NNM Accept-Language HTTP 头堆溢出漏洞( CVE-2009-0921)
保证同一抽象层次、穷举和互斥,而是极其简化的出于实用为目的分类。
基于利用位置的分类
本地漏洞
需要操作系统级的有效帐号登录到本地才能利用的漏洞,主要构成为权限提升类漏洞,即把 自身的执行权限从普通用户级别提升到管理员级别。 实例: Linux Kernel 2.6 udev Netlink 消息验证本地权限提升漏洞( CVE-2009-1185 ) 攻击者需要以普通用户登录到系统上,通过利用漏洞把自己的权限提升到 root 用户,获取 对系统的完全控制。
主要来源:输入验证类、配置错误类漏洞
拒绝服务
可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。
主要来源:内存破坏类、意外处理错误处理类漏洞。
基于技术类型的分类
基于漏洞成因技术的分类相比上述的两种维度要复杂得多,对于目前我所见过的漏洞大致归 纳为以下几类: 内存破坏类 逻辑错误类 输入验证类 设计错误类 配置错误类
以下是对这几类漏洞的描述和实例分析。
内存破坏类
此类漏洞的共同特征是由于某种形式的非预期的内存越界访问(读、写或兼而有之),可控 程度较好的情况下可执行攻击者指定的任意指令,其他的大多数情况下会导致拒绝服务或信 息泄露。
对内存破坏类漏洞再细分下来源,可以分出如下这些子类型: 栈缓冲区溢出 堆缓冲区溢出 静态数据区溢出 格式串问题 越界内存访问 释放后重用 二次释放
越界内存访问
程序盲目信任来自通信对方传递的数据,并以此作为内存访问的索引,畸形的数值导致越界 的内存访问,造成内存破坏或信息泄露。
实例: OpenSSL TLS 心跳扩展协议包远程信息泄露漏洞 (CVE-2014-0160)
漏洞是由于进程不加检查地使用通信对端提供的数据区长度值,按指定的长度读取内存 返回,导致越界访问到大块的预期以外的内存数据并返回,泄露包括用户名、口令、 SessionID 甚至是私钥等在内的敏感信息。
想了解更多格式串漏洞的原理和利用,可以参考 warning3 在很早之前写的文档: *printf()格式化串安全漏洞分析 /index.php?act=magazine&do=view&mid=533 /index.php?act=magazine&do=view&mid=534
基于威胁类型的分类
获取控制
可以导致劫持程序执行流程,转向执行攻击者指定的任意指令或命令,控制应用系统或操作 系统。威胁最大,同时影响系统的机密性、完整性,甚至在需要的时候可以影响可用性。 主要来源:内存破坏类、CGI 类漏洞
获取信息
可以导致劫持程序访问预期外的资源并泄露给攻击者,影响系统的机密性。
瘦肉丁@weibo
安全漏洞概念及分类
本文是一个安全漏洞相关的科普,介绍安全漏洞的概念认识,漏洞在几个维度上的分类及实 例展示。
安全漏洞及相关的概念
本节介绍什么是安全漏洞及相关的概况。
安全漏洞的定义
我们经常听到漏洞这个概念,可什么是安全漏洞?想给它一个清晰完整的定义其实是非常困 难的。如果你去搜索一下对于漏洞的定义,基本上会发现高大上的学术界和讲求实用的工业 界各有各的说法,漏洞相关的各种角色,比如研究者、厂商、用户,对漏洞的认识也是非常 不一致的。
一个很大的交集。可以用如下这个图来展示它们的关系:
已知漏洞的数量
各个漏洞数据库和索引收录了大量已知的安全漏洞,下表是一个主流漏洞库的数量的大致估 计,漏洞一般最早从 20 世纪 90 年代开始:
漏洞条目库
SecurityFocus OSVDB Secunia ISS XForce CVE CNVD
事实上,即便把未知的漏洞排除在外,只要订了若干漏洞相关的邮件列表就会知道:并不是 所有漏洞数据库都会收录,就算把上面的所列的数据库中的所有条目加起来去重以后也只是 收录了一部分的已知漏洞而已,实际的已知漏洞数比总收录的要高得多。
相关主题