正在為 FreeBSD 開發類似於 plegde 和 Reveal 的隔離機制

對於FreeBSD,提出了應用程式隔離機制的實現,讓人聯想到OpenBSD專案開發的plegde和unveil系統呼叫。 plegde 中的隔離是透過禁止存取應用程式中未使用的系統呼叫來實現的,而 Reveal 中的隔離是透過選擇性地僅開放對應用程式可以使用的單一檔案路徑的存取來實現的。 對於應用程式來說,形成一種系統呼叫和檔案路徑白名單,禁止所有其他呼叫和路徑。

為 FreeBSD 開發的 plegde 和 Reveal 的類似物之間的區別在於提供了一個附加層,該層允許您隔離應用程序,而無需更改其代碼或只需進行最小的更改。 回想一下,在OpenBSD中,plegde和unveil旨在與底層環境緊密整合,並透過在每個應用程式的程式碼中添加特殊註解來使用。 為了簡化保護的組織,過濾器可讓您避免單一系統呼叫層級的粒度,並作業系統呼叫的類別(輸入/輸出、讀取檔案、寫入檔案、套接字、ioctl、sysctl、進程啟動等)。 當執行某些操作時,可以在應用程式程式碼中呼叫存取限制功能,例如,在開啟必要的檔案並建立網路連線後可以拒絕對套接字和檔案的存取。

FreeBSD 的 plegde 和 Unveil 連接埠的作者打算提供隔離任意應用程式的能力,為此提出了 Curtain 實用程序,它允許您將單獨檔案中定義的規則應用於應用程式。 建議的配置包括一個具有基本設定的文件,該文件定義了特定於某些應用程式的系統呼叫類別和典型文件路徑(使用聲音、網路互動、日誌記錄等),以及一個具有特定應用程式的存取規則的文件。

窗簾實用程式可用於隔離大多數未修改的實用程式、伺服器進程、圖形應用程序,甚至整個桌面會話。 Curtain 可與 Jail 和 Capsicum 子系統提供的隔離機制結合使用。 當啟動的應用程式繼承父應用程式的規則集時,也可以組織巢狀隔離,並以單獨的限制進行補充。 某些核心操作(偵錯工具、POSIX/SysV IPC、PTY)也受到屏障機制的保護,該機制可防止存取不是由當前進程或父進程創建的核心物件。

進程可以透過呼叫 Curtainctl 或使用 libcurtain 的 plegde() 和unveve() 函數來配置自己的隔離,類似於 OpenBSD 中的函數。 為了在應用程式運行時追蹤鎖定,提供了 sysctl“security.curtain.log_level”。 透過在運行curve 時指定“-X”/“-Y”和“-W”選項來分別啟用對X11 和Wayland 協議的訪問,但對圖形應用程式的支援尚未足夠穩定,並且存在許多未解決的問題(問題主要出現在使用X11時,Wayland支援實現得更好)。 使用者可以透過建立本機規則檔案(~/.curtain.conf)來新增其他限制。 例如,若要僅允許從 Firfox 寫入 ~/Downloads/ 目錄,您可以使用規則「~/Downloads/ : rw +」新增「[firefox]」部分。

此實作包括用於強制存取控制(MAC,強制存取控制)的mac_curtain 核心模組、一組用於FreeBSD 核心的補丁(其中實作了必要的處理程序和過濾器)、用於在應用程式中使用plegde 和Reveal 函數的libcurtain 庫,窗簾實用程式、範例設定檔、使用者空間中某些程式的一組測試和修補程式(例如,使用 $TMPDIR 來統一與臨時檔案的工作)。 在可能的情況下,作者打算盡量減少需要對核心和應用程式進行補丁的更改數量。

來源: opennet.ru

添加評論