复习一下姿势,转自 http://sec.chinabyte.com/165/12946665.shtml
堆缓冲区溢出
导致堆缓冲区溢出的来源与栈溢出的一致,基本都是因为一些长度检查不充分的操作,唯一不同的地方只是发生问题的对象不是在编译阶段就已经确定分配的栈缓冲区,而是随着程序执行动态分配的堆块。
实例:
- HP OpenView NNM Accept-Language HTTP头堆溢出漏洞( CVE-2009-0921)
典型的先分配后使用的堆溢出问题。
科普:安全漏洞的概念及分类
- PHP (phar extension)堆溢出漏洞
堆溢出特有的溢出样式:由于整数溢出引发Malloc小缓冲区从而最终导致堆溢出。
科普:安全漏洞的概念及分类
静态数据区溢出
发生在静态数据区BSS段中的溢出,非常少见的溢出类型。
实例:
- Symantec pcAnyWhere awhost32远程代码执行漏洞(CVE-2011-3478)
科普:安全漏洞的概念及分类
格式串问题
在*printf类调用中由于没有正确使用格式串参数,使攻击者可以控制格式串的内容操纵*printf调用越界访问内存。此类漏洞通过静态或动态的分析方法可以相对容易地被挖掘出来,因此目前已经很少能够在使用广泛的软件中看到了。
实例:
- Qualcomm Qpopper 2.53格式串处理远程溢出漏洞(CVE-2000-0442)
科普:安全漏洞的概念及分类
想了解更多格式串漏洞的原理和利用,可以参考warning3在很早之前写的文档:
*printf()格式化串漏洞分析http://www.nsfocus.net/index.php?act=magazine&do=view&mid=533http://www.nsfocus.net/index.php?act=magazine&do=view&mid=534
越界内存访问
程序盲目信任来自通信对方传递的数据,并以此作为内存访问的索引,畸形的数值导致越界的内存访问,造成内存破坏或泄露。
实例:
- OpenSSL TLS心跳扩展协议包远程信息泄露漏洞 (CVE-2014-0160)
漏洞是由于进程不加检查地使用通信对端提供的数据区长度值,按指定的长度读取内存返回,导致越界访问到大块的预期以外的内存数据并返回,泄露包括用户名、口令、SessionID甚至是私钥等在内的敏感信息。
科普:安全漏洞的概念及分类
释放后重用
这是目前最主流最具威胁的客户端(特别是浏览器)漏洞类型,大多数被发现的利用0day漏洞进行的水坑攻击也几乎都是这种类型,每个月各大浏览器厂商都在修复大量的此类漏洞。技术上说,此类漏洞大多来源于对象的引用计数操作不平衡,导致对象被非预期地释放后重用,进程在后续操作那些已经被污染的对象时执行攻击者的指令。与上述几类内存破坏类漏洞的不同之处在于,此类漏洞的触发基于对象的操作异常,而非基于数据的畸形异常(通常是不是符合协议要求的超长或畸形字段值),一般基于协议合规性的异常检测不再能起作用,检测上构成极大的挑战。
实例:
- Microsoft IE非法事件操作内存破坏漏洞(CVE-2010-0249)
著名的Aurora攻击,涉嫌入侵包括Google在内的许多大公司的行动,就使用了这个CVE-2010-0249这个典型的释放后重用漏洞。
科普:安全漏洞的概念及分类
二次释放
一般来源于代码中涉及内存使用和释放的操作逻辑,导致同一个堆缓冲区可以被反复地释放,最终导致的后果与操作系统堆管理的实现方式相关,很可能实现执行任意指令。
实例:
- CVS远程非法目录请求导致堆破坏漏洞( CVE-2003-0015)
科普:安全漏洞的概念及分类
逻辑错误类
涉及安全检查的实现逻辑上存在的问题,导致设计的安全机制被绕过。
实例:
- Real VNC 4.1.1验证绕过漏洞( CVE-2006-2369 )
漏洞允许客户端指定服务端并不声明支持的验证类型,服务端的验证交互代码存在逻辑问题。
科普:安全漏洞的概念及分类
科普:安全漏洞的概念及分类
- Android应用内购买验证绕过漏洞
Google Play的应用内购买机制的实现上存在的漏洞,在用户在Android应用内购买某些数字资产时会从Play 市场获取是否已经付费的验证数据,对这块数据的解析验证的代码存在逻辑问题,导致攻击者可以绕过验证不用真的付费就能买到东西。验证相关的代码如下:
科普:安全漏洞的概念及分类
代码会先检查回来的数据签名是否为空,不空的话检查签名是否正确,如果不对返回失败。问题在于如果签名是空的话并没有对应的else逻辑分支来处理,会直接执行最下面的return true操作,导致的结果是只要返回的消息中签名为空就会返回验证通过。
输入验证类
漏洞来源都是由于对来自用户输入没有做充分的检查过滤就用于后续操作,绝大部分的CGI漏洞属于此类。所能导致的后果,经常看到且威胁较大的有以下几类:
- SQL注入
- 跨站脚本执行
- 远程或本地文件包含
- 命令注入
- 目录遍历