特權分離
在計算機編程和計算機安全中,特權分離(亦可稱作權限分離)是一種用於實現最小權限原則的防禦式編程方法。在實踐特權分離的程序中,程序被按職責分為多個部分,每個部分僅被授予執行特定任務所需的特定特權,以此減輕安全漏洞可能帶來的危害。
特權分離的常見實踐是將計算機程序分叉為兩個進程。主程序放棄特權,而較小的輔助程序保留特權以執行特定任務。然後,這兩部分通過一對套接字(或其他安全的方法)進行通信。在此實踐下,這對程序可以照常執行特權操作,而即使較大的主程序被攻擊者利用,攻擊者也無法獲得特權。
在傳統的 POSIX 系統(如 Linux 或是其他類 UNIX 操作系統)上,權限分離可以通過使用 POSIX 標準中定義的setuid (2) / setgid (2) 及相關系統調用將真實的用戶 ID / 組 ID 與有效的用戶 ID / 組 ID 區分開來完成。[1]如果這些調用的觸發順序或是位置不正確,則有可能使程序暴露在網絡攻擊者的威脅之中,讓攻擊者有機會滲透進其他系統中。
許多面向網絡的守護進程都必須執行特定的特權操作,例如在特權端口上建立套接字。而用於系統管理和維護的實用程序在運行期間也可能需要特定的特權。出於安全考量,此類程序經常在特權操作完成後通過完全撤銷自身特權並轉而以某個低權限用戶的身份運行來實踐特權分離。
此操作在類 Unix操作系統下常被稱為解除 root。程序不需要特權的部分通常在 nobody 用戶或等效的單獨用戶帳戶下運行。
此外,特權分離還可以通過將單個程序拆分為多個較小的程序,然後將各個小程序所需的權限以文件系統權限授予來實現。在此實現下,不同的小程序必須通過操作系統相互通信,即使子程序被利用,攻擊者也僅能促成拒絕服務,而無法提升權限,由此便可限制漏洞被利用可能導致的後果。
許多操作系統和應用程序在設計時都重點考慮了利用特權分離來提高安全性。在 OpenBSD 中,特權分離是主要安全功能之一。[2]而作為面向網絡的郵件服務器軟件,Postfix 和 Dovecot 的設計也都體現了權限分離的思想。
另見
外部連結
- Theo de Raadt: Exploit Mitigation Techniques in OpenBSD (頁面存檔備份,存於網際網路檔案館) (OpenBSD 中的抗利用技術)
- Niels Provos, Markus Friedl, Peter Honeyman: Preventing Privilege Escalation (頁面存檔備份,存於網際網路檔案館) paper
- Niels Provos: Privilege Separated OpenSSH project
- Trusted Solaris Developer's Guide: Bracketing Effective Privileges (頁面存檔備份,存於網際網路檔案館)
參考資料
- ^ Stefan, Deian. CSE 127: Computer Security: Least privilege and privilege separation (PDF). [2023-09-22]. (原始內容存檔 (PDF)於2022-07-01) (英語).
- ^ OpenBSD: Security. www.openbsd.org. [2023-09-22]. (原始內容存檔於2023-08-01).