Kubernetes Hardening

Support HackTricks

Tools to analyse a cluster

Kubescape는 위험 분석, 보안 준수, RBAC 시각화 및 이미지 취약점 스캔을 포함한 다중 클라우드 K8s 단일 창을 제공하는 K8s 오픈 소스 도구입니다. Kubescape는 K8s 클러스터, YAML 파일 및 HELM 차트를 스캔하여 여러 프레임워크(예: NSA-CISA, MITRE ATT&CK®)에 따라 잘못된 구성, 소프트웨어 취약점 및 RBAC(역할 기반 접근 제어) 위반을 CI/CD 파이프라인의 초기 단계에서 감지하고, 위험 점수를 즉시 계산하며, 시간에 따른 위험 추세를 보여줍니다.

kubescape scan --verbose

도구 kube-benchCIS Kubernetes Benchmark에 문서화된 검사를 실행하여 Kubernetes가 안전하게 배포되었는지 확인하는 도구입니다. 다음 중에서 선택할 수 있습니다:

  • 컨테이너 내부에서 kube-bench 실행 (호스트와 PID 네임스페이스 공유)

  • 호스트에 kube-bench를 설치하는 컨테이너를 실행한 후, 호스트에서 직접 kube-bench 실행

  • Releases page에서 최신 바이너리 설치,

  • 소스에서 컴파일.

도구 kubeaudit는 다양한 보안 문제에 대해 Kubernetes 클러스터를 감사하는 명령줄 도구이자 Go 패키지입니다.

Kubeaudit는 클러스터 내의 컨테이너에서 실행 중인지 감지할 수 있습니다. 그렇다면 해당 클러스터의 모든 Kubernetes 리소스를 감사하려고 시도합니다:

kubeaudit all

이 도구는 또한 autofix 인수를 가지고 있어 감지된 문제를 자동으로 수정합니다.

도구 kube-hunter는 Kubernetes 클러스터의 보안 취약점을 탐색합니다. 이 도구는 Kubernetes 환경에서 보안 문제에 대한 인식과 가시성을 높이기 위해 개발되었습니다.

kube-hunter --remote some.node.com

Kubei는 사용자가 Kubernetes 클러스터의 정확하고 즉각적인 위험 평가를 받을 수 있도록 하는 취약점 스캐닝 및 CIS Docker 벤치마크 도구입니다. Kubei는 애플리케이션 포드 및 시스템 포드의 이미지를 포함하여 Kubernetes 클러스터에서 사용되는 모든 이미지를 스캔합니다.

KubiScan은 Kubernetes의 역할 기반 접근 제어(RBAC) 인증 모델에서 위험한 권한을 스캔하는 도구입니다.

Mkat는 다른 도구와 비교하여 고위험 검사를 테스트하기 위해 구축된 도구입니다. 주로 3가지 모드를 가지고 있습니다:

  • find-role-relationships: 어떤 AWS 역할이 어떤 포드에서 실행되고 있는지 찾습니다.

  • find-secrets: Pods, ConfigMaps 및 Secrets와 같은 K8s 리소스에서 비밀을 식별하려고 시도합니다.

  • test-imds-access: 포드를 실행하고 메타데이터 v1 및 v2에 접근하려고 시도합니다. 경고: 클러스터에서 포드를 실행하므로 매우 조심해야 합니다. 이 작업을 원하지 않을 수 있습니다!

Audit IaC Code

Popeye는 라이브 Kubernetes 클러스터를 스캔하고 배포된 리소스 및 구성의 잠재적인 문제를 보고하는 유틸리티입니다. 디스크에 있는 것이 아니라 배포된 내용을 기반으로 클러스터를 정리합니다. 클러스터를 스캔함으로써 잘못된 구성을 감지하고 모범 사례가 적용되도록 도와주어 향후 문제를 예방합니다. Kubernetes 클러스터를 운영할 때 직면하는 인지 과부하를 줄이는 것을 목표로 합니다. 또한 클러스터가 메트릭 서버를 사용하는 경우, 잠재적인 리소스 과다/과소 할당을 보고하고 클러스터의 용량이 부족할 경우 경고하려고 시도합니다.

KICS는 다음 코드로서의 인프라 솔루션에서 보안 취약점, 준수 문제 및 인프라 잘못된 구성을 찾습니다: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM 및 OpenAPI 3.0 사양

Checkov는 인프라 코드에 대한 정적 코드 분석 도구입니다.

Terraform, Terraform 계획, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless 또는 ARM 템플릿을 사용하여 프로비저닝된 클라우드 인프라를 스캔하고 그래프 기반 스캔을 사용하여 보안 및 준수 잘못된 구성을 감지합니다.

kube-score는 Kubernetes 객체 정의의 정적 코드 분석을 수행하는 도구입니다.

설치 방법:

배포판명령어 / 링크

macOS, Linux 및 Windows용 미리 빌드된 바이너리

Docker

docker pull zegl/kube-score (Docker Hub)

Homebrew (macOS 및 Linux)

brew install kube-score

Krew (macOS 및 Linux)

kubectl krew install score

Tips

Kubernetes PodSecurityContext 및 SecurityContext

Pods의 보안 컨텍스트(PodSecurityContext 사용)와 실행될 컨테이너의 보안 컨텍스트(SecurityContext 사용)를 구성할 수 있습니다. 자세한 내용은 다음을 참조하세요:

Kubernetes SecurityContext(s)

Kubernetes API Hardening

Kubernetes Api Server에 대한 접근을 보호하는 것이 매우 중요합니다. 충분한 권한을 가진 악의적인 행위자가 이를 남용하고 환경에 많은 피해를 줄 수 있습니다. 접근(API 서버에 접근할 수 있는 출처를 화이트리스트하고 다른 모든 연결을 거부)과 인증을 모두 안전하게 하는 것이 중요합니다(최소 권한 원칙을 따름). 그리고 절대 익명 요청을 허용하지 마십시오.

일반 요청 프로세스: 사용자 또는 K8s ServiceAccount –> 인증 –> 권한 부여 –> 승인 제어.

:

  • 포트를 닫습니다.

  • 익명 접근을 피합니다.

  • NodeRestriction; 특정 노드에서 API에 접근하지 못하도록 합니다.

  • 기본적으로 kubelet이 node-restriction.kubernetes.io/ 접두사가 있는 레이블을 추가/제거/업데이트하는 것을 방지합니다. 이 레이블 접두사는 관리자가 작업 부하 격리를 위해 Node 객체에 레이블을 지정하는 데 예약되어 있으며, kubelet은 해당 접두사가 있는 레이블을 수정할 수 없습니다.

  • 또한 kubelet이 이러한 레이블 및 레이블 접두사를 추가/제거/업데이트할 수 있도록 허용합니다.

  • 레이블을 사용하여 안전한 작업 부하 격리를 보장합니다.

  • 특정 포드가 API에 접근하지 못하도록 합니다.

  • ApiServer가 인터넷에 노출되지 않도록 합니다.

  • 무단 접근 RBAC을 피합니다.

  • 방화벽 및 IP 화이트리스트가 있는 ApiServer 포트.

SecurityContext Hardening

기본적으로 다른 사용자가 지정되지 않으면 Pod가 시작될 때 루트 사용자가 사용됩니다. 다음과 유사한 템플릿을 사용하여 더 안전한 컨텍스트 내에서 애플리케이션을 실행할 수 있습니다:

apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: true

일반 하드닝

Kubernetes 환경을 필요에 따라 자주 업데이트하여 다음을 유지해야 합니다:

  • 종속성 최신 상태.

  • 버그 및 보안 패치.

릴리스 주기: 매 3개월마다 새로운 마이너 릴리스가 있습니다 -- 1.20.3 = 1(주요).20(마이너).3(패치)

Kubernetes 클러스터를 업데이트하는 가장 좋은 방법은 (다음에서 여기):

  • 다음 순서에 따라 마스터 노드 구성 요소를 업그레이드합니다:

  • etcd (모든 인스턴스).

  • kube-apiserver (모든 제어 플레인 호스트).

  • kube-controller-manager.

  • kube-scheduler.

  • 클라우드 컨트롤러 매니저, 사용하는 경우.

  • kube-proxy, kubelet과 같은 워커 노드 구성 요소를 업그레이드합니다.

Support HackTricks

Last updated