Kubernetes Ενίσχυση ασφάλειας
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Εργαλεία για ανάλυση ενός cluster
Steampipe - Kubernetes Compliance
Εκτελεί αρκετούς ελέγχους συμμόρφωσης στο Kubernetes cluster. Περιλαμβάνει υποστήριξη για CIS, National Security Agency (NSA) και Cybersecurity and Infrastructure Security Agency (CISA) — την τεχνική έκθεση για την ενίσχυση της ασφάλειας του Kubernetes.
# 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 είναι ένα εργαλείο ανοιχτού κώδικα για K8s που παρέχει ένα multi-cloud K8s single pane of glass, περιλαμβάνοντας ανάλυση κινδύνου, συμμόρφωση ασφάλειας, RBAC visualizer και image vulnerabilities scanning. Το Kubescape σκανάρει K8s clusters, YAML files και HELM charts, εντοπίζοντας misconfigurations σύμφωνα με πολλαπλά frameworks (όπως το NSA-CISA , MITRE ATT&CK®), software vulnerabilities, και RBAC (role-based-access-control) violations στα πρώιμα στάδια του CI/CD pipeline, υπολογίζει άμεσα το risk score και εμφανίζει risk trends με την πάροδο του χρόνου.
curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash
kubescape scan --verbose
Popeye
Popeye είναι ένα βοηθητικό εργαλείο που σαρώει ζωντανό Kubernetes cluster και αναφέρει πιθανά προβλήματα με τους αναπτυγμένους πόρους και τις διαμορφώσεις. Εξυγιάνει το cluster σας με βάση ό,τι έχει αναπτυχθεί και όχι ό,τι βρίσκεται σε δίσκο. Σαρώνει το cluster σας, εντοπίζει λανθασμένες διαμορφώσεις και σας βοηθά να διασφαλίσετε ότι εφαρμόζονται οι βέλτιστες πρακτικές, αποτρέποντας έτσι μελλοντικά προβλήματα. Στοχεύει στη μείωση του cognitive _over_load που αντιμετωπίζει κανείς όταν λειτουργεί ένα Kubernetes cluster στο πεδίο. Επιπλέον, εάν το cluster σας χρησιμοποιεί metric-server, αναφέρει πιθανές υπερεκχωρήσεις/υποεκχωρήσεις πόρων και προσπαθεί να σας προειδοποιήσει σε περίπτωση που το cluster σας εξαντλήσει τη χωρητικότητα.
Kube-bench
Το εργαλείο kube-bench ελέγχει εάν το Kubernetes έχει αναπτυχθεί με ασφάλεια εκτελώντας τους ελέγχους που τεκμηριώνονται στο CIS Kubernetes Benchmark.
Μπορείτε να επιλέξετε να:
- 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
- εγκαταστήσετε τα πιο πρόσφατα binaries από τη Releases page,
- κάνετε compile από τον πηγαίο κώδικα.
Kubeaudit
[DEPRECATED] Το εργαλείο kubeaudit είναι ένα command line εργαλείο και ένα Go πακέτο για να audit Kubernetes clusters για διάφορα ζητήματα ασφάλειας.
Kubeaudit μπορεί να ανιχνεύσει εάν τρέχει μέσα σε ένα container σε ένα cluster. Αν ναι, θα προσπαθήσει να audit όλους τους Kubernetes resources σε εκείνο το cluster:
kubeaudit all
Αυτό το εργαλείο έχει επίσης την παράμετρο autofix για να διορθώνει αυτόματα τα εντοπισμένα προβλήματα.
Kube-hunter
[Παρωχημένο] Το εργαλείο kube-hunter εντοπίζει αδυναμίες ασφαλείας σε Kubernetes clusters. Το εργαλείο αναπτύχθηκε για να αυξήσει την ευαισθητοποίηση και την ορατότητα για ζητήματα ασφάλειας σε περιβάλλοντα Kubernetes.
kube-hunter --remote some.node.com
Trivy
Trivy έχει ανιχνευτές που αναζητούν θέματα ασφαλείας, και στόχους όπου μπορεί να εντοπίσει αυτά τα θέματα:
- Container Image
- Filesystem
- Git Repository (remote)
- Virtual Machine Image
- Kubernetes
Kubei
[Φαίνεται να μην συντηρείται]
Kubei είναι ένα εργαλείο σάρωσης ευπαθειών και CIS Docker benchmark που επιτρέπει στους χρήστες να έχουν μια ακριβή και άμεση εκτίμηση κινδύνου για τα Kubernetes clusters τους. Το Kubei σαρώνει όλες τις images που χρησιμοποιούνται σε ένα Kubernetes cluster, συμπεριλαμβανομένων των images των application pods και των system pods.
KubiScan
KubiScan είναι ένα εργαλείο για σάρωση Kubernetes cluster για επικίνδυνες άδειες στο μοντέλο εξουσιοδότησης Role-based access control (RBAC) του Kubernetes.
Managed Kubernetes Auditing Toolkit
Mkat είναι ένα εργαλείο φτιαγμένο για να ελέγχει άλλους τύπους ελέγχων υψηλού κινδύνου σε σύγκριση με τα υπόλοιπα εργαλεία. Κυρίως έχει 3 διαφορετικές λειτουργίες:
find-role-relationships: Που θα βρίσκει ποιοι AWS roles τρέχουν σε ποιες podsfind-secrets: Προσπαθεί να εντοπίσει secrets σε K8s resources όπως Pods, ConfigMaps και Secrets.test-imds-access: Θα προσπαθήσει να τρέξει pods και να προσπελάσει το metadata v1 και v2. ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Αυτό θα τρέξει ένα pod στο cluster — να είστε πολύ προσεκτικοί γιατί ίσως δεν θέλετε να το κάνετε!
Έλεγχος IaC
KICS
KICS εντοπίζει ευπάθειες ασφαλείας, ζητήματα συμμόρφωσης και λανθασμένες ρυθμίσεις υποδομής στις παρακάτω λύσεις Infrastructure as Code: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM, και προδιαγραφές OpenAPI 3.0
Checkov
Checkov είναι ένα εργαλείο στατικής ανάλυσης κώδικα για infrastructure-as-code.
Σαρώνει την υποδομή cloud που παρέχεται μέσω Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless ή ARM Templates και εντοπίζει λανθασμένες ρυθμίσεις ασφάλειας και συμμόρφωσης χρησιμοποιώντας ανίχνευση βασισμένη σε γράφο.
Kube-score
kube-score είναι ένα εργαλείο που πραγματοποιεί στατική ανάλυση των ορισμών αντικειμένων Kubernetes σας.
Για εγκατάσταση:
| Διανομή | Εντολή / Σύνδεσμος |
|---|---|
| Προκατασκευασμένα binaries για macOS, Linux, and Windows | GitHub releases |
| Docker | docker pull zegl/kube-score (Docker Hub) |
| Homebrew (macOS and Linux) | brew install kube-score |
| Krew (macOS and 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 -
Scan προβλήματα εξαρτήσεων
Scan εικόνες
#!/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
#!/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."
Συμβουλές
Kubernetes PodSecurityContext and SecurityContext
Μπορείτε να διαμορφώσετε το security context των Pods (με PodSecurityContext) και των containers που θα τρέξουν (με SecurityContext). Για περισσότερες πληροφορίες διαβάστε:
Σκληροποίηση του Kubernetes API
Είναι πολύ σημαντικό να προστατεύσετε την πρόσβαση στο Kubernetes Api Server καθώς ένας κακόβουλος παράγοντας με επαρκή προνόμια θα μπορούσε να το καταχραστεί και να προκαλέσει ζημιά με πολλούς τρόπους στο περιβάλλον.
Είναι σημαντικό να ασφαλίσετε τόσο την access (whitelist origins to access the API Server and deny any other connection) και την authentication (following the principle of least privilege). Και οπωσδήποτε never allow anonymous requests.
Συνήθης ροή αιτήματος:
User or K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.
Συμβουλές:
- Κλείστε τις θύρες.
- Αποφύγετε την Anonymous πρόσβαση.
- NodeRestriction; No access from specific nodes to the API.
- https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction
- Βασικά αποτρέπει τους kubelets από το να προσθέτουν/αφαιρούν/ενημερώνουν labels με πρόθεμα node-restriction.kubernetes.io/. Αυτό το label prefix είναι reserved για administrators ώστε να επισημαίνουν τα Node objects για λόγους workload isolation, και οι kubelets δεν θα επιτρέπεται να τροποποιούν labels με αυτό το πρόθεμα.
- Επιπλέον, επιτρέπει στους kubelets να προσθέτουν/αφαιρούν/ενημερώνουν αυτά τα labels και τα label prefixes.
- Χρησιμοποιήστε labels για να εξασφαλίσετε secure workload isolation.
- Αποφύγετε σε συγκεκριμένα pods την πρόσβαση στο API.
- Αποφύγετε την έκθεση του ApiServer στο internet.
- Αποφύγετε μη εξουσιοδοτημένη πρόσβαση μέσω RBAC.
- Κλείδωμα του ApiServer port με firewall και IP whitelisting.
SecurityContext Hardening
Εξ ορισμού ο root user θα χρησιμοποιηθεί όταν ένα Pod ξεκινήσει αν δεν καθοριστεί άλλος χρήστης. Μπορείτε να τρέξετε την εφαρμογή σας μέσα σε ένα πιο ασφαλές context χρησιμοποιώντας ένα πρότυπο παρόμοιο με το ακόλουθο:
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
- https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
- https://kubernetes.io/docs/concepts/policy/pod-security-policy/
Γενική Σκληροποίηση
Πρέπει να ενημερώνετε το περιβάλλον Kubernetes σας όσο συχνά χρειάζεται για να έχετε:
- Ενημερωμένες εξαρτήσεις.
- Διορθώσεις σφαλμάτων και ενημερώσεις ασφαλείας.
Release cycles: Κάθε 3 μήνες κυκλοφορεί ένα νέο minor release – 1.20.3 = 1(Major).20(Minor).3(patch)
Ο καλύτερος τρόπος για να ενημερώσετε ένα Kubernetes Cluster είναι (από here):
- Αναβαθμίστε τα Master Node components ακολουθώντας αυτή τη σειρά:
- etcd (όλες οι εγκαταστάσεις).
- kube-apiserver (όλοι οι hosts του control plane).
- kube-controller-manager.
- kube-scheduler.
- cloud controller manager, αν το χρησιμοποιείτε.
- Αναβαθμίστε τα Worker Node components όπως kube-proxy, kubelet.
Παρακολούθηση και ασφάλεια Kubernetes:
- Kyverno Policy Engine
- Cilium Tetragon - Παρατηρησιμότητα ασφάλειας βασισμένη σε eBPF και επιβολή κατά το runtime
- Πολιτικές Ασφάλειας Δικτύου (Network Security Policies)
- Falco - Παρακολούθηση και εντοπισμός ασφάλειας κατά το runtime
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

