特權分離
![本頁使用了標題或全文手工轉換](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
在電腦編程和電腦安全中,特權分離(亦可稱作權限分離)是一種用於實現最小權限原則的防禦式編程方法。在實踐特權分離的程式中,程式被按職責分為多個部分,每個部分僅被授予執行特定任務所需的特定特權,以此減輕安全漏洞可能帶來的危害。
特權分離的常見實踐是將電腦程式分叉為兩個行程。主程式放棄特權,而較小的輔助程式保留特權以執行特定任務。然後,這兩部分通過一對通訊端(或其他安全的方法)進行通訊。在此實踐下,這對程式可以照常執行特權操作,而即使較大的主程式被攻擊者利用,攻擊者也無法獲得特權。
在傳統的 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).