科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道Vista用户内存安全保护之safeseh

Vista用户内存安全保护之safeseh

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

是vista在内存安全保护方面的改进是比较大的,涉及面比较广,而VISTA的研究也是才刚刚开始,每个改进都需要自己慢慢的去分析对比和研究

作者:51CTO.COM 2007年10月18日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

  3.为什么vista下safeseh才开始发威

  vista自身带的系统库。程序99%以上是用.net的编译器编译的,.net的编译器默认编译时候就会在IMAGE里产生对safeseh的支持。因此vista下的应用加载的系统库几乎全是带有safeseh支持的IMAGE,堆栈溢出发生时覆盖这些支持safeseh模块的SEH都能被检查出来,使得覆盖堆栈中的SEH地址的技术不再可用。

  4.safeseh的实现过程

  safeseh本身的原理很简单,就是在编译器生成二进制IMAGE的时候,把所有合法的SEH函数的地址解析出来,在IMAGE里生成一张合法的SEH函数表,用于异常处理时候进行严格的匹配检查。基本过程如下(XP SP2和VISTA一样):

  加载过程:

  加载IMAGE时,定位和读出合法SEH函数表的地址(如果该IMAGE是不支持safeseh的,则这个SEH函数表的地址为0),使用shareuser内存中的一个随机数加密。

  将加密的SEH函数表的加密地址,IMAGE的开始地址,IMAGE的长度,合法SEH函数的个数 作为一条记录放入ntdll的加载模块数据内存中。

  异常处理过程:

  * 根据堆栈中SEH的地址,确认是否属于一个IMAGE的地址空间。

  >如果属于

  读取ntdll的加载模块数据内存对应的“SEH函数表的加密地址,IMAGE的开始地址,IMAGE的长度,合法SEH函数的个数"记录。

  读出shareuser内存中的一个随机数,解密SEH函数表的加密地址,读出真实的SEH函数表地址。

  * 如果该地址不为0,代表该IMAGE支持safeseh

  根据合法SEH函数的个数,依次计算合法合法SEH函数的地址并和当前SEH地址进行比较,如果符合执行SEH函数,如果全不符合则不执行当前SEH指定的地址,跳出不执行。

  * 如果该地址为0,代表该IMAGE不支持safeseh,只要该内存属于该IMAGE .code范围内的代码都可以执行。

  >如果不属于

  检测该地址的内存特征。一般属于内核空间的未加载用户数据地址可以执行(但是其实等效于无法执行的,这块不可能加载用户数据,可能是MS为了迷惑一些研究者吧,看见代码能跳转到如0xcccccccc地址上,以为能饶过safeseh)。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章