Shutterstock 313805942

Instalación y configuración para ambiente de laboratorio de Pentest controlado por vpn y usando Docker Compose


Charly face
Elzer Pineda

En la actualidad para desarrollar un laboratorio de pentesting debes contar con una infraestructura propia, por lo general en todos los cursos de pentesting o ethical hacking hacen referencia a máquinas virtuales utilizando virtualbox, vmware o algún otro hypervisor lo que requiere de equipos físico o hierro y sino  involucra la compra de diversas membresías en sitios famosos como Hack The Box o vulnhub y otros, para luego bajar a máquina virtual en tú laboratorio local e importarla para poder añadirla a tú infraestructura virtual, esto es sumamente tedioso pero principalmente involucra que solo podrás tener tu ambiente de práctica para trabajar localmente.

 

Durante un par de talleres y cursos surgió la idea de realizar un laboratorio portátil y estoy seguro no fue la única persona que se le ha ocurrido, sin embargo en este artículo lo que se busca es definir la implementación de una laboratorio portable utilizando el vps que tengamos a disposición para ellos es importante saber que no todos los vps le permiten para esta finalidad y por ello los ataques y pruebas realizadas solo afectan los contenedores utilizados y por medio de una vpn sin el objetivo de afectar la infraestructura del vps.

 

A continuación, presentamos los siguientes pasos para la instalación del ambiente mediante accesos con vpn.

 

Para crear un ambiente de pentest privado se requiere crear una red privada a la cual tendremos acceso desde una VPN.

 

Creando VPN docker

 

En búsqueda del desarrollo de este proyecto encontré un repositorio de como instalar openvpn en docker y poder conectarnos a nuestra VPN muy explicado. Adjunto la dirección sobre el sitio.

 

https://joanesmarti.com/servidor-openvpn-con-docker/

 

 

Los siguientes pasos son importantes para contruir nuestra vpn y usuarios específicos que se conectaran al servidor.

 

git clone https://github.com/kylemanna/docker-openvpn.git

cd docker-openvpn

docker build -t vpn1 .

 

 

Generando el fichero de configuración de OpenVPN

 

 

Generando los PKI y el CA

 

 

Iniciamos el contenedor

 

 

Añadiendo usuarios

 

 

Exportamos nuevo archivo ovpn para conectarnos a la VPN.

 

 

Descargamos el archivo para el usuario con formato .ovpn y conectarnos remotamente a nuestro ambiente de pentest.

 

 

Una vez tengamos   nuestra vpn  y usuarios configurados podemos crear nuestro docker compose para crear nuestros contenedores vulnerables.

 

Podemos ir adecuando el ambiente en base a  contenedores de momento que queramos realizar nuestras pruebas.  Imágenes vulnerables para el desarrollo de estas pruebas se pueden descargar del sitio propio  de vulnhub (https://github.com/vulhub/vulhub) donde se desarrollan imágenes  de dockers  vulnerables para  poner a pruebas nuestros conocimientos en pruebas de pentest.

 

A continuación presentamos el detalle del contenido de los contenedores vulnerables  utilizando nuestra vpn en docker-compose:

 

version: '3'

services:

    dojo1:

       image: docker-vpn   --------------->       Imagen VPN.
       volumes:
          - /root/vpn-data:/etc/openvpn
       cap_add:
          - NET_ADMIN
       ports:
          - "3000:1194/udp"
       networks:
          lab_cpp:
              ipv4_address: 172.21.0.2
   glassfish_4:
       image: vulhub/glassfish:4.1
       environment:
          - ADMIN_PASSWORD=glassfish
       networks:
          lab_cpp:
              ipv4_address: 172.21.10.4
   coldfusion:
       image: vulhub/coldfusion:11u3
       networks:
           lab_cpp:
               ipv4_address: 172.21.10.6
   drupal_8:
       image: vulhub/drupal:8.5.0
       networks:
           lab_cpp:
               ipv4_address: 172.21.10.8
           lab_db:
   drupal_db:
       image: mysql:5.5
       hostname: drupal_db
       environment:
           - MYSQL_ROOT_PASSWORD=root
           - MYSQL_DATABASE=test
       networks:
            - lab_db

   phpmyadmin_web:
       image: vulhub/phpmyadmin:4.4.15.6
       volumes:
           - ./vulhub/phpmyadmin/CVE-2018-12613/config.inc.php:/var/www/html/config.inc.php
       links:
           - phpmyadmin_db
       depends_on:
           - phpmyadmin_db
       networks:
           lab_db:
           lab_cpp:
               ipv4_address: 172.21.10.7
   phpmyadmin_db:
       image: mysql:5.5
       hostname: mysql
       environment:
           - MYSQL_ROOT_PASSWORD=root
           - MYSQL_DATABASE=test
       networks:
           - lab_db
   pentesterlabdb:
       image: mysql:5.5
       environment:
           MYSQL_ROOT_PASSWORD: rootpasswd
           MYSQL_DATABASE: exercises
           MYSQL_USER: admin
           MYSQL_PASSWORD: admin
       networks:
           - lab_db
   apache_basic_auth:
       image: crhystamils/apache_basic_auth
       networks:
           lab_cpp:
               ipv4_address: 172.21.20.5
   pentesterlab01:
       image: crhystamils/pentesterlab01
       links:
           - pentesterlabdb
       depends_on:
           - pentesterlabdb
       networks:
           lab_cpp:
               ipv4_address: 172.21.20.6
           lab_db:
   mutillidae_web:
       image: crhystamils/mutillidae
       links:
           - mutillidae_db
       depends_on:
           - mutillidae_db
       networks:
           lab_cpp:
               ipv4_address: 172.21.20.7
           lab_db:
   mutillidae_db:
       image: mysql:5.5
       environment:
           MYSQL_ROOT_PASSWORD: mutillidae
           MYSQL_DATABASE: mutillidae
           MYSQL_USER: admin
           MYSQL_PASSWORD: admin
       networks:
           - lab_db
   juice_shop:
       image: bkimminich/juice-shop
       networks:
            lab_cpp:
               ipv4_address: 172.21.20.8
   web_dvwa:
       image: vulnerables/web-dvwa
       networks:
            lab_cpp:
               ipv4_address: 172.21.20.9
networks:
   lab_cpp:
       driver: bridge
       ipam:
           driver: default
           config:
               - subnet: 172.21.0.0/16
   lab_db:
       driver: bridge
       ipam:
           driver: default
           config:
                - subnet: 172.22.0.0/1

 

NOTA: Antes de iniciar nuestro docker-compose debemos detener el primer contenedor que se creó para la vpn.

 

 Para iniciar nuestro docker-compose configurado con vpn y docker vulnerables utilizamos el siguiente comando:

  • docker-compose up -d