沙箱 2 說明

Sandbox2 的設計是以廣為人知的技術、政策架構以及兩種程序: Sandbox Executor 和 Sandboxee。

涉及的技術

以下各節介紹為 Sandbox2 建構基礎層的技術。

Linux 命名空間

Linux 命名空間會嘗試提供作業系統層級的虛擬化功能。雖然許多使用者空間看起來會獨立執行,但共用一個核心執行個體。Sandbox2 使用以下類型的命名空間:

  • 處理序間通訊 (IPC)
  • 網路 (除非呼叫 PolicyBuilder::AllowUnrestrictedNetworking() 已明確停用)
  • 掛接 (使用檔案系統樹狀結構的自訂檢視畫面)
  • PID
  • 使用者 (除非呼叫 PolicyBuilder::AllowUnsafeKeepCapabilities() 明確停用)
  • UTS

如要進一步瞭解 Linux 命名空間,請前往 Wikipedia 或相關手冊頁面。

處理序間通訊 (IPC)

「 Sandbox2」允許在 Sandbox Executor 與不受信任的 Sandboxee 之間交換任意資料。支援 Type-Length-Value (TLV) 訊息,透過權杖與控制點傳送檔案描述元,以及憑證交換。

Seccomp-BPF

Sandbox2 採用 seccomp-bpf,這是安全運算模式 (seccomp) 的擴充功能,允許使用 Berkeley 封包篩選器 (BPF) 規則篩選系統呼叫。

seccomp 是 Linux kernel 設施,會限製程序的系統呼叫僅允許 exitsigreturnreadwrite。如果有程序嘗試執行其他 syscall,就會終止。seccomp-bpf 擴充功能比 seccomp 更有彈性。seccomp-bpf 不會允許一組固定的 syscall,並根據程式的傳回值執行 BPF 程式,並視程式的回傳值執行 BPF 程式,並視程式的傳回值執行系統呼叫、終止程序並傳回虛擬值、終止程序、產生訊號或通知追蹤程式。

Ptrace

ptrace (程序追蹤) Syscall 所提供的功能可讓追蹤器程序觀測及控制追蹤程序的執行。附加追蹤記錄後,追蹤程式程序可完全控管追蹤記錄。如要進一步瞭解 ptrace,請前往維基百科或相關手冊網頁。

沙箱政策

沙箱政策是沙箱中最重要的部分,因為它會指定沙箱可以和不能執行的動作。沙箱政策包含 2 個部分:

  • Syscall 政策
  • 命名空間設定

預設 Syscall 政策

預設政策會封鎖一律危險的系統呼叫,且優先順序高於使用者提供的延伸政策。

延伸 Syscall 政策

您可以使用我們的 PolicyBuilder 類別建立擴充系統呼叫政策。此類別定義了許多便利規則 (例如 AllowStaticStartupAllowDynamicStartupAllowOpen),可用於改善政策的可讀性。

如果您想進一步限制系統呼叫或需要更複雜的規則,可以使用 AddPolicyOnSyscallAddPolicyOnSyscalls 指定原始 BPF 巨集。crc4 範例會利用這項機制來限制 readwriteclose 系統呼叫的引數。

一般來說,沙箱政策越嚴格,就越容易受到政策中任何安全漏洞的濫用。如果您能夠確切指定在程式正常運作所需的系統呼叫和引數,那麼利用程式碼執行安全漏洞的所有攻擊者也必須遵守相同的限制。

嚴謹的沙箱政策可以拒絕所有系統呼叫,但標準輸入和輸出檔案描述元無法讀取和寫入。在這個沙箱中,程式可能會接收、處理並傳回輸出內容。但如果程序嘗試發出其他 Sys 呼叫,就會因為違反政策而終止。因此,如果程序遭駭 (由惡意使用者執行程式碼),執行過程就不能比產生錯誤輸出內容更害怕 (執行程式和其他人員仍需正確處理)。

命名空間設定

PolicyBuilder 物件也用來設定沙箱的檔案系統個別檢視畫面。單一檔案 (AddFile / AddFileAt)、整個目錄 (AddDirectory / AddDirectoryAt) 和暫存儲存空間 (AddTmpfs) 可以對應到沙箱的環境。此外,AddLibrariesForBinary 可用來自動對應指定動態連結執行檔所需的所有程式庫。

指令列旗標

您可以指定下列其中一個指令列旗標,藉此停用所有 Sandbox2 政策。這些旗標用於測試用途 (例如在修正「延伸服務水準協議」時)。

  • --sandbox2_danger_danger_permit_all
  • --sandbox2_danger_danger_permit_all_and_log

沙箱執行程式

Sandbox Executor 是並未採用沙箱機制的程序。這是附加至 Sandboxee (ptrace 追蹤記錄程序) 的 ptrace 追蹤記錄程序。Sandbox Executor 也會設定並執行 Monitor 執行個體,用來追蹤 Sandboxee 並提供狀態資訊。

Sandbox2 允許三種執行模式:獨立、 Sandbox2 Forkserver 和自訂 Forkserver。如果您使用分支伺服器,系統會建立 Sandboxee 做為 Sandbox Executor 的子項程序。這裡將詳細說明這些模式。

沙盒

沙箱是在受限制的沙箱環境中執行的程序,該環境是由「沙箱政策」所定義。Sandbox Executor 透過 IPC 將政策傳送給沙箱。接著,沙箱套用政策。除非另有設定,否則任何違反政策的情況都將導致程序終止 (請參閱沙箱政策)。