viernes, septiembre 14, 2018

Cómo montar un entorno de pentesting desde cero con Docker (Parte 2 de 2)

Como hemos visto en la primera parte de este artículo, una vez tenemos nuestro contenedor Kali Linux corriendo, pasaremos a la instalación de las máquinas vulnerables. Esta operación la realizaremos desde el host y para ello vamos a instalar dos contenedores, uno con la vulnerabilidad HeartBleed y otro con una aplicación web vulnerable SQLi creada por mi colega @tuxotron que permiten practicar tanto las técnicas de SQL Injection, como el Hacking de Tecnologías Web con ataques al bug de HeartBleed.

Figura 11: Cómo montar un entorno de pentesting desde cero con Docker (Parte 2 de 2)

Para instalar el contenedor con la vulnerabilidad HeartBleed y el nombre “Contenedor_HeartB”, ejecutamos el siguiente comando primero para descargar la imagen:
docker pull hmlio/vaas-cve-2014-0160
Después lo dejaremos en ejecución (background) usando el siguiente comando Docker:
docker run -d -p 8443:443 --name Contenedor_HeartB hmlio/vaas-cve-2014-0160
Luego haremos lo mismo con la otra imagen vulnerable SQLi:
docker pull tuxotron/audi_sqli
Y para ejecutarla:
docker run -d -p 80:80 --name Contenedor_SQLi tuxotron/audi_sqli
Si lanzamos un listado de los contenedores Docker veremos los siguientes:

Figura 12: Listado de contenedores y su nombre asignado

En este punto ya tenemos las tres máquinas, pero para realizar las pruebas de pentesting tenemos que realizarlas desde el contenedor Kali Linux y desde allí auditar y ejecutar los exploits en remoto. Antes hemos visto que, por defecto, Docker asigna una dirección IP dentro del rango 173.17.0.0/24 (excepto la .1 que como ya hemos visto pertenece al Gateway Docker).

Para ver la dirección IP de un contenedor, no es necesario conectar al mismo, podemos verlo desde Docker con el comando docker inspect. Si lo ejecutamos directamente de la siguiente manera, por ejemplo para ver los datos del contenedor con la vulnerabilidad HeartBleed:
docker inspect Contenedor_HeartB
Usando directamente este comando aparece demasiada información, tenemos que buscar entre todos los parámetros del contenedor el valor de la dirección IP (el cual suele estar al final del todo). Como esta salida no es más que un JSON, podemos filtrar el campo que nos interesa:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' Contenedor_SQLi
Esto nos dará directamente como salida: 172.17.0.4, que es la dirección IP del primer contenedor del listado de la Figura 12, el que tiene la vulnerabilidad SQLi. Aplicando este comando a cada unos de los nombres (o id) correspondientes a cada contenedor, obtenemos su dirección IP:

Figura 13: Listado de los contenedores y su dirección IP interna.

Por supuesto, es posible asignar una dirección IP concreta el contenedor o incluso cambiar los parámetros por defecto de la red bridge, pero eso lo veremos en otro artículo. Todos los contenedores estarán conectados, además de a la red interna bridge, a Internet (siempre y cuando el host lo esté también o no se haya evitado este acceso de alguna manera en el contenedor o la imagen). En este punto y volviendo al esquema general que pusimos al principio de este post, esta sería la situación actual:

Figura 14: Esquema final de la infraestructura de pentesting.

Llegados a este punto, ya podemos realizar cualquier tarea de Ethical Hacking desde el contenedor Kali Linux. Por ejemplo, para comprobar que existe la vulnerabilidad HeartBleed podemos verlo directamente desde nmap:
nmap -p 443 --script ssl-heartbleed 172.17.0.4
Obtendríamos una salida similar a esta:

Figura 15: Comprobación de la existencia de la vulnerabilidad
HeartBleed en el contendor usando nmap.

Ahora ya podríamos utilizar nuestro querido Metasploit para explotar esta y las otras vulnerabilidades presentes. Para abrir Metasploit, como siempre: msfconsole

Figura 16: Ejecución de Metasploit dentro del contenedor Kali.

A partir de este punto ya depende de ti para que apliques todos los conocimientos que hayas obtenido, practicar o simplemente para experimentar.

El siguiente vídeo contiene todo el proceso, incluida la parte de instalación de las top10 de Kali Linux (que dura 15 minutos) para que esa forma se tenga una idea completa del tiempo de instalación.

Figura 17: PoC de cómo montar un entorno de pentesting desde cero

Otra de las ventajas de Docker que antes no hemos mencionado, es la facilidad de eliminar todo del sistema y empezar desde cero. Si queremos empezar de nuevo y borrar todas las imágenes y contenedores, podemos usar los siguientes comandos:
docker container stop $(docker container ls -a -q)
docker system prune -a
Por otro lado, si has guardado la imagen Docker con Kali ya actualizado y con el top10 de herramientas instaladas, volver a levantar todo el sistema no llevará más de 5 minutos, el tiempo de teclear los comandos para arrancar las máquinas Docker a partir de las imágenes.

Figura 18: Libro de Docker: SecDevOps

Todos estos conceptos y más sobre Docker y otros relacionados con la seguridad de los contenedores los puedes encontrar en 0xWord, dentro de nuestro libro Docker: SecDevOps.

Autor: Fran Ramírez, (@cyberhadesblog y @cybercaronte) miembro del equipo de Crazy Ideas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps" y del blog Cyberhades.

1 comentario: