관리되는 Kubernetes 위협 요소
관리되는 Kubernetes 환경에서 보안을 해결하려면 다양한 인스턴스 전반의 위협을 이해하고 완화해야 합니다. 특정 사례의 위협 요인에 대한 분석은 다음과 같습니다.
손상된 계정
- 위협 요소: 공격자는 도난당한 자격 증명, API 토큰 또는 키를 통해 Kubernetes 클러스터에 대한 액세스 권한을 얻습니다. 이로 인해 무단 액세스, 데이터 도난, 악의적인 배포가 발생할 수 있습니다.
- 완화: 강력한 인증 메커니즘, MFA(Multi-Factor Authentication), 정기적인 자격 증명 회전 및 최소 권한 액세스 원칙을 구현합니다.
취약하거나 잘못 구성된 이미지
- 위협 요소: 취약성이나 잘못된 구성이 있는 컨테이너 이미지는 일단 배포되면 공격자가 악용할 수 있습니다. 이러한 취약성에는 오래된 소프트웨어, 안전하지 않은 기본 설정 또는 포함된 비밀이 있을 수 있습니다.
- 완화: 이미지 스캐닝 도구를 사용하여 배포 전에 취약성을 검색하고, 이미지 출처 정책을 적용하고, 컨테이너 이미지 서명 프로세스를 채택합니다.
환경 구성 오류
- 위협 요소: Kubernetes 설정 또는 배포 설명자의 구성이 잘못되면 클러스터가 공격에 노출될 수 있습니다. 일반적인 문제로는 노출된 대시보드 인터페이스, 과도한 권한이 부여된 RBAC 설정, 보호되지 않은 엔드포인트 등이 있습니다.
- 완화: 보안 구성을 위한 모범 사례를 따르고, 자동화된 도구를 사용하여 정기적으로 구성을 감사하고, 허용 컨트롤러를 사용하여 정책 준수를 적용합니다.
애플리케이션 공격 수준
- 위협 요소: 컨테이너에서 실행되는 애플리케이션은 SQL 주입 또는 XSS(교차 사이트 스크립팅)와 같은 기존 웹 공격 벡터에 취약할 수 있으며, 이로 인해 컨테이너가 손상되거나 클러스터가 추가로 악용될 수 있습니다.
- 완화: 입력 유효성 검사 및 출력 인코딩과 같은 애플리케이션 보안 모범 사례를 채택하고 WAF(Web Application Firewall)를 사용합니다. 정적 및 동적 분석 도구를 포함하여 연속 통합(CI)/지속적인 업데이트 및/또는 배포(CD) 파이프라인에 보안을 구현합니다.
노드 수준 공격
- 위협 요소: 공격자가 Kubernetes 노드에 대한 액세스 권한을 얻으면 잠재적으로 권한을 상승시켜 전체 클러스터를 제어할 수 있습니다. 취약성은 오래된 운영 체제나 Kubernetes 구성 요소로 인해 발생할 수 있습니다.
- 완화: 최신 보안 패치로 노드를 업데이트하고, 네트워크 정책 및 방화벽을 사용하여 노드에 대한 액세스를 제한하고, HIDS(호스트 기반 침입 탐지 시스템)를 사용합니다.
무단 트래픽
- 위협 요소: 네트워크 정책이 올바르게 구성되지 않은 경우 클러스터에 대한 무단 액세스가 발생할 수 있으며, 이로 인해 공격자가 데이터를 반출하거나, 맬웨어를 배달하거나, 노출된 서비스를 악용할 수 있습니다.
- 완화: 엄격한 네트워크 정책을 구현하여 수신 및 송신 트래픽을 제어하고, 네임스페이스를 사용하여 중요한 워크로드를 분리하고, 비정상적인 패턴이 있는지 트래픽을 모니터링합니다.
관리되는 Kubernetes 환경에서 이러한 위협을 해결하려면 Kubernetes 관련 사례와 기존 보안 조치를 모두 포괄하는 계층화된 보안 방식이 필요합니다. 지속적인 모니터링, 정기 감사, 클러스터의 모든 측면에서 최소 권한 원칙 준수는 강력한 Kubernetes 보안 전략의 필수 구성 요소입니다.
일반적인 공격 기법
- 취약한 이미지 활용 - 클러스터에 대한 초기 액세스를 가능하게 하는 클러스터의 공용 취약 애플리케이션입니다. 악명 높은 사례: SolarWinds, Log4j
- 노출된 애플리케이션에 액세스 - 인터넷에 노출된 중요한 인터페이스는 보안 위험을 초래합니다. 일부 자주 사용되는 프레임워크는 인터넷에 노출되도록 의도되지 않았으므로 기본적으로 인증이 필요하지 않습니다. 따라서 이를 인터넷에 노출하면 악의적인 작업자가 코드를 실행하거나 클러스터에 컨테이너를 배포할 수 있는 중요한 인터페이스에 대한 인증되지 않은 액세스가 허용됩니다. 악용된 것으로 확인된 인터페이스의 예로는 Apache NiFi, Kubeflow, Argo Workflows, Weave Scope 및 Kubernetes 대시보드가 있습니다.
- 백도어 컨테이너 배포 - 공격자는 클러스터의 컨테이너에서 악성 코드를 실행합니다. 공격자는 DaemonSets 또는 배포와 같은 Kubernetes 컨트롤러를 사용하여 클러스터의 노드 하나 또는 전체에서 일정한 수의 컨테이너가 실행되도록 했습니다.
- 권한 있는 역할 SA에 대한 남용 – SA(서비스 계정)는 Kubernetes의 애플리케이션 ID를 나타냅니다. 기본적으로 SA는 클러스터에 만들어진 모든 Pod에 탑재됩니다. SA를 사용하면 Pod의 컨테이너가 Kubernetes API 서버에 요청을 보낼 수 있습니다. Pod에 대한 액세스 권한을 가져오는 공격자는 SA 권한에 따라 SA 토큰에 액세스하고 클러스터에서 작업을 수행합니다. RBAC가 사용하도록 설정되지 않은 경우 SA는 클러스터에서 무제한 권한을 갖습니다. RBAC가 사용하도록 설정된 경우 해당 권한은 연결된 RoleBinding 및 ClusterRoleBinding에 의해 결정됩니다.
- 호스트로 이스케이프 - 호스트 경로 볼륨은 호스트의 디렉터리나 파일을 컨테이너에 탑재합니다. 클러스터에 새 컨테이너를 만들 수 있는 권한이 있는 공격자는 쓰기 가능한 hostPath 볼륨이 있는 컨테이너를 만들고 기본 호스트에서 지속성을 얻을 수 있습니다. 예를 들어, 후자는 호스트에서 cron 작업을 만들어 얻을 수 있습니다.