Sie sind auf Seite 1von 5

OpenVPN pivoting

Como todos sabis, pivotar o pivoting es un mtodo que consiste bsicamente en utilizar un sistema bajo nuestro control como pasarela para atacar otros sistemas y redes, evadiendo as restricciones como las reglas de un firewall intermedio. Podramos dividir esta tcnica en dos grandes tipos: - Proxy pivoting: se canaliza el trfico a travs de un payload en el equipo mediante el cual pivotaremos. Se limita a determinados puertos TCP y UDP. - VPN pivoting: consiste en crear un tnel cifrado contra el equipo mediante el cual pivotaremos para enrutar todo el trfico de red, por ejemplo para ejecutar un escaneo de vulnerabilidades a otros equipos de su red o de otras redes a las que tiene acceso. En mi caso, por versatilidad, necesito esta ltima tcnica. Podra utilizar la versin Pro de Metasploit o Cobalt Strike que son herramientas excelentes para VPN pivoting, aunque tambin lo son de pago, as que segn est la economa me decanto por OpenVPN :P Os planteo el siguiente escenario:

Imaginad una topologa con un servidor de monitorizacin con Nagios en la DMZ el cual, por su naturaleza, tiene habilitado adems accesos a otros segmentos de red. Tengo el usuario root y ya accedo a la consola por SSH. Adems, el firewall interno me permite acceder a otros puertos del servidor. Si realizo un escaneo desde mi porttil obtengo los siguientes resultados: Nmap scan report for 192.168.2.50 Host is up (0.00s latency). Not shown: 991 filtered ports PORT STATE SERVICE

22/tcp 23/tcp 80/tcp 113/tcp 161/tcp 1060/tcp 2869/tcp 8080/tcp 8100/tcp

open closed open closed closed open open open open

ssh telnet http ident snmp polestar icslap http-proxy xprint-server

Podra montar un tnel directamente sobre ssh, pero resultara muy fcil meter la pata y perder la conexin con el servidor remoto, y no me gustara tener que llamar al administrador de sistemas varias veces para que me reinicie el servidor _ ... As que utilizar otro puerto abierto, por ejemplo el del telnet (por qu coo est abierto el puerto del telnet?). Empezar instalando OpenVPN. El servidor es Ubuntu as que esto es bastante trivial: sudo apt-get install openvpn

OpenVPN tiene dos modos de funcionamiento, uno basado en claves estticas pre-compartidas y otro en SSL/TLS usando certificados y claves RSA. Aunque no tan seguro, usar el primero por simplicidad. A continuacin, genero la clave privada: openvpn --genkey --secret secret.key

Esta clave es simtrica, por lo que la tiene que tener tanto el servidor como el cliente, con lo cual, despus de generarla la copiar a mi porttil mediante SCP (con WinSCP puesto que mi SO es Windows 7) y la proteger como oro en pao... por que no hace falta que os diga qu pasara si un tercero se hiciera con ella...no? El objetivo entonces es crear un tnel VPN punto a punto que se establecer entre los interfaces virtuales (tun0) del servidor y mi porttil con una IP privada a cada extremo: 10.8.0.1 en el endpoint del servidor y 10.8.0.2 en el endpoint del cliente. Con el modo p2p (predeterminado) se establece una topologa punto-a-punto en donde la direccin IP virtual del peer remoto de la interfaz tun del cliente siempre apunta a la direccin IP virtual local de la interfaz tun del servidor. Creo el fichero /etc/openvpn/server.conf con la siguiente configuracin: mode p2p dev tun port 23 proto tcp-server

ifconfig 10.8.0.1 10.8.0.2 secret secret.key ;user nobody ;group nobody keepalive 10 60 ping-timer-rem persist-tun persist-key comp-lzo

Como vis, todas las comunicaciones entre ambos puntos irn cifradas y se realizarn sobre el puerto 23/TCP, ya que el telnet est permitido en el firewall interno el cual dejar "fluir" el trfico del tnel como si nada... (ay ese deep inspection!). No olvidemos que es necesario habilitar en el servidor el reenvo de paquetes: echo 1 > /proc/sys/net/ipv4/ip_forward

Ni tampoco que tengo que enmascarar mi direccin IP para habilitar el trfico de vuelta porque las redes a las que acceder no tienen porque conocer la ruta de vuelta si uso mi IP privada real. Y bueno, me da cierto anonimato: iptables -t nat -A POSTROUTING -s 10.8.0.2 -o eth0 -j MASQUERADE

Por ltimo, slo activar el tnel bajo demanda por lo que elimino todos los scripts de inicio: update-rc.d -f openvpn remove

Y con esto he finalizado la configuracin del servidor. Podr levantar el servicio OpenVPN con el comando 'openvpn --config /etc/openvpn/server.conf &' o crearme un cutre-script como el siguiente: #! /bin/sh case "$1" in start) /bin/echo 1 > /proc/sys/net/ipv4/ip_forward /usr/sbin/openvpn --config /etc/openvpn/server.conf & /sbin/iptables -t nat -A POSTROUTING -s 10.8.0.2 -o eth0 -j MASQUERADE ;; stop) /bin/echo 0 > /proc/sys/net/ipv4/ip_forward /usr/bin/killall openvpn /sbin/iptables -t nat -F

/sbin/iptables -t nat -X ;; *) echo "Uso: ovpn|start|stop" exit 1 ;; esac

Como veis al levantar el tnel lo har tambin el dispositivo virtual: ps -ef | grep openvpn root 5976 1 0 12:39 ? /etc/openvpn/server.conf 00:00:01 /usr/sbin/openvpn --config

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-0000-00-00-00 inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:9523 errors:0 dropped:0 overruns:0 frame:0 TX packets:10414 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:1156752 (1.1 MB) TX bytes:4833017 (4.8 MB)

Ahora slo me queda configurar el cliente OpenVPN de mi porttil. Para ello creo el fichero pivoting.ovpn en C:\Program Files (x86)\OpenVPN\config con la siguiente configuracin: mode p2p remote 192.168.2.50 dev tun port 23 proto tcp-client ifconfig 10.8.0.2 10.8.0.1 secret "C:\\Program Files (x86)\\OpenVPN\\config\\secret.key" comp-lzo dhcp-option DNS 192.168.2.36 route-metric 15 route 192.168.3.0 255.255.255.0 10.8.0.1 verb

Fijaros que aado un DNS a mi eleccin y la ruta de la red de servidores (192.168.3.0/24) para que mi cliente Windows encamine correctamente los paquetes. Para terminar compruebo que llego al interfaz virtual del tunel y a un equipo de la VLAN de servidores: C:\Users\vmotos>ping -n 1 10.8.0.1

Haciendo ping a 10.8.0.1 con 32 bytes de datos: Respuesta desde 10.8.0.1: bytes=32 tiempo=1ms TTL=64 Estadsticas de ping para 10.8.0.1: Paquetes: enviados = 1, recibidos = 1, perdidos = 0 (0% perdidos), Tiempos aproximados de ida y vuelta en milisegundos: Mnimo = 1ms, Mximo = 1ms, Media = 1ms C:\Users\vmotos>tracert 192.168.3.12 Traza a 10.20.16.12 sobre caminos de 30 saltos como mximo. 1 2 3 1 ms 6 ms 2 ms 1 ms 2 ms 2 ms 1 ms SERVIDOR [10.8.0.1] 2 ms 192.168.2.1 2 ms 192.168.3.12

Traza completa.

Y ya est! Ya estoy pivotando a travs del servidor de monitorizacin mediante el tnel VPN. Tened en cuenta que el servidor de este ejemplo lo gestiono lcitamente. Si comprometemos un servidor, obtenemos acceso como root y queremos utilizar openvpn para vpn pivoting, habr que pensar tambin en utilizar algn rootkit u otras tcnicas para ocultar al menos el interfaz virtual y el proceso, pero eso ya lo veremos en otra entrada... ;)