신뢰할 수 없는 코드 샌드박스는 소스 코드에 액세스할 수 없거나 소스 코드 평가를 수행할 리소스가 없는 타사 개발 소프트웨어를 사용해야 하는 경우에 유용합니다. 샌드박스는 자체 코드를 위한 추가 보안 경계로도 유용할 수 있습니다.
사용 사례에 따라 코드 포함에 다른 도구를 사용할 수 있습니다. 아래 표에는 여러 제품에 관한 개요와 관련 사용 사례가 나와 있습니다. 이러한 제품 중 일부는 Google 내에서 사용되고 Google 엔지니어가 개발하였습니다.
샌드박스2와 샌드박스 API는 Google 보안팀의 샌드박스 부문에서 개발한 두 제품입니다.
제품 | 설명 | 사용 사례 |
---|---|---|
샌드박스2 | 네임스페이스, 리소스 한도, seccomp-bpf syscall 필터를 사용하는 Linux 샌드박스 샌드박스 처리된 API에 기본 샌드박스 기술을 제공합니다. | 일반 샌드박스 |
gVisor | 애플리케이션 커널 내에서 시스템 호출을 구현합니다. ptrace 또는 하드웨어 가상화를 사용하여 시스템 호출을 가로챕니다. | 일반 샌드박스 |
버블랩 | 사용자 네임스페이스의 하위 집합으로 구현된 샌드박스 도구 Flatpak과 같은 실행 엔진으로 사용됩니다. | CLI 도구 |
미니실 | ChromeOS 및 Android에서 사용되는 샌드박스 및 포함 도구입니다. 다른 프로그램 및 코드를 실행하고 샌드박스로 실행하는 데 사용할 수 있는 실행 파일과 라이브러리를 제공합니다. | CLI 도구 |
NSJail | 네임스페이스, 리소스 한도, seccomp-bpf syscall 필터를 사용하여 Linux에서 프로세스를 격리합니다. 필요한 경우 커스텀 도메인별 언어인 Kafel을 활용하여 syscall 정책을 지정할 수 있습니다. | CLI 도구 |
샌드박스 API | 샌드박스2를 사용한 C/C++ 라이브러리용 재사용 가능한 샌드박스 | C/C++ 코드 |
네이티브 클라이언트 | 지원 중단됨
x86 (NaCl)/LLVM 바이트 코드 (PNaCl)의 제한된 하위 집합으로 컴파일하여 C/C++ 바이너리를 샌드박스화하는 강력한 기술입니다. Google의 후임자 (WebAssembly) 설계에 영향을 미쳤으며 대체했습니다. |
C/C++ 코드 |
WebAssembly (WASM) | 휴대용 바이너리의 바이너리 형식입니다. WASM 모듈은 격리된 런타임 환경에서 실행됩니다. | C/C++ 코드 |
RLBox | Native Client, WebAssembly 또는 원격 프로세스와 같은 다양한 실행 백엔드를 사용할 수 있는 샌드박스 API (C++17로 작성됨). | C/C++ 코드 |
Flatpak | 버블랩을 기반으로 빌드된 Linux 데스크톱 애플리케이션용 샌드박스입니다. 네이티브 앱 패키징과 배포에 중점을 둡니다. | 데스크톱 애플리케이션 |
샌드박스2
샌드박스2는 Linux용 오픈소스 C++ 보안 샌드박스입니다. 샌드박스2를 사용하면 런타임 환경을 정품 작업에 필요한 최소 수준으로 제한하여 잠재적인 코드 실행 취약점의 영향을 제한할 수 있습니다.
샌드박스2는 C/C++로 작성된 전체 프로그램 또는 프로그램의 일부를 샌드박스하는 데 사용할 수 있습니다.
Sandboxed API
샌드박스 처리된 API (SAPI)는 C/C++ 라이브러리를 샌드박스화하는 오픈소스 프로젝트입니다. 샌드박스 처리된 API로 샌드박스 처리된 라이브러리는 쉽게 재사용할 수 있으므로 향후 프로젝트에 대한 부담이 사라집니다. 샌드박스 처리된 API 이전에는 Google에서 사용할 수 있는 샌드박스에서 동일한 소프트웨어 라이브러리를 재사용했더라도 샌드박스로 의도된 프로젝트의 새 인스턴스마다 추가 구현 작업이 필요했습니다. 샌드박스 처리된 프로세스에 적용되는 샌드박스2 정책 및 기타 제한사항은 매번 다시 구현되어야 하며 코드의 신뢰할 수 있는 부분과 신뢰할 수 없는 부분 간의 데이터 교환 메커니즘을 처음부터 설계해야 합니다.