您能否解释一下 NX 标志是什么以及它是如何工作的(请保持技术性)?
3 回答
它在虚拟内存系统和 TLB(CPU 用于解析虚拟内存映射的结构)中标记内存页面不可执行。如果要从该页面执行任何程序代码,CPU 将发生故障并将控制权转移到操作系统以进行错误处理。
程序通常将其二进制代码和静态数据放在只读内存部分中,如果它们试图在那里写入,CPU 将出现故障,然后操作系统通常会终止应用程序(这称为分段错误或访问冲突) .
出于安全原因,程序的读/写数据存储器通常默认受 NX 保护。这可以防止攻击者向某些应用程序提供他的恶意代码作为数据,使应用程序将其写入其数据区域,然后以某种方式执行该代码,通常是通过应用程序中的缓冲区溢出/下溢漏洞,覆盖函数的返回地址在堆栈中与恶意代码在数据区域中的位置。
一些合法的应用程序(尤其是高性能仿真器和 JIT 编译器)也需要执行它们的数据,因为它们在运行时编译代码,但它们专门分配内存而没有为此设置 NX 标志。
来自维基百科
NX 位代表 No eXecute,是 CPU 中用于分隔内存区域以供处理器指令(或代码)存储或数据存储使用的技术,该功能通常仅存在于哈佛架构处理器中。然而,出于安全原因,NX 位正越来越多地用于传统的冯诺依曼架构处理器。
支持 NX 位的操作系统可能会将某些内存区域标记为不可执行。然后,处理器将拒绝执行驻留在这些内存区域中的任何代码。通用技术,称为可执行空间保护,用于防止某些类型的恶意软件通过将其代码插入另一个程序的数据存储区域并从该部分运行它们自己的代码来接管计算机;这被称为缓冲区溢出攻击。
看看在使用 NX 位的维基百科上找到的这个“ DEP ”。至于提供技术答案,对不起,我对此知之甚少,但引用:
数据执行保护 (DEP) 是现代 Microsoft Windows 操作系统中包含的一项安全功能,旨在防止应用程序或服务从不可执行的内存区域执行代码。……
DEP 是在 Windows XP Service Pack 2 中引入的,并且包含在 Windows XP Tablet PC Edition 2005、Windows Server 2003 Service Pack 1 和更高版本、Windows Vista 和 Windows Server 2008 以及所有较新版本的 Windows 中。...
硬件强制 DEP 通过在 32 位 Windows 中自动使用 PAE 内核和对 64 位内核的本机支持,在兼容 CPU 上启用 NX 位。Windows Vista DEP 的工作方式是将内存的某些部分标记为仅用于保存数据,然后启用 NX 或 XD 位的处理器将其理解为不可执行。这有助于防止缓冲区溢出攻击得逞。在 Windows Vista 中,可以在 Windows 任务管理器的“进程”选项卡上查看进程的 DEP 状态,即特定进程的 DEP 是启用还是禁用。
另请参阅MSDN 关于 DEP的知识库。这里有一个关于它是如何工作的非常详细的解释。
希望这会有所帮助,最好的问候,汤姆。