幾天前 谷歌宣布開放沙盒API項目該 允許您自動創建沙箱的過程,以隔離執行任意 C 和 C++ 庫。
將代碼與庫隔離 允許防止對庫提供的處理程序可能發生的攻擊,創建一個額外的屏障,以防您的代碼中存在可通過操縱進入庫的外部數據而被利用的漏洞。 該代碼是在 Apache 2.0 許可證下開源的。
隔離或者是在 sandbox2 運行時內部使用完成的,其中使用了命名空間、cgroups 和 seccomp-bpf。
代碼交付到在單獨進程中運行的沙箱,用於訪問系統調用和資源以及文件和網絡連接都是有限的。
進程只能訪問運行隔離代碼直接所需的系統功能。
Sandbox2定義了運行進程的組件或者,對其應用隔離規則並支持後續執行。
沙盒2 它可以與 Sandbox API 分開使用,不僅可以隔離庫,還可以隔離任意進程。
除了增強保護之外,在單獨進程中刪除代碼的一個積極點是可以單獨調節庫和 CPU 的內存消耗限制,以及針對故障的保護:庫中的故障不會導致整個應用程序崩潰。
關於沙盒 API
Sandboxed API是Sandbox2的插件 這使得可以輕鬆傳輸現有庫以在隔離模式下運行。
沙盒 API 提供中間件接口,允許您在沙箱環境中運行庫代碼,以及在沙箱環境中組織對庫的調用,並保證將庫的結果傳遞給主程序。
Se 通過基於ProtoBuffs協議的專門RPC訪問隔離庫。
A 為庫開發人員提供了一組允許訪問變量的選項、文件描述符、緩衝區和與基本應用程序隔離的庫函數,包括用於自動和受控內存同步以共享數組和結構的工具。
當解析此類數據的軟件庫足夠複雜時,它可能會成為某些類型的安全漏洞的受害者:內存損壞錯誤或與解析邏輯相關的其他類型的問題(例如,路徑遍歷問題)。 這些漏洞可能會產生嚴重的安全影響。
另外, 提供 API 來監視隔離進程的操作並在發生故障時重新啟動它們。
對於隔離庫,會自動為 Bazel 彙編系統和程序接口(SAPI)生成隔離函數的註釋代碼,用於基本流程和隔離流程之間的交互。
開發人員還必須創建一個包含隔離規則的頭文件,用於定義所有允許的系統調用和操作。 (讀、寫、打開文件、時間訪問、安裝信號處理程序的能力、通過 malloc 支持內存分配等)。
庫應有權訪問的文件和目錄是單獨確定的。
安裝
目前,該項目僅適用於 Linux,但將來他們承諾增加對 macOS 和 BSD 系統的支持,並且從長遠來看 - 以及對 Windows 的支持。 是的 如果你想安裝沙盒 api,你可以按照給出的說明進行操作 在此鏈接中。
計劃中還指出 隔離 C 和 C++ 以外語言的庫的可能性, 額外的運行時隔離支持 (例如基於硬件虛擬化)以及使用 CMake 和其他構建系統的能力(支持現在僅限於 Bazel 構建系統)。
來源: https://security.googleblog.com