샌드박스 API란 무엇인가요?

오픈소스 샌드박스 처리된 API (SAPI) 프로젝트는 Google의 Sandbox2 오픈소스 프로젝트를 기반으로 하며 C/C++ 라이브러리의 샌드박싱을 덜 부담스럽게 만드는 것을 목표로 합니다.

샌드박스 API는 다음과 같은 세 가지 주요 이점을 제공합니다.

  • 전체 프로그램을 샌드박싱하거나 Sandbox2와 같이 프로그램의 일부를 샌드박싱하기 위해 소스 코드를 변경해야 하는 대신 SAPI를 사용하면 개별 C/C++ 라이브러리를 샌드박싱할 수 있습니다. 따라서 SAPI를 사용하면 기본 프로그램이 C/C++ 라이브러리의 코드 실행 취약성으로부터 격리됩니다.

  • Google의 작업 모토는 한 번 샌드박스 처리하면 어디서나 사용할 수 있다입니다. 샌드박스 처리된 API로 샌드박스 처리된 라이브러리는 쉽게 재사용할 수 있으므로 향후 프로젝트의 부담이 줄어듭니다. 샌드박스 API 이전에는 샌드박스에 포함될 프로젝트의 새 인스턴스마다 동일한 소프트웨어 라이브러리를 재사용하더라도 추가 구현 작업이 필요했습니다. 샌드박스 처리된 프로세스에 적용된 Sandbox2 정책과 기타 제한사항을 매번 다시 구현해야 했고, 신뢰할 수 있는 코드 부분과 신뢰할 수 없는 코드 부분 간의 데이터 교환 메커니즘을 처음부터 설계해야 했습니다.

  • 각 SAPI 라이브러리는 긴밀하게 정의된 보안 정책을 활용합니다. 보안 정책이 사용된 모든 라이브러리의 총 시스템 호출/리소스 사용 공간을 포괄해야 하는 일반적인 샌드박스 프로젝트와는 대조적입니다.

SAPI 프로젝트는 Google 샌드박스팀의 구성원이 설계, 개발, 유지관리합니다. 또한 필드에서 테스트한 Sandbox2도 사용합니다. 현재 많은 내부 프로젝트에서 SAPI를 사용하여 프로덕션 워크로드를 격리하고 있습니다.

빠른 시작

샌드박스 API를 시작하려면 다음 단계를 따르세요.

  1. 필수 종속 항목을 설치합니다 (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
  2. 빌드를 클론하고 실행합니다.
    $ git clone https://github.com/google/sandboxed-api && cd sandboxed-api
    $ bazel build 
  3. 중 하나를 사용해 보세요.
    $ bazel run //sandboxed_api/examples/stringop:main_stringop

사용 가능한 문서

샌드박스 API에 관한 자세한 내용은 다음을 참고하세요.

  • 샌드박스 API 설명 - 샌드박스 API (SAPI)와 핵심 개념을 설명합니다.

  • 시작하기 - API의 자체 SAPI 샌드박스 버전을 만드는 데 도움이 되는 안내를 제공합니다.

  • 빌드 규칙 - sapi_library() 빌드 규칙을 사용하여 SAPI 라이브러리를 빌드하는 방법을 설명합니다.

  • 변수 - 포인터를 단순 유형 및 메모리 블록에 전달할 때 필요한 SAPI 유형 사용에 대해 설명합니다.

  • 트랜잭션 - SAPI 트랜잭션 모듈을 사용하여 함수 호출을 모니터링하는 방법을 설명합니다.

용어 설명

Sandbox2 SAPI에서 샌드박스 레이어를 제공하는 Google 오픈소스 프로젝트입니다.
Sandboxee Sandbox2 샌드박스에서 실행되는 바이너리입니다. Sandbox2 문서를 참고하세요. SAPI 컨텍스트에서 이는 샌드박스 처리된 C/C++ 라이브러리입니다.
SAPI 샌드박스 처리된 라이브러리를 빌드하는 기능을 제공하는 Google 오픈소스 프로젝트인 샌드박스 처리된 API
SAPI 라이브러리 샌드박스 처리된 라이브러리, Sandbox2 코드, SAPI 런타임 코드를 포함하는 SAPI에 의해 생성된 라이브러리입니다.
SAPI 객체 원래 유형 대신 SAPI 유형을 사용하여 샌드박스 라이브러리에 인터페이스를 제공하는 호스트 코드에 포함된 C++ 객체입니다.
SAPI 유형 SAPI는 포인터를 간단한 유형과 메모리 블록에 전달할 때 필요한 특수 유형을 제공합니다.
SAPI 거래 실행 간에 샌드박스 처리된 라이브러리의 샌드박스 상태를 관리하는 데 사용되는 모듈입니다.
RPC 스텁 Sandbox2로 래핑되고 SAPI 객체와 샌드박스 처리된 라이브러리 간에 데이터를 전달하는 데 사용되는 리모트 프로시져 콜 (RPC) 통신 스텁
호스트 코드 샌드박스 처리된 라이브러리를 사용하고 SAPI 객체를 포함하는 코드입니다.

샌드박스 API에 기여

참여하려면 CONTRIBUTING.md를 읽고 풀 요청을 보내주세요.버그를 신고하거나 기능 요청을 제출할 수도 있습니다.

개발자와 소통하거나 주요 제품 업데이트에 대한 알림을 받으려면 Google 그룹 sandboxed-api-users에 가입하세요.