《程序员》3月文章
申明。文章仅代表个人观点,与所在公司无任何联系。
- 概述
在安全编码实践一中我们谈到GS编译选项和缓存溢出。缓存溢出的直接后果就是可能导致恶意代码的远
在这篇文章里,我们会介绍另外一个非常重要的安全特性
在栈溢出程序例子中,我们看到,恶意代码是被存放在栈(stack)上的。类似的,如果是一个堆(heap)溢出的安全漏洞,恶意代码是被存放在堆上。无论堆还是栈
DEP,就是禁止应用程序和服务在非可执行的内存区(non-executable memory)上执行指令。
- DEP和硬件支持
2.1软件DEP和硬件DEP
在探讨DEP的原理前,我们先区分两个容易引起混淆的概念:软件DEP(Software DEP)和硬件DEP(Hardware-enforced DEP)。
软件DEP,并不是真正意义上的DEP。简单的说,它的原理是检查异常处理是否安全(SEH-Safe Exception Handling)。它是完全通过软件支持的一种安全特性。在以后的安全编码实践中
硬件DEP,则是需要CPU提供支持的,同软件DEP相比,硬件DEP提供的保护更为全面。以后我们提到的DEP,都是指硬件DEP。
2.2 NX位
在80x86体系结构中,操作系统的内存管理是通过页面(page)存储方式来实现的。虚拟内存空间的管理,如代码,数据堆栈
图1:页面内存映射
在AMD64位CPU上,在页面表(page table)中的页面信息加了一个特殊的位,