암호학에서 Kerckhoff의 원칙을 간접적으로 해석하면 – 암호 시스템은 공격자가 키를 제외한 시스템의 모든 정보를 알고 있더라도 안전해야 한다.
이 원칙은 현대 보안의 중요한 진리인 은폐가 반드시 보호를 의미하지는 않는다. 의 기초가 됩니다.마찬가지로, 현대 소프트웨어 배포의 강력한 도구인 컨테이너화는 올바르게 구현될 경우 네트워크 내 횡방향 이동을 방지할 수 있지만, 컨테이너 내 애플리케이션이 침해되는 것을 막지는 못한다.컨테이너는 편리함을 제공하지만, 강력한 보안이 없다면 위험도 함께 담고 있습니다. 놀랍지 않게도, 운영 환경에서 실행 중인 컨테이너 이미지의 60%는 알려진 취약점으로 가득 차 있어 사이버 위협에 대한 문을 열어놓고 있습니다.
그렇다면 잠재적 침해로부터 컨테이너를 어떻게 보호할 수 있을까요? 해답은 모든 계층의 취약점을 해결하고 노출된 틈이 없도록 보장하는 포괄적인 컨테이너 보안 체크리스트에서 시작됩니다.&
본 글에서는 컨테이너를 안전하게 보호하기 위한 견고한 방어 체계를 구축하는 데 도움이 될 컨테이너 보안 체크리스트와 모범 사례를 소개합니다.&
컨테이너 보안이란 무엇인가?
컨테이너 보안은 컨테이너화된 애플리케이션과 이를 지원하는 인프라를 라이프사이클 전반에 걸쳐 취약점 및 위협으로부터 보호하는 과정입니다.
컨테이너 보안의 핵심은 베이스 이미지부터 컨테이너 내 애플리케이션 코드에 이르기까지 지속적인 스캔입니다.
사용 중인 컨테이너 이미지가 신뢰할 수 있는 출처에서 제공되고 알려진 취약점이 없는지 확인하는 동시에, 공격을 암시할 수 있는 런타임 위험을 적극적으로 모니터링해야 합니다.
또한 컨테이너 격리를 완벽하게 실행해야 합니다. 권한 상승, 잘못 구성된 네트워크 등 취약점을 재차 점검하십시오.
환경에서 위협을 적극적으로 제거하기 위해 취할 수 있는 여러 다른 조치들이 있습니다. 다양한 관행, 도구 및 정책을 포함하는 강력한 컨테이너 보안 프로토콜 또는 체크리스트를 통해 개발 및 배포부터 런타임 및 폐기에 이르는 전체 컨테이너 라이프사이클을 보호할 수 있습니다.—개발 및 배포부터 실행 및 폐기에 이르기까지.
컨테이너 보안 체크리스트의 중요성
컨테이너 환경은 움직이는 부품들의 미로와 같습니다. 그리고 그 보안을 관리하려면 체계적인 시스템이 필요합니다. 가이드라인이나 체크리스트를 손쉽게 활용하면 완전히 보안이 적용된 Docker 또는 Kubernetes 컨테이너를 성공적으로 배포하는 데 소요되는 시간을 단축할 수 있습니다.
시간 절약 외에도 보안 체크리스트에는 다음과 같은 여러 장점이 있습니다:
- 표준화: 컨테이너 라이프사이클의 모든 단계를 표준화하는 것은 일관성을 보장하고 중대한 실수를 방지하는 핵심입니다. 사람들이 함께 작업할 때는 항상 인적 오류의 가능성이 존재합니다. 작업에 대한 명확한 지침을 마련하면 모두가 동일한 이해를 바탕으로 업무를 수행할 수 있으며 원활한 운영에 도움이 됩니다.
 - 포괄적 적용: 컨테이너화된 환경은 이미지, 레지스트리, 네트워크, 런타임 등 여러 구성 요소로 이루어집니다. 이러한 요소들을 시스템에 도입하기 전에 검사를 수행하는 것은 필수적입니다. 여기에는 이미지 스캔, 접근 제어, 네트워크 세분화, 런타임 모니터링 등이 포함될 수 있습니다.
 - 효율성과 일관성: 체크리스트는 안전한 컨테이너를 보장하는 또 하나의 단계로, 운영 효율성과 일관성을 높이는 추가적인 이점을 제공합니다. 또한 팀원들은 보안 모범 사례에 대한 기준점을 확보하게 되어 단계를 누락할 가능성을 줄일 수 있습니다.
 - 규정 준수: 사이버 위협과 데이터 유출 사고가 증가함에 따라 정부 및 규제 기관은 엄격한 규제 요건을 마련했습니다. 명확히 정의된 컨테이너 보안 체크리스트는 역할 기반 접근 제어(RBAC), 이미지 스캐닝, Docker 및 Kubernetes용 CIS 벤치마크 준수 등의 모범 사례를 적용함으로써 규정 준수를 보장합니다. 또한 감사용 로그 및 모니터링을 확보하고 GDPR, HIPAA, PCI-DSS와 같은 프레임워크의 요구 사항을 충족시킵니다.
 - 사전 위협 완화: 컨테이너를 배포하기 전에 전체 라이프사이클을 두 번 검토하는 것이 항상 좋은 방법이며, 체크리스트가 이를 달성하는 데 도움이 됩니다. 첫 번째 검토는 모든 보안 조치가 구현되었는지 확인하고, 두 번째 검토는 누락된 구성이나 새로운 위협이 심각한 문제로 발전하기 전에 발견하는 검증 단계 역할을 합니다.
 
컨테이너 보안 체크리스트 10가지 핵심
컨테이너 보안 체크리스트의 중요성을 확인했으니, 이제 어떤 보안 점검을 반드시 구현해야 하는지 더 깊이 살펴볼 때입니다.
다음은 보안 프로토콜에 반드시 포함되어야 할 모든 단계를 간결하게 정리한 Docker 및 Kubernetes 보안 체크리스트입니다:
-  
이미지 보안
 
- 공식 저장소에서 신뢰할 수 있고 검증된 기본 이미지를 사용하십시오.
 - 레지스트리에 이미지를 푸시/풀할 수 있는 사용자를 제한하십시오.
 - 컨테이너 이미지를 정기적으로 취약점 검사하십시오.
 - 취약한 이미지의 배포를 차단하거나 네트워크 접근을 제한하십시오.
 - 이미지 푸시 전 키나 토큰 같은 민감한 데이터 탐지
 - 이미지가 최소한으로 유지되고 필요한 종속성만 포함되도록 합니다.
 - 자동화된 이미지 패치 및 업데이트를 구현합니다.
 
-  
접근 및 권한
 
- 루트 권한으로 컨테이너를 실행하지 마십시오.
 - 컨테이너가 과도한 권한을 획득하거나 불필요한 시스템 호출을 하지 못하도록 방지하십시오.
 - 컨테이너와 사용자에게 최소 권한 원칙을 적용하십시오.
 - 특정 파일이나 디렉터리를 수정할 수 있는 컨테이너를 제어하십시오.
 - PodSecurity Admission을 사용하여 민감한 기능 및 리소스에 대한 접근을 제한하십시오.
 -  역할 기반 접근 제어(RBAC)를 사용하여 중요한 API 엔드포인트 및 컨테이너 리소스 작업(예: 
`get`, `list`, `watch`, 또는 `secrets)에 대한 접근을 제한합니다.` - 컨테이너에 액세스하기 위한 다중 요소 인증(MFA)를 사용하세요.
 
-  
네트워크 보안
 
- 네트워크 세분화(예: Docker 네트워크 정책)를 사용하여 컨테이너를 격리합니다.
 - 다양한 포트 및 프로토콜에서 트래픽을 필터링하여 공개 서비스 보호.
 - 전송 중인 데이터에 암호화 통신(예: TLS) 사용.&
 - 서비스 메시와 심층 패킷 분석을 통한 레이어 7 제어를 사용하여 HTTP/HTTPS 정책을 시행하십시오.
 - IP 기반 및 포트 기반 액세스 제어를 사용하여 레이어 3 및 4 트래픽을 제한하여 접근을 제한하십시오.
 - 선택한 컨테이너 네트워크 인터페이스(CNI) 플러그인이 Kubernetes 네트워크 정책을 지원하는지 확인하십시오.&
 - 모든 워크로드에 인그레스 및 이그레스 네트워크 정책을 적용하고, 모든 트래픽을 거부하는 기본 정책을 설정하십시오.
 - 중요 구성 요소(Kubernetes API, Kubelet API, etc.)가 공개적으로 노출되지 않도록 합니다.
 - 클러스터 내 워크로드 통신을 인증하기 위해 트래픽을 암호화하고 상호 TLS(mTLS)를 사용합니다.&
 
-  
런타임 보안
 
- 컨테이너 런타임의 의심스러운 활동을 모니터링합니다.
 - Linux 보안 모듈을 사용하여 호스트 리소스에 대한 컨테이너 액세스를 제한합니다.
 - 서비스 거부 공격 방지를 위해 리소스 제한(CPU, 메모리)을 구현합니다.
 - 실행 중인 컨테이너의 변조를 방지하기 위해 런타임 API 및 데몬 접근을 제한합니다.
 - 모든 컨테이너 활동을 실시간으로 기록하고 감사합니다.
 
-  
취약점 및 패치 관리
 
- 컨테이너 및 호스트 시스템을 정기적으로 취약점 검사합니다.
 - 지속적 통합 파이프라인에서 구성 파일의 규정 준수 여부를 스캔하고, 보안 오설정을 위한 자동화된 검사를 통합하십시오.
 - 이미지 서명(Docker Content Trust)을 사용하여 컨테이너 이미지의 무결성을 검증하십시오.
 - 정적 코드 분석을 수행하여 애플리케이션 코드 및 그 종속성 내 취약점을 식별하십시오.
 
-  
비밀 관리
 
- 민감한 데이터(API 키, 비밀번호)를 비밀 관리 도구에 저장합니다.
 - 컨테이너 이미지나 환경 변수에 시크릿을 하드코딩하지 마십시오.
 - 정기적인 감사를 수행하고 시크릿 API 접근 권한을 가진 사용자를 검토하며 암호화 키를 회전시키십시오.
 - 추가적인 보호 계층을 위해 etcd 내 비밀 데이터를 암호화하도록 Kubernetes API 서버를 구성하여 저장 중인 데이터를 암호화하십시오.
 - 토큰 유출 시 영향을 줄이기 위해 더 짧은 만료 기간으로 토큰을 구성하십시오.
 
-  
오케스트레이션 보안
 
- 강력한 액세스 제어를 통해 컨테이너 오케스트레이터(예: Docker)를 보호하십시오.
 - 역할 기반 접근 제어(RBAC)를 활성화하고 사용자와 서비스 계정에 최소 권한을 부여하십시오.
 - 오케스트레이터 서비스 정의 및 구성에 버전 관리(예: Git)를 구현하십시오.&
 - 오케스트레이터 제어 평면으로의 모든 API 요청에 대해 로깅을 활성화하십시오(예: Kubernetes의 감사 로그).
 
-  
보안 구성
 
- 컨테이너에서 불필요한 서비스나 포트를 비활성화하십시오.
 - 쓰기 권한이 필요하지 않은 컨테이너에는 읽기 전용 파일 시스템을 사용하십시오.
 - 가능한 경우 컨테이너가 상태 비저장(stateless) 및 불변(immutable) 상태를 유지하도록 합니다.
 
-  
백업 및 재해 복구
 
- 컨테이너 구성 및 애플리케이션 데이터를 정기적으로 백업하십시오.
 - etcd 스냅샷 저장 명령을 활용하여 특정 시점 백업을 수행함으로써 백업의 일관성을 보장하십시오.
 - 클러스터 구성 요소를 의도적으로 장애 상태로 전환하는 재해 시뮬레이션을 수행하고 복구 프로세스가 예상대로 작동하는지 검증하십시오.
 
-  
규정 준수 및 감사
 
- 산업 보안 표준(예: GDPR, PCI-DSS) 준수를 보장하십시오.
 - 컨테이너 보안 정책, 로그 및 액세스 제어 구성을 정기적으로 감사합니다.
 - 컨테이너 환경에 대한 정기적인 보안 침투 테스트를 실시합니다.
 
컨테이너 보안 모범 사례
컨테이너 보안 체크리스트를 제공해 드렸지만, 컨테이너화된 환경을 강화하는 몇 가지 모범 사례를 소개합니다:
- 신뢰할 수 있는 기본 이미지 사용: 컨테이너의 기반은 이미지에 있습니다. 따라서 신뢰할 수 있는 출처에서 이미지를 확보하세요. 또한 자동화된 이미지 스캔 및 정기 패치 도구를 선택하십시오. CI/CD 파이프라인에 직접 통합되는 도구를 사용하여 각 단계를 거치는 베이스 이미지를 확인하세요.
 - 최소 권한 원칙 적용: 컨테이너 권한을 제한하세요. 컨테이너를 루트 권한으로 실행하지 말고 시스템 리소스 접근을 제한하여 잠재적 위협 경로를 차단하세요. CIS 벤치마크를 활용해 최소한의 서비스만 실행되도록 호스트 OS를 강화하고, SentinelOne 같은 도구를 고려하여 시스템 호출 수준에서 공격 표면을 줄이세요. 컨테이너가 호스트 커널을 공유하기 때문에 이는 중요합니다.
 - 인프라스트럭처 애즈 코드(IaC) 보안: 위험한 구성이 프로덕션에 도달하는 것을 방지하려면, 배포 전에 정책 위반 및 잘못된 구성(예: 지나치게 허용적인 IAM 역할 또는 노출된 포트)을 스캔하는 Kubernetes 매니페스트와 같은 IaC 템플릿을 사용할 수 있습니다.
 - 클라우드 구성 강화: VPC 및 프라이빗 네트워크를 통해 클라우드 리소스 격리를 보장하고, 최소 권한 접근 제어를 사용하여 클라우드 서비스를 강화하십시오. 클라우드 오구성(열린 S3 버킷이나 노출된 관리 인터페이스 등)에 대한 지속적인 모니터링을 구현하십시오.
 - 외부 취약점 감소: 타사 종속성(주로 빌드 과정에서 발견됨)의 취약점은 애플리케이션에 약점을 초래할 수 있습니다. OS 및 애플리케이션 종속성 모두에 대해 알려진 CVE에 대한 종속성 스캔을 자동화할 수 있습니다. 라이브러리와 패키지를 정기적으로 업데이트하십시오.
 - 오케스트레이터 및 런타임 벤치마크 제어: 배포 전 보안 정책을 적용하기 위해 쿠버네티스 어드미션 컨트롤러와 같은 오케스트레이터 보안 제어 기능을 사용하십시오. 오케스트레이터와 실행 중인 컨테이너를 정기적으로 감사하기 위해 런타임 벤치마크 검사(예: 쿠버네티스 CIS 벤치마크)를 구현하십시오.
 - 네트워크 세분화: 컨테이너 트래픽을 제어하고 공격 표면을 축소하기 위한 정책을 생성하고 적용하십시오. 컨테이너화된 워크로드의 마이크로 세분화는 침해 시 영향을 제한하고 네트워크 보안을 강화합니다.
 - 리소스 제한: 각 컨테이너의 CPU, 메모리, 스토리지에 리소스 제한을 적용하여 어떤 컨테이너도 시스템 리소스를 고갈시키는 것을 방지할 수 있습니다. 시스템 리소스가 소진되면 서비스 상태 문제 및 기타 운영상의 문제가 발생할 수 있습니다.
 - 활동 모니터링 및 로깅: 보안 위협에 실시간으로 대응해야 합니다. 컨테이너 동작을 가시화하여 위협을 신속히 식별하고 완화할 수 있는 도구를 확보하세요.
 - CI/CD 파이프라인 보안 강화: 코드 커밋부터 배포까지 컨테이너 라이프사이클의 모든 단계에 보안 검사를 통합하여 CI/CD 파이프라인의 보안을 확보하십시오. 이를 통해 개발 과정에서 취약점이 유입되는 것을 방지할 수 있습니다.
 - 보안 업데이트 자동화: 자동화 도구를 사용하여 가동 중단 없이 컨테이너와 오케스트레이터에 보안 패치 및 업데이트를 적용하세요.
 - 규정 준수 및 정책 시행: 조직 및 규제 정책을 준수하기 위해 컨테이너를 정기적으로 감사하세요. 정책 시행 도구를 사용하여 환경 전반에 보안 정책을 적용하고 일관된 보안 표준 및 규정 준수를 유지합니다.
 
피해야 할 일반적인 컨테이너 보안 실수
2019년 2월, Docker 팀은 CVE-2019-5736 취약점을 공개적으로 발표했습니다. 이 취약점으로 인해 공격자는 호스트의 바이너리를 덮어쓰고 호스트 시스템에 접근하여 컨테이너 내에서 루트 권한으로 명령을 실행할 수 있었습니다.
AWS, RedHat, Microsoft Azure를 포함한 여러 기관에서도 이 취약점을 발견하고 자사 제품에 패치를 적용했습니다.
2021년에는 CVE-2021-3490 취약점은 확장 버클리 패킷 필터(eBPF)와 관련된 리눅스 커널의 결함을 악용했습니다..
이 취약점으로 인해 공격자는 쿠버네티스의 기본 seccomp 프로파일을 통해 eBPF에 접근할 수 있는 침해된 컨테이너 내부에서 호스트에 임의 코드를 실행할 수 있었습니다. 해당 프로파일은 필요한 시스템 호출을 제한하지 않아 특정 환경이 노출되었습니다.
이러한 사건들은 컨테이너 보안에서 작은 한 가지 소홀함이 애플리케이션의 무결성을 훼손하고 환경을 위험에 노출시킬 수 있음을 보여줍니다.
주의해야 할 다른 일반적인 컨테이너 보안 실수로는 다음과 같습니다:
- 공개 이미지가 안전하다고 가정하면 배포가 손상될 수 있습니다. 숙련된 개발자의 철저한 검토 없이 외부 이미지를 절대 신뢰하지 마십시오.
 - 컨테이너를 너무 많은 개방된 채널에 노출시키면 공격 표면이 증가합니다. 루트 권한으로 노출된 컨테이너를 남기지 말고 네트워크 상호작용을 검토하여 잠재적 취약점을 확인하십시오.
 - 코드 라이브러리를 컨테이너에 통합하기 전에 취약점을 검증하고 스캔하지 않는 경우
 - 정확한 로깅 기록을 유지하지 않으면 보안 문제를 신속하게 발견하기 어려울 수 있습니다.&
 - 빌드 및 배포 시 보안 점검을 생략하는 등 CI/CD 파이프라인 보안을 무시하면 개발 초기 단계부터 취약점이 유입될 수 있습니다.
 
컨테이너용 SentinelOne 클라우드 워크로드 보안
컨테이너화된 모든 환경을 효과적으로 보호하려면 모든 노드에 걸쳐 통합된 전략이 필요합니다. Q2는 1,200개 이상의 은행, 조합 및 금융 기관에 서비스를 제공하는 선도적인 금융 서비스 제공업체입니다. 2,200만 명 이상의 최종 사용자와 퍼블릭 클라우드에 65,000개의 컨테이너를 보유한 Q2는 Q2는 모든 환경에 센티널원의 컨테이너용 클라우드 워크로드 보안을 배포했습니다. Q2와 마찬가지로 여러분도 이 솔루션의 다양한 기능과 혜택을 활용하여 모든 이상 징후를 실시간으로 파악하고 강력한 보안 태세를 유지할 수 있습니다.
주요 기능 및 혜택
- AWS, Azure, GCP 및 온프레미스 데이터 센터를 포함한 멀티 클라우드 환경 전반에 걸친 포괄적인 하이브리드 클라우드 워크로드 보호
 - 랜섬웨어, 제로데이 공격, 암호화폐 채굴 악성코드, 파일리스 공격 차단
 - eBPF 기반 에이전트 아키텍처로 운영체제 프로세스 수준에서 실시간 가시성 제공
 - 5억 개 이상의 악성코드 시그니처 데이터셋을 활용하여 파일 구조를 분석하는 정적 AI 엔진
 - 시간적 분석을 활용하여 시간 경과에 따른 패턴을 평가함으로써 정적 탐지를 회피할 수 있는 악성 행위를 탐지하는 행동 기반 AI 엔진
 - 서버, VMS, 컨테이너 및 쿠버네티스 전반에 걸친 머신 속도 공격의 실시간 탐지
 - 최대 워크로드 가용성을 위한 자동 복구
 - 조사 및 대응 가속화, 위협 헌팅 강화
 - 워크로드 비행 데이터 레코더™.
 - 방해받지 않는 런타임 보안으로 혁신 가속화.
 - 커널 의존성 없음. 낮은 CPU 및 메모리 오버헤드.
 
- 안정성과 성능을 위한 eBPF 아키텍처
 - Docker, 컨테이너 및 cri-o 런타임 지원
 - 자동 확장 보호
 - 실시간 CWPP
 - 자체 관리 및 관리형 K8s 서비스 지원
 - Amazon Linux 2023을 포함한 14가지 주요 Linux 배포판 지원
 - Snyk 통합 (별도 구매)
 
또한 SentinelOne의 클라우드 네이티브 애플리케이션 보호 플랫폼(CNAPP)는 다음과 같은 기능을 통해 컨테이너 보안을 강화할 수 있도록 지원합니다. Kubernetes 보안 상태 관리 (KSPM) 및 클라우드 보안 상태 관리(CSPM)와 같은 기능을 통해 클라우드 네이티브 애플리케이션이 규정 준수 및 보안을 유지하도록 보장합니다.
FAQs
컨테이너 보안을 보장하려면 여러 계층을 아우르는 포괄적인 접근 방식이 필요합니다. 다음부터 시작하세요:
- 신뢰할 수 있는 기본 이미지를 사용하고 취약점을 정기적으로 검사하며, 공격 표면을 줄이기 위해 이미지를 최소한으로 유지하세요.
 - 최소 권한 원칙을 적용하여 컨테이너에 필요한 권한만 부여하고 절대 루트 권한으로 실행하지 마십시오.
 - 컨테이너 활동을 실시간으로 지속적으로 모니터링하여 의심스러운 행동을 탐지하고, 빌드부터 런타임까지 모든 단계에서 취약점 스캔을 수행하십시오.
 - 마지막으로 호스트와 오케스트레이터를 보안 패치 및 네트워크 정책으로 적절히 강화하여 컨테이너 간 통신을 제한하고 잠재적 위협을 줄이십시오.
 
컨테이너 보안 이니셔티브(CSI)는 일곱 가지 주요 부분으로 구성됩니다. 여기에는 다음이 포함됩니다.
- 이미지 스캔
 - 런타임 보안
 - 액세스 제어
 - 네트워크 보호
 - 규정 준수 관리
 - 감시
 - 사고 대응.
 
SentinelOne Singularity Cloud Workload Security (CWS) 플랫폼은 컨테이너 보안에 중요한 역할을 합니다. 이 플랫폼은 컨테이너화된 애플리케이션의 전 생애 주기를 보호합니다. 런타임 보호를 자동화하고 취약점을 처리하며 규정 준수를 강제합니다. Kubernetes 및 기타 시스템과 연동하여 퍼블릭 및 프라이빗 클라우드에서 컨테이너를 실시간으로 감시하고 보호합니다.
컨테이너 보안 라이프사이클은 다섯 가지 주요 단계로 구성됩니다:
- 이미지 보안: 안전하게 검증된 이미지로 시작하고 취약점을 찾기 위해 자주 검사하십시오.
 - 빌드 보안: 컨테이너 빌드 프로세스가 안전한 규칙과 방법을 따르도록 하십시오.
 - 배포 보안: 컨테이너 배포 시 안전 규칙을 적용하고, 최소 권한을 부여하며, 안전한 네트워크를 구성하십시오.
 - 실행 시 보안: 컨테이너의 비정상적인 동작을 모니터링하고, 런타임 안전 규칙을 적용하며, 네트워크를 분리하십시오.
 - 폐기: 컨테이너를 사용 중지할 때는 모든 개인 데이터를 완전히 삭제하십시오.
 

