Blog

Como vulnerar una VPN – Parte I

Para ver la serie completa pulsa aquí. Habrá conceptos que se den por obvios ya que están explicados en artículos anteriores.

Buenas a todos! Con este post comenzamos una nueva sería que constara de dos partes sobre como es posible comprobar la seguridad y vulnerar una VPN (Virtual Private Network). Para ello haremos uso de la maquina virtual “VulnVPN” que fue realizada por el autor de http://www.rebootuser.com/ y que esta preparada para ser vulnerada. El principal objetivo que se nos plantea es ganar acceso como root al servidor VPN. Me parecía una forma muy practica de aprender como sería posible vulnerar una VPN así que vamos a ver como podría realizarse un pentest.

Antes de empezar lo primero es definir que es una VPN, por lo que aquí os dejo la definición de la Wikipedia, donde podéis encontrar mucha mas info: “Una red privada virtual, RPV, o VPN de las siglas en inglés de Virtual Private Network, es una tecnología de red que permite una extensión segura de la red local (LAN) sobre una red pública o no controlada como Internet. Permite que la computadora en la red envíe y reciba datos sobre redes compartidas o públicas como si fuera una red privada con toda la funcionalidad, seguridad y políticas de gestión de una red privada.1 Esto se realiza estableciendo una conexión virtual punto a punto mediante el uso de conexiones dedicadas, cifrado o la combinación de ambos métodos.”

Actualmente las VPN son muy utilizadas principalmente con empresas, permitiendo esta tecnología que los empleados se conecten desde casa por ejemplo y se encuentren “en la misma red empresarial”, tras conectarse a la VPN.

Una vez hemos visto que es una VPN vamos a descargar la maquina virtual de http://www.rebootuser.com/wp-content/uploads/vulnvpn/VulnVPN.7z

Tras descargarla la descomprimimos:

p7zip -d VulnVPN.7z

 

Y la abrimos con VMware. La maquina tiene la configuración de red preestablecida así que tendremos que ver como la ajustamos a nuestra red, ya sea cambiando la configuración de la interfaces de VMware o directamente la de nuestra red local. Yo en mi caso utilizo en cada una red tipo 192.168.0.0/24 y la IP de la maquina virtual es 192.168.0.10 por lo que únicamente necesite poner una interfaz en modo Bridge y fue suficiente.

vpn_1

 

Cuando tengamos la maquina virtual instalada y podamos conectarnos a ella vamos a descargar una serie de paquetes que no vienen instalados mediante el comando:

apt-get install openswan xl2tpd ppp

 

En caso de darnos algún problema por dependencias podemos hacer:

 "apt-get update && apt-get upgrade" o "apt-get install -f".

 

Ahora vamos a descargar los archivos necesarios del cliente para conectarse a la VPN de http://www.rebootuser.com/wp-content/uploads/vulnvpn/client.7z y los descomprimimos mediante:

 p7zip -d client.7z

 

Realizamos los siguientes comandos para meter los ficheros de configuración en sus correspondientes directorios:

root@kali:~/client# ls
ipsec.conf  ipsec.secrets  ppp  start-vpn.sh  xl2tpd
root@kali:~/client# cp ipsec.conf /etc/
root@kali:~/client# cp ipsec.secrets /etc/
root@kali:~/client# cp ppp/options.l2tpd.client /etc/ppp/
root@kali:~/client# cp xl2tpd/xl2tpd.conf /etc/xl2tpd/

 

Una vez hemos realizado todo estos pasos podemos comenzar a realizar el pentest al servidor VPN. Para ello lo primero que haríamos seria comprobar la red ya sea con nmap o netdiscover de la siguiente forma:

nmap -sP 192.168.0.0/24
netdiscover -r 192.168.0.0/24

vpn_2

 

Una vez hemos identificado el host, en este caso sabemos que es la maquina virtual, tendríamos que realizar un escaneo de esa IP para comprobar que puertos tiene abiertos y por donde podríamos llevar a cabo la intrusión, para ello realizamos un escaneo con nmap de la siguiente forma:

nmap -A 192.168.0.10
También podríamos escanear todos los puertos por si hubiera alguna sorpresa mediante "nmap -A 192.168.0.0/24 -p1-65355"

vpn_3

vpn_7

 

Como vemos en el resultado únicamente tiene el puerto 81 abierto. En este puerto no hay nada mas que una web que puso el autor de la VM con alguna información, por lo que lo lógico seria realizar ahora un escaneo de los posibles puertos UDP mediante:

nmap -sU 192.168.0.10

vpn_4

 

Como vemos en la imagen tiene el puerto 500/udp abierto, este puerto es donde corre el servicio ISAKMP (Internet Security Association and Key Management Protocol) que es un protocolo criptográfico que constituye la base del protocolo de intercambio de claves IKE. Si queréis mas información: http://es.wikipedia.org/wiki/Internet_Security_Association_and_Key_Management_Protocol

Como tiene el puerto abierto vamos a utilizar ike-scan para lograr conseguir el hash que nos permita obtener la clave para conectarnos a la VPN mediante el siguiente comando:

ike-scan -M -A -Pike-hash -d 500 192.168.0.10 -sport 0

vpn_5

 

Una vez ejecutado y finalizado como vemos en la anterior imagen el programa ike-scan nos genera un archivo donde esta el hash, por lo que ahora deberemos realizar fuerza bruta contra ese hash para lograr conseguir la contraseña que nos permita conectarnos a la VPN. Para ello lo primero tenemos que utilizar un diccionario como puede ser “rockyou” que viene ya en Kali, por lo que lo descomprimimos para poder usarlo de la siguiente manera:

gzip -d /usr/share/wordlists/rockyou.txt.gz

 

Ahora que ya esta descomprimido vamos a ver si conseguimos sacar la contraseña del hash que hemos obtenido mediante psk-crack:

psk-crack -d /usr/share/wordlists/rockyou.txt ike-hash

vpn_6

 

Y como vemos en nada de tiempo nos a sacado que la clave es “123456”. Ahora deberemos editar el fichero “/etc/ipsec.secrets” y remplazar “ENTER_PSK_HERE” por “123456” mediante:

vi /etc/ipsec.secrets

vpn_8

vpn_9

 

Tras esto, reiniciamos el servicio ipsec:

/etc/init.d/ipsec restart

vpn_10

 

Iniciamos el servicio xl2tdp en caso de no estar corriendo:

/etc/init.d/xl2tpd start

 

Como ya tenemos todo configurado nos conectamos a la VPN usando el siguiente comando:

ipsec auto --up vpn

 

Ejecutamos el script start-vpn.sh para que nos cree la interfaz ppp0 que nos daría acceso a la red interna de la “empresa” de la siguiente manera:

 sh start-vpn.sh

 

Tras ejecutar el script podemos ejecutar “ifconfig” y vemos que ya tenemos la nueva interfaz de red creada con la correspondiente IP privada asignada.

vpn_11

 

Ahora vamos a comprobar que mas host hay en la red interna a la que nos hemos conectado tras averiguar la contraseña. Esto lo podemos hacer mediante algún script como vemos a continuación:

for ip in 10.99.99.{1..255}; do ping -c 1 -t 1 $ip > /dev/null && echo “${ip} is up”; done

vpn_12

 

Y hasta aquí llega el post de hoy, en los siguientes seguiremos profundizando mas y viendo otras posibles formas de realizar un pentest a una VPN. Espero que os haya gustado!

Un saludo,

Eduardo – eduardo@highsec.es – @_Hykeos

  1. Panoptico
    Panoptico12-16-2013

    Muy interesante.
    Estoy empezando con esto de seguridad informática ¿Cómo aconsejarían segurizar en este caso? ¿Agregando salt al hash?
    Saludos.

    • Eduardo Arriols
      Eduardo Arriols12-16-2013

      Buenas, sin duda introducir un salt complicaría mucho mas las cosas ya que el hash que generaríamos no seria únicamente de la contraseña, de tal forma que si quisiéramos hacer de nuevo fuerza bruta fuera muchísimo mas complicado y largo debido a las posibles combinaciones 😉

  2. Anonymous
    Anonymous12-16-2013

    Cual es la diferencia con este post: http://resources.infosecinstitute.com/vulnvpn/

    Ah! que esta resumido!

    • Eduardo Arriols
      Eduardo Arriols12-16-2013

      Buenas, para empezar si quieres poner un comentario criticando lo que sea pon tu nombre no ‘Anonimo’.

      Después, ese articulo lo leí hace tiempo y si me sigues en twitter o algo veras que lo he puesto un par de veces porque me parecía muy interesante. Por ello decidí explicarlo con mis palabras y ponerlo en español de tal forma que cualquiera pudiera leerlo sin necesidad de tener conocimientos en ingles. Es una VM preparada, y como tal tampoco tiene demasiadas soluciones así que no creo que haya millones de explicaciones distintas, ademas de que en español no he encontrado ninguna.

      Un saludo.

    • Arthur
      Arthur12-31-2013

      Saludos.

      Anonymous, en la misma pagina de rebootuser ya hay un post incluso mejor explicado que el de la pagina que muestras http://www.rebootuser.com/?p=1474

      Eduardo, gracias por el material en español, ayudara bastante a quienes no dominamos el ingles.

  3. R0dW3
    R0dW312-16-2013

    Muy bien Eduardo, a mi me ha gustado el post.
    Gracias!

  4. Diego Garcia
    Diego Garcia01-03-2014

    Una buena opcion para la autenticación de las VPNs es utilizar Autenticación Robusta de dos factores, la combinación Servidores AAA y Servidores TFA, complica mucho mas la situacion al momento de obtener las credenciales a autenticación.

    Excelente post, sobre todo explicado de forma sencilla… Gracias Eduardo.

Leave a Reply

*

    No Twitter Messages