1. 컨테이너 이미지란 무엇인가요?
컨테이너 이미지(이하 이미지)는 애플리케이션과 그 애플리케이션이 실행되기 위해 필요한 모든 것을 포함하는 소프트웨어 패키지입니다. 여기에는 애플리케이션 자체뿐만 아니라 실행에 필요한 라이브러리, 종속성, 구성 파일, 그리고 일부 운영체제(OS) 요소들이 포함되어 있습니다.
컨테이너 이미지는 계층화된 구조로 이루어져 있습니다. 이 계층 구조는 이미지가 여러 개의 레이어(layer)로 쌓여 구성되는 방식을 뜻합니다. 기본적으로 운영체제의 핵심 요소가 첫 번째 레이어에 위치하며, 그 위에 애플리케이션이 실행되는 데 필요한 각종 패키지와 라이브러리들이 더해집니다.
이러한 계층 구조 덕분에 이미지의 중복을 최소화하고 효율적인 이미지 빌드와 관리가 가능합니다. 또한 개발자는 자신이 설정한 환경에서 컨테이너 이미지 테스트를 마친 후, 운영 환경에서도 동일한 이미지를 사용할 수 있습니다. 이를 통해 개발 환경과 운영 환경에서 동일한 동작을 보장할 수 있기 때문에 운영 이슈를 줄이고 신속하게 배포할 수 있습니다.

이러한 특징 덕분에 컨테이너 이미지는 클라우드 환경뿐만 아니라 개발 환경과 배포 과정에서 폭넓게 사용되고 있습니다. 하지만 이미지 내부에는 다양한 보안 취약점이 포함될 수 있어 보안 위험이 발생할 가능성도 큽니다.
2. 컨테이너 이미지 취약점은 언제 발생하나요?
컨테이너 이미지 취약점은 이미지에 포함된 다양한 구성 요소에서 발생할 수 있으며, 이는 실제 운영 환경에서 심각한 보안 위협으로 이어질 수 있습니다.
컨테이너 이미지 내에는 운영체제, 라이브러리, 실행 파일 등이 포함되는데, 이러한 요소 중 하나라도 보안에 취약할 경우 전체 시스템의 보안이 위협받을 수 있습니다. 이미지 취약점은 주로 취약점이 존재하는 버전의 패키지 또는 오픈소스 라이브러리를 사용할 때 발생합니다.
🚨취약한 버전의 패키지 사용
이미지에서 애플리케이션이 정상적으로 실행되기 위해서는 이미지 속 운영체제 위에 설치되어야 하는 특정 패키지가 필요합니다. 개발자가 필요한 패키지들을 설치하는 과정에서 해당 패키지가 보안 취약점이 있는 버전일 경우, 빌드되는 컨테이너 이미지 또한 해당 취약점을 그대로 가지게 됩니다. 이와 같은 취약점을 가진 이미지가 실제로 어떤 보안 위협을 초래할 수 있는지 사례를 통해 조금 더 자세히 살펴보겠습니다.
– Ubuntu의 libcurl 패키지 취약점(CVE-2020-8285)
2020년에 발견된 libcurl의 취약점은 특정 버전에서 HTTP/2 프로토콜을 처리하는 과정에서 메모리 손상이 발생하는 문제를 포함하고 있습니다. 이로 인해 원격 공격자는 악성 요청을 전송하여 서비스 중단을 유도할 수 있습니다. 해당 취약점이 포함된 버전의 libcurl을 사용하는 컨테이너 이미지가 운영 환경에서 실행 중인 경우, 악성 요청으로 인해 서버의 정상적인 운영이 방해받거나 서비스를 제공하지 못하는 상황이 발생할 수 있습니다.
– Debian의 gnupg 패키지 취약점(CVE-2021-3931)
CVE-2021-3931은 Debian 기반 시스템에서 사용되는 gnupg 패키지의 취약점입니다. 이 취약점은 gnupg가 암호화된 메시지를 처리할 때 메모리 오류를 일으키는 문제를 포함하고 있습니다. 이로 인해 공격자가 실행 중인 컨테이너 운영 환경에 악성 데이터를 주입하거나 서비스를 중단시킬 수 있습니다.
🚨취약한 버전의 라이브러리 사용
컨테이너 이미지에서 실행되는 서비스가 포함하고 있는 라이브러리 역시 보안 취약점을 가질 수 있습니다. 취약한 라이브러리를 포함한 이미지는 컨테이너 운영 환경에서 보안 위협으로 작용합니다. 이미지 속에서 실행될 서비스를 개발하는 과정에서 오픈소스 라이브러리를 사용할 때에는 해당 버전에 알려진 취약점이 존재하는지 확인한 후 사용해야 합니다.
오픈소스는 전 세계적으로 활발히 개발되고 사용되지만, 보안 취약점이 발견될 경우 광범위한 영향을 미칠 수 있습니다. 예를 들어 특정 라이브러리에서 발견된 취약점이 패치되기 전까지 많은 이미지에 해당 라이브러리가 포함될 수 있으며, 이를 공격자가 악용할 경우 심각한 결과를 초래할 수 있습니다. 이러한 취약점은 컨테이너 내에서 실행되는 애플리케이션에 영향을 미쳐 전체 시스템에 대한 공격 가능성을 높입니다.
3. 컨테이너 이미지 취약점을 검출하는 방법, 컨테이너 이미지 분석
앞서 설명드린 것처럼 컨테이너 이미지는 개발과 운영의 일관성을 제공하는 강력한 도구이지만, 그 내부에 보안 취약점이 내재될 수 있습니다. 이러한 상황을 방지하기 위해서는 컨테이너 이미지 분석을 통해 잠재적인 보안 위협을 사전에 식별하고 차단하여 안전하고 신뢰할 수 있는 이미지를 구축하는 것이 중요합니다.
컨테이너 이미지 분석은 이미지를 운영 환경에 배포하기 전이나 배포한 이후에도 지속적으로 이미지 내부의 구성 요소를 점검하는 과정입니다. 이미지를 분석하는 주요 목적은 이미지에 포함된 패키지, 라이브러리, 운영체제 구성 요소 등의 보안 취약점을 사전에 발견하고, 이를 기반으로 적절한 대응 조치를 취하는 데 있습니다. 취약점이 발견된 패키지나 라이브러리에 대한 대응 방법으로는 취약점이 해결된 버전으로 업데이트하여 사용하거나, 해결된 버전이 존재하지 않는다면 대체 패키지나 라이브러리를 사용하는 방법도 고려할 수 있습니다.
컨테이너 이미지 분석이 중요한 또 다른 이유는 단순한 취약점 탐지를 넘어 지속적인 보안 관리를 가능하게 한다는 점입니다. 보통 컨테이너 이미지는 한 번 빌드되고 끝나는 것이 아니라 계속해서 업데이트되고 재배포되기 때문에, 지속적인 분석을 통해 새로운 보안 취약점이 발견되면 즉각적으로 대응해야 합니다. 보안 위협을 최소화하기 위해서는 컨테이너 이미지 분석 결과를 확인하여 보안 이슈를 사전에 해결하고, 안전한 이미지만 운영 환경에 배포되도록 해야 합니다.
지금까지 컨테이너 이미지 취약점과 컨테이너 이미지 분석 방법에 대해 살펴봤습니다. 오픈소스 관리 도구인 Sparrow SCA에서는 컨테이너 이미지 분석 기능을 제공합니다. 이미지의 레이어별 구성 요소를 분석하여 운영체제 위에 설치된 패키지와 애플리케이션에 포함된 의존성 등 컴포넌트 정보를 추출한 후, 이를 취약점 데이터베이스와 대조해 알려진 취약점이 있는지를 확인합니다. 또한 각 컴포넌트에 취약점이 존재하는 경우 해당 취약점의 CVSS 점수, 영향받는 버전 목록, 취약점 해결을 위한 조치 방안을 제공하여 사용자가 대응해야 할 취약점을 쉽게 식별하고 대응할 수 있도록 도와줍니다.
Sparrow SCA를 활용해 컨테이너 이미지 취약점을 사전에 점검하고 안전하게 컨테이너를 활용하세요.
