
Buscar debilidades de seguridad en clústeres de Kubernetes
kube-hunter ya no está en desarrollo activo. Si estás interesado en escanear clústeres de Kubernetes en busca de vulnerabilidades conocidas, te recomendamos usar Trivy. En concreto, el escaneo de configuraciones erróneas de Kubernetes y el escaneo de vulnerabilidades KBOM de Trivy. Obtén más información en la documentación de Trivy.
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 Kubernetes. ¡NO debes ejecutar kube-hunter en un clúster de Kubernetes que no te pertenezca!
Ejecuta kube-hunter: kube-hunter está disponible como contenedor (aquasec/kube-hunter) y también ofrecemos un sitio web en kube-hunter.aquasec.com donde puedes registrarte en línea para recibir un token que te permitirá ver y compartir los resultados en línea. También puedes ejecutar el código Python tú mismo como se describe a continuación.
Explora vulnerabilidades: La base de conocimiento de kube-hunter incluye artículos sobre vulnerabilidades y problemas detectables. Cuando kube-hunter informa de un problema, mostrará su VID (ID de Vulnerabilidad) para que puedas consultarlo en la KB en https://aquasecurity.github.io/kube-hunter/
Si estás interesado en la integración de kube-hunter con la Matriz ATT&CK de Kubernetes, continúa leyendo
Video de demostración de kube-hunter
kube-hunter ahora soporta el nuevo formato de la matriz ATT&CK de Kubernetes. Mientras que las vulnerabilidades de kube-hunter son una colección de técnicas creativas diseñadas para imitar a un atacante dentro del clúster (o fuera de él), la ATT&CK de Mitre define categorías más generales y estandarizadas de técnicas para hacerlo.
Puedes pensar en las vulnerabilidades de kube-hunter como pequeños pasos para un atacante, que siguen la pista de una técnica más general que buscaría. La mayoría de los cazadores y vulnerabilidades de kube-hunter pueden encajar estrechamente bajo esas técnicas, por eso hemos decidido seguir el estándar de la matriz.
Algunas vulnerabilidades de kube-hunter que no pudimos mapear a una técnica de Mitre tienen el prefijo General

Hay tres formas diferentes de ejecutar kube-hunter, cada una proporciona un enfoque diferente para detectar debilidades en tu clúster:
Ejecuta kube-hunter en cualquier máquina (incluyendo tu portátil), selecciona la opción de escaneo remoto y proporciona la dirección IP o nombre de dominio de tu clúster de Kubernetes. Esto te dará una vista desde el punto de vista del atacante de tu configuración de Kubernetes.
Puedes ejecutar kube-hunter directamente en una máquina dentro del clúster y seleccionar la opción de sondear todas las interfaces de red locales.
También puedes ejecutar kube-hunter en un pod dentro del clúster. Esto indica cómo de expuesto estaría tu clúster si uno de tus pods de aplicación se viera comprometido (por ejemplo, a través de una vulnerabilidad de software). (indicador --pod)
Primero verifica estos requisitos previos.
Por defecto, kube-hunter abrirá una sesión interactiva en la que podrás seleccionar una de las siguientes opciones de escaneo. También puedes especificar la opción de escaneo manualmente desde la línea de comandos. Estas son tus opciones:
Para especificar máquinas remotas para la cacería, selecciona la opción 1 o usa la opción --remote. Ejemplo:
kube-hunter --remote some.node.com
Para especificar escaneo de interfaz, puedes usar la opción --interface (esto escaneará todas las interfaces de red de la máquina). Ejemplo:
kube-hunter --interface
Para especificar un CIDR concreto para escanear, usa la opción --cidr. Ejemplo:
kube-hunter --cidr 192.168.0.0/24
Establece la bandera --k8s-auto-discover-nodes para consultar a Kubernetes por todos los nodos del clúster y luego intentar escanearlos todos. Por defecto, usará la configuración dentro del clúster para conectarse a la API de Kubernetes. Si deseas usar un archivo kubeconfig explícito, establece --kubeconfig /ruta/del/archivo/kubeconfig.
Ten en cuenta también que esto siempre se hace cuando se usa el modo --pod.
Para imitar a un atacante en sus primeras etapas, kube-hunter no requiere autenticación para la cacería.
Suplantar: Puedes proporcionar a kube-hunter un token de cuenta de servicio específico para usar durante la cacería pasando manualmente el token JWT Bearer del secreto de la cuenta de servicio con la bandera --service-account-token.
Ejemplo:
$ kube-hunter --active --service-account-token eyJhbGciOiJSUzI1Ni...
Cuando se ejecuta con la bandera --pod, kube-hunter usa el token de cuenta de servicio montado dentro del pod para autenticarse en los servicios que encuentra durante la cacería.
--service-account-token tiene prioridad cuando se ejecuta como podLa cacería activa es una opción en la que kube-hunter explotará las vulnerabilidades que encuentra para explorar más vulnerabilidades. La principal diferencia entre la cacería normal y la activa es que una cacería normal nunca cambiará el estado del clúster, mientras que la cacería activa puede potencialmente realizar operaciones que cambien el estado del clúster, lo que podría ser perjudicial.
Por defecto, kube-hunter no realiza cacería activa. Para cazar activamente un clúster, usa la bandera --active. Ejemplo:
kube-hunter --remote some.domain.com --active
Puedes ver la lista de pruebas con la opción --list. Ejemplo:
kube-hunter --list
Para ver también las pruebas de cacería activa además de las pasivas:
kube-hunter --list --active
Para ver solo un mapeo de la red de tus nodos, ejecuta con la opción --mapping. Ejemplo:
kube-hunter --cidr 192.168.0.0/24 --mapping
Esto mostrará todos los nodos Kubernetes que kube-hunter ha encontrado.
Para controlar el registro, puedes especificar un nivel de log usando la opción --log. Ejemplo:
kube-hunter --active --log WARNING
Los niveles de log disponibles son:
Por defecto, el informe se despacha a stdout, pero puedes especificar métodos diferentes usando la opción --dispatch. Ejemplo:
kube-hunter --report json --dispatch http
Los métodos de despacho disponibles son:
Cuando se ejecuta como Pod en un entorno Azure o AWS, kube-hunter obtendrá subredes del Servicio de Metadatos de Instancia. Naturalmente, esto hace que el proceso de descubrimiento lleve más tiempo.
Para limitar el escaneo de subred a un CIDR /24, usa la opción --quick.
La cacería personalizada permite a los usuarios avanzados tener control sobre qué cazadores se registran al inicio de una cacería. Si sabes lo que estás haciendo, esto puede ayudar si deseas ajustar el proceso de cacería y descubrimiento de kube-hunter según tus necesidades.
Ejemplo:
kube-hunter --custom <HunterName1> <HunterName2>
Habilitar la cacería personalizada elimina todos los cazadores del proceso de cacería, excepto los cazadores incluidos en la lista blanca.
La bandera --custom lee una lista de nombres de clase de cazadores. Para ver todos los nombres de clase de kube-hunter, puedes combinar la bandera --raw-hunter-names con la bandera --list.
Ejemplo:
kube-hunter --active --list --raw-hunter-names
Aviso: Debido al diseño arquitectónico de kube-hunter, los siguientes "Cazadores/Clases Principales" siempre se registrarán (incluso cuando se usa cacería personalizada):
Hay tres métodos para desplegar kube-hunter:
Puedes ejecutar kube-hunter directamente en tu máquina.
Necesitarás tener instalado lo siguiente:
Instalar:
pip install kube-hunter
Ejecutar:
kube-hunter
Clonar el repositorio:
git clone https://github.com/aquasecurity/kube-hunter.git
Instalar las dependencias del módulo. (Puede preferir hacerlo dentro de un Entorno Virtual)
cd ./kube-hunter
pip install -r requirements.txt
Ejecutar:
python3 kube_hunter
Si deseas usar pyinstaller/py2exe, primero debes ejecutar el script install_imports.py.
Aqua Security mantiene una versión contenerizada de kube-hunter en aquasec/kube-hunter:aqua. Este contenedor incluye este código fuente, más un complemento de informes adicional (de código cerrado) para cargar los resultados en un informe que se puede ver en kube-hunter.aquasec.com. Ten en cuenta que ejecutar el contenedor aquasec/kube-hunter y cargar los datos del informe están sujetos a términos y condiciones adicionales.
El Dockerfile en este repositorio te permite construir una versión contenerizada sin el complemento de informes.
Si ejecutas el contenedor kube-hunter con la red del host, podrá sondear todas las interfaces del host:
docker run -it --rm --network host aquasec/kube-hunter
Nota para Docker para Mac/Windows: Ten en cuenta que el "host" para Docker para Mac o Windows es la VM en la que Docker ejecuta contenedores. Por lo tanto, especificar --network host permite a kube-hunter acceder a las interfaces de red de esa VM, no a las de tu máquina.
Por defecto, kube-hunter se ejecuta en modo interactivo. También puedes especificar la opción de escaneo con los parámetros descritos anteriormente, por ejemplo:
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
Esta opción te permite descubrir qué puede hacer o descubrir la ejecución de un contenedor malicioso en tu clúster. Esto proporciona una perspectiva de lo que un atacante podría hacer si lograra comprometer un pod, quizás a través de una vulnerabilidad de software. Esto puede revelar significativamente más vulnerabilidades.
El archivo de ejemplo job.yaml define un Job que ejecutará kube-hunter en un pod, usando la configuración de acceso predeterminada del pod de Kubernetes. (Puede modificar esta definición, por ejemplo, para ejecutarla como un usuario no root o en un namespace diferente.)
kubectl create -f ./job.yamlkubectl describe job kube-hunterkubectl logs <nombre del pod>Para leer las pautas de contribución, haz clic aquí
Este repositorio está disponible bajo la Licencia Apache 2.0.