Kubernetes Hardening

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Інструменти для аналізу кластера

Steampipe - Kubernetes Compliance

Він виконає кілька перевірок відповідності в кластері Kubernetes. Включає підтримку CIS, National Security Agency (NSA) та Cybersecurity and Infrastructure Security Agency (CISA) — технічного звіту з кібербезпеки для Kubernetes hardening.

# 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 — це open-source інструмент для K8s, який надає multi-cloud єдину панель управління для K8s, включаючи аналіз ризиків, перевірку відповідності безпеці, візуалізатор RBAC та сканування вразливостей образів. Kubescape сканує K8s кластери, YAML файли та HELM charts, виявляє неправильні конфігурації відповідно до кількох фреймворків (таких як the NSA-CISA , MITRE ATT&CK®), програмні вразливості та порушення RBAC (role-based-access-control) на ранніх стадіях CI/CD pipeline, миттєво обчислює оцінку ризику і показує тенденції ризику з часом.

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

Popeye

Popeye — це утиліта, яка сканує живий Kubernetes-кластер і повідомляє про потенційні проблеми з розгорнутими ресурсами та конфігураціями. Вона очищує ваш кластер, орієнтуючись на те, що розгорнуто, а не на те, що лежить на диску. Скануючи кластер, вона виявляє неправильні налаштування і допомагає забезпечити впровадження best practices, тим самим запобігаючи майбутнім проблемам. Мета — зменшити когнітивне _перевантаження, з яким стикаються при керуванні Kubernetes-кластером у реальних умовах. Крім того, якщо у вашому кластері працює 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] 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

Цей інструмент також має аргумент 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-кластері, включно з образами application pods та system pods.

KubiScan

KubiScan — інструмент для сканування Kubernetes-кластера на предмет ризикованих дозволів у моделі авторизації Role-based access control (RBAC) Kubernetes.

Managed Kubernetes Auditing Toolkit

Mkat — інструмент, створений для виконання інших типів перевірок високого ризику порівняно з іншими інструментами. Він має в основному 3 режими:

  • find-role-relationships: Знаходить, які AWS roles запущені в яких pods
  • find-secrets: Спроба ідентифікувати secrets у ресурсах K8s, таких як Pods, ConfigMaps і Secrets.
  • test-imds-access: Спроба запустити pods і отримати доступ до metadata v1 та v2. УВАГА: це запустить pod у кластері — будьте дуже обережні, можливо ви не захочете цього робити!

Аудит 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 та 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

Інструменти для аналізу 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 -

Сканування проблем залежностей

Сканування образів

#!/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 та SecurityContext

Ви можете налаштувати security context of the Pods (через PodSecurityContext) і контейнерів, які будуть запускатися (через SecurityContext). Для детальнішої інформації читайте:

Kubernetes SecurityContext(s)

Kubernetes API Hardening

Дуже важливо захистити доступ до Kubernetes Api Server, оскільки зловмисник з достатніми привілеями може зловживати ним і завдати великої шкоди середовищу.
Важливо захистити як доступ (whitelist origins для доступу до API Server і відмовляти в будь-яких інших підключеннях), так і authentication (дотримуючись принципу найменших привілеїв). І однозначно ніколи не дозволяйте anonymous requests.

Common Request process:
User or 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 додавати/видаляти/оновлювати ці мітки та префікси міток.
  • Забезпечте безпечну ізоляцію робочих навантажень за допомогою міток.
  • Заблокуйте доступ до API для певних Pod.
  • Уникайте експонування ApiServer в інтернет.
  • Запобігайте неавторизованому доступу через RBAC.
  • Захищайте порт ApiServer за допомогою міжмережевого екрану (firewall) та білого списку IP.

SecurityContext Hardening

За замовчуванням при запуску 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 місяці виходить новий мінорний реліз – 1.20.3 = 1(Major).20(Minor).3(patch)

Найкращий спосіб оновити Kubernetes Cluster (з here):

  • Оновіть компоненти Master Node у такому порядку:
  • etcd (усі інстанси).
  • kube-apiserver (всі хости контрольної площини).
  • kube-controller-manager.
  • kube-scheduler.
  • cloud controller manager, якщо ви його використовуєте.
  • Оновіть компоненти Worker Node, такі як kube-proxy, kubelet.

Моніторинг та безпека Kubernetes:

  • Kyverno Policy Engine
  • Cilium Tetragon — спостережливість безпеки та виконання політик у runtime на основі eBPF
  • Мережеві політики безпеки
  • Falco — runtime-моніторинг безпеки та виявлення

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks