全部博文(465)
分类: IT业界
2011-07-18 17:04:40
DEP机制的保护原理
溢出攻击的根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠向前兼容的修补来减少溢出带来的损害,DEP(数据执行保护,Data Execution Prevention)就是用来弥补计算机对数据和代码混淆这一天然缺陷的。
DEP的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。如图12.1.1所示。
DEP 的主要作用是阻止数据页(如默认的堆页、各种堆栈页以及内存池页)执行代码。微软从Windows XP SP2开始提供这种技术支持,根据实现的机制不同可分为:软件DEP(Software DEP)和硬件DEP(Hardware-enforced DEP)。
软件DEP其实就是我们前面介绍的SafeSEH,它的目的是阻止利用S.E.H的攻击,这种机制与CPU硬件无关,Windows利用软件模拟实现DEP,对操作系统提供一定的保护。现在大家明白为什么在SafeSEH的校验过程中会检查异常处理函数是否位于非可执行页上了吧。
硬件DEP才是真正意义的DEP,硬件DEP需要CPU的支持,AMD和Intel都为此做了设计,AMD称之为No-Execute Page-Protection (NX),Intel称之为Execute Disable Bit (XD) ,两者功能及工作原理在本质上是相同的。
操作系统通过设置内存页的NX/XD属性标记,来指明不能从该内存执行代码。为了实现这个功能,需要在内存的页面表(Page Table)中加入一个特殊的标识位(NX/XD)来标识是否允许在该页上执行指令。当该标识位设置为0里表示这个页面允许执行指令,设置为1时表示该页面不允许执行指令。
由于软件DEP就是传说中的SafeSEH,关于SafeSEH的突破前面我们已经介绍过,所以在这一节中我们只对硬件DEP进行讨论和分析。
大家可以通过如下方法检查CPU是否支持硬件DEP,右键单击桌面上的“我的电脑”图标,选择“属性”,在打开的“系统属性”窗口中点击“高级”选项卡。在“高级”选项卡页面中的“性能”下单击“设置”打开“性能选项”页。单击“数据执行保护”选项卡,在该页面中我们可确认自己计算机的CPU是否支持DEP。如果CPU不支持硬件DEP该页面底部会有如下类似提示:“您的计算机的处理器不支持基于硬件的DEP。但是,Windows可以使用DEP软件帮助保护免受某些类型的攻击”。如图12.1.2所示。
本文节选自《0day安全:软件漏洞分析技术(第2版)》一书。
图书详细信息:http://blog.chinaunix.net/space.php?uid=13164110&do=blog&id=1645730