54SA.COM|专注于系统运维管理,为中国SA提供动力!

54SA.COM|系统运维网

系统管理员之家Banner
当前位置: 主页 > Windows > 系统安全 > 安全策略 >

Vista用户内存安全保护漫谈之safeseh

分享到:
时间:2010-10-03 23:35来源:未知 作者:tina

    前言

  最近开始折腾Vista,上个月在SST的BIOS沙龙SP2上讲过一点自己研究的心得加上收集到的一点资料混合起来的东西。会后几个朋友要资料,说实话,第一是vista在内存安全保护方面的改进是比较大的,涉及面比较广,而Vista的研究也是才刚刚开始,关于vista的研究资料也是非常的少,每个改进都需要自己慢慢的去分析对比和研究.第二就是vista的安全越来越需要安全环境特别是编译器方面的配合,vista本身的库代码几乎全部是用.net编译器编译的,我使用的.net 2003也缺乏一些vista下支持的安全特性(估计MS有新的针对vista的开发环境),而且以前对.net的研究几乎没有,现在才开始找些.net的书来补习。第三就是目前我的工作也比较繁杂,研究vista的安全保护机制只是因为某一项工作的需要,并非是这项工作的主题,而我这个人又比较懒散,觉得只是分析机制,缺乏新创意的东西懒得动笔写。但是现在觉得好久没有写点东西出来了,又答应过一些朋友要发布的,想想还是慢慢凑一些东西出来吧,只是关于VISTA的研究是长期的工作,靠一人之力只能有一点研究就写一点吧。所以学当年小四的学习笔记形式写写,因为当然其中错误与偏漏之处难免,只能姑称之漫谈。

  什么是safeseh

  以前堆栈溢出在的WINDOWS系统中一直都是安全问题的核心,其中覆盖seh的技术早为人熟知。safeseh是一项保护和检测和防止堆栈中的seh被覆盖而导致利用的技术。

  safeseh是vista的新技术吗?

  safeseh并不是vista的新技术,safeseh是xp sp2就已经引入的技术。但是由于safeseh需要.net的编译器编译的image才支持,而xp sp2系统自身所带的库和执行程序都是非.net的编译器编译的,所以使得safeseh在xp sp2上只能成为聋子的耳朵,xp sp2下,堆栈溢出只要覆盖seh的地址就能轻松饶过所有的保护机制。因此在xp sp2时代,关于safeseh的研究从来不被重视,甚至对他的机理研究都存在很多错误,认为safeseh只是屏蔽了数据段的地址,只要是库函数空间地址就是被许可的,一些safeseh的操作被误解读成函数地址保护的操作。

  为什么vista下safeseh才开始发威vista自身带的系统库。

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

  safeseh的实现过程

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

[责任编辑:admin]

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
用户名:
最新评论 进入详细评论页>>