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

오픈소스 샌드박스 API (SAPI) 프로젝트는 Google의 Sandbox2 오픈소스 프로젝트를 기반으로 빌드되며 C/C++ 라이브러리의 샌드박스를 덜 받는 것을 목표로 합니다.

Sandboxed API는 세 가지 주요 이점을 제공합니다.

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

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

  • 각 SAPI 라이브러리는 보안 정책이 활용된 모든 라이브러리의 총 syscall/리소스 공간을 포함해야 하는 일반적인 샌드박스 프로젝트와 달리 엄격하게 정의된 보안 정책을 사용합니다.

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

빠른 시작

Sandboxed 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
    

사용 가능한 문서

Sandboxed API에 대한 자세한 내용은 다음에서 확인할 수 있습니다.

  • 샌드박스 API 설명 - 샌드박스 API (SAPI) 및 핵심 개념 설명

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

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

  • 변수 — 포인터를 간단한 유형 및 메모리 블록에 전달할 때 필요한 SAPI 유형을 사용하는 방법을 설명합니다.

  • 거래 — SAPI 거래 모듈을 사용하여 함수 호출을 모니터링하는 방법을 설명합니다.

용어 설명

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

Sandboxed API에 참여

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

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