Kubernetes Hardening

Apoya a HackTricks

Herramientas para analizar un clúster

Kubescape es una herramienta de código abierto de 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 según múltiples marcos (como el NSA-CISA, MITRE ATT&CK®), vulnerabilidades de software y violaciones de RBAC (control de acceso basado en roles) en las primeras etapas del pipeline CI/CD, calcula la puntuación de riesgo al instante y muestra tendencias de riesgo con el tiempo.

kubescape scan --verbose

La herramienta kube-bench es una herramienta que verifica si Kubernetes está desplegado de forma segura ejecutando las verificaciones 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 binarios más recientes desde la página de versiones (Releases page),

  • compilarlo desde el código fuente.

La herramienta kubeaudit es una herramienta de línea de comandos y un paquete Go para auditar clústeres de Kubernetes en busca de 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:

kubeaudit all

Este herramienta también tiene el argumento autofix para corregir automáticamente los problemas detectados.

La herramienta kube-hunter busca debilidades de seguridad en clústeres de Kubernetes. La herramienta fue desarrollada para aumentar la conciencia y visibilidad de problemas de seguridad en entornos de Kubernetes.

kube-hunter --remote some.node.com

Kubei es una herramienta de escaneo de vulnerabilidades y benchmark CIS Docker que permite a los usuarios obtener una evaluación de riesgos precisa e inmediata de sus clústeres de Kubernetes. Kubei escanea todas las imágenes que se utilizan en un clúster de Kubernetes, incluidas las imágenes de los pods de aplicaciones y los pods del sistema.

KubiScan es una herramienta para escanear clústeres de Kubernetes en busca de permisos riesgosos en el modelo de autorización basado en roles (RBAC) de Kubernetes.

Mkat es una herramienta diseñada para probar otro tipo de verificaciones de alto riesgo en comparación con otras 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 recursos de K8s como Pods, ConfigMaps y Secrets.

  • test-imds-access: Que intentará ejecutar pods y 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!

Auditar Código de IaC

Popeye es una utilidad que escanea clústeres de Kubernetes en vivo y reporta posibles problemas con los recursos y configuraciones implementados. Limpia su clúster en función de lo que está implementado y no de lo que está en disco. Al escanear su clúster, detecta configuraciones incorrectas y le ayuda a garantizar que las mejores prácticas estén en su lugar, evitando así dolores de cabeza futuros. Su objetivo es reducir la sobrecarga cognitiva que uno enfrenta al operar un clúster de Kubernetes en la naturaleza. Además, si su clúster utiliza un servidor de métricas, informa posibles sobreasignaciones/subasignaciones de recursos e intenta advertirle si su clúster se queda sin capacidad.

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

Checkov es una herramienta de análisis estático de código para infraestructura como código.

Escanea la infraestructura en la nube provista utilizando Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Dockerfile, Serverless o ARM Templates y detecta configuraciones incorrectas de seguridad y cumplimiento utilizando un escaneo basado en gráficos.

kube-score es una herramienta que realiza análisis de código estático de las definiciones de objetos de Kubernetes.

Para instalar:

DistribuciónComando / Enlace

Binarios precompilados para macOS, Linux y Windows

Docker

docker pull zegl/kube-score (Docker Hub)

Homebrew (macOS y Linux)

brew install kube-score

Krew (macOS y Linux)

kubectl krew install score

Consejos

PodSecurityContext y SecurityContext de Kubernetes

Puede configurar el contexto de seguridad de los Pods (con PodSecurityContext) y de los contenedores que se van a ejecutar (con SecurityContext). Para obtener más información, lea:

Kubernetes SecurityContext(s)

Endurecimiento de la API de Kubernetes

Es muy importante proteger el acceso al servidor de la 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 (permitir solo orígenes en la lista blanca para acceder al servidor de la API y denegar cualquier otra conexión) como la autenticación (siguiendo el principio de menor privilegio). Y definitivamente nunca permitir solicitudes anónimas.

Proceso común de solicitud: Usuario o Cuenta de Servicio de K8s –> Autenticación –> Autorización –> Control de Admisión.

Consejos:

  • Cerrar puertos.

  • Evitar el acceso anónimo.

  • Restricción de Nodo; Sin acceso desde nodos específicos a la API.

  • Básicamente evita que los kubelets agreguen/quiten/actualicen etiquetas con un prefijo de node-restriction.kubernetes.io/. Este prefijo de etiqueta está reservado para que los administradores etiqueten sus objetos de Nodo con fines de aislamiento de carga de trabajo, y no se permitirá que los kubelets modifiquen etiquetas con ese prefijo.

  • Y también permite a los kubelets agregar/quitar/actualizar estas etiquetas y prefijos de etiqueta.

  • Asegurar con etiquetas el aislamiento seguro de la carga de trabajo.

  • Evitar que pods específicos accedan a la API.

  • Evitar la exposición del ApiServer a Internet.

  • Evitar el acceso no autorizado RBAC.

  • Puerto de ApiServer con firewall y lista blanca de IP.

Endurecimiento de SecurityContext

Por defecto, se utilizará el usuario root cuando se inicie un Pod si no se especifica otro usuario. Puede ejecutar su aplicación dentro de un contexto más seguro utilizando una plantilla similar a la siguiente:

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

Endurecimiento General

Deberías actualizar tu entorno de Kubernetes tan frecuentemente como sea necesario para tener:

  • Dependencias actualizadas.

  • Parches de errores y seguridad.

Ciclos de lanzamiento: Cada 3 meses hay un nuevo lanzamiento menor -- 1.20.3 = 1(Mayor).20(Menor).3(parche)

La mejor manera de actualizar un clúster de Kubernetes es (desde aquí):

  • 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 utilizas uno.

  • Actualiza los componentes del Nodo de Trabajo como kube-proxy, kubelet.

Apoya a HackTricks

Last updated