我读过一篇关于执行禁用位 (EDB)在 x86 CPU 上。这被更广泛地称为NX位;英特尔也称其为 XD。
所以Windows XP支持这个硬件功能。耶!但我如何知道我选择的 Linux 发行版是否支持它?
如果启用此 BIOS 选项,会出现什么问题?
在哪里可以阅读有关 Linux 如何处理此功能的更多信息?
答案1
此功能通常称为NX位。它是内存页上的一个标志内存管理单元将页面标记为不可执行:如果某些代码跳转到该页面,则会发生分段错误(在 Unix 术语中)。
支持的常见卫生措施是将可写页面标记为只读,因为代码通常不可修改。这不能在所有情况下完成,例如它会阻止即时编译。这样做的好处是防止某些错误导致程序跳转到包含数据的内存区域,当数据由用户提供时,这尤其糟糕,因为它允许用户注入代码并利用程序。因此,NX 位会导致一些针对安全漏洞的攻击停止工作。然而,作为一种安全措施,它并不是万能的:有一些技术可以解决它,例如面向返回的编程。 NX 的主要用途是更容易地检测错误。
请注意,您引用的文章有些误导性。 NX 阻止了许多先前存在的漏洞利用,但漏洞利用和病毒已经适应了时代。该文章中的另一个错误是 NX 不是 BIOS 的一项功能,而是 CPU 的一项功能(某些 BIOS 可以禁用它;我不知道禁用它有什么好处)。
这维基百科页面详细列出了哪些 UNIX 变体为 NX 提供了一些支持。应用程序可以通过调用来控制页面是否可执行mmap
系统调用。
答案2
我如何知道我选择的发行版是否支持它?
已经在内核里了自2004年以来,所以他们都以某种方式这样做。当您环顾四周时,请避免关注 RedHat 的旧文章,因为他们显然在一年前就已经为此提供了补丁。