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

Hace unos días, Chema Alonso nos habló del "máster de Ciberseguridad" (una ruta a seguir para aprender o perfeccionar tus conocimientos) en 0xWord donde según la disciplina y el nivel que quieras, puedas elegir unos libros u otros de seguridad informática. Para poder practicar todas las técnicas y programas que hay en ellos, llegará el momento de hacer pruebas en un laboratorio.

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

Hay muchas formas de montar uno, siendo las máquinas virtuales el más utilizado. Pero hoy os vamos a explicar cómo crear un sencillo y escalable entorno para pruebas de Ethical Hacking utilizando nuestro querido Docker. ¿Por qué Docker? En primer lugar, por la rapidez y la sencillez. Instalar máquinas virtuales con vulnerabilidades requiere un proceso completo de instalación del S.O., las aplicaciones vulnerables, configuración de red, etcétera.


Incluso teniendo ya alguna máquina ya pre-configurada, requerirá una considerable cantidad de recursos de tu sistema siendo complicado tener un número elevado de máquinas a la vez. Es aquí donde aparecen las bondades de Docker. En una sola máquina host, es posible instalar una serie de contenedores los cuales podrán ser herramientas de pentesting (como por ejemplo Kali Linux) o contenedores vulnerables con fallos conocidos. Todo esto en unos minutos y sólo ocupando una máquina virtual con 2GB como mínimo y algo de espacio de disco.

Vamos a ver cómo podemos montar un pequeño laboratorio de pruebas en Docker en sólo unos minutos, 20 en concreto, de los cuales 15 minutos corresponden a la instalación de las herramientas en la distribución Kali Linux (como puedes ver el vídeo que acompaña este post en la segunda parte). Hemos optado por esta opción (selección del top10 de herramientas) porque no es demasiado grande y además contiene justo lo que más se suele utilizar. Este es un sencillo esquema de la infraestructura que vamos a instalar para hacer nuestras prácticas:

Figura 3: Esquema de la infraestructura a a crear

Como ya hemos comentado, la máquina host sobre la cual vamos a hacer las pruebas debe de tener al menos 2GB de memoria RAM. Una vez la tenemos en ejecución y Docker instalado, si tecleamos el siguiente comando obtendremos un listado de las redes disponibles:

Figura 4: Listado de redes disponibles en Docker

La red que nos interesa es “bridge”. Esta red está asociada a la interface “docker0”, la cual se crea por defecto y tiene la dirección IP 172.17.0.1/24 (actúa de Gateway). Vamos a ver la información más relevante de esta red “bridge”, para ello ejecutaremos la instrucción “inspect” de Docker:
docker network inspect bridge
Figura 5: Salida de la ejecución del comando network inspect de Docker para la red bridge

Aquí podemos ver todos los detalles de la misma, como por ejemplo la “Subnet”, la dirección IP del Gateway, el nombre “docker0” para la interface, etcétera. Si hubiera algún contenedor ya creado aparecería también en este listado en el apartado “Containers.

El primer paso para montar nuestro entorno de pruebas será descargar una imagen de Kali Linux y ejecutar un contenedor a partir de ella. Docker nos ofrece una imagen basada en Fedora 21 pero antes de utilizarla tendremos que realizar algunas operaciones previas. Para obtener la imagen Kali ejecutaremos el siguiente comando:
docker pull kalilinux/kali-linux-docker
Figura 6: Descarga de la imagen Kali con el comando pull

El siguiente punto será crear un contenedor basado en esta imagen y acceder al mismo. Para poder identificar mejor luego los contenedores, le daremos un nombre a cada uno de ellos durante la ejecución, en este caso lo llamaremos “Contenedor_Kali”:
docker run -ti --name Contenedor_Kali kalilinux/kali-linux-docker /bin/bash
Como antes hemos realizado el “pull” de la imagen, debería levantar directamente con el contenedor. En caso de no haber realizado previamente dicho “pull”, el mismo comando “run” descargará la imagen (es una buena práctica hacer primero el “pull”, sobre todo para tenerlo organizado y evitar sorpresas a la hora de levantar un contenedor y que tenga que descargar la imagen) y luego nos dará acceso al contenedor como se puede apreciar en la siguiente imagen:

Figura 7: Descarga de la imagen Kali y acceso al contenedor usando el comando run de Docker

Una vez estamos dentro de la Shell del contenedor (en el caso del ejemplo, [email protected]) vemos que si intentamos ejecutar el comando “nmap” nos indica que no está instalado. Existe un paquete especial de instalación llamado “kali-linux-top10” el cual nos instalará las diez aplicaciones más utilizadas en Kali, que son las siguientes:
1. Aircrack-ng
2. Burpsuite
3. Hydra
4. John
5. Maltego
6. Metasploit Framework
7. Nmap
8. OWASP-Zap
9. Sql-map
10. WikeShark
Como podemos ver, incluye nmap y sobre todo Metasploit. Antes de instalar este paquete tendremos que actualizar el contenedor Kali:
apt update
apt dist-upgrade
apt autoremove
apt clean
Y luego finalmente, instalamos el paquete (esto tardará un poco en instalarse, unos 15 minutos más o menos tal y como hemos mencionado antes):
apt install kali-linux-top10
Figura 8: Proceso de actualización e instalación del top 10 de utilidades dentro del contenedor Kali

En este punto ya tenemos nuestro contenedor con Kali llamado “Contenedor_Kali” y las herramientas más utilizadas. Hay que tener en cuenta que, si salimos del contenedor y volvamos a ejecutar el comando “docker run ...” estaremos creando un contenedor nuevo y parecerá que hemos perdido todas las actualizaciones que hemos realizado (esto vale para cualquier otro contenedor Docker).

Por eso, cuando salgamos del contenedor, si tenemos que volver a él hay que realizar dos pasos. El primero es levantar de nuevo el contenedor (usando su id o en nuestro caso, el nombre) y luego acceder:

docker start Contenedor_Kali
docker exec -it Contenedor_Kali /bin/bash
Figura 9: Proceso para acceder de nuevo al contendor “Contenedor_Kali”
después de salir. Se comprueba que “nmap” sigue instalado

Si queremos guardar la imagen actualizada y personalizada para futuros proyectos y así poder lanzar Kali con todas las herramientas que vayamos instalando, tendremos que crear una nueva de la siguiente manera:
docker commit Contenedor_Kali imagen-kali
Este comando creará una nueva imagen llamada “imagen-kali” que podemos utilizar para levantar otro contenedor (con todas las actualizaciones y las aplicaciones instaladas) simplemente tecleando:
docker run -ti Imagen_Kali /bin/bash
Vamos a suponer que esta instalación es un entorno temporal, si queremos dar persistencia a la información que almacenemos en el contenedor Kali y personalizarlo un poco, será necesario utilizar volúmenes y por supuesto un dockerfile (en nuestro artículo de WordPress in Paranoid Mode explicamos como montar varios contenedores Docker usando Dockerfile y DockerCompose). Podéis echar un vistazo a este enlace el cual explica en detalle cómo instalar Kali y también como crear los volúmenes.

Figura 10: Creación de una imagen propia Kali partiendo del contenedor “Contenedor_Kali”.

Una vez tenemos nuestro contenedor Kali corriendo, pasaremos a la instalación de las máquinas vulnerables, pero eso lo veremos en la segunda parte de este artículo.

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.

Via: www.elladodelmal.com
Cómo montar un entorno de pentesting desde cero con Docker (Parte 1 de 2) Cómo montar un entorno de pentesting desde cero con Docker (Parte 1 de 2) Reviewed by Unknown on 2:47 Rating: 5