《Windows安全机制》之DEP(数据执行保护)

介绍

DEP的主要作用是阻止数据页(默认的堆,栈以及内存池页)执行代码。分为软件DEP和硬件DEP,其中软件DEP就是SafeSEH。而硬件DEP操作系统会通过设置内存页的NX/XD属性标记是否运行在本页执行指令。

DEP 机制的保护原理

DEP(数据执行保护,Data Execution Prevention)就是用来弥补计算机对数据和代码混淆
这一天然缺陷的。
DEP 的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入 shellcode 时,
程序会尝试在数据页面上执行指令,此时 CPU 就会抛出异常,而不是去执行恶意指令。

核心原理:

DEP 的主要作用是阻止数据页(如默认的堆页、各种堆栈页以及内存池页)执行代码。

在这里插入图片描述

DEP的类型

根据实现的机制不同可分为:软件 DEP(Software DEP)和硬件 DEP(Hardware-enforced DEP)。
软件 DEP
其实就是 SafeSEH机制(另外的文章中提到过),它的目的是阻止利用 S.E.H 的攻击,这种机制与 CPU 硬件无关,Windows 利用软件模拟实现 DEP,对操作系统提供一定的保护。这也正是为什么在SafeSEH 的校验过程中会检查异常处理函数是否位于非可执行页上。
硬件 DEP
才是真正意义的 DEP,硬件 DEP 需要 CPU 的支持,AMD 和 Intel 都为此做了设计。
俩者功能及工作原理在本质上是相同的。

操作系统通过设置内存页的 NX/XD 属性标记,来指明不能从该内存执行代码。为了实现 这个功能,需要在内存的页面表(Page T able)中加入一个特殊的标识位(NX/XD)来标识是否允许在该页上执行指令。当该标识位设置为 0 里表示这个页面允许执行指令,设置为 1 时表示该页面不允许执行指令。

检测电脑是否开启DEP

可以通过如下方法检查 CPU 是否支持硬件 DEP,右键单击桌面上的“我的电脑”图
标,选择“属性”,在打开的“系统属性”窗口中点击“高级”选项卡。在“高级”选项卡页
面中的“性能”下单击“设置”打开“性能选项”页。单击“数据执行保护”选项卡,在该页
面中我们可确认自己计算机的 CPU 是否支持 DEP。
(图为Windows10示例)
在这里插入图片描述

DEP的四种状态

(1)Optin:默认仅将 DEP 保护应用于 Windows 系统组件和服务,对于其他程序不予保护,但用户可以通过应用程序兼容性工具(ACT,Application Compatibility Toolkit)为选定的程序启用DEP,在 Vista 下边经过/NXcompat 选项编译过的程序将自动应用 DEP。这种模式可以被应用程序动态关闭,它多用于普通用户版的操作系统,如 Windows XP、Windows Vista、Windows7。
(2)Optout:为排除列表程序外的所有程序和服务启用 DEP,用户可以手动在排除列表中
指定不启用 DEP 保护的程序和服务。这种模式可以被应用程序动态关闭,它多用于服务器版
的操作系统,如 W indows 2003、Windows 2008。
(3)AlwaysOn:对所有进程启用 DEP 的保护,不存在排序列表,在这种模式下,DEP 不
可以被关闭,目前只有在 64 位的操作系统上才工作在 AlwaysOn 模式。
(4)AlwaysOff:对所有进程都禁用 DEP,这种模式下,DEP 也不能被动态开启,这种模
式一般只有在某种特定场合才使用,如 DEP 干扰到程序的正常运行。

Vs设置DEP

在使用VS编译的时候也有DEP选项。(VS2015示例)默认情况下是开启的。
通过右键单击项目属性–>链接器–>高级–>DEP保护。
在这里插入图片描述

采用/NXCOMPAT编译的程序会在文件的PE头中设置IMAGE_DLLCHARACTERISTICS_
NX_COMPAT 标识,该标识通过结构体 IMAGE_OPTIONAL_HEADER 中的 DllCharacteristics
变量进行体现,当 DllCharacteristics 设置为 0x0100 表示该程序采用了/NXCOMPAT 编译。
经过/NXCOMPAT编译的程序有什么好处呢?
通过前面的介绍我们知道用户版的操作系统中 DEP 一般工作在 Optin 状态,此时 DEP 只保护系统核心进程,而对于普通的程序是没有保护的。虽然用户可以通过工具自行添加,但这无形中增高了安全的门槛,所以微软推出了/NXCOMPAT 编译选项。经过/NXCOMPAT 编译的程序在 Windows vista 及后续版本的操作系统上会自动启用 DEP 保护。

突破DEP

1.攻击未启用 DEP 的程序
2.利用 Ret2Libc 挑战 DEP
3.利用可执行内存挑战 DEP
4.利用.NET 挑战 DEP
5.利用 Java applet 挑战 DEP
参考资料:
《0day》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章