RWX内存页面的风险

时间:2011-12-09 15:53:52

标签: .net windows security dep

在对这个答案 - can i implement counter in the .text area without using registers?收到负面评论后,我进行了一些调查,试图了解RWX内存页面是否真的不常见且罕见,或者每个热门程序都有一些。 (Science!

我通过WinDBG附加到MSVS,执行!address /f:Image,PAGE_EXECUTE_READWRITE
我看到很多这样的台词:

7a534000 7a537000     3000 MEM_IMAGE   MEM_COMMIT  PAGE_EXECUTE_READWRITE             Image "C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\6836a951700c2eb01a933212425cda4e\System.ni.dll"

我检查了它的部分,并且.xdata部分带有“执行读写”标记。

这是否意味着每个加载了.NET库的应用程序都有RWX内存页面? 您的浏览器,例如(如果您运行Windows)。(幸运的是,既不是FF8,也不是IE8都不使用.NET)

那么为什么我们要担心RWX内存?

1 个答案:

答案 0 :(得分:0)

我的直觉是,这可能不是问题。这可能是运行时环境所需要的,以支持动态行为。

存储区域存在安全问题,这些区域既可写又可执行。这允许攻击者使用shellcode填充缓冲区,然后执行此代码。使用shellcode填充缓冲区并不是什么大问题,只是数据。当攻击者能够控制指令指针(EIP)时,通常是通过使用基于堆栈的缓冲区溢出来破坏函数的堆栈帧,然后通过将此指针分配给shellcode的地址来改变执行流程(或者在nop雪橇的某个地方,它将击中shellcode)。

如果您想更好地理解这种安全措施,那么请看看在NX位出现之前的哪些缓冲区溢出漏洞。你应该阅读经典论文Smashing the Stack for Fun and Profit。请记住,由于NX位,ASLR和金丝雀,这些攻击都不再起作用。