Kubernetes Network Attacks
Ataques de red en Kubernetes
Introducción
Kubernetes por defecto conecta todos los contenedores que se ejecutan en el mismo nodo (incluso si pertenecen a diferentes espacios de nombres) hasta la capa 2 (ethernet). Esto permite que un contenedor malicioso realice un ataque de ARP spoofing a los contenedores en el mismo nodo y capture su tráfico.
En el escenario se van a crear 4 máquinas:
ubuntu-pe: Máquina privilegiada para escapar al nodo y comprobar las métricas (no es necesario para el ataque)
ubuntu-attack: Contenedor malicioso en el espacio de nombres predeterminado
ubuntu-victim: Máquina víctima en el espacio de nombres kube-system
mysql: Máquina víctima en el espacio de nombres predeterminado
Redes básicas de Kubernetes
Si desea obtener más detalles sobre los temas de redes introducidos aquí, consulte las referencias.
ARP
En general, la red de pod a pod dentro del nodo está disponible a través de un puente que conecta todos los pods. Este puente se llama "cbr0". (Algunos complementos de red instalarán su propio puente). El cbr0 también puede manejar la resolución ARP (Protocolo de resolución de direcciones). Cuando llega un paquete entrante a cbr0, puede resolver la dirección MAC de destino utilizando ARP.
Este hecho implica que, por defecto, cada pod que se ejecuta en el mismo nodo va a poder comunicarse con cualquier otro pod en el mismo nodo (independientemente del espacio de nombres) a nivel de Ethernet (capa 2).
Por lo tanto, es posible realizar ataques de ARP Spoofing entre pods en el mismo nodo.
DNS
En los entornos de Kubernetes, generalmente encontrará 1 (o más) servicios DNS en ejecución generalmente en el espacio de nombres kube-system:
En la información anterior se puede ver algo interesante, la IP del servicio es 10.96.0.10 pero la IP del pod que ejecuta el servicio es 172.17.0.2.
Si comprueba la dirección DNS dentro de cualquier pod, encontrará algo como esto:
Para habilitar el reenvío de IP: echo 1 > /proc/sys/net/ipv4/ip_forward
DNS Spoofing
Como ya se mencionó, si compromete un pod en el mismo nodo del pod del servidor DNS, puede MitM con ARPSpoofing el puente y el pod DNS y modificar todas las respuestas DNS.
Tiene una herramienta y tutorial realmente buenos para probar esto en https://github.com/danielsagi/kube-dnsspoof/
En nuestro escenario, descargue la herramienta en el pod del atacante y cree un **archivo llamado hosts
** con los dominios que desea falsificar como:
Realice el ataque a la máquina ubuntu-victim:
Si intenta crear su propio script de falsificación de DNS, si solo modifica la respuesta DNS que no va a funcionar, porque la respuesta va a tener una IP de origen la dirección IP del pod malicioso y no será aceptada. Necesita generar un nuevo paquete DNS con la IP de origen del DNS donde la víctima envía la solicitud DNS (que es algo como 172.16.0.2, no 10.96.0.10, ese es el IP del servicio DNS de K8s y no la IP del servidor DNS, más sobre esto en la introducción).
Capturando Tráfico
La herramienta Mizu es un visor de tráfico API simple pero potente para Kubernetes que le permite ver toda la comunicación API entre microservicios para ayudarlo a depurar y solucionar problemas de regresión. Instalará agentes en los pods seleccionados y recopilará su información de tráfico y le mostrará en un servidor web. Sin embargo, necesitará permisos altos de K8s para esto (y no es muy sigiloso).
Referencias
Última actualización