Linux
什麼是執行禁用位?
我讀了一篇關於x86 CPU 上的執行禁用位 (EDB)的文章。這更廣為人知的是NX 位;英特爾也稱它為 XD。
所以 Windows XP 支持這個硬體特性。耶!但是我怎麼知道我選擇的 Linux 發行版是否支持它呢?
如果啟用此 BIOS 選項,可能會出現什麼問題?
我在哪裡可以閱讀有關 Linux 如何處理此功能的更多資訊?
我怎麼知道我選擇的發行版是否支持它?
自 2004 年以來它一直在核心中,所以他們都以一種或另一種方式。當您環顧四周時,請避免關注 RedHat 的舊文章,因為他們顯然在大約一年前為此提供了更新檔。
此功能通常稱為NX 位。它是MMU記憶體頁上的一個標誌,用於將該頁標記為不可執行:如果某些程式碼跳轉到該頁,則會發生分段錯誤(在 unix 術語中)。
支持的一種常見衛生措施是將可寫頁面標記為只讀,因為程式碼通常不可修改。這不能在所有情況下都完成,例如它會阻止即時編譯。好處是防止某些錯誤導致程序跳轉到包含數據的記憶體區域,當數據由使用者提供時尤其糟糕,因為它允許使用者注入程式碼並利用程序。因此,NX 位會導致一些針對安全漏洞的攻擊停止工作。然而,作為一種安全措施,它並不是靈丹妙藥:有一些技術可以解決它,例如面向返回的程式。NX 的主要用途是更容易檢測錯誤。
請注意,您引用的文章有些誤導。NX 阻止了許多先前存在的漏洞利用,但漏洞利用和病毒已經適應了時代。那篇文章中的另一個錯誤是 NX 不是 BIOS 的一個功能,它是 CPU 的一個功能(某些 BIOS 可以禁用它;我不知道禁用它有什麼好處)。
Wikipedia 頁面詳細介紹了哪些 unix 變體為 NX 提供了一些支持。
mmap
應用程序可以通過呼叫系統呼叫來控制頁面是否可執行。