클라우드 서비스는 여러 기업과 개인에게 매우 중요한 역할을 하며, 그에 따른 보안 위협도 매우 커지고 있습니다. 클라우드 환경에서의 보안은 단순히 네트워크 보호를 넘어 서버 하드닝, 데이터 보호, 무단 접근 방지 등을 포함합니다. 특히 Kubernetes 환경에서의 인프라 보안은 중요한 문제로, Kubernetes 클러스터 내에서의 취약점을 악용하려는 공격이 증가하고 있습니다. 이번 포스트에서는 Kubernetes와 Docker 환경에서 발생할 수 있는 보안 위협 사례를 통해 살펴보고, 이를 방어할 수 있는 보안 조치에 대해 알아보겠습니다.
1. 네트워크 격리 부족(Insufficient network segmentation)
첫 번째 공격 시나리오는 공격자가 vote.com과 drizzle.com이 동일한 IP 주소를 공유하고 있다는 점을 발견하면서 시작됩니다. 이로 인해 공격자는 두 웹사이트가 동일한 서버에서 호스팅되고 있음을 알게 되며, 하나의 애플리케이션이 침해되면 같은 서버에 호스팅된 다른 애플리케이션도 모두 위협을 받게 됩니다.
대응 방법:
- 서버 격리: 중요한 애플리케이션은 별도의 네트워크나 서버에서 호스팅하여 서로의 위험을 차단하는 것이 중요합니다. 이를 통해 한 애플리케이션이 침해되더라도 다른 애플리케이션으로의 전파를 방지할 수 있습니다.
- Kubernetes API 서버 접근 제한: Kubernetes API 서버의 공인 IP를 제거하거나 VPN 접근과 같은 엄격한 접근 제어를 적용하여 무단 접근을 방지합니다.
2. Docker 포트 열림
두 번째 공격 시나리오는 공격자가 Docker의 포트 2375가 열려 있다는 사실을 발견하고 이를 통해 Docker 컨테이너에 원격으로 접속하는 것입니다. 이 포트는 기본적으로 Docker를 원격으로 관리할 수 있게 해주지만, 인증되지 않은 접근을 허용할 위험이 있습니다.
대응 방법:
- 네트워크 보안 강화: Docker 포트에 대한 접근을 신뢰할 수 있는 엔티티로 제한하는 방화벽 규칙을 적용해야 합니다. Docker 포트를 외부에 노출하지 않고, 필요한 접근만 허용하는 것이 핵심입니다.
- VM 및 네트워크 정책 강화: Kubernetes 클러스터가 호스팅되는 VM에 적절한 네트워크 정책을 적용하여 관리되는 Kubernetes 서비스 클러스터의 기본 인프라를 보호하고, 무단 접근을 방지할 수 있습니다.
3. 권한 상승
세 번째 공격 시나리오는 공격자가 RDKALV라는 알려진 취약점을 통해 권한을 상승시키는 것입니다. 이를 방지할 수 있는 방법은 바로 최소 권한 원칙(Principle of Least Privilege)을 준수하는 것입니다.
대응 방법:
- 최소 권한 원칙 적용: 컨테이너는 기능에 필요한 최소한의 권한만 부여하여 실행되어야 합니다. 권한을 최소화하면 공격자가 취약점을 악용하더라도 피해를 최소화할 수 있습니다.
- Kubernetes 대시보드 보호: 공개적으로 접근 가능한 Kubernetes 대시보드는 공격자의 악용을 용이하게 할 수 있습니다. 역할 기반 접근 제어(RBAC)를 사용하여 대시보드에 대한 접근을 제한하고, 권한이 있는 사용자만 민감한 관리 기능에 접근할 수 있도록 해야 합니다.
4. 데이터베이스 자격 증명 노출
네 번째 공격 시나리오는 공격자가 Kubernetes Pod 내의 환경 변수로 저장된 평문 형식의 데이터베이스 자격 증명을 발견하고 이를 통해 데이터베이스에 접근하는 것입니다. 이러한 자격 증명은 민감한 정보로, 공격자가 이를 악용할 수 있습니다.
대응 방법:
- Kubernetes Secrets 사용: Kubernetes에서는 민감한 데이터를 Secrets 객체로 관리하고, 이를 암호화하여 저장하는 것이 매우 중요합니다. 이러한 방법을 통해 공격자가 Pod 환경에 접근하더라도 자격 증명을 보호할 수 있습니다. (=> 절반은 맞고 절반은 틀림. 특별한 조치가 취해지지 않은 일반적인 경우, Pod에 접근 가능하면 마운팅된 Secret에 접근 가능함.)
- etcd 보호: etcd는 Kubernetes의 핵심 저장소로, 이곳에 저장된 데이터는 매우 중요한 정보를 포함합니다. 이를 암호화하고, TLS 인증을 사용하여 통신을 보호함으로써 데이터를 안전하게 관리할 수 있습니다.
5. etcd 보호
etcd는 Kubernetes의 핵심 구성 요소로, 이곳에 저장된 데이터는 클러스터의 상태 정보를 포함하고 있습니다. 이 데이터를 보호하지 않으면 공격자는 클러스터의 중요한 정보를 쉽게 변경하거나 탈취할 수 있습니다.
대응 방법:
- etcd 데이터 암호화: etcd 내의 데이터를 암호화하여 기밀성을 보장할 수 있습니다. 또한, TLS 인증을 사용하여 데이터를 전송할 때의 무결성을 보호할 수 있습니다.
- RBAC 적용: etcd에 대한 접근을 제한하여, 권한이 있는 사용자만 데이터를 수정하거나 조회할 수 있도록 해야 합니다. 정기적인 백업과 복구 계획도 중요한 보안 전략입니다.