컨테이너(AKS) 환경의 취약점, 어떻게 진단해야 할까?
클라우드 네이티브 시대의 중심에는 컨테이너 기술이 있습니다. 하지만 기존의 가상머신(VM) 환경에서 사용하던 보안 점검 방식은 더 이상 컨테이너 환경에 유효하지 않습니다. 서버에 접속해서 스크립트를 실행하던 방식으로는 복잡하고 동적인 컨테이너 생태계의 보안을 책임질 수 없습니다.
그렇다면 컨테이너, 특히 AKS(Azure Kubernetes Service)와 같은 관리형 쿠버네티스 환경에서는 취약점 진단을 어떻게 현대화해야 할까요? 핵심은 “Shift-Left”, 즉 개발 초기 단계부터 보안을 내재화하고 전체 라이프사이클에 걸쳐 자동화된 검증을 수행하는 것입니다.
이 글에서는 컨테이너 환경의 취약점 진단을 빌드(Build) - 배포(Ship) - 실행(Run) 3단계로 나누어, 각 단계에서 수행해야 할 활동과 활용할 수 있는 대표적인 도구들을 소개합니다.
1. 빌드(Build): 컨테이너 이미지 스캔
“쓰레기가 들어가면, 쓰레기가 나온다(Garbage In, Garbage Out)”는 말처럼, 보안의 첫 단추는 안전한 컨테이너 이미지를 만드는 것입니다. 빌드 단계에서의 이미지 스캔은 가장 적은 비용으로 가장 큰 효과를 볼 수 있는 핵심적인 과정입니다.
주요 활동
- OS 패키지 취약점 분석: 이미지의 기반이 되는 OS(e.g., Ubuntu, Alpine)에 포함된 패키지들의 알려진 보안 취약점(CVE)을 스캔합니다.
- 애플리케이션 의존성 분석: 애플리케이션이 사용하는 라이브러리(e.g., npm, pip, Maven 패키지)의 취약점을 스캔합니다.
- Dockerfile 정책 검사:
root유저 사용 금지,ADD대신COPY사용 등 Dockerfile 작성 모범 사례를 따르는지 검사합니다.
추천 도구: Trivy
Trivy는 가장 널리 사용되는 오픈소스 이미지 스캐너 중 하나입니다. 사용이 매우 간편하고 빠르며, 다양한 패키지와 언어의 의존성을 지원합니다.
로컬 환경에서 아래 명령어로 손쉽게 이미지를 스캔할 수 있습니다.
1
2
3
4
5
# Trivy 설치 (macOS 예시)
brew install trivy
# Docker 이미지 빌드 후 스캔
trivy image YOUR_IMAGE_NAME:TAG
핵심은 CI/CD 파이프라인 통합입니다. GitHub Actions, GitLab CI 등 CI 파이프라인에 이미지 스캔을 통합하여,
High또는Critical등급의 취약점이 발견되면 빌드를 즉시 실패시키고 배포를 차단해야 합니다.
2. 배포(Ship): 레지스트리 보안 및 정책 관리
안전하게 빌드된 이미지는 컨테이너 레지스트리(Container Registry)에 저장되어 배포를 기다립니다. 이 단계에서는 저장된 자산을 안전하게 관리하고, 신뢰할 수 있는 이미지만 클러스터에 배포되도록 정책을 수립해야 합니다.
주요 활동
- 레지스트리 이미지 스캔: 레지스트리에 저장된 이미지를 주기적으로 스캔하여, 빌드 시점 이후에 새롭게 발견된 취약점을 탐지합니다.
- 이미지 서명 (Image Signing): 신뢰할 수 있는 출처에서 빌드된 이미지만 배포되도록 디지털 서명을 적용하고 검증합니다.
- 배포 정책 적용 (Admission Control): 서명되지 않았거나, 특정 등급 이상의 취약점을 가진 이미지는 쿠버네티스 클러스터에 배포될 수 없도록 강제합니다.
AKS 환경에서의 활용
Azure를 사용한다면 ACR(Azure Container Registry)의 내장 기능을 적극 활용할 수 있습니다.
- Microsoft Defender for Cloud: ACR과 통합하여 레지스트리에 푸시되는 이미지를 자동으로 스캔하고, 지속적으로 재평가하여 새로운 취약점을 알려줍니다.
3. 실행(Run): 런타임 보안 및 구성 진단
컨테이너가 클러스터 위에서 실제로 실행되는 환경을 보호하는 마지막 방어선입니다. 이 단계에서는 설정 오류를 진단하고, 실행 중인 컨테이너의 이상 행위를 실시간으로 탐지해야 합니다.
주요 활동
- 쿠버네티스 설정 진단 (CIS Benchmark): 쿠버네티스 클러스터 자체의 설정이 보안 모범 사례(CIS Kubernetes Benchmark)를 따르는지 진단합니다.
- 런타임 행위 탐지: 실행 중인 컨테이너에서 발생하는 이상 행위(e.g., 악성 프로세스 실행, 의심스러운 네트워크 연결)를 실시간으로 탐지하고 차단합니다.
- 네트워크 정책 관리: Pod 간의 통신을 제어하는
NetworkPolicy를 기본적으로 적용하여 불필요한 내부 접근을 최소화합니다.
추천 도구
- kube-bench: CIS Kubernetes Benchmark 준수 여부를 자동으로 검사해주는 오픈소스 스크립트입니다.
- Falco: 컨테이너 런타임 보안의 사실상 표준 도구입니다. 커널 레벨에서 시스템 콜을 감시하여 컨테이너의 모든 행위를 탐지하는 강력한 규칙 기반 엔진을 제공합니다.
1
2
3
4
5
6
7
8
9
10
# Falco 규칙 예시: 셸(shell)이 컨테이너 내부에서 실행될 때 탐지
- rule: Terminal shell in container
desc: A shell was used as the entrypoint or executed in a container
condition: >
spawned_process and container and shell_procs and proc.pname != "containerd-shim"
output: >
A shell was spawned in a container
(user=%user.name %container.info cmdline=%proc.cmdline)
priority:
NOTICE
요약 및 추천 전략
컨테이너 환경의 보안은 어느 한 단계의 노력만으로 완성되지 않습니다. 아래 표와 같이 각 단계에 맞는 다층적인 방어 전략을 구축해야 합니다.
| 단계 | 주요 활동 | AKS 환경 추천 전략 |
|---|---|---|
| 1. 빌드 (Build) | 컨테이너 이미지 스캔 | Trivy를 CI/CD 파이프라인에 통합 |
| 2. 배포 (Ship) | 레지스트리 이미지 지속 스캔 | Microsoft Defender for Cloud 활성화 |
| 3. 실행 (Run) | 런타임 이상 행위 탐지, 설정 진단 | Falco 도입, kube-bench로 주기적 진단 |
어떻게 시작해야 할까?
- 즉시 시작: 지금 바로 개발 PC에 Trivy를 설치하고 이미지를 스캔해보세요.
- 자동화: 스캔 프로세스를 CI/CD 파이프라인에 통합하여 취약점 검사를 자동화하세요.
- 클러스터 진단: kube-bench를 사용하여 운영 중인 AKS 클러스터의 보안 설정을 진단하고 강화하세요.
- 런타임 모니터링 도입: Falco를 클러스터에 배포하여 최종 방어선을 구축하세요.