windows系统上使用VS编译器时对缓冲区溢出的防范措施

来源:互联网 发布:maya node editer在哪 编辑:程序博客网 时间:2024/06/05 07:22

0x01 /GS --缓冲区安全性检查

如果使用/GS进行编译,将在程序中插入代码,以检测可能覆盖函数返回地址的缓冲区溢出。如果发生了缓冲区溢出,系统将向用户显示一个警告对话框,然后终止程序。这样,攻击者将无法控制应用程序。用户也可以编写自定义的错误处理例程,以代替默认对话框来处理错误。

在返回地址之前将插入一个专门的 cookie(系列字节),以使得任何缓冲区溢出都将更改该cookie。在函数返回之前,将测试cookie的值。如果cookie值已被更改,将会调用处理程序。服务器或服务可能会要求进行不同的处理,而不是显示一个对话框。这个/GS编译选项就是<<深入理解计算机系统>> 中所说的“缓冲区溢出保护策略之栈破坏检查”

0x02  DEP - 数据执行保护

数据执行保护 (DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。在 Microsoft Windows XP Service Pack 2、 Microsoft WindowsServer 2003 Service Pack 1 、Microsoft Windows XP Tablet PC Edition 2005 和 Microsoft Windows Vista 中,由硬件和软件一起强制实施 DEP。

DEP 的主要优点是可以帮助防止数据页执行代码。通常情况下,不从默认堆和堆栈执行代码。硬件实施 DEP 检测从这些位置运行的代码,并在发现执行情况时引发异常。软件实施 DEP 可帮助阻止恶意代码利用 Windows 中的异常处理机制进行破坏。硬件实施 DEP 是某些 DEP 兼容处理器的功能,可以防止在已标记为数据存储区的内存区域中执行代码。 此功能也称为非执行和执行保护。 Windows XP SP2 还包括软件实施 DEP,其目的在于减少利用 Windows 中的例外处理机制的情况。

与防病毒程序不同,硬件和软件实施 DEP 技术的目的并不是防止在计算机上安装有害程序。 而是监视您的已安装程序,帮助确定它们是否正在安全地使用系统内存。 为监视您的程序,硬件实施 DEP 将跟踪已指定为“不可执行”的内存区域。 如果已将内存指定为“不可执行”,但是某个程序试图通过内存执行代码,Windows 将关闭该程序以防止恶意代码。 无论代码是不是恶意,都会执行此操作。但是DEP是软硬件共同作用的,如果CPU生产厂商不支持DEP那也没用,如果CPU支持DEP,但是为了软件的正常执行或者兼容性考虑,DEP也不会起作用。

0x04 ASLR

Windows Vista 中包含有一种旨在保护系统免受缓冲区溢出攻击的安全功能:Address Space Layout Randomization(ASLR)的该功能会将关键的系统文件加载到不同的内存地址,提高了恶意代码运行的难度。

我们可以有趣的称这个是微软在和黑客捉迷藏。

x05 Heap protection& Heap randomization

顾名思义,是堆保护。主要使用了堆Cookie和数据加密,对RtlHeapCreate函数加载地址随机化。



0 0
原创粉丝点击