Docker는 '내 컴퓨터에서만 작동하는' 문제를 해결하고 애플리케이션 및 마이크로서비스 개발과 배포를 용이하게 했습니다. 그러나 이동성과 효율성 같은 이점을 제공하는 동시에 컨테이너는 고유한 보안 문제를 야기할 수도 있습니다. 따라서 컨테이너 보안에 대한 이해는 매우 중요합니다. 이는 컨테이너를 취약점과 악의적인 공격으로부터 보호하여 컨테이너화된 애플리케이션의 무결성, 기밀성 및 가용성을 보장하기 때문입니다.
이 글에서는 도커 컨테이너 보안이 무엇인지 설명하고 컨테이너를 안전하게 보호하기 위한 팁을 제공합니다.
Docker 컨테이너 보안이란 무엇인가요?
일반적인 Docker 컨테이너 보안 과제/위험
다음은 일반적인 Docker 컨테이너 보안 과제입니다:
1. 취약한 이미지
컨테이너는 소프트웨어를 이미지로 패키징하지만, 각 이미지에는 일반적으로 다른 소프트웨어 패키지가 포함되어 있으며, 각각이 위험을 초래할 수 있습니다. 여기에는 오래된 시스템 라이브러리부터 취약점이 있을 수 있는 애플리케이션 수준 종속성에 이르기까지 모든 것이 포함될 수 있습니다. 구식 또는 신뢰할 수 없는 Docker 이미지를 사용하면 취약점이 발생하여 시스템이 공격에 노출될 수 있습니다.
2. 컨테이너 탈출
컨테이너 탈출은 공격자가 컨테이너 외부로 이동하여 호스트 시스템이나 다른 컨테이너로 침투할 수 있는 보안 상황입니다. 이는 컨테이너 간 공유되는 물리적 커널로 인해 발생할 수 있으며, 커널 버그, 컨테이너 내 권한 설정 오류, 컨테이너 런타임 문제에서 비롯됩니다.
3. 잘못된 네트워크 설정
네트워크 환경에서 컨테이너를 다룰 때 발생하는 일부 잘못된 설정은 서비스 노출, 측면 이동 기회, 심지어 컨테이너 경계를 넘어 다른 컨테이너에 접근하여 무단 활동을 수행할 가능성을 초래할 수 있습니다. 잘못된 네트워크 구성은 컨테이너를 무단 접근이나 공격에 노출시킬 수 있습니다.
4. 안전하지 않은 데몬 구성
안전하지 않은 데몬 설정은 무단 액세스, 권한 상승, 심지어 시스템 전체의 손상으로 이어질 수 있습니다. Docker 데몬을 보호하려면 권한으로 실행, TLS 암호화로 API 엔드포인트 보호, 강력한 인증 메커니즘 구현, 정기적인 구성 감사 등 여러 측면을 고려해야 합니다.
5. 노출된 비밀 정보 및 환경 변수
컨테이너화된 환경이 증가함에 따라 비밀 정보 및 민감한 구성 데이터 관리 문제도 함께 증가하고 있습니다. 이러한 비밀 정보는 Dockerfile에 하드코딩되거나 환경 변수로 전달될 수 있으며, 이로 인해 의도적이든 우발적이든 Docker 이미지 계층, logs, 또는 실행 중인 컨테이너의 검사 등을 통해 노출될 수 있습니다.
6. 커널 취약점
컨테이너는 동일한 커널로 작동하므로 커널 수준의 문제는 항상 일반적이며, 따라서 호스트에서 실행되는 모든 컨테이너에 적용됩니다. 이 문제 해결은 보안 업데이트 즉시 설치, 커널 매개변수 조정, 커널 강화 기능 등 커널을 대상으로 한 예방 조치에 기반합니다.
7. 컨테이너 간 제한 없는 통신
컨테이너는 다른 컨테이너와 자유롭게 통신할 수 있습니다. 이는 많은 사용 사례에 편리하지만, 동시에 상당한 보안 위험을 초래할 수도 있습니다. 한 컨테이너가 침해되면 공격자는 환경에 접근하여 동일한 네트워크 내의 다른 컨테이너를 표적으로 삼을 수 있습니다.
CNAPP Market Guide
Get key insights on the state of the CNAPP market in this Gartner Market Guide for Cloud-Native Application Protection Platforms.
Read GuideDocker 컨테이너 보안 모범 사례
Docker 컨테이너 보안을 위한 몇 가지 모범 사례를 소개합니다.
#1. Docker 사용 전
Docker 컨테이너는 호스트 시스템과 커널을 공유하므로 호스트의 취약점은 컨테이너에도 영향을 미칠 수 있습니다. 따라서 안전한 OS를 사용하면 공격 표면을 줄일 수 있습니다. Docker 컨테이너를 다른 애플리케이션이나 서비스와 공유하지 말고 컨테이너 워크로드 전용으로 사용되는 전용 호스트에서 실행하십시오. 이렇게 하면 호스트의 Docker 환경과 다른 워크로드 간의 간섭이나 보안 침해 가능성을 최소화할 수 있습니다. 호스트 시스템의 커널을 정기적으로 업데이트하고 보안 패치를 즉시 적용하십시오. 장기 지원(LTS) 커널 버전 사용을 고려하십시오.
#2. 안전한 Docker 이미지
이미지는 컨테이너의 기반을 형성하지만, 안전한 이미지를 사용하면 취약점과 위협에 대한 노출을 최소화하는 데 도움이 됩니다. Docker Hub의 검증된 게시자(Verified Publisher)나 사설 레지스트리 등 신뢰할 수 있는 출처의 공식 또는 검증된 Docker 이미지를 항상 사용하십시오. 신뢰할 수 있는 기관은 공식 이미지를 유지 관리하고 정기적으로 업데이트하며 일반적으로 보안 검사를 수행하여 취약점 위험을 줄입니다. 최소한의 기본 이미지로 시작하고 필수적인 종속성과 도구만 포함하십시오. 구성 요소가 적을수록 취약점도 적어지고 보안 결함 발생 가능성도 줄어듭니다.
#3. 이미지 및 컨테이너 스캔
전용 스캔 도구를 사용하여 Docker 이미지와 컨테이너의 알려진 취약점을 검사하십시오. 스캔을 컨테이너 라이프사이클의 일상적인 절차로 만드십시오. 소프트웨어 라이브러리와 종속성에서 새로운 취약점이 지속적으로 발견됩니다. 정기적인 스캔은 이러한 문제가 운영 환경에서 악용되기 전에 식별하고 수정하는 데 도움이 됩니다. Trivy나 Docker Scout 같은 도구를 사용할 수 있습니다.
#4. Docker 컨테이너 내 비밀 정보 관리
비밀 정보가 이미지의 일부가 되면 해당 이미지에 접근할 수 있는 누구나 이를 가져갈 수 있습니다. 비밀을 하드 코딩하는 대신, 이미지를 통해 관리하지 말고 환경 변수, Docker Secrets 또는 외부 비밀 관리 도구를 통해 관리하십시오. Docker Swarm 모드에서 민감한 정보를 안전하게 관리하려면 Docker Secrets를 사용하십시오. 비밀을 암호화하고 필요한 컨테이너에만 노출하여 환경 변수나 파일보다 더 나은 보호를 보장하십시오. 런타임에만 환경 변수를 안전하게 전달하고 버전 관리에 커밋하지 마십시오.
#5. 모니터링 및 로깅
Docker 리소스에 대한 접근을 정기적으로 모니터링하고 감사하여 무단 접근 시도를 탐지하고 보안 정책 준수를 보장하십시오. 모니터링과 감사는 의심스러운 활동을 식별하고 Docker 환경 내에서 수행된 작업에 대한 책임성을 유지하는 데 도움이 됩니다. Docker API 접근 및 사용자 행동을 추적하기 위해 Docker의 내장 로깅 기능을 활성화하십시오. 침입 탐지 시스템(IDS)을 배포하여 네트워크 트래픽과 시스템 호출을 모니터링하여 Docker 환경 내 의심스러운 활동을 감지하십시오. IDS는 잠재적 침해 또는 악의적 활동을 식별하여 경보를 제공하고 위협에 신속히 대응할 수 있도록 지원합니다.
#6. 네트워킹 모범 사례
컨테이너 격리, 방화벽 사용, 컨테이너 간 트래픽 보안을 통해 애플리케이션을 위한 견고한 네트워크 환경을 구축할 수 있습니다. Docker 컨테이너 및 호스트로의 수신/발신 트래픽을 제어하기 위해 방화벽을 구현하십시오. 방화벽은 무단 접근을 방지하고 노출을 필요한 포트 및 서비스로만 제한하는 데 도움이 됩니다. iptables와 같은 호스트 기반 방화벽이나 Docker 호스트의 방화벽을 사용하여 허용할 트래픽을 정의하는 규칙을 생성하십시오. 컨테이너 간 트래픽은 공격의 경로가 될 수 있으므로, 이 트래픽을 보호하면 데이터 가로채기와 무단 접근을 방지하는 데 도움이 됩니다. 서비스 간 안전한 통신을 위해 TLS(전송 계층 보안)를 구현하십시오.
#7. 액세스 제어 및 인증
액세스 제어 및 인증은 Docker 환경을 보호하는 데 중요한 요소입니다. 이를 통해 승인된 사용자와 시스템만 Docker 리소스와 상호 작용할 수 있도록 보장할 수 있습니다. 배포에 서명된 이미지만 사용하도록 보장하려면 Docker Content Trust(DCT)를 활성화하십시오. Docker Content Trust는 이미지 서명 및 검증을 시행하여 확인되지 않은 이미지의 사용을 방지합니다. 역할 기반 접근 제어(RBAC)를 사용하여 특정 리소스에 접근할 수 있는 사용자와 팀의 권한 및 수행 가능한 작업을 관리하세요. 역할을 생성할 때는 최소 권한 원칙에 따라 권한을 할당하세요. 또한 Docker API에 대한 노출을 제한하고 인증 및 암호화를 구현하여 Docker API에 대한 액세스를 안전하게 보호할 수 있습니다.
#8. 정기적인 유지 관리 및 업데이트
정기적인 유지 관리 및 업데이트는 Docker 환경의 보안, 성능 및 안정성을 유지하는 데 매우 중요합니다. Docker 및 그 종속성을 최신 상태로 유지하고 정기적인 보안 감사를 수행하여 취약점을 완화할 수 있습니다. 또한 잠재적인 취약점과 잘못된 구성을 식별하고 수정하기 위해 Docker 환경에 대한 보안 감사를 정기적으로 수행하십시오. 보안 감사는 Docker 컨테이너, 이미지 및 구성의 보안 상태를 평가하여 보안 정책 및 모범 사례를 준수하도록 보장하는 데 도움이 됩니다.
#9. 사고 대응 및 완화
Docker 환경에서 보안 사고를 탐지하고 대응하며 복구하는 절차를 명시한 포괄적인 사고 대응 계획(IRP)을 수립하십시오. 잘 정의된 계획은 팀이 사고를 효과적으로 처리할 준비를 갖추도록 하여 대응 시간을 최소화하고 침해의 영향을 줄입니다.
보안 침해가 발생한 경우, 먼저 영향을 받은 컨테이너와 시스템을 격리하여 침해가 확산되는 것을 방지하십시오. 그런 다음, 침해 사고를 조사하고 해결하는 동안 서비스를 계속 운영하기 위해 임시 수정 또는 우회 방법을 적용합니다. 침해가 통제된 후에는 침해의 근본 원인을 파악하고, 손상된 이미지를 제거하고 잘못된 구성을 해결하여 악성 아티팩트나 취약점을 제거합니다. 마지막으로, 깨끗한 이미지로 컨테이너를 재구축하고, 백업 데이터를 복원하며, 재발 방지를 위해 필요한 업데이트를 적용합니다. 
Docker 컨테이너 보안을 위한 SentinelOne
SentinelOne은 대부분의 사이버 위협과 공격으로부터 컨테이너화된 환경을 보호합니다. Docker 컨테이너에 대한 실시간 보호, 가시성 및 제어 기능을 제공합니다. 다음은 Docker 컨테이너 보안을 위한 SentinelOne의 기능 및 이점에 대한 요약입니다.
- 실행 시 보호: SentinelOne은 컨테이너 실행 시 보호 기능을 갖추고 있습니다. 따라서 공격, 악성코드 및 무단 활동에 대한 실시간 보호가 탐지됩니다.
- 컨테이너 가시성: 이 플랫폼은 생성부터 네트워크 통신, 파일 시스템 내 변경 사항에 이르기까지 컨테이너 동작에 대한 포괄적인 가시성을 제공합니다.
- 자동화된 위협 탐지: SentinelOne의 AI 엔진은 잠재적 위협을 자동으로 탐지하고 차단하여 수동 분석의 필요성을 줄입니다.
- 컨테이너 오케스트레이션 통합: Docker, Kubernetes 또는 기타 컨테이너 오케스트레이션 도구를 지원하여 프로세스 및 관리가 용이하게 이루어집니다.
- 규정 준수 및 거버넌스: SentinelOne은 에이전트 없는 취약점 관리 및 클라우드 감사와 같은 규정 준수 및 거버넌스 기능을 포함합니다.
- 네트워크 트래픽 제어: 기업은 Docker 컨테이너 및 네트워크 트래픽 정책을 정의하고 컨테이너 수준에서 이를 적용할 수 있습니다.
- 파일 무결성 모니터링: SentinelOne은 컨테이너 파일 시스템에 대한 무단 접근을 모니터링하여 컨테이너 내에서 실행 중인 애플리케이션의 무결성을 유지합니다.
- 엔드포인트 탐지 및 대응(EDR): SentinelOne은 컨테이너화된 애플리케이션에 연결된 모든 엔드포인트를 보호하여 조직이 사고에 대응하고 해결할 수 있도록 지원합니다.
SentinelOne는 컨테이너를 사용하여 구축된 클라우드 네이티브 애플리케이션을 보호하여 마이크로서비스 기반 아키텍처의 무결성과 보안을 보장합니다. DevOps/CI/CD 파이프라인에 직접 통합되며, Docker 보안 보증을 제공하고 컨테이너화된 애플리케이션에 대한 규정 준수 검사를 수행합니다. 또한 인증되지 않은 접근으로부터 컨테이너화된 데이터베이스를 보호하고 권한 상승 시도를 차단합니다.
도커 컨테이너 보안이 중요한 이유는 무엇인가요?
컨테이너가 중요한 애플리케이션과 서비스 배포에 점점 더 많이 사용됨에 따라, 이러한 환경의 보안은 주요 핵심 요소가 되고 있습니다. 컨테이너 보안은 올바르게 배포될 경우 위협에 대한 방어막을 제공할 뿐만 아니라 다양한 규정 준수 요구사항을 충족시키고 데이터 유출 또는 서비스 중단 가능성을 낮출 수 있습니다.
FAQs
신뢰할 수 있고 정기적으로 업데이트되는 기본 이미지를 사용하고, 최소 권한 원칙을 따르며, 컨테이너를 루트 사용자가 아닌 일반 사용자 계정으로 실행하고, 가능한 경우 읽기 전용 파일 시스템을 사용하십시오.
Docker의 격리 기능은 공격 표면을 줄일 수 있지만, 보안은 적절한 구성, 정기적인 업데이트, 모범 사례 준수에 크게 좌우됩니다.
Docker 컨테이너를 안전하게 중지하려면 docker stop 명령어를 사용하세요. 이 명령어는 메인 프로세스에 SIGTERM 신호를 보내 정상적인 종료(graceful shutdown)를 가능하게 합니다. 컨테이너가 10초 시간 제한 내에 중지되지 않으면 Docker는 SIGKILL 신호를 보내 강제로 종료합니다.
