Linux
掛載 /tmp noexec 有多大用處?
許多人(包括Securing Debian Manual)建議
/tmp
使用一noexec,nodev,nosuid
組選項進行安裝。這通常表現為“縱深防禦”策略的一個元素,通過防止允許某人寫入文件的攻擊升級,或具有合法帳戶但沒有其他可寫空間的使用者的攻擊升級。然而,隨著時間的推移,我遇到
noexec
了一些毫無用處的爭論(最突出的是 Debian/Ubuntu 開發人員 Colin Watson),原因有幾個:
- 使用者可以
/lib/ld-linux.so <binary>
嘗試執行以獲得相同的效果。- 使用者仍然可以在無法直接執行的腳本上執行系統提供的解釋器
鑑於這些論點,可能需要更多配置(例如
debconf
,像可執行的臨時目錄),以及潛在的便利性損失,這是一個值得的安全措施嗎?您還知道哪些其他漏洞可以進行規避?
以下是我迄今為止提出的實用程序的論點:
現代核心修復了這個
/lib/ld-linux.so
漏洞,因此它無法從noexec
文件系統映射可執行頁面。口譯員的觀點當然仍然是一個問題,儘管我認為比人們聲稱的要少。我能想到的原因是,存在許多依賴於特定格式錯誤的系統呼叫的權限提升漏洞。如果沒有攻擊者提供二進製文件,就很難進行惡意系統呼叫。此外,腳本解釋器應該是無特權的(我知道這在歷史上有時並非如此,例如使用 suid perl),因此需要它們自己的漏洞才能在攻擊中有用。顯然,至少可以使用 Python 來執行一些漏洞。
許多“固定”漏洞利用可能會嘗試在 中編寫和執行執行檔
/tmp
,從而noexec
降低陷入腳本攻擊的可能性(例如在漏洞披露和更新檔安裝之間的視窗中)。因此,
/tmp
使用noexec
.如Debian 的 bug tracker中所述,設置
APT::ExtractTemplates::TempDir
到rootapt.conf
無法noexec
訪問的目錄將消除 debconf 問題。