오픈인프라 한국 커뮤니티 / 김관영 부회장


그로메트릭 / 김관영 대표


 




 

2. 컨테이너 이미지 취약점

 

  • 컨테이너 취약점 스캐닝(Container Vulnerability Scanning)

컨테이너가 애플리케이션을 패키징하고 배포하는 거의 보편적인 방법이 되면서, 맬웨어의 사례도 증가했습니다. 따라서, 컨테이너의 보안은 이제 DevOps 엔지니어들에게 최우선 과제가 되었습니다. 다행히도, 컨테이너와 컨테이너 이미지를 스캔할 수 있는 다수의 오픈 소스 프로그램이 있습니다. 다음은 그러한 도구 중 다섯 가지입니다.

 

컨테이너 보안 스캐닝이 할 수 있는 일:

  • 불안전한 컨테이너 감지(오래된 라이브러리 감지, 잘못 구성된 컨테이너 감지, 오래된 운영 체제 감지)
  • 컴플라이언스 검증 감지
  • 모범 사례 제안

컨테이너 보안 스캐너의 문제점:

  • 사용하는 도구에 따라 분석 깊이가 달라져, 선택한 도구의 유형에 매우 의존적인 결과를 얻게 됩니다.
  • 설정을 "너무 멀리" 가는 것이 쉬워, 너무 많은 다양한 설정을 구성할 수 있는 도구에서는 쉽게 과해질 수 있습니다.
  • 스캔 결과가 실행 가능한 이벤트로 이어지는가?

컨테이너 스캐너 사용 시기 및 장소:


[그림3. Container Security Pipeline 체크리스트(OWASP DevSecOps guideline - v-0.2)]




  • 빌드 단계에서, 예를 들어 Dockerfile을 빌딩할 때나 생성하는 결과 이미지를 볼 때 사용할 수 있습니다. 컨테이너를 레지스트리에 푸시하거나 레지스트리에서 컨테이너를 풀 할 때도 컨테이너 스캐닝을 수행할 수 있습니다. 하지만, 신뢰할 수 있는 컨테이너 레지스트리에 푸시하기 전에 스캔을 수행하는 것이 좋은 접근 방식입니다. 그렇게 하면 모든 이미지가 스캔된 버전으로 있는 신뢰할 수 있는 컨테이너 레지스트리가 있다고 말할 수 있으며, 생산에 배포할 때 이 신뢰할 수 있는 컨테이너 레지스트리에서 풀 할 수 있습니다.

도구:

  • Falco: 클라우드 네이티브 런타임 보안 프로젝트로, 사실상 쿠버네티스 위협 감지 엔진
  • Harbor: 정책과 역할 기반 접근 제어로 아티팩트를 보호하고, 이미지가 취약점
  • Clair: 컨테이너에 대한 취약점 정적 분석
  • Anchore: 도커 이미지의 심층 분석을 위한 오픈 소스 프로젝트
  • Dagda: 도커 이미지/컨테이너에 있는 알려진 취약점, 트로이 목마, 바이러스, 맬웨어 및 기타 악의적 위협을 정적 분석하는 도구이며, 도커 데몬과 실행 중인 도커 컨테이너를 모니터링하여 비정상 활동 감지

 




 

3. 컨테이너 이미지 보안 모범 사례

다음은 컨테이너 이미지 보안을 강화하기 위한 모범 사례입니다.

  • 신뢰할 수 있는 이미지 소스 사용: 공식 저장소(Dockerhub 등) 나 검증된 발행자(Red Hat Quay, Google GCR, Amazon ECR)로부터 이미지를 선택하여, 컨테이너 이미지에 취약점이나 맬웨어를 포함할 위험을 줄입니다.
  • 최소 이미지 사용: 불필요한 코드나 프로그램을 줄임으로써, 해커가 공격할 수 있는 영역(공격 표면)을 최소화합니다. 예를 들어, 웹 서버 운영에 필요하지 않은 그래픽 도구나 개발 도구가 포함된 이미지 대신, 정확히 웹 서버 운영에 필요한 컴포넌트만 포함된 이미지를 사용하는 것
  • 이미지 레이어 검증 및 스캐닝: 예를 들어 Docker 이미지는 여러 레이어로 구성되며, 이 중 하나의 레이어에 보안 취약점이 포함된 라이브러리가 있다면, 전체 이미지의 보안이 위협받을 수 있습니다. 이를 방지하기 위해, Trivy나 Clair와 같은 도구를 사용하여 정기적으로 이미지 레이어를 검증하고, 취약점 및 악성코드 문제가 발견되면 해당 라이브러리를 업데이트합니다.
  • 서명 및 검증: 이미지 서명 및 검증을 사용하여 컨테이너 이미지가 수정되지 않았으며 신뢰할 수 있는 출처에서 온 것임을 확인하는 방법으로 작성자의 비밀키로 서명을 한 것을 모두에게 공개되어 있는 공개키로 복호화를 진행하여 정말로 official 한 작성자가 이미지를 배포한 것인지 검증하는 과정
  • 보안 업데이트 적용: 컨테이너 이미지에 대한 보안 업데이트를 정기적으로 적용합니다.

Ubuntu 컨테이너 이미지에서 알려진 취약점을 해결하기 위해, 정기적으로 apt-get update && apt-get upgrade 명령을 실행하여 시스템 패키지를 최신 상태로 유지해야 합니다. 이 과정은 개발 파이프라인의 일부로 자동화되어, 새로운 이미지가 빌드될 때마다 자동으로 실행될 수 있습니다.

 




 

4. 컨테이너 이미지 보안 도구

다음은 컨테이너 이미지 보안을 관리하는 데 도움이 되는 도구입니다.

  • 컨테이너 이미지 스캐너: Trivy, Clair, Anchore 등
  • 컨테이너 이미지 서명/검증 도구(이미지가 생성, 전송, 배포되는 동안 변경되지 않았으며, 신뢰할 수 있는 소스에서 온 것임을 확인): Docker Content Trust/Notary, Cosign 등

 

Kubernetes Container 이미지 스캔 보안 툴로 많이 사용되는 예로

Trivy를 사용하여 컨테이너 이미지 보안 스캔을 수행하는 과정은 간단하면서도 강력한 보안 검사를 제공합니다. 아래는 Trivy를 사용하여 컨테이너 이미지의 취약점을 스캔하는 단계별 가이드입니다.

 

  • Trivy 수동 스캔 과정

설치: Trivy는 다양한 운영 체제에서 사용할 수 있습니다. Linux, macOS, Windows에 Trivy를 설치할 수 있으며, 또한 Docker 이미지로도 제공됩니다. 예를 들어, Linux에 설치할 경우 다음과 같은 명령어를 사용할 수 있습니다.



버전 확인: 설치가 완료되면, 다음 명령어를 통해 Trivy의 설치를 확인합니다:



스캔 명령 실행: Trivy를 사용하여 특정 컨테이너 이미지의 취약점을 스캔하려면, 다음과 같은 명령어를 실행합니다. 여기서 your_image는 스캔하고자 하는 이미지의 이름입니다



이 명령어는 your_image 컨테이너 이미지를 다운로드하고, 이미지 내의 애플리케이션 및 시스템 라이브러리에 대한 취약점을 스캔합니다.

스캔 결과 분석: 스캔이 완료되면, Trivy는 발견된 취약점의 리스트를 보고합니다. 이 보고서에는 취약점의 식별자(CVE 번호), 패키지 이름, 설치된 버전, 취약점에 대한 설명, 심각도 등의 정보가 포함됩니다.

결과 해석 및 조치: 심각도가 '높음' 또는 '긴급'으로 표시된 취약점은 우선적으로 처리해야 합니다. 취약점에 대한 보다 자세한 정보와 수정 권고 사항은 CVE 식별자를 통해 온라인에서 찾을 수 있습니다. 필요한 경우, 해당 패키지를 업데이트하거나 보안 패치를 적용하여 취약점을 해결합니다.

 

  • 추가 옵션 및 설정

자동화: Trivy는 CI/CD 파이프라인에 쉽게 통합될 수 있어, 이미지 빌드 프로세스 중 자동으로 취약점 스캔을 수행할 수 있습니다. 이는 Jenkins, GitLab, CircleCI, GitHub Actions 등 다양한 CI 도구와 함께 사용할 수 있습니다.

캐시 및 데이터베이스 업데이트: Trivy는 취약점 데이터베이스를 로컬에 캐시하며, 정확한 스캔을 위해 이 데이터베이스를 최신 상태로 유지하는 것이 중요합니다. Trivy는 실행될 때 자동으로 데이터베이스를 업데이트하지만, 수동으로 업데이트하려면 다음 명령어를 사용할 수 있습니다:



 




 

5. 맺음말

컨테이너 이미지 보안은 애플리케이션과 인프라의 안전을 보장하는 핵심 요소입니다. 신뢰할 수 있는 소스에서 이미지를 가져오고, 최소한의 구성으로 이미지를 구축하고 다양한 툴들을 이용하여 자동화하는 것이 중요합니다. 정기적인 취약점(Vulnerability, CVE) 스캔과 패치 적용을 통해 악성 코드와 구성 오류로부터 보호해야 합니다.

또한, DevSecOps(좀 더 좁혀서는 AppSec)팀의 접근 방식을 통해 보안을 개발 초기 단계부터 통합함으로써, 보안 위협에 대응하는 데 필요한 시간과 자원을 최소화할 수 있습니다. 보안은 단순한 절차가 아닌, 지속적인 프로세스로서 개발 파이프라인 전반에 걸쳐 이루어져야 합니다.

 



참 고 문 헌




  1. https://owasp.org/www-project-devsecops-guideline/latest/index
  2. https://cloud.google.com/software-supply-chain-security/docs?hl=ko
  3. https://www.alpinelinux.org/posts/

  4. https://cve.mitre.org/
  5. https://aquasecurity.github.io/trivy/v0.50/tutorials/overview/
  6. https://snyk.io/series/devsecops/8-best-practices/




저작권 정책


K-ICT 클라우드혁신센터의 저작물인 『컨테이너 이미지 보안』은 K-ICT 클라우드혁신센터에서 오픈인프라 한국 커뮤니티 김관영 부회장에게 집필 자문을 받아 발행한 전문정보 브리프로, K-ICT 클라우드혁신센터의 저작권정책에 따라 이용할 수 있습니다.
다만 사진, 이미지, 인용자료 등 제3자에게 저작권이 있는 경우 원저작권자가 정한 바에 따릅니다.