最近 Cosmopolitan C 標準庫的作者 Redbean 平台通過 宣布,為 Linux 實現了 promise() 隔離機制。
笛 最初由 OpenBSD 項目開發 y 允許您有選擇地禁止 那 應用程序訪問未使用的系統調用 (為應用形成一種系統調用白名單,禁止其他調用)。 與 Linux 上可用的 syscall 訪問控制機制(例如 seccomp)不同,質押機制從一開始就被設計為盡可能地對用戶友好。
使用 systrace 機制在 OpenBSD 基礎環境中隔離應用程序的失敗舉措表明,在單個系統調用級別的隔離過於復雜和耗時。
作為替代方案,提出了認捐,其中 允許創建隔離規則而無需詳細介紹和操作準備好的訪問類.
例如,提供的類有 stdio(輸入/輸出)、rpath(只讀文件)、wpath(寫入文件)、cpath(創建文件)、tmppath(處理臨時文件)、inet(套接字網絡)、unix(unix 套接字)、dns(DNS 解析)、getpw(對用戶數據庫的讀取訪問權限)、ioctl(ioctl 調用)、proc(進程控制)、exec(啟動進程)和 id(權限控制)。
使用系統調用的規則 以註釋的形式指定,其中包括允許的系統調用類列表 以及允許訪問的文件路徑數組。 編譯並運行修改後的應用程序後,內核將接管監控是否符合指定規則的工作。
另外,FreeBSD 的質押實現正在開發中,其特點是能夠在不更改代碼的情況下隔離應用程序,而在 OpenBSD 中質押調用旨在與基礎環境緊密集成並在代碼中添加註釋每一個。
當老闆說我們應該使用像Linux這樣的東西時,承諾就像我們都渴望的禁果。 為什麼這很重要? 這是因為承諾()實際上使安全性可以理解。 Linux 從來沒有真正擁有普通人可以理解的安全層。
Linux 承諾移植開發人員從 FreeBSD 中獲得啟發 他們沒有更改代碼,而是準備了一個來自承諾.com 的附加實用程序,允許您在不更改應用程序代碼的情況下應用限制。 例如,要運行 curl 實用程序只能訪問 stdio、rpath、inet 和 threadstdio 系統調用類,只需運行“./pledge.com -p 'stdio rpath inet thread' curl http://example.com » .
該實用程序適用於自 RHEL6 以來的所有 Linux 發行版 並且不需要root訪問權限。 此外,基於 cosmopolitan 庫,提供了一個 API 用於管理 C 語言程序代碼中的限制,除其他外,它允許創建 enclave 以選擇性地限制與應用程序的某些功能相關的訪問。
過去已經有一些開發人員嘗試過這個。 我不會點名,因為這些項目中的大多數都沒有完成。 對於 SECOMP,在線教程只解釋瞭如何將系統調用列入白名單,因此大多數人在弄清楚如何過濾參數之前就失去了興趣。 向前推進的項目也有一些疏忽,比如允許更改 setuid/setgid/sticky 位。 因此,不應使用任何當前的替代方案。 我認為這種努力使我們比以往任何時候都更接近擁有承諾()。
實現不需要內核更改:實用程序約束被轉換為 SECCOMP BPF 規則並使用 Linux 的本機系統調用隔離機制進行處理。 例如,調用 promise("stdio rpath", 0) 將轉換為 BPF 過濾器
最後,如果你有興趣了解更多,可以諮詢詳情 在下面的鏈接中。