Translated ['', 'src/pentesting-cloud/kubernetes-security/kubernetes-har

This commit is contained in:
Translator
2025-11-17 12:19:47 +00:00
parent ab820f8cec
commit ef70be1072
@@ -4,9 +4,9 @@
## Herramientas para analizar un clúster
### [**Steampipe - Cumplimiento de Kubernetes](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
### [Steampipe - Kubernetes Compliance](https://github.com/turbot/steampipe-mod-kubernetes-compliance)
Realiza **varias verificaciones de cumplimiento sobre el clúster de Kubernetes**. Incluye soporte para CIS, Agencia de Seguridad Nacional (NSA) y el informe técnico de ciberseguridad de la Agencia de Ciberseguridad e Infraestructura (CISA) para el endurecimiento de Kubernetes.
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.
```bash
# Install Steampipe
brew install turbot/tap/powerpipe
@@ -27,28 +27,28 @@ 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 única de múltiples nubes de K8s, incluyendo análisis de riesgos, cumplimiento de seguridad, visualizador de RBAC y escaneo de vulnerabilidades de imágenes. Kubescape escanea clústeres de K8s, archivos YAML y gráficos HELM, detectando configuraciones incorrectas de acuerdo con 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 (control de acceso basado en roles) en las primeras etapas del pipeline de CI/CD, calcula el puntaje de riesgo al instante y muestra tendencias de riesgo a lo largo del tiempo.
[**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.
```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 clústeres de Kubernetes en vivo y **informa sobre problemas potenciales con los recursos y configuraciones desplegadas**. Sanitiza tu clúster en función de lo que está desplegado y no de lo que está en disco. Al escanear tu clúster, detecta configuraciones incorrectas y te ayuda a asegurar que las mejores prácticas estén en su lugar, evitando así futuros dolores de cabeza. Su objetivo es reducir la sobrecarga cognitiva que uno enfrenta al operar un clúster de Kubernetes en el mundo real. Además, si tu clúster emplea un metric-server, informa sobre posibles sobre/asignaciones de recursos y intenta advertirte si tu clúster se queda sin capacidad.
[**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.
### [**Kube-bench**](https://github.com/aquasecurity/kube-bench)
La herramienta [**kube-bench**](https://github.com/aquasecurity/kube-bench) es una herramienta que verifica si Kubernetes está desplegado de manera segura ejecutando las verificaciones documentadas en el [**CIS Kubernetes Benchmark**](https://www.cisecurity.org/benchmark/kubernetes/).\
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**].\
Puedes elegir:
- ejecutar kube-bench desde dentro de un contenedor (compartiendo el espacio de nombres PID con el host)
- ejecutar un contenedor que instala kube-bench en el host, y luego ejecutar kube-bench directamente en el host
- instalar los últimos binarios desde la [página de Releases](https://github.com/aquasecurity/kube-bench/releases),
- 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),
- compilarlo desde el código fuente.
### [**Kubeaudit**](https://github.com/Shopify/kubeaudit)
**[DEPRECATED]** La herramienta [**kubeaudit**](https://github.com/Shopify/kubeaudit) es una herramienta de línea de comandos y un paquete de Go para **auditar clústeres de Kubernetes** por diversas preocupaciones de seguridad.
**[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.
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:
```
@@ -58,7 +58,7 @@ Esta herramienta también tiene el argumento `autofix` para **corregir automáti
### [**Kube-hunter**](https://github.com/aquasecurity/kube-hunter)
**[DEPRECATED]** 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 conciencia y visibilidad sobre los problemas de seguridad en entornos de Kubernetes.
**[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.
```bash
kube-hunter --remote some.node.com
```
@@ -68,7 +68,7 @@ kube-hunter --remote some.node.com
- Imagen de contenedor
- Sistema de archivos
- Repositorio Git (remoto)
- Git Repository (remote)
- Imagen de máquina virtual
- Kubernetes
@@ -77,50 +77,96 @@ kube-hunter --remote some.node.com
**[Parece no estar mantenido]**
[**Kubei**](https://github.com/Erezf-p/kubei) es una herramienta de escaneo de vulnerabilidades y de referencia de CIS Docker 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 están utilizando en un clúster de Kubernetes, incluidas las imágenes de los pods de aplicación y los pods del 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 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.
### [**KubiScan**](https://github.com/cyberark/KubiScan)
[**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.
[**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.
### [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 otros tipos de verificaciones de alto riesgo en comparación con las otras herramientas. Principalmente tiene 3 modos diferentes:
[**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:
- **`find-role-relationships`**: Que encontrará qué roles de AWS se están ejecutando en qué pods
- **`find-secrets`**: Que intenta identificar secretos en los recursos de K8s como Pods, ConfigMaps y Secrets.
- **`test-imds-access`**: Que intentará ejecutar pods y tratar de acceder a los metadatos v1 y v2. ADVERTENCIA: Esto ejecutará un pod en el clúster, ten mucho cuidado porque tal vez no quieras hacer esto.
- **`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!
## **Auditar Código IaC**
## **Auditar código IaC**
### [**KICS**](https://github.com/Checkmarx/kics)
[**KICS**](https://github.com/Checkmarx/kics) encuentra **vulnerabilidades de seguridad**, problemas de cumplimiento y configuraciones incorrectas 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
[**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
### [**Checkov**](https://github.com/bridgecrewio/checkov)
[**Checkov**](https://github.com/bridgecrewio/checkov) es una herramienta de análisis de código estático para infraestructura como código.
[**Checkov**](https://github.com/bridgecrewio/checkov) es una herramienta de análisis estático de código para infrastructure-as-code.
Escanea la infraestructura en la nube provisionada utilizando [Terraform](https://terraform.io), plan de Terraform, [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 configuraciones incorrectas de seguridad y cumplimiento utilizando escaneo basado en gráficos.
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.
### [**Kube-score**](https://github.com/zegl/kube-score)
[**kube-score**](https://github.com/zegl/kube-score) es una herramienta que realiza análisis de código estático de las definiciones de objetos de Kubernetes.
[**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.
Para instalar:
To install:
| Distribución | Comando / Enlace |
| --------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| Binarios preconstruidos para macOS, Linux y 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 y Linux) | `brew install kube-score` |
| [Krew](https://krew.sigs.k8s.io/) (macOS y Linux) | `kubectl krew install score` |
| Distribution | Command / 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
### [**Kube-linter**](https://github.com/stackrox/kube-linter)
```bash
# Install Kube-linter
brew install kube-linter
# Run Kube-linter
## lint ./path/to/yaml/or/chart
```
### [Checkov](https://github.com/bridgecrewio/checkov)
```bash
# Install Checkov
pip install checkov
# Run Checkov
checkov -d ./path/to/yaml/or/chart
```
### [kubescore](https://github.com/zegl/kube-score)
```bash
# 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](https://github.com/controlplaneio/kubesec)
```bash
# 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 -
```
## Consejos
### Kubernetes PodSecurityContext y SecurityContext
### Kubernetes PodSecurityContext and SecurityContext
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:
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:
{{#ref}}
kubernetes-securitycontext-s.md
@@ -128,29 +174,29 @@ kubernetes-securitycontext-s.md
### Endurecimiento de la API de Kubernetes
Es muy importante **proteger el acceso al servidor API de Kubernetes** ya que un actor malicioso con suficientes privilegios podría abusar de él y dañar el entorno de muchas maneras.\
Es importante asegurar tanto el **acceso** (**whitelist** de orígenes para acceder al servidor API 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** **permitir** **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 **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**.
**Proceso común de solicitud:**\
Usuario o K8s ServiceAccount > Autenticación > Autorización > Control de admisión.
**Common Request process:**\
User or K8s ServiceAccount > Authentication > Authorization > Admission Control.
**Consejos**:
- Cerrar puertos.
- Evitar acceso anónimo.
- NodeRestriction; Sin acceso desde nodos específicos a la API.
- NodeRestriction; sin acceso desde nodos específicos al 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 previene que los kubelets añadan/eliminar/modifiquen etiquetas con un prefijo node-restriction.kubernetes.io/. Este prefijo de etiqueta está reservado para que los administradores etiqueten sus objetos Node con fines de aislamiento de carga de trabajo, y los kubelets no podn modificar etiquetas con ese prefijo.
- Y también, permite a los kubelets añadir/eliminar/actualizar estas etiquetas y prefijos de etiquetas.
- Asegurar con etiquetas el aislamiento seguro de la carga de trabajo.
- Evitar que pods específicos accedan a la API.
- 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.
- Evitar acceso no autorizado RBAC.
- Puerto del ApiServer con firewall y lista blanca de IP.
- Evitar acceso no autorizado mediante RBAC.
- Proteger el puerto del ApiServer con firewall y whitelist de IPs.
### Endurecimiento de SecurityContext
Por defecto, se utilizará 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 utilizando una plantilla similar a la siguiente:
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
apiVersion: v1
kind: Pod
@@ -179,29 +225,29 @@ allowPrivilegeEscalation: true
- [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)
- [https://kubernetes.io/docs/concepts/policy/pod-security-policy/](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)
### Endurecimiento General
### Endurecimiento general
Deberías actualizar tu entorno de Kubernetes con la frecuencia necesaria para tener:
Debes actualizar tu entorno Kubernetes con la frecuencia necesaria para tener:
- Dependencias actualizadas.
- Correcciones de errores y parches de seguridad.
[**Ciclos de lanzamiento**](https://kubernetes.io/docs/setup/release/version-skew-policy/): Cada 3 meses hay un nuevo lanzamiento 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(mayor).20(menor).3(parche)
**La mejor manera de actualizar un clúster de Kubernetes es (desde** [**aquí**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
**La mejor manera de actualizar un Kubernetes Cluster es (desde** [**here**](https://kubernetes.io/docs/tasks/administer-cluster/cluster-upgrade/)**):**
- Actualiza los componentes del nodo maestro siguiendo esta secuencia:
- etcd (todas las instancias).
- kube-apiserver (todos los hosts del plano de control).
- kube-controller-manager.
- kube-scheduler.
- cloud controller manager, si usas uno.
- Actualiza los componentes del nodo trabajador como kube-proxy, kubelet.
- cloud controller manager, si lo usas.
- Actualiza los componentes de los nodos de trabajo, como kube-proxy y kubelet.
## Monitoreo y seguridad de Kubernetes:
- Kyverno Policy Engine
- Cilium Tetragon - Observabilidad de seguridad basada en eBPF y aplicación en tiempo de ejecución
- Cilium Tetragon - Observabilidad de seguridad basada en eBPF e imposición en tiempo de ejecución
- Políticas de seguridad de red
- Falco - Monitoreo y detección de seguridad en tiempo de ejecución