Kubernetes 보안 강화

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

클러스터 분석 도구

Steampipe - Kubernetes Compliance

이 도구는 Kubernetes 클러스터에 대한 여러 규정 준수 검사를 수행합니다. CIS, National Security Agency (NSA), 및 Cybersecurity and Infrastructure Security Agency (CISA)의 Kubernetes 보안 강화를 위한 Cybersecurity 기술 보고서를 지원합니다.

# Install Steampipe
brew install turbot/tap/powerpipe
brew install turbot/tap/steampipe
steampipe plugin install kubernetes

# Start the service
steampipe service start

# Install the module
mkdir dashboards
cd dashboards
powerpipe mod init
powerpipe mod install github.com/turbot/steampipe-mod-kubernetes-compliance

# Run the module
powerpipe server

Kubescape

Kubescape는 리스크 분석, 보안 컴플라이언스, RBAC 시각화 및 이미지 취약점 스캐닝을 포함하는 멀티-클라우드 K8s 단일 관리 창(single pane of glass)을 제공하는 K8s 오픈소스 도구입니다. Kubescape는 K8s 클러스터, YAML 파일, HELM 차트 등을 스캔하여 여러 프레임워크 (such as the NSA-CISA , MITRE ATT&CK®), 소프트웨어 취약점, 및 CI/CD 파이프라인 초기 단계에서의 RBAC (role-based-access-control) 위반을 탐지하고 즉시 리스크 점수를 계산하며 시간에 따른 리스크 추세를 보여줍니다.

curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose

Popeye

Popeye는 라이브 Kubernetes 클러스터를 스캔하고 배포된 리소스 및 구성에서 발생할 수 있는 잠재적 문제를 보고하는 유틸리티입니다. 디스크에 있는 내용이 아니라 실제로 배포된 것에 기반해 클러스터를 정리(sanitize)합니다. 클러스터를 스캔하여 잘못된 구성(misconfigurations)을 감지하고 모범 사례가 적용되도록 도와 향후 골칫거리를 예방합니다. 이는 실제 환경에서 Kubernetes 클러스터를 운영할 때 맞닥뜨리는 인지적 _over_load를 줄이는 것을 목표로 합니다. 또한 클러스터가 metric-server를 사용 중이라면 리소스의 과/부족 할당을 보고하고 클러스터 용량이 부족해질 경우 경고하려 시도합니다.

Kube-bench

The tool kube-bench is a tool that checks whether Kubernetes is deployed securely by running the checks documented in the CIS Kubernetes Benchmark.
You can choose to:

  • run kube-bench from inside a container (sharing PID namespace with the host)
  • run a container that installs kube-bench on the host, and then run kube-bench directly on the host
  • install the latest binaries from the Releases page,
  • compile it from source.

Kubeaudit

[DEPRECATED] 도구 kubeaudit는 다양한 보안 문제에 대해 Kubernetes 클러스터를 감사(audit)하는 커맨드라인 도구이자 Go 패키지입니다.

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

kubeaudit all

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

Kube-hunter

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

kube-hunter --remote some.node.com

Trivy

Trivy 은 보안 문제를 찾는 스캐너를 제공하며, 다음 대상에서 이러한 문제를 탐지할 수 있습니다:

  • 컨테이너 이미지
  • 파일시스템
  • Git 리포지토리(원격)
  • 가상 머신 이미지
  • Kubernetes

Kubei

[유지관리되지 않는 것으로 보임]

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

KubiScan

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

Managed Kubernetes Auditing Toolkit

Mkat 은 다른 도구들과 비교해 고위험 검사를 테스트하기 위해 만들어진 도구입니다. 주로 3가지 모드가 있습니다:

  • find-role-relationships: 어떤 AWS 역할이 어떤 파드에서 실행되는지 찾습니다.
  • find-secrets: Pods, ConfigMaps, and Secrets와 같은 K8s 리소스에서 비밀을 식별하려 시도합니다.
  • test-imds-access: 파드를 실행해 metadata v1 및 v2에 접근을 시도합니다. WARNING: 클러스터에서 파드를 실행하므로, 원치 않을 수 있으니 매우 주의하세요!

IaC 코드 감사

KICS

KICS 는 다음 Infrastructure as Code 솔루션에서 보안 취약점, 규정 준수 문제 및 인프라 구성 오류를 찾아냅니다: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, 및 OpenAPI 3.0 사양

Checkov

Checkov 는 infrastructure-as-code를 위한 정적 코드 분석 도구입니다.

이는 Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless 또는 ARM Templates로 프로비저닝된 클라우드 인프라를 스캔하고, 그래프 기반 스캐닝을 사용해 보안 및 규정 준수 구성 오류를 탐지합니다.

Kube-score

kube-score 는 Kubernetes 오브젝트 정의에 대한 정적 코드 분석을 수행하는 도구입니다.

설치 방법:

배포 방법명령 / 링크
macOS, Linux, Windows용 사전 빌드 바이너리GitHub releases
Dockerdocker pull zegl/kube-score (Docker Hub)
Homebrew (macOS 및 Linux)brew install kube-score
Krew (macOS 및 Linux)kubectl krew install score

YAML 파일 및 Helm Charts 분석 도구

Kube-linter

# Install Kube-linter
brew install kube-linter

# Run Kube-linter
## lint ./path/to/yaml/or/chart

Checkov

# Install Checkov
pip install checkov

# Run Checkov
checkov -d ./path/to/yaml/or/chart

kube‑score

# Install kube-score
brew install kube-score

# Run kube-score
kube-score score ./path/to/yaml
# or
helm template chart /path/to/chart | kube-score score -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kube-score score -

Kubesec

# Install Kubesec
## Download from https://github.com/controlplaneio/kubesec/releases

# Run Kubesec in a yaml
kubesec scan ./path/to/yaml
# or
helm template chart /path/to/chart | kubesec scan -
# or if the chart needs some values
helm template chart /path/to/chart \
--set 'config.urls[0]=https://dummy.backend.internal' \
| kubesec scan -

Kubernetes PodSecurityContext 및 SecurityContext

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

Kubernetes SecurityContext(s)

Kubernetes API 하드닝

Kubernetes Api Server에 대한 접근을 보호하는 것은 매우 중요합니다. 권한이 충분한 악의적 행위자가 이를 악용하면 환경에 다양한 방식으로 심각한 피해를 줄 수 있습니다.
API Server에 대한 접근(whitelist 출처로 API Server 접근을 허용하고 다른 모든 연결은 차단)과 authentication을 모두 보호하는 것이 중요합니다(원칙인 least privilege를 따르십시오). 그리고 절대 anonymous requests허용하지 마십시오.

일반적인 요청 처리 과정:
User 또는 K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.

:

  • 포트 닫기.
  • 익명 접근을 피하세요.
  • NodeRestriction: 특정 노드에서 API에 대한 접근 금지.
  • https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction
  • 기본적으로 kubelets가 node-restriction.kubernetes.io/ 접두사가 붙은 레이블을 추가/제거/수정하는 것을 방지합니다. 이 레이블 접두사는 관리자가 Node 객체에 워크로드 격리를 위해 라벨링하는 용도로 예약되어 있으며, kubelets는 해당 접두사를 가진 레이블을 수정할 수 없습니다.
  • 또한 kubelets가 이러한 레이블과 레이블 접두사를 추가/제거/수정할 수 있도록 허용합니다.
  • 레이블을 통해 워크로드의 안전한 격리를 보장하세요.
  • 특정 Pods가 API에 접근하지 못하게 하세요.
  • ApiServer가 인터넷에 노출되지 않도록 하세요.
  • 무단 접근을 방지하도록 RBAC을 적용하세요.
  • ApiServer 포트에 대해 방화벽 및 IP 화이트리스트 적용.

SecurityContext 하드닝

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

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 환경을 필요한 빈도로 업데이트하여 다음을 유지해야 합니다:

  • 의존성 최신 상태 유지.
  • 버그 및 보안 패치 적용.

Release cycles: 3개월마다 새로운 minor 릴리스가 배포됩니다 – 1.20.3 = 1(Major).20(Minor).3(patch)

Kubernetes Cluster를 업데이트하는 가장 좋은 방법은 (출처: here):

  • 다음 순서에 따라 마스터 노드 구성요소를 업그레이드하세요:
  • etcd (모든 인스턴스).
  • kube-apiserver (모든 컨트롤 플레인 호스트).
  • kube-controller-manager.
  • kube-scheduler.
  • cloud controller manager (사용 중인 경우).
  • kube-proxy, kubelet 등 Worker Node 구성요소를 업그레이드하세요.

Kubernetes 모니터링 및 보안:

  • Kyverno Policy Engine
  • Cilium Tetragon - eBPF 기반의 보안 관찰성 및 런타임 강제 적용
  • 네트워크 보안 정책
  • Falco - 런타임 보안 모니터링 및 탐지

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기