[마이크로서비스 취약성 최소화] 컨테이너 샌드박싱: gVisor

IMKUNYOUNG·2024년 6월 27일
0

CKS

목록 보기
53/70
post-thumbnail

컨테이너화된 애플리케이션의 보안을 강화하기 위해 구글에서 제공하는 gVisor에 대해 살펴보겠습니다. 이 글에서는 컨테이너 샌드박싱을 달성하기 위한 대체 기술들을 검토하고, gVisor가 어떤 방식으로 작동하며 이를 통해 어떻게 보안을 강화하는지에 대해 설명합니다.

리눅스 커널의 복잡성과 보안 문제

리눅스 커널은 매우 복잡하게 설계되어 있어 거의 모든 애플리케이션을 구동할 수 있습니다. 넷플릭스 비디오를 스트리밍하는 컴퓨터부터 달로 향하는 로켓까지 다양한 작업을 수행할 수 있습니다. 이는 애플리케이션이 수천 가지의 시스템 호출을 통해 다양한 작업을 수행할 수 있도록 하며, 필요에 따라 추가적인 권한과 기능도 제공합니다.

하지만 이러한 기능적 유연성은 보안 측면에서 큰 문제가 될 수 있습니다. 커널과 직접 상호 작용할 수 있는 애플리케이션은 공격 표면이 넓어지며, 기존의 보안 문제를 악용하거나 새로운 취약점을 발견할 가능성이 높아집니다. 예를 들어, Dirty COW와 같은 익스플로잇을 통해 공격자는 호스트 시스템에 침입하여 심각한 피해를 줄 수 있습니다.

기존의 보안 도구들

이전 강의에서는 SECCOMP와 AppArmor와 같은 도구를 사용하여 블랙리스트와 화이트리스트 규칙을 만들어 컨테이너가 수행할 수 있는 작업을 허용하거나 차단하는 방법을 논의했습니다. 하지만 우리의 핵심 문제는 애플리케이션이 동일한 운영 체제, 특히 동일한 커널과 거의 직접적으로 상호 작용한다는 것입니다. 우리는 컨테이너와 운영체제 또는 커널 사이의 격리 수준을 향상시키는 방법이 필요합니다.

gVisor 소개

gVisor는 구글에서 제공하는 도구로, 컨테이너와 커널 사이에 추가적인 격리 계층을 제공합니다. 이를 통해 컨테이너가 리눅스 커널에 직접 시스템 호출을 하지 못하도록 하고, 대신 gVisor에 호출을 하게 합니다. gVisor는 컨테이너와 커널 사이에 위치하여 잠재적인 악용을 방지하는 중간자 역할을 합니다.

gVisor의 주요 구성 요소

gVisor 샌드박스는 두 가지 주요 구성 요소로 이루어져 있습니다:

  1. Sentry: Sentry는 컨테이너화된 애플리케이션이 수행하는 시스템 호출을 가로채고 이에 응답하는 독립적인 애플리케이션 레벨 커널입니다. 이는 실제 리눅스 커널보다 훨씬 적인 기능을 지원하여 공격자가 악용할 수 있는 결함의 가능성을 줄여줍니다.

  2. Gofer: Sentry는 파일 접근을 직접 처리하지 않고, Gofer라는 전용 프로세스를 통해 파일 접근을 처리합니다. Gofer는 파일 프록시 역할을 하여 컨테이너화된 애플리케이션이 시스템 파일에 접근하는 데 필요한 로직을 구현합니다.

gVisor의 격리 메커니즘

gVisor는 컨테이너와 운영 체제 사이의 추가적인 보호 계층을 제공하여 격리를 강화합니다. 네트워크 작업에 대해서도 gVisor는 자체 네트워크 스택을 사용하여 네트워크 작업이 컨테이너가 운영 체제의 네트워크 코드와 직접 상호 작용하지 않고도 수행될 수 있게 합니다.

가장 중요한 점은 각 컨테이너가 자체 가상화된 샌드박스 내에 격리되어 있다는 것입니다. 이는 하나의 컨테이너에서 발생하는 문제가 다른 컨테이너에 영향을 미치지 않도록 합니다.

성능과 호환성의 trade-off

모든 보안 조치는 대가를 치러야 합니다. gVisor의 경우, 모든 애플리케이션이 gVisor와 함께 작동하지 않을 수 있으며, 각 애플리케이션을 테스트해봐야 합니다. 또한, 시스템 호출이 중간자를 통해 수신 및 처리되기 때문에 CPU가 더 많은 명령을 처리해야 하므로 전통적인 컨테이너에 비해 애플리케이션이 약간 느려질 수 있습니다.

마무리

gVisor는 컨테이너와 운영 체제 사이에 추가적인 격리 계층을 제공하여 보안을 강화하는 강력한 도구입니다. 이를 통해 리눅스 커널의 복잡성에서 기인하는 보안 문제를 완화하고, 컨테이너화된 환경에서 더욱 안전하게 애플리케이션을 실행할 수 있습니다.

0개의 댓글