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,
root@07884529f092) 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.
Otra alternativa al docker commit es crear tu propio Dockerfile partiendo de la imagen base de kalilinux y añadiendo el paquete kali-linux-top10. Me parece más cómodo ese enfoque de cara a hacer modificaciones, o a actualizar nuestra imagen cuando lo haga la imagen base.
ResponderEliminarP.D: Disfruté mucho tu libro de Microhistorias :)!
Hola kabracity, ante todo gracias por el comentario y nos alegra que te haya gustado el libro de MicroHistorias ;)
ResponderEliminarTienes razón, como bien comentas, la alternativa DockerFile es posiblemente a mejor opción. Lo que ocurre que ya hablamos de este método cuando contamos WordPress In Paranoid Mode en este mismo blog y no quería volver a repetirlo. Además siempre es bueno saber alguna otra forma de crear las imágenes por si acaso.
En la segunda parte del post hago justamente el mismo comentario que has hecho ;)
Gracias de nuevo.
Este comentario ha sido eliminado por el autor.
ResponderEliminarContinuando un poco con el comentario de @kabracity, ademas de implementar la creación de un Dockerfile se podría hacer todo esto con Docker-Compose, de tal forma que sea mas fácil "Levantar" todos los servicios. Ademas en mi caso me ayuda mucho a tener una mejor idea de todos los contenedores que interaccionan entre si. ¡Gracias por el artículo, es muy bueno!
ResponderEliminarlo bueno de estos tutoriales es que mas que aprender a vulnerar maquinas lo que aprendes realmente es a utilizar nuevas tecnologias, antes de las maquinas virtuales imagino que no habia nada o bueno si chroot, luego nacieron las maquinas virtuales, y ahora estamos con esto de docker y contenedores, yo que soy un neófito me lo paso bien haciendo estos tutoriales, muchas gracias.
ResponderEliminarExcelente post. muchas gracias por compartir sus conocimientos.
ResponderEliminarComo mencionan arriba, aprendemos de seguridad y de nuevas tecnologías. Gracias Totales....