Dự án Sandboxed API (SAPI) nguồn mở được xây dựng dựa trên dự án nguồn mở Sandbox2 của Google và nhằm mục đích giảm bớt gánh nặng khi tạo hộp cát cho các thư viện C/C++.
API Hộp cát mang lại 3 lợi ích chính:
Thay vì đưa toàn bộ chương trình vào hộp cát hoặc phải thay đổi mã nguồn để có thể đưa một phần của chương trình vào hộp cát như với Sandbox2, bạn có thể đưa các thư viện C/C++ riêng lẻ vào hộp cát bằng SAPI. Do đó, với SAPI, chương trình chính sẽ được tách biệt khỏi các lỗ hổng thực thi mã trong thư viện C/C++.
Phương châm làm việc của chúng tôi là: Chỉ cần thử nghiệm một lần, sử dụng ở mọi nơi. Bạn có thể dễ dàng sử dụng lại các thư viện được đưa vào hộp cát bằng Sandboxed API, nhờ đó giảm bớt gánh nặng cho các dự án trong tương lai. Trước khi có Sandboxed API, các hộp cát có thể sử dụng tại Google yêu cầu thêm công việc triển khai với mỗi phiên bản mới của một dự án dự kiến sẽ được đưa vào hộp cát, ngay cả khi dự án đó sử dụng lại cùng một thư viện phần mềm. Các chính sách Sandbox2 và những hạn chế khác được áp dụng cho quy trình trong hộp cát phải được triển khai lại mỗi lần, đồng thời các cơ chế trao đổi dữ liệu giữa các phần đáng tin cậy và không đáng tin cậy của mã phải được thiết kế từ đầu.
Mỗi thư viện SAPI đều sử dụng một chính sách bảo mật được xác định chặt chẽ, trái ngược với dự án hộp cát thông thường, trong đó các chính sách bảo mật phải bao gồm tổng số dấu vết syscall/tài nguyên của tất cả các thư viện được sử dụng.
Dự án SAPI được thiết kế, phát triển và duy trì bởi các thành viên của Nhóm Hộp cát của Google. Nó cũng sử dụng Sandbox2 đã được thử nghiệm thực tế của chúng tôi. Hiện tại, nhiều dự án nội bộ đang sử dụng SAPI để tách biệt các khối lượng công việc sản xuất.
Bắt đầu nhanh
Để bắt đầu sử dụng Sandboxed API, hãy làm theo các bước sau:
- Cài đặt các phần phụ thuộc bắt buộc (giả sử bạn đang chạy 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 - Sao chép và chạy bản dựng:
$ git clone https://github.com/google/sandboxed-api && cd sandboxed-api $ bazel build …
- Hãy thử một trong các ví dụ:
$ bazel run //sandboxed_api/examples/stringop:main_stringop
Tài liệu hiện có
Bạn có thể xem thêm thông tin về Sandboxed API tại đây:
Giải thích về API Hộp cát – Mô tả API Hộp cát (SAPI) và các khái niệm cốt lõi của API này.
Bắt đầu – Cung cấp hướng dẫn giúp bạn tạo phiên bản hộp cát SAPI của riêng một API.
Tạo quy tắc – Giải thích cách sử dụng quy tắc tạo sapi_library() để tạo Thư viện SAPI.
Biến – Thảo luận về việc sử dụng Các loại SAPI cần thiết khi truyền con trỏ đến các loại đơn giản và khối bộ nhớ.
Giao dịch – Giải thích cách sử dụng mô-đun Giao dịch SAPI để theo dõi các lệnh gọi hàm.
Bảng thuật ngữ
Sandbox2 | Dự án nguồn mở của Google cung cấp lớp hộp cát trong SAPI. |
Sandboxee | Tệp nhị phân thực thi trong hộp cát Sandbox2, hãy xem tài liệu Sandbox2. Trong ngữ cảnh của SAPI, đây là thư viện C/C++ được đưa vào hộp cát. |
SAPI | API Hộp cát, dự án nguồn mở của Google cung cấp chức năng để tạo Thư viện hộp cát. |
Thư viện SAPI | Thư viện do SAPI tạo, chứa Thư viện trong hộp cát, mã Sandbox2 và mã thời gian chạy SAPI. |
Đối tượng SAPI | Đối tượng C++, có trong Mã máy chủ, cung cấp một giao diện cho Thư viện hộp cát bằng cách sử dụng Các loại SAPI thay vì các loại ban đầu. |
Các loại SAPI | SAPI cung cấp các loại đặc biệt cần thiết khi truyền con trỏ đến các loại đơn giản và khối bộ nhớ. |
Giao dịch SAPI | Một mô-đun dùng để quản lý trạng thái hộp cát của Thư viện trong hộp cát giữa các lần chạy. |
RPC Stub | Stub giao tiếp Lệnh gọi thủ tục từ xa (RPC) được bao bọc trong Sandbox2 và dùng để truyền dữ liệu giữa Đối tượng SAPI và Thư viện trong hộp cát. |
Mã dành cho người tổ chức | Mã sử dụng Thư viện trong hộp cát và bao gồm Đối tượng SAPI. |
Đóng góp cho Sandboxed API
Nếu bạn muốn đóng góp, vui lòng đọc CONTRIBUTING.md và gửi cho chúng tôi yêu cầu kéo.Bạn cũng có thể báo cáo lỗi hoặc gửi yêu cầu về tính năng.
Nếu muốn trao đổi với các nhà phát triển hoặc nhận thông báo về các bản cập nhật lớn của sản phẩm, bạn có thể tham gia Nhóm Google của chúng tôi: sandboxed-api-users.