Kubernetes Hardening

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Bir kümeyi analiz etmek için araçlar

Steampipe - Kubernetes Compliance

Bu, Kubernetes kümesi üzerinde bir dizi uyumluluk kontrolü gerçekleştirir. CIS, National Security Agency (NSA) ve Cybersecurity and Infrastructure Security Agency (CISA) tarafından yayınlanan Kubernetes hardening ile ilgili siber güvenlik teknik raporlarını destekler.

# 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 , risk analizi, güvenlik uyumluluğu, RBAC görselleştiricisi ve image vulnerabilities scanning gibi özellikleri içeren multi-cloud K8s için tek bir yönetim paneli sağlayan açık kaynaklı bir K8s aracıdır. Kubescape, K8s clusters, YAML dosyalarını ve HELM charts’larını tarar; çoklu frameworklere (ör. NSA-CISA , MITRE ATT&CK®) göre yanlış yapılandırmaları, yazılım zafiyetlerini ve CI/CD hattının erken aşamalarında RBAC (role-based-access-control) ihlallerini tespit eder, risk puanını anında hesaplar ve zaman içindeki risk trendlerini gösterir.

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

Popeye

Popeye canlı Kubernetes cluster’ını tarayan ve konuşlandırılmış kaynaklar ve yapılandırmalarla ilgili potansiyel sorunları raporlayan bir yardımcı araçtır. Cluster’ınızı diskte duranlardan değil, gerçekten deploy edilmiş olanlardan hareketle temizler. Cluster’ınızı tarayarak yanlış yapılandırmaları tespit eder ve en iyi uygulamaların yerinde olmasını sağlamanıza yardımcı olur; böylece gelecekteki sorunları önler. Amaç, sahada bir Kubernetes cluster’ını işletirken karşılaşılan bilişsel _over_load’u azaltmaktır. Ayrıca, cluster’ınız metric-server kullanıyorsa, olası kaynak fazla/eksik tahsislerini raporlar ve cluster’ınız kapasiteyi tüketirse sizi uyarmaya çalışır.

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] The tool kubeaudit is a command line tool and a Go package to audit Kubernetes clusters for various different security concerns.

Kubeaudit can detect if it is running within a container in a cluster. If so, it will try to audit all Kubernetes resources in that cluster:

kubeaudit all

Bu araç ayrıca tespit edilen sorunları otomatik olarak düzeltmek için autofix argümanına sahiptir.

Kube-hunter

[KULLANIMDIŞI] Araç kube-hunter Kubernetes kümelerindeki güvenlik zayıflıklarını tespit eder. Araç, Kubernetes ortamlarındaki güvenlik sorunları hakkında farkındalığı ve görünürlüğü artırmak için geliştirilmiştir.

kube-hunter --remote some.node.com

Trivy

Trivy, güvenlik sorunlarını arayan tarayıcılara sahiptir ve bu sorunları bulabileceği hedefler şunlardır:

  • Container imajı
  • Dosya sistemi
  • Git Deposu (uzaktan)
  • Sanal Makine İmajı
  • Kubernetes

Kubei

[Görünüşe göre bakımı yapılmıyor]

Kubei, kullanıcıların kubernetes kümelerinin doğru ve anlık risk değerlendirmesini almasını sağlayan bir zafiyet tarama ve CIS Docker kıyaslama aracıdır. Kubei, bir Kubernetes kümesinde kullanılan tüm imajları tarar; buna uygulama pod’larının ve sistem pod’larının imajları dahildir.

KubiScan

KubiScan, Kubernetes’in Role-based access control (RBAC) yetkilendirme modelinde riskli izinleri taramak için kullanılan bir araçtır.

Managed Kubernetes Auditing Toolkit

Mkat, diğer araçlarla karşılaştırıldığında farklı tipte yüksek riskli kontrolleri test etmek için oluşturulmuş bir araçtır. Temelde 3 farklı moda sahiptir:

  • find-role-relationships: Hangi AWS rollerinin hangi pod’larda çalıştığını bulur
  • find-secrets: Pod’lar, ConfigMaps ve Secrets gibi K8s kaynaklarında gizli bilgileri tanımlamaya çalışır.
  • test-imds-access: Pod’lar çalıştırıp metadata v1 ve v2’ye erişmeye çalışır. UYARI: Bu, cluster içinde bir pod çalıştıracaktır; çok dikkatli olun çünkü bunu yapmak istemeyebilirsiniz!

IaC Kodunu Denetle

KICS

KICS, aşağıdaki Infrastructure as Code çözümlerinde güvenlik zafiyetlerini, uyumluluk sorunlarını ve altyapı yanlış yapılandırmalarını bulur: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM ve OpenAPI 3.0 spesifikasyonları

Checkov

Checkov, infrastructure-as-code için statik kod analiz aracıdır.

Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless veya ARM Templates kullanılarak sağlanan bulut altyapısını tarar ve grafik tabanlı tarama kullanarak güvenlik ve uyumluluk yanlış yapılandırmalarını tespit eder.

Kube-score

kube-score, Kubernetes nesne tanımlarınızın statik kod analizini yapan bir araçtır.

To install:

DağıtımKomut / Bağlantı
Pre-built binaries for macOS, Linux, and WindowsGitHub releases
Dockerdocker pull zegl/kube-score (Docker Hub)
Homebrew (macOS and Linux)brew install kube-score
Krew (macOS and Linux)kubectl krew install score

Tools to analyze YAML files & 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 -

Scan bağımlılık sorunları

Scan imajlar

#!/bin/bash
export images=$(kubectl get pods --all-namespaces -o jsonpath="{range .items[]}{.spec.containers[].image}{'\n'}{end}" | sort | uniq)
echo "All images found: $images"
echo ""
echo ""
for image in $images; do
# Run trivy scan and save JSON output
trivy image --format json --output /tmp/result.json --severity HIGH,CRITICAL "$image" >/dev/null 2>&1
# Extract binary targets that have vulnerabilities
binaries=$(jq -r '.Results[] | select(.Vulnerabilities != null) | .Target' /tmp/result.json)
if [ -n "$binaries" ]; then
echo "- **Image:** $image"
while IFS= read -r binary; do
echo "  - **Binary:** $binary"
jq -r --arg target "$binary" '
.Results[] | select(.Target == $target) | .Vulnerabilities[] |
"    - **\(.Title)** (\(.Severity)): Affecting `\(.PkgName)` fixed in version `\(.FixedVersion)` (current version is `\(.InstalledVersion)`)."
' /tmp/result.json
done <<< "$binaries"
echo ""
echo ""
echo ""
fi
done

Helm charts’larını tara

#!/bin/bash
# scan-helm-charts.sh
# This script lists all Helm releases, renders their manifests,
# and then scans each manifest with Trivy for configuration issues.

# Check that jq is installed
if ! command -v jq &>/dev/null; then
echo "jq is required but not installed. Please install jq and rerun."
exit 1
fi

# List all helm releases and extract namespace and release name
echo "Listing Helm releases..."
helm list --all-namespaces -o json | jq -r '.[] | "\(.namespace) \(.name)"' > helm_releases.txt

# Check if any releases were found
if [ ! -s helm_releases.txt ]; then
echo "No Helm releases found."
exit 0
fi

# Loop through each Helm release and scan its rendered manifest
while IFS=" " read -r namespace release; do
echo "---------------------------------------------"
echo "Scanning Helm release '$release' in namespace '$namespace'..."
# Render the Helm chart manifest
manifest_file="${release}-manifest.yaml"
helm get manifest "$release" -n "$namespace" > "$manifest_file"
if [ $? -ne 0 ]; then
echo "Failed to get manifest for $release in $namespace. Skipping."
continue
fi
# Scan the manifest with Trivy (configuration scan)
echo "Running Trivy config scan on $manifest_file..."
trivy config --severity MEDIUM,HIGH,CRITICAL "$manifest_file"
echo "Completed scan for $release."
done < helm_releases.txt

echo "---------------------------------------------"
echo "Helm chart scanning complete."

İpuçları

Kubernetes PodSecurityContext and SecurityContext

Pod’ların güvenlik bağlamını (with PodSecurityContext) ve çalıştırılacak container’ların güvenlik bağlamını (with SecurityContext) yapılandırabilirsiniz. Daha fazla bilgi için şu kaynağa bakın:

Kubernetes SecurityContext(s)

Kubernetes API Sertleştirme

Kubernetes Api Server erişimini korumak çok önemlidir; yeterli ayrıcalığa sahip kötü niyetli bir aktör bunu suistimal edebilir ve ortama birçok şekilde zarar verebilir.
Hem erişimi (API Server’a erişim için kökenleri whitelist yapıp diğer bağlantıları reddetmek) hem de authentication (en az ayrıcalık ilkesini takip ederek) güvence altına almak önemlidir. Ve kesinlikle anonim isteklere asla izin vermeyin.

Yaygın İstek süreci:
Kullanıcı veya K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.

İpuçları:

  • Portları kapatın.
  • Anonim erişimden kaçının.
  • NodeRestriction; belirli node’lardan API’ye erişimi engelleyin.
  • https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction
  • Temelde kubelet’lerin node-restriction.kubernetes.io/ önekiyle başlayan label’ları eklemesini/kaldırmasını/güncellemesini engeller. Bu label öneki, yöneticilerin Node nesnelerini workload izolasyonu amacıyla etiketlemeleri için ayrılmıştır ve kubelet’lerin bu önekle başlayan label’ları değiştirmesine izin verilmeyecektir.
  • Ayrıca, kubelet’lerin bu label’ları ve label öneklerini eklemesine/kaldırmasına/güncellemesine de izin verir.
  • Label’larla güvenli workload izolasyonunu sağlayın.
  • Belirli pod’ların API erişimini engelleyin.
  • ApiServer’ın internete açılmasını engelleyin.
  • Yetkisiz erişimi önleyin (RBAC).
  • ApiServer portunu firewall ve IP whitelist ile koruyun.

SecurityContext Sertleştirme

Varsayılan olarak, başka bir kullanıcı belirtilmemişse bir Pod başlatıldığında root kullanıcı kullanılır. Uygulamanızı aşağıdakine benzer bir şablon kullanarak daha güvenli bir bağlamda çalıştırabilirsiniz:

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

Genel Hardening

Kubernetes ortamınızı aşağıdakileri sağlamak için gerektiği kadar sık güncellemelisiniz:

  • Bağımlılıkların güncel olması.
  • Hata ve güvenlik yamaları.

Release cycles: Her 3 ayda yeni bir minor sürüm çıkar – 1.20.3 = 1(Major).20(Minor).3(patch)

Kubernetes Cluster’ı güncellemenin en iyi yolu (kaynak olarak here):

  • Master Node bileşenlerini şu sırayla yükseltin:
  • etcd (tüm örnekler).
  • kube-apiserver (tüm control plane host’ları).
  • kube-controller-manager.
  • kube-scheduler.
  • cloud controller manager (kullanıyorsanız).
  • Worker Node bileşenlerini, örn. kube-proxy, kubelet, yükseltin.

Kubernetes monitoring & security:

  • Kyverno Policy Engine
  • Cilium Tetragon - eBPF tabanlı güvenlik gözlemlenebilirliği ve çalışma zamanı zorlaması
  • Ağ Güvenlik Politikaları
  • Falco - çalışma zamanı güvenlik izleme ve tespit

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin