我一直在阅读关于XD/NX位在内存页面中用于安全性的文章。我知道这是一个安全特性,可以帮助减少系统对病毒和恶意代码的暴露。如果启用,处理器将阻止在仅数据的内存页中执行代码.
不过,我想现在明白:
如有任何答案或提示,将不胜感激!
发布于 2022-05-09 17:13:45
它不会保护您不受ROP链的影响,即目标应用程序本身已经存在的代码。它也不会保护您免受内存泄漏类型漏洞的影响。事实上,它本身并不能保护您不受很多的影响,因为您可以简单地使用前面提到的ROP来关闭相关页面上的NX。
其次,它应该与其他缓解措施(如ASLR等)一起使用。
正如评论中所指出的那样,这个问题过于开放,无法提供详尽的答复。
发布于 2022-10-16 21:36:13
NX (也称为DEP,数据执行保护,Windows上的数据执行保护)只保护那些试图将可执行机器代码(通常称为“外壳代码”)放入数据内存(通常是堆栈或堆),然后运行它的攻击。这是从缓冲区溢出(内存损坏的最常见形式之一)到任意代码执行的最简单的方法,因此阻止它是一件很重要的事情,但它不能直接防止任何其他东西。
NX在动态安全测试方面也有所帮助。一般来说,这种测试希望被测试的程序在意外行为发生时立即崩溃,因为这是最容易监控的事情,并且希望监视器尽可能接近问题的根源。因此,例如,假设您使用的是名为"fuzzing“的技术,其中格式错误的数据是按过程生成的(通常是通过随机变异有效数据)并输入到程序/ API中。格式错误的数据导致指令指针-- CPU中指示从哪里读取机器代码下一条指令的寄存器--跳转到不正确的地址。如果地址是有效的(映射到进程的地址空间)和可执行文件,那么CPU可能会在尝试任何实际导致崩溃的操作之前花上一段时间进行随机的无意义操作,这可能会使测试人员更难确定错误在哪里以及它有多糟糕。如果地址是有效的,但是是不可执行的内存,那么进程将立即崩溃,出现NX冲突异常。对于测试人员来说,这是非常有用的信息;崩溃不仅发生在执行到达错误的非常近的地方,而且还清楚地指出了问题(受坏数据影响的指令指针),从而便于对漏洞进行分类(保证至少拒绝服务,几乎可以肯定地用于任意代码执行,除非IP想要空)。
正如其他人所指出的那样,NX无法对其进行保护的列表太大,无法列举。然而,作为一般类别,它包括以下几个方面:
goto fail;,到文件名路径遍历到.你希望你能明白)现在几乎没有理由不使用NX了。如果一些非常老的软件尝试编译脚本到机器代码,将其写入数据内存,然后尝试执行它,那么它可能是不兼容的;您仍然可以这样做(web浏览器总是对JavaScript这样做),但是在执行之前,您必须使用系统调用来更改内存保护(删除NX和添加RO),而足够老的软件将不知道这样做。然而,NX在软件和硬件支持方面已经存在了20多年,一些操作系统现在默认强制使用NX来支持所有软件或至少所有没有特定异常的软件,所有现代编译器(好吧,正确的链接器)都应该默认标记二进制文件来支持它。
然而,正如上面提到的,NX还远不是一个完整的保护,即使是针对“内存损坏导致控制指令指针”的漏洞也是如此。为此,您需要更多的缓解措施,如ASLR,这也应该在所有现代软件上使用。
https://security.stackexchange.com/questions/261854
复制相似问题