Creando un laboratorio de Pentesting con GNS3 y Docker
Creando un laboratorio de Pentesting con GNS3 y Docker, muchas veces en el transcurso de nuestras carreras de las Tecnologías de la Información y Comunicación y sus diferentes disciplinas, nos encontramos con la dificultad de encontrar sitios y/o maneras para realizar nuestras prácticas, y no se diga en la rama de la seguridad informática.
Ahora te estarás preguntando ¿pero para ello están las tecnologías de virtualización, verdad? Así es, pero uno como buen curioso y con espíritu de experimentación si queremos algo más allá de los clásicos laboratorios con máquinas virtuales, tenemos este software el cual nos permite virtualizar funciones y/o dispositivos de red y esto nos provee un gran avance al momento de ejecutar tareas como enumeración, análisis y explotación más completas y mas realistas posibles, y si queremos un entorno más parecido en la vida real.
Encuentra en este post de DragonJAR.org todo lo relacionado con Creando un laboratorio de Pentesting con GNS3 y Docker
Importante: En estos artículos solo se expondrá de manera genérica la creación de un laboratorio, y por consiguiente no se verán comandos específicos de configuración para protocolos, servicios y tecnologías, ni de las fases para el pentesting en sí, ya que queda bajo criterio lo que cada uno necesite para su entrenamiento.
La gran ventaja que nos ofrece GNS3 en Creando un laboratorio de Pentesting con GNS3 y Docker, es que soporta multidispositivos de diferentes fabricantes tales como Cisco, Juniper, Cumulus, Fortinet, PFsense etc., y de diferentes tecnologías de virtualización tales como Docker, QEMU, Dynamips, etc., además que nos ofrece la posibilidad de integrar nuestras máquinas virtuales de VirtualBox o VMware a nuestra topología de red, y software de análisis de red como Wireshark y SolarWinds.
Creando un laboratorio de Pentesting con GNS3 y Docker Funcionamiento
Creando un laboratorio de Pentesting con GNS3 y Docker, es importnte ya GNS3 nos ofrece diversos componentes que nos facilitará la virtualización de nuestros dispositivos de red. A continuación, haré una breve descripción de cada uno de ellos:
- WinPCAP: Permite el envío y recepción de paquetes de la tarjeta de red interna. GNS3 crea un túnel UDP entre cada conexión dentro de la misma tarjeta de red, emulando así una conexión TCP.*
- Wireshark: Analizador de paquetes.
- Dynamips: Permite virtualizar imágenes de IOS de Cisco.
- QEMU: Motor de emulación rápido de procesador que utiliza la traducción dinámica*; nos servirá en caso de que necesitemos importar algún appliance dentro de GNS3VM.
- VPCS: Simulador de PC ligero.
- CPUlimit: Nos ayuda a limitar el uso de la CPU por parte de una aplicación* o en este caso de una instancia de appliance.
- TightVNC Viewer: Cliente VNC ligero para el Control de Escritorio Remoto entre máquinas con interfaz gráfica.
- VirtViewer: Cliente SPICE ligero para el Control de Escritorio Remoto entre máquinas con interfaz gráfica.
De forma general, GNS3 funciona por medio de un controlador central en cual contiene y manda a llamar a los servicios de virtualización por medio de un computador; tanto la GUI y la web GUI funcionan separadamente. Esto permite que podamos utilizar GNS3 de manera remota o local y que nuestros laboratorios se vuelvan portables*.
Instalación en lA Creando un laboratorio de Pentesting con GNS3 y Docker
Bien, sabiendo un poco de que va esta herramienta, cómo funciona y de lo que puede hacer. Empecemos con la instalación del cliente GUI, en Creando un laboratorio de Pentesting con GNS3 y Docker
1. Vamos hacia este enlace para descargar la última versión de GNS3 GUI: https://github.com/GNS3/gns3-gui/releases/tag/v2.1.21
2. Descargamos el "GNS3-2.1.21-all-in-one,exe".
3. Una vez descargado, procederemos a instalarlo:
Nota I: en ocasiones en medio de la instalación, GNS3 nos pedirá que instalemos ciertos frameworks de Windows para poder instalar sus componentes, hagamos caso e instalemoslos.
4. Luego de instalarlo e iniciar el software, le damos clic en "Cancel" y cerramos el programa.
Importando GNS3 VM
GNS3 posee una distribución especialmente dedicada para correr appliances más avanzados dentro de una máquina virtual, ya que con simplemente tener el software cliente instalado solo nos proveerá dispositivos built-in o correr los IOS de Cisco con Dynamips de manera local (los cuales son obsoletos). Ahora, si queremos probar con aparatos como firewalls, IDS/IPS, switches L2/L3 etc., o usar tecnologías como Docker, tendremos (a fuerza) que hacer uso del GNS3 VM.
GNS3 VM está basado en Ubuntu y dentro de ella están pre-instaladas las dependencias y paqueterías necesaria que nos hará posible el uso de motores de virtualización y/o simulación como QEMU, Dynamips y VPCS, y tecnologías como Docker y CPUlimit. En consecuencia, se hace hincapié en el uso de VMware Player/Workstation Pro o ESXi en caso de correrlo de manera remota, y la razón principal es que este hipervisor posibilita la virtualización anidada.
Nota II: Si tienes procesador AMD, entonces VirtualBox te soportará la anidación.*
1. Para hacer uso de esta distribución, primero debemos instalar VMware Workstation Pro si se tiene licencia, o VMware Player si no se cuenta con la misma, o en su defecto VirtualBox si cuentas con AMD como CPU.
2. Descargamos el archivo "GNS3.VM.VMware.Workstation.2.1.21.zip" o "GNS3.VM.VirtualBox.2.1.21.zip"
3. Descomprimimos y nos extraerá un archivo OVA el cual importaremos hacia nuestro hipervisor que hayamos elegido y en automático nos crea la máquina virtual ya configurada.
4. Activamos la característica de VT-x/EPT para procesadores Intel o AMD-V/RVI para procesadores AMD, esto habilita la tecnología KVM que permite que una máquina de host ejecute entornos virtuales múltiples y aislados*, pero en este caso dentro de GNS3 VM.
Nota III: cerciórate que tengas activada la característica de virtualización en el BIOS de su equipo o que lo soporte.
5. Ejecutamos la máquina virtual y nos aparecerá el resumen de configuración. Como vemos no se ha configurado una dirección IP en la que podamos llamarlo o comunicarlo.
Configurando GNS3 VM
Es importante configurar las interfaces de red de GNS3 VM, por defecto nos viene con dos tipos de adaptador: Host-Only que nos permitirá conectar de manera directa con el GNS3 VM y enlazar con la interfaz gráfica de GNS3, y el adaptador NAT que nos servirá para actualizarlo o para cuando queramos descargar contenedores Docker, existe la posibilidad de agregar la conexión tipo Bridge pero es optativo.
1. Para configurarlo necesitamos seleccionar la opción "Networking".
2. Saldrá una pantalla que nos advertirá que se requerirá de un reinicio, seleccionamos "Yes".
3. Comentamos la siguiente linea...
# iface eth0 inet dhcp
... y descomentamos la linea para que nos quede de la posterior forma, por ejemplo.
iface eth0 inet static address 192.168.50.200 netmask 255.255.255.0 gateway 192.168.50.1
Para el adaptador NAT lo dejamos con su configuración por defecto.
# NAT inteface
allow-hotplug eth1
iface eth1 inet dhcp
4. Guardamos y reiniciamos, y nos lanzará el nuevo resumen de configuración.
4. Guardamos y reiniciamos, y nos lanzará el nuevo resumen de configuración.
5. Para revisar que tenga conexión a Internet, nos encaminamos hacia la opción de "Test".
6. Damos en "OK" o esperamos la cuenta regresiva.
7. Nos debe aparecer un mensaje como el siguiente.
Nota IV: Si en caso de algún error de conexión revise la configuración de adaptadores virtuales de red de su hipervisor que haya elegido.
Si queremos hacer una conexión SSH o usar un cliente FTP o SFTP usamos las credenciales por defecto que nos marca en la pantalla. Si queremos cambiar la contraseña hagamos lo siguiente:
1. Damos "Enter" en "OK" y nos dirigimos a "Shell".
2. Escribimos la siguiente linea:
gns3@gns3vm:~$passwd
3. Escribimos la contraseña actual y nos pedirá que escribamos la nueva.
4. Para regresar al menú anterior escribimos "exit".
gns3@gns3vm:~$exit
5. Apagamos nuestro GNS3 VM.
Enlazando GNS3 GUI con GNS3 VM
Una de las virtudes de este software es que podemos trabajar de manera combinada, es decir podemos usar nuestras máquinas virtuales locales junto con appliances que se encuentran dentro de GNS3 VM y enlazarlas para que haya convergencia entre ellas. Para lograr eso, tendremos que seguir ciertos pasos:
1. Abrimos nuestro cliente GNS3 y nos dirigimos a la pestaña de preferencias.
2. Seleccionamos la opción de GNS3 VM, y marcamos la casilla "Enable the GNS3 VM"; elegimos nuestro hipervisor que estemos usando y de inmediato nos debería de aparecer nuestro GNS3 VM en la lista, en caso contrario le damos clic en "Refresh"; indicamos cuanto de memoria RAM y cuantos procesadores virtuales tendrá; las casillas restantes nos indican lo que hará GNS3 VM al cerrar nuestro software cliente, si apagar la máquina virtual, suspenderla o dejarla encendida, eso es a consideración de cada quien; damos en "OK".
3. Empezará a establecer conexión al servicio local hacia el puerto 3080 para poder levantar el GNS3 VM.
4. Nos daremos cuenta en nuestro lado derecho de la pantalla aparecerá un nuevo servidor que esta iniciando.
5. GNS3 nos indicará con color verde que nuestro servidor GNS3 VM esta habilitado y listo para trabajar de manera conjunta con nuestro cliente GUI una vez ya establecida la conexión.
Nota V: Es importante revisar que tanto nuestro GNS3 GUI y nuestro GNS3 VM tengan la misma versión, de lo contrario nos marcará error.
x
Es muy importante planear con anticipación qué tipo de laboratorio o de escenario queremos tener para nuestras diferentes prácticas, pero sea como fuere, existe formas generales para montar los diferentes appliances que vayamos a utilizar y como poder conectarlas y crear una convergencia en GNS3.
Importante: En estos artículos solo se expondrá de manera genérica la creación de un laboratorio, y por consiguiente no se verán comandos específicos de configuración para protocolos, servicios y tecnologías, ni de las fases para el pentesting en sí, ya que queda bajo criterio lo que cada uno necesite para su entrenamiento.
En este caso, el laboratorio que queremos construir es para motivos de pentesting, en consecuencia necesitamos un ambiente con las características básicas que tendría un sitio real pequeño. Requeriremos de los siguientes appliances para poder aplicar los diferentes protocolos, servicios y tecnologías:
- IOSvL2.
- IOSv.
- PFSense.
- Metasploitable III con Windows Server 2008 R2.
- DVWA.
- WordPress.
- Windows 7, 8 y 10.
- Cloud.
- Kali Linux 2019.2.
Importando
1. Para poder importar los appliances, primero abrimos nuestro GNS3 y esperamos a que conecte con el GNS3 VM. Una vez enlazado, podemos empezar.
2. Nos presentará una ventana que nos indicará qué nombre le queremos dar a nuestro nuevo proyecto y en donde lo queremos guardar, en mi caso le pondré "Pentesting" y lo dejaré en el directorio por defecto.
3. Nos creará un espacio en blanco; para poder instalar nuestros appliances nos dirigimos primeramente hacia la izquierda y damos clic en la sección de los enrutadores, veremos que nos aparecerá una lista de diferentes appliances disponibles, y si navegamos por las distintas secciones nos arrojará más alternativas. Arrastramos el appliance que eligamos hacia el espacio en blanco.
4. Emergerá una ventana con las características del appliance y damos en "Next".
5. Seleccionamos la opción de correrlo en el GNS3 VM y damos en "Next".
6. Nos lanzará otra ventana en la cual nos dice si los requisitos para poder correr el appliance son correctos. Damos en "Next".
7. Luego debemos de elegir qué versión queremos importar, si nos las tenemos damos clic en "Download" para obtenerlas, y luego una vez adquiridas podemos dar en "Import" para montar la imagen o disco duro virtual al GNS3 VM.
Nota I: El uso de algunos appliances (en especial los de Cisco) requieren de autorización y/o licencia para poder conseguirlos y emplearlos, por lo tanto, no las puedo compartir por razones obvias.
8. Nos indicará en cuadros verdes que el appliance se está subiendo al GNS3 VM del lado superior derecho del programa, esto significa que aparte que sube el appliance revisa si su integridad es correcta por medio del hash MD5, en caso contrario nos marcará con cuadros rojos que la imagen no es la indicada y tiene alguna modificación y por lo tanto no se subirá al GNS3 VM.
9. Una vez importado la imagen nos debe de aparecer en letras verdes en señal de que nuestro aparato está listo para usar, si no aparece haga clic en "Refresh" para actualizar el estatus de la lista. Damos clic en "Next" y nos preguntará si queremos instalar esa versión de nuestro appliance e indicamos que "Yes".
10. Seleccionamos que tipo de motor de virtualización QEMU queremos usar, si para arquitecturas i386, x86_64, aarch64 o arm, en nuestro caso elegimos para sistemas x86_64 que es por default. Damos clic en "Next".
11. En la ventana nos indicará las propiedades virtuales del nuevo appliance, las cuales podemos cambiar mas adelante. Continuamos dando clic en "Next".
12. En la siguiente ventana nos dirá ciertas instrucciones para usar el appliance, aquí varía dependiendo el fabricante o del appliance en sí, en este caso solo nos avisa que no se ha configurado las contraseñas default ni para el modo privilegiado en el enrutador virtual. Damos clic en "Finish" para finalizar con la importación del appliance.
13. Para poder agregar nuestro appliance a nuestro espacio en blanco y empezar a formar un escenario solo vamos de nuevo a la sección de appliances del lado izquierdo y cambiamos de appliances disponibles por applances instalados y nos deberá aparecer el que hemos importado, en mi caso tengo tres; arrastramos hacia el área en blanco y ya hemos añadido un nuevo dispositivo virtual a nuestra topología. Si queremos cambiar de símbolo, propiedades, personalizar la consola, iniciar, pausar, detener etc., solo damos clic izquierdo sobre nuestro appliance y nos mostrará una lista de opciones.
También podemos duplicar nuestros appliances y no volver a hacer todo el proceso de importación. Ahora, si queremos importar otro dispositivo de red virtual, el proceso es similar dependiendo de que tipo de tecnología de virtualización o tipo de dispositivo queramos agregar.
14. Finalmente damos clic en iniciar y tendremos una sesión de Telnet con Putty, la cual será nuestra consola. Como se comentaba en el párrafo anterior, dependiendo del appliance también cambia el tipo de consola, solo existen tres posibles consolas: TightVNC y Spice para aparatos con interfaz gráfica, y Telnet para aparatos que solo manejan CLI.
Importando sandboxes Creando un laboratorio de Pentesting con GNS3 y Docker
Después de haber configurado nuestros dispositivos de red, nos dispondremos a agregar máquinas virtuales ta nuestro área de trabajo. Para no alargar este artículo, se resumirá en la importación de un sandbox por hipervisor como demostración, y esto es porque el proceso es igual para cada uno de las demás máquinas virtuales. Por lo mismo, tomaremos como ejemplo para VirtualBox al Kali Linux y un cliente con Windows 7 para VMware.
Agregando máquina virtual de VirtualBox
1. Para sumar una máquina de VirtualBox, solo basta con ir a la sección de "Configuración" y en la opción de adaptadores de red lo dejamos como en "No conectado".
Esto permitirá que GNS3 configure de manera automatizada un adaptador tipo genérico virtual, y trata de nada menos que de un túnel UDP conocido también como UBridge.
2. Seguido de lo anterior, nos dirigimos hacia nuestro GNS3 y hacemos clic en la sección de dispositivos finales y damos clic en "+ New appliance template" para agregar nuestra máquina virtual.
3. Nos brincará una ventana en la cual nos dice que tipo de appliance queremos añadir, elegimos "Add a VirtualBox virtual machine" y damos en "OK" para seguir con el proceso.
4. Nos preguntará si queremos correr la máquina virtual en un host remoto o de manera local; elegimos la segunda opción.
5. Seleccionamos nuestra máquina virtual que se encuentra dentro de la lista de que detectó GNS3, en este caso será el Kali Linux, y damos en "Finish" para finalizar el proceso.
6. Ahora veremos la lista de propiedades y características que tiene nuestra máquina virtual, podemos editarlas, añadir una nueva o simplemente eliminarla.
7. Nos dirigimos de nuevo hacia la sección de dispositivos finales y arrastramos nuestra maquina virtual hacia el área de trabajo y coectamos a un switch de acceso.
Agregando máquina virtual de VMware
1. Se hacen los primeros seis pasos como con la máquina virtual de VirtualBox, pero antes de cerrar damos clic en "Edit" para modificar algunas características relacionadas al adaptador de red.
2. Damos clic en la pantalla de "Network" y seguidamente marcamos la casilla con la frase "Allow GNS3 to override non custom VMware adapter" lo que nos permitirá que GNS3 tome el control de nuestro adaptador personalizado que crearemos más adelante.
3. Nos conducimos directamente a la sección general de VMware y seleccionamos el número de adaptadores que necesitamos agregar para conectar la máquina hacia la topología, damos clic en "Configure" para que GNS3 de forma automática configure el adaptador en nuestro hipervisor, en este caso solo necesitamos una, aplicamos y damos en "OK".
4. Arrastramos hacia nuestro área de proyecto y conectamos, los pasos son iguales que con la máquina de VirtualBox.
Importando contenedores
Como podemos observar en la imagen de la izquierda, el laboratorio de pentesting ya tiene una forma bastante completa con todos los appliances de red y nuestras máquinas virtuales conectados, pero nos falta dos complementos extras que si bien se pueden configurar dentro de una máquina virtual tradicional y luego agregarla al espacio de trabajo siguiendo los pasos expuestos anteriormente, existe una desventaja que podríamos tener, y es que si queremos ahorrar recursos informáticos, los contenedores Docker nos serviría de mucho, ya que se trata de una tecnología que no necesita en si un sistema operativo para poder levantar un simple sitio web, base de datos, servicios de correo etc.; solo nos encargamos de lanzar y gestionar los contenedores con las aplicaciones, y en lugar de exponer los diferentes recursos de hardware de cada máquina virtual, se elimina la necesidad de tener sistemas operativos separados para conseguir un aislamiento.*
En esta ocasión importaremos un contenedor con la aplicación web DVWA como demostración ya que el proceso en general es el mismo para los Docker en GNS3, aunque es de vital importancia aclarar que es aconsejable buscar y encontrar contenedores especialmente hechos o adaptables para GNS3. Actualmente recomiendo dos sitios en donde podemos encontrar variedad de contenedores, estos son Turnkey Linux y el hub de GNS3 en Docker.com (los enlaces están en la sección "Enlaces con contenido útil"). También cabe mencionar que no son la regla y existen muchos sitios y usuarios que suben sus contenedores de forma pública e independiente.
1. Los pasos para importar un contenedor en GNS3 es similar como importar una máquina de VirtualBox desde el paso número dos hasta el número tres, el detalle cambia cuando tenemos que elegir una imagen para "pullear", esto es porque Docker usa un comando universal para poder halar/descargar todo un contenedor:
docker pull <enlace>
En esta situación halaremos de este enlace para poder obtener el contenedor con DVWA:
docker pull tleemcjr/dvwa
2. Le asignamos un nombre a nuestro Docker.
3. Asignamos número de interfaces.
4. Configuramos comandos en caso de necesitar ciertos flags para inicializar demonios, restaurar puntos de partida, adjuntar otros contenedores*. En este caso no necesitamos de ningún comando y dejamos en blanco el espacio.
5. Seleccionamos el tipo de consola.
6. Configuramos variables de entorno si los tenemos, en este caso puntual dejamos el espacio en blanco.
7. Cuando arrastramos el Docker a nuestro espacio de trabajo veremos que GNS3 VM empezará a descargar todo el contenedor en varias imágenes y en la parte de consola nos exhibirá el proceso de pull. Por ese motivo es muy importante tener el adaptador NAT o Bridge configurado en el GNS3 VM.
Antes de conectar nuestro contenedor a la topología, tenemos que hacerle clic derecho y seleccionar la opción "Edit config" para poder editar directamente desde de GNS3 la interfaz de red según el direccionamiento que tengamos configurado.
Al final conectamos hacia nuestro conmutador virtual y tenemos listo nuestro laboratorio, podemos agregar modificar el laboratorio a nuestra conveniencia o necesidad, los pasos de importación son similares con ciertas diferencias desde el número de discos duros virtuales, tipos de consola, variables de entorno, número de interfaces etc.
Para concluir esta parte, se debe halagar que GNS3 se ha ido transformando con cada actualización haciéndolo más intuitivo y fácil de usar.
Si Creando un laboratorio de Pentesting con GNS3 y Docker tiene buen apoyo, realizaré una segunda parte donde se explique la administración, configuración e importaciones de appliances de manera remota con VMware ESXi y/o con Packet en la nube.
Artículo escrito por Damián Cortés @janbric (Investigador Independiente de Seguridad Informática) para La Comunidad DragonJAR