Kubernetes Hardening

¡Apoya a HackTricks y obtén beneficios!

Herramientas para analizar un clúster

Kubescape

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 según varios marcos (como NSA-CISA, MITRE ATT&CK®), 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 las tendencias de riesgo a lo largo del tiempo.

kubescape scan --verbose

Kube-bench

La herramienta kube-bench es una herramienta que verifica si Kubernetes está implementado de manera 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 instale kube-bench en el host y luego ejecutar kube-bench directamente en el host

  • instalar los últimos binarios desde la página de lanzamientos,

  • compilarlo desde el código fuente.

Kubeaudit

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

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

Kube-hunter

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

kube-hunter --remote some.node.com

Kubei

Kubei es una herramienta de escaneo de vulnerabilidades y benchmark de CIS Docker 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 utilizan en un clúster de Kubernetes, incluyendo imágenes de pods de aplicaciones y pods del sistema.

KubiScan

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.

Auditar código IaC

Popeye

Popeye es una utilidad que escanea un clúster de Kubernetes en vivo y reporta posibles problemas con los recursos y configuraciones implementados. Limpia tu clúster en función de lo que está implementado y no de lo que está en el disco. Al escanear tu clúster, detecta configuraciones incorrectas y te ayuda a asegurarte de que se sigan las mejores prácticas, evitando así futuros dolores de cabeza. Su objetivo es reducir la sobrecarga cognitiva que se enfrenta al operar un clúster de Kubernetes en la naturaleza. Además, si tu clúster utiliza un servidor de métricas, informa posibles asignaciones de recursos excesivas o insuficientes e intenta advertirte si tu clúster se queda sin capacidad.

Kicks

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 de OpenAPI 3.0.

Checkov

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

Escanea la infraestructura en la nube provisionada 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

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

Para instalar:

Consejos

Monitoreo con Falco

Kubernetes PodSecurityContext y SecurityContext

Puedes 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, lee:

Reforzamiento de la API de Kubernetes

Es muy importante proteger el acceso al servidor de API de Kubernetes, ya que un actor malintencionado con suficientes privilegios podría abusar de él y dañar el entorno de muchas maneras. Es importante asegurar tanto el acceso (permitiendo solo el acceso a orígenes específicos al servidor de API y denegando cualquier otra conexión) como la autenticación (siguiendo el principio de privilegio mínimo). Y definitivamente nunca permitas solicitudes anónimas.

Proceso de solicitud común: 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 nodos; Sin acceso desde nodos específicos a la API.

  • Básicamente evita que los kubelets agreguen/eliminen/actualicen etiquetas con un prefijo 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 los kubelets no podrán modificar etiquetas con ese prefijo.

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

  • Asegúrate 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 de RBAC.

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

Reforzamiento del 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:

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

Políticas de red de Kubernetes

Fortalecimiento general

Deberías actualizar tu entorno de Kubernetes con la frecuencia necesaria 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 lo usas.

  • Actualiza los componentes del nodo trabajador como kube-proxy, kubelet.

¡Apoya a HackTricks y obtén beneficios!

Última actualización