샌드박스(sandbox)란 외부로부터 들어온 프로그램이 보호된 영역에서 동작해 시스템이 부정하게 조작되는 것을 막는 보안 형태이다.
이는 외부로부터 유입되는 악성코드로부터 시스템 내 파일이나 프로세스를 보호하는 데 사용한다. 샌드박스에서 실행되어 안전하다고 검증받은 파일이나 작업은 시스템 변경이 가능하지만, 허용하지 않은 경우에는 변경할 수 없다.
기술적으로 설명하면, 외부로부터 들어온 프로그램이나 실행 파일을 가상화 내부에서 시험적으로 동작시켜봄으로써 가상화 밖으로는 영향을 주지 않는다. 한 마디로 가상화 기술을 악성행위나 악성코드 감지 시스템에 적용한, 보안 가상화의 일종이다.
개요
Pod의 컨테이너가 알 수 없거나 신뢰할 수 없는 코드를 실행할 때 GKE Sandbox를 사용하여 노드의 호스트 커널을 보호한다. 예를 들어 Software as a Service(SaaS) 제공업체와 같은 멀티 테넌트 클러스터는 사용자가 제출한 알 수 없는 코드를 실행하는 경우가 많다. GKE Sandbox는 신뢰할 수 없는 코드가 클러스터 노드의 호스트 커널에 영향을 미치지 않도록 차단하는 부가적인 보안 레이어를 제공한다.
위협
컨테이너 런타임이나 호스트 커널의 결함으로 인해 컨테이너 내에서 실행되는 프로세스가 컨테이너를 벗어나 노드의 커널에 영향을 미치고 잠재적으로 노드를 다운시킬 수 있다. 악의적인 테넌트가 이러한 결함을 악용하여 메모리나 디스크에 있는 다른 테넌트의 데이터에 액세스하고 추출할 수 있다. 마지막으로, 신뢰할 수 없는 워크로드가 다른 Google Cloud 서비스나 클러스터 메타데이터에 액세스할 가능성이 있다.
GKE Sandbox가 이러한 위협을 완화하는 방법
GKE Sandbox는 오픈소스 프로젝트인 gVisor를 사용한다. gVisor는 승격된 권한이 필요 없는, Linux 커널 API의 사용자 공간 재구현이다. 사용자 공간 커널은 containerd와 같은 컨테이너 런타임과 함께 대부분의 시스템 호출을 다시 구현하고 호스트 커널을 대신하여 서비스한다. 호스트 커널 직접 액세스는 제한된다. 노드 풀에서 GKE Sandbox를 사용 설정하면 해당 노드 풀의 노드에서 실행되는 각 Pod에 대해 샌드박스가 생성된다. 또한 샌드박스 처리된 Pod를 실행하는 노드는 다른 Google Cloud 서비스나 클러스터 메타데이터에 액세스할 수 없다. 각 샌드박스는 자체 사용자 공간 커널을 사용한다. 이를 감안하여 필요한 격리 수준과 애플리케이션의 특성에 따라 컨테이너를 Pod로 그룹화할 방법을 결정할 수 있다.