58ssl.cn_SSL之家
当前位置: 首页 > 网络安全 > 时尚时尚最时尚的缓冲区溢出目标

时尚时尚最时尚的缓冲区溢出目标

关键词:缓冲区溢出   时间:2016-11-14      来源:SSL之家    点击:

原文:《Modern Overflow Targets》 By Eric Wimberley,Nathan Harrison

在当今的操作系统中,内存缺陷漏洞已经越来越难挖掘了,栈保护措施已经使原来的缓冲区溢出利用方法(将NOP块和shellcode写入到缓冲区中,并用缓冲区内的地址覆盖EIP所指向的地址)失效了。如果没有某种程度的信息泄露,在地址空间分布随机化(ASLR)和栈cookies的双重保护下,用传统方法实际上已经很难对远程系统执行有效的溢出攻击了。

不过,现在仍存在可被利用的栈输入/输出漏洞。本文描述了一些常用缓冲区溢出技术,这些技术不会触发栈的__stack_chk_fail保护,或至少到目前为止还有效的技术。本文我们不再利用新技术通过修改EIP来修改程序的执行流程,而是将精力集中到一系列新的目标中。同时,本文也会讨论GCC 4.6及之前版本中未出现在任何文档中的函数安全模式(function safety model)。

GCC ProPolice记录的异常

根据函数安全模型的ProPolice文档,以下情况不会被保护:

◆无法被重新排序的结构体,以及函数中的指针是不安全的。

◆将指针变量作为参数时是不安全的。

◆动态分配字符串空间是不安全的。

◆调用trampoline代码的函数是不安全的。

另外,我们也发现以下几种情况也是不安全的:

◆如果函数中定义了一块以上缓存且没有正确排序,则至少一块缓存可能在引用前被修改被干扰。

◆参数列表中的指针或原语(primitives)可能被修改,但在canary检测之前被引用。

◆任意结构体原语或缓存都有可能在引用前被修改(包括C++中的栈对象)。

◆位于栈帧低地址中的指向变量的指针是不安全的,因为数据在被引用前可能会先被覆盖。这里我们不再局限于当前栈帧中的本地变量、指针(如函数指针)和缓存等。

IBM在关于函数安全模型的文档中假定攻击类型都是传统的栈溢出方式。文档中声明,函数返回后,栈canary后的数据是安全的,事实也确实是这样。但问题是数据在函数返回之前可能不是安全的。即使在不同的栈帧中,指向栈的高地址的指针也很容易被改写。

本文链接:https://www.58ssl.cn/wangluoanquan/1401.html TAG:"缓冲区溢出"转载请注明出处。

百度新闻 百度地图 谷歌地图
Copyright© 2010-2020 SSL之家