
오픈인프라 한국 커뮤니티 / 김관영 부회장
그로메트릭 / 김관영 대표
컨테이너 런타임 보안은 컨테이너가 실행되는 동안 발생할 수 있는 다양한 보안 위협을 방지하기 위해 필수적입니다. 컨테이너 기술이 점차 확산되면서 새로운 보안 위협이 등장하고 있으며, 이를 효과적으로 관리하지 않으면 전체 시스템의 무결성과 기밀성이 위험해질 수 있습니다.
우선 컨테이너 런타임에 대해 일반적으로 사용되는 Docker로 간단하게 설명하고 런타임 보안에 대해 이야기해 보도록 하겠습니다.
아래의 그림1을 보시면 런타임에 대해 좀 더 명확하게 이해할 수 있습니다.
Docker는 클라이언트 프로그램(docker CLI)과 데몬 프로그램(dockerd)으로 구성됩니다. docker CLI는 dockerd 데몬에 연결하여 컨테이너를 생성합니다.
그러나 dockerd는 자체적으로 컨테이너를 생성하지 않고 컨테이너를 생성하기 위해 상위레벨 런타임인 containerd 데몬에 제어권을 위임합니다. 이는 컨테이너 개념을 구현하기 위해 네임스페이스, C그룹 및 기능과 같은 여러 Linux 커널 기능을 구성하는 하위 레벨 런타임인 runc 에 제어를 추가로 위임합니다 .

[그림1. 컨테이너 런타임의 이해]
이로 인해 직접적인 Linux를 핸들링하는 하위레벨 런타임(containerd외)과 상위레벨 런타임(runc외)의 보안이 중요한 요소라고 할 수 있습니다.
* 컨테이너 런타임에는 runc외에도 보안이 강력한 Kata Container, 구글에서 개발되어 상용화된 gVisor 등 다양한 종류가 있습니다.
1. 컨테이너 런타임 보안의 중요성
컨테이너 런타임 보안이 중요한 이유는 다음과 같습니다.
컨테이너는 호스트의 환경을 일부 공유하기 때문에, 공격자가 컨테이너 내부에 접근한 후 그 컨테이너 외부로 이동하게 된다면 해당 호스트나 동작 중이던 다른 컨테이너에도 접근하게 되고 이는 수평 이동(Lateral Movement)이 가능한 상황으로 발전하게 전체적인 망 보안에 심각한 위협이 됩니다.
- 공격 표면 증가: 컨테이너는 애플리케이션을 여러 개의 독립된 작은 컴포넌트로 나누어 실행합니다. 각각의 컨테이너는 고유의 실행 환경을 가지며, 이는 개발과 배포의 효율성을 높이지만 보안 측면에서는 새로운 도전을 야기합니다. 각 컨테이너는 오픈된 포트정보로 인해 공격 표면을 가지게 되며, 이는 공격자가 침투할 수 있는 경로가 더 많아진다는 것을 의미합니다.
- 자동화와 민첩성: 컨테이너 기술은 자동화된 배포와 빠른 개발 주기를 가능하게 합니다. 그러나 이러한 속도와 자동화는 보안 검증 과정이 소홀해질 위험을 수반합니다. 보안 취약점이 있는 코드가 자동화된 배포 파이프라인을 통해 빠르게 확산될 수 있습니다. 따라서 자동화된 테스트와 보안 검토가 필수적입니다.
- 공유 자원: 여러 컨테이너가 동일한 호스트 운영 체제를 공유하므로, 하나의 컨테이너가 손상되면 호스트 시스템 전체에 영향을 미칠 수 있습니다. 공격자는 한 컨테이너의 취약점을 이용해 호스트에 접근한 후 다른 컨테이너로 확산할 수 있습니다. 이는 전체 시스템의 보안을 저해할 수 있습니다.
- 서플라이 체인 공격: 컨테이너 이미지는 종종 외부 소스에서 가져오며, 이러한 이미지가 악성 코드에 감염될 위험이 있습니다. 서플라이 체인 공격은 개발 파이프라인의 다양한 단계에서 발생할 수 있으며, 악성 코드가 포함된 이미지가 프로덕션 환경에 배포될 수 있습니다. 따라서 이미지의 무결성을 검증하고 신뢰할 수 있는 소스를 사용하는 것이 중요합니다.
2. 컨테이너 런타임 환경
컨테이너 런타임 환경은 애플리케이션이 컨테이너 내에서 실행되는 모든 구성 요소를 포함합니다. 주요 요소는 다음과 같습니다:
- 컨테이너 호스트: 컨테이너를 실행하는 Linux 등의 기본 운영 체제. 호스트의 보안이 무너지면 전체 컨테이너 시스템이 위험해질 수 있습니다.
- 컨테이너 엔진: 컨테이너를 생성하고 실행하며 관리하는 소프트웨어(Docker, Kubernetes 등). 이 엔진의 취약점은 컨테이너의 안정성을 해칠 수 있습니다.
- 네트워킹: 컨테이너 간 및 외부 시스템과의 통신. 네트워크 구성의 오류는 공격자가 컨테이너에 접근할 수 있게 만듭니다.
- 저장소: 컨테이너 이미지 및 데이터를 저장하는 공간. 이미지의 무결성과 데이터 보호가 중요합니다.
- 보안: 컨테이너와 런타임 환경을 보호하기 위한 모든 보안 조치들이 전반적인 관점에서 이루어져야 할 것입니다.
3. 컨테이너 런타임 보안 위협
컨테이너 런타임 환경은 다음과 같은 보안 위협에 노출될 수 있습니다.
- 컨테이너 탈취: 공격자가 컨테이너를 탈취하여 시스템 권한을 획득하고 리소스를 악용할 수 있습니다. 예를 들어, 공격자는 컨테이너 내부에서 SSH 서버를 실행하여 호스트 시스템에 대한 무단 접근을 시도할 수 있습니다.
- Malware 실행: 공격자가 컨테이너 내부에서 악성 코드를 실행하여 시스템을 손상시키거나 데이터를 암호화할 수 있습니다. 예를 들어, 공격자는 컨테이너 내부에 랜섬웨어를 설치하여 데이터를 암호화하고 몸값을 요구할 수 있습니다.
- Malicious code 실행: 코드 실행으로 데이터 유출, 시스템 충돌 등 다양한 보안 문제가 발생할 수 있습니다. 이 위협은 공격자가 오픈된 애플리케이션에 악성 코드를 삽입하는 코드 삽입을 통해 나타날 수 있습니다. 런타임 보안 조치에는 입력 유효성 검사 및 WAF(웹 애플리케이션 방화벽) 사용과 같은 코드 삽입을 감지하고 방지하는 메커니즘이 포함되어야 합니다.
- 네트워크 공격: 네트워크를 통해 컨테이너에 침투하거나 데이터를 탈취할 수 있습니다. 예를 들어, 공격자는 네트워크 스니핑을 통해 컨테이너 간 통신 데이터를 가로채고 민감한 정보를 탈취할 수 있습니다.
- Configuration drift: 보안 기준에서 컨테이너 구성이 의도치 않게 변경될 때 발생합니다. 이러한 드리프트는 파일 권한, 보안 설정 또는 네트워크 구성 변경을 포함하여 설정을 변경하는 수동 오류 또는 자동화된 프로세스로 인해 발생합니다. 모니터링 도구는 구성 변경 사항을 추적하고 팀에 잠재적인 드리프트에 대해 경고하여 안전하고 일관된 환경을 유지할 수 있어야 합니다.
- 권한 상승 공격은 취약점을 악용하여 컨테이너 또는 호스트 시스템 내에서 더 높은 권한을 얻습니다. 이러한 공격에 대한 기술적 방어에는 애플리케이션과 프로세스에 해당 기능을 수행하는 데 필요한 최소 수준의 액세스 또는 권한이 부여되는 최소 권한 원칙 구현이 포함됩니다. 보안이 강화된 Linux 배포판을 활용하면 추가적인 보안 계층을 제공할 수 있습니다.
- 커널 악용: 컨테이너는 호스트의 커널을 공유하므로 커널의 취약점을 악용하여 컨테이너를 손상시킬 수 있습니다. 커널 악용에는 알려진 취약점을 활용하여 무단 액세스를 얻거나 커널 수준에서 코드를 실행하는 것이 포함될 수 있습니다. 불필요한 모듈을 끄고 정기적인 보안 패치를 적용하는 등의 조치를 통해 커널을 강화하는 것이 효과적인 완화 전략이 될 수 있습니다.
4. 컨테이너 런타임 보안 모범 사례
컨테이너 런타임 보안을 강화하기 위한 모범 사례는 시스템의 안전성을 높이고 보안 위협을 최소화하는 데 필수적입니다. 이러한 모범 사례를 통해 조직은 보안 인프라를 체계적으로 구축하고 유지할 수 있습니다. 아래의 모범 사례들은 컨테이너 런타임을 오케스트레이션하는 Kubernetes 관점에서 설명한 AWS EKS 모범 사례 문서 및 일반적인 보안 권장 사항을 기반으로 설명합니다. AWS EKS 모범 사례 가이드 문서는 컨테이너를 오케스트레이션하는 관점에서 구체적인 실천 방법과 도구를 제시하여 컨테이너 런타임 보안을 강화하는 데 도움을 주고 있습니다.
- 최소 권한 원칙 적용: 컨테이너 및 사용자에게 필요한 최소한의 권한만 부여합니다. 예를 들어, 데이터베이스 컨테이너는 데이터베이스 접근 권한만 가지도록 설정합니다. 이 원칙은 공격자가 획득할 수 있는 권한을 최소화하여 시스템 손상을 줄입니다.
- 네트워크 분리: 컨테이너를 네트워크 세그먼트로 분리하여 공격 표면을 줄입니다. 예를 들어, 민감한 데이터를 처리하는 컨테이너는 별도의 네트워크 세그먼트에서 실행하고, 외부 네트워크와의 통신을 제한합니다. 네트워크 분리는 내부 및 외부 위협으로부터 컨테이너를 보호합니다.
- 컨테이너 런타임 보안 강화: 적절한 보안 도구를 사용하여 런타임 환경을 보호합니다. 예를 들어, Falco와 같은 도구를 사용하여 런타임 중 의심스러운 행동을 모니터링하고, 이를 실시간으로 경고합니다. 런타임 보안 도구는 실시간 위협 탐지와 대응을 가능하게 합니다.
- 데이터 암호화: 민감한 데이터를 암호화하여 보호합니다. 예를 들어, 모든 데이터는 전송 시 HTTPS를 사용하고, 저장 시에는 암호화된 볼륨을 사용합니다. 데이터 암호화는 데이터 유출 시에도 정보를 보호할 수 있습니다.
- 보안 모니터링 및 로그 분석: 컨테이너 환경을 지속적으로 모니터링하고 이상 활동을 감지합니다. 예를 들어, Splunk와 같은 SIEM를 사용하여 컨테이너 로그를 실시간으로 분석하고, 의심스러운 활동을 탐지합니다. 지속적인 모니터링은 보안 위협을 조기에 발견하고 대응하는 데 중요합니다.
- 보안 인시던트 대응 계획 수립: 보안 인시던트 발생 시 신속하게 대응할 수 있도록 계획을 수립합니다. 예를 들어, 인시던트 발생 시 즉시 실행할 수 있는 대응 절차를 문서화하고 정기적으로 훈련합니다. 준비된 대응 계획은 인시던트의 영향을 최소화할 수 있습니다.
5. 컨테이너 런타임 보안 도구
다음은 Linux에 적용할 수 있는 보안도구인 AppArmor, SELinux, Seccomp 외에도 적용가능한 컨테이너 런타임 보안을 관리하는 데 도움이 되는 오픈소스 도구입니다.

[표1. 컨테이너 런타임 오픈소스 보안도구]
6. 맺음말
컨테이너 런타임 보안은 현대의 애플리케이션 배포와 운영 환경에서 필수적입니다. 컨테이너 기술의 이점을 극대화하면서도 보안 위협에 대비하기 위해서는 지속적인 보안 점검과 모니터링이 필요합니다. 모범 사례와 적절한 도구를 사용하여 컨테이너 환경을 안전하게 유지함으로써 비즈니스 연속성과 데이터 무결성을 보장할 수 있습니다. 조직 내 모든 구성원이 보안의 중요성을 인식하고 shift-left 정책을 실천할 수 있도록 교육과 훈련을 강화하는 것도 중요합니다.
* "Shift-left" 접근 방식은 소프트웨어 개발 초기 단계에서 보안과 품질 보증을 통합하여 문제를 조기에 발견하고 해결함으로써, 나중에 발생할 수 있는 비용과 리소스를 절감하는 것을 목표로 합니다. 이를 통해 개발 과정 전반에 걸쳐 지속적인 테스트와 협업을 통해 소프트웨어의 전반적인 품질과 보안을 개선합니다.
**이 글은 최영락(Ian Choi)님의 도움으로 함께 글이 쓰여졌음을 알려 드립니다.?
참 고 문 헌
- https://medium.com/nttlabs/the-internals-and-the-latest-trends-of-container-runtimes-2023-22aa111d7a93
- https://www.wiz.io/academy/container-runtime-security
- https://velog.io/@yange/Kubernetes-container-runtime%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
저작권 정책
K-ICT 클라우드혁신센터의 저작물인 『컨테이너 런타임 보안』은 K-ICT 클라우드혁신센터에서 오픈인프라 한국 커뮤니티 김관영 부회장에게 집필 자문을 받아 발행한 전문정보 브리프로, K-ICT 클라우드혁신센터의 저작권정책에 따라 이용할 수 있습니다.
다만 사진, 이미지, 인용자료 등 제3자에게 저작권이 있는 경우 원저작권자가 정한 바에 따릅니다.