開放原始碼 Sandbox API (SAPI) 專案是以 Google 的 Sandbox2 開放原始碼專案為基礎建構,目標是降低 C/C++ 程式庫的沙箱作業負擔。
Sandboxed API 提供三大優點:
使用 SAPI 可以對個別 C/C++ 程式庫執行沙箱作業,不必對整個程式套用沙箱機制,也不必變更原始碼,為程式的一部分導入沙箱。因此,使用 SAPI 時,主要程式與 C/C++ 程式庫中的程式碼執行安全漏洞隔離。
我們採取的策略為:沙箱一次,隨處使用。您可以輕鬆重複使用採用沙箱機制 API 的程式庫,減輕日後專案的負擔。在採用沙箱 API 之前,在 Google 使用沙箱機制前,必須針對要採用沙箱機制的專案每個新執行個體執行額外實作,即使該執行個體重複使用相同的軟體程式庫也一樣。套用至沙箱程序的 Sandbox2 政策和其他限制每次都必須重新實作,而且程式碼受信任與不受信任的部分之間也必須從頭開始設計資料交換機制。
相較於一般的沙箱專案,每個 SAPI 程式庫皆使用嚴格定義的安全性政策,該專案的安全性政策必須涵蓋所有所用程式庫的 syscall/資源足跡總量。
SAPI 專案是專為設計、開發及維護的 Google 沙箱團隊成員所設計。此外,這個程式庫也使用經過實證的 Sandbox2。目前,許多內部專案都使用 SAPI 區隔實際工作環境工作負載。
快速啟動
如要開始使用 Sandboxed API,請按照下列步驟操作:
- 安裝必要的依附元件 (假設您執行的是 Debian 10 Buster):
$ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" |
sudo tee /etc/apt/sources.list.d/bazel.list $ wget -qO - https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - $ sudo apt-get update $ sudo apt-get install -qy build-essential linux-libc-dev bazel python3
python3-pip libclang-7-dev $ pip3 install clang - 複製並執行建構作業:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api $ bazel build …
- 試試下列任一範例:
$ bazel run //sandboxed_api/examples/stringop:main_stringop
可用說明文件
如要進一步瞭解 Sandboxed API,請參閱:
沙箱 API 說明:說明 Sandboxed API (SAPI) 及其核心概念。
開始使用:提供指引,協助您建立自己的 API 沙箱式 API。
建構規則:說明如何使用 sapi_library() 建構規則來建構 SAPI 程式庫。
變數 — 討論將指標傳送至簡易類型和記憶體區塊時所需的 SAPI 類型。
交易:說明如何使用 SAPI 交易模組監控函式呼叫。
詞彙
Sandbox2 | Google 開放原始碼專案,提供 SAPI 中的沙箱層。 |
沙盒 | 在 Sandbox2 沙箱中執行的二進位檔,請參閱 Sandbox2 說明文件。在 SAPI 的環境中,這是採用沙箱機制的 C/C++ 程式庫。 |
API | Sandboxed API,這個 Google 開放原始碼專案提供建構沙箱程式庫的功能。 |
SAPI 程式庫 | SAPI 產生的程式庫,內含沙箱程式庫、 Sandbox2 程式碼和 SAPI 執行階段程式碼。 |
SAPI 物件 | 主機程式碼內附的 C++ 物件,為使用 SAPI 類型的沙箱資料庫提供介面,而非原始程式庫。 |
SAPI 類型 | SAPI 提供在將指標傳遞至簡易類型和記憶體區塊時所需的特殊類型。 |
SAPI 交易 | 這個模組可在每次執行時管理沙箱程式庫的沙箱狀態。 |
遠端程序呼叫 (RPC) | 包含在 Sandbox2 中的遠端程序呼叫 (RPC) 通訊虛設常式,用於在 SAPI 物件和沙箱程式庫之間傳遞資料。 |
主機程式碼 | 使用沙箱程式庫的程式碼,其中包含 SAPI 物件。 |
為 Sandboxed API 貢獻心力
如要貢獻內容,請參閱 CONTRIBUTING.md 並傳送提取要求給我們。您也可以回報錯誤或提出功能要求。
如果您想要與開發人員聯絡,或收到重大產品更新的通知,建議您加入我們的 Google 網路論壇:sandboxed-api-users。