En una cafetería, en el aeropuerto, en un hotel... hoy en día en cualquier sitio existen puntos de acceso wi-fi abiertos que te ofrecen la posibilidad de navegar por Internet, aunque la mayoría durante un tiempo limitado y por un precio fijado. Son los llamados hotspot públicos que te redireccionan a la web de un portal cautivo para solicitar previamente unas credenciales por las que has tenido que pagar. Evadirlos sin embargo es muy fácil...
Lo primero comentaros lo que seguro ya sabéis: estas redes inalámbricas carecen de cualquier tipo de cifrado por lo que es posible esnifar el tráfico y robar la sesión de otro usuario conectado (o las credenciales de Facebook, Dropbox, Whatsapp, etc.). Es decir, no sería dificil envenenar ARP y/o hacer MiTM para obtener lo que buscamos puesto que la inmensa mayoría de los usuarios NO utilizan un servicio VPN para protegerse en este tipo de redes públicas. Pero no vamos a no ser demasiado malos y simplemente vamos a navegar sin robar nada a ningún otro cliente...
Para ello vamos a aprovecharnos de que normalmente estos puntos de acceso permiten utilizar el protocolo DNS sin necesidad de estar autenticado.
Veamos. Por ejemplo, si nos conectamos a un SSID "wifi_hotel" e intentamos navegar se nos redireccionará a un portal cautivo Cisco:
https://1.1.1.1/login.html?redirect=web
Pero sin embargo comprobamos que si podemos resolver cualquier nombre de Internet:
Gracias a esto podremos encapsular IPv4 en el payload de los datos de los paquetes UDP y establecer un túnel DNS con un servidor externo.
Quizás la herramienta más extendida y la que utilizaré en este caso es iodine que facilita el túnel cliente-servidor mediante un interfaz TUN/TAP normalmente creado por OpenVPN, aunque (no sé vosotros) yo no dispongo de un servidor externo, así que para tener la parte servidor de iodine utilizaré dns.canhasinter.net, que es un servicio que nos permitirá 500mb de tráfico gratuito ampliables mediante pago con bitcoins.
Para empezar tenemos que tener previamente instalado OpenVPN con un interfaz tun/tap creado y un cliente ssh, con puttygen.exe si os gusta el PuTTY (qué mal suena esto XD). En mi caso utilizaré Windows 7 con msysgit (Git para Windows) y los primero que haremos será generar un par de claves simétricas para luego registrarnos en el servidor del proveedor:
Ahora descargamos iodine para Windows y ejecutamos:
Con ésto hemos establecido un túnel virtual punto a punto mediante el interfaz tun/tap 'Conexi¾n de ßrea local 4'. Ahora tendremos que registrarnos con la clave pública generada:
Ahora mantenemos las rutas para los servidores DNS y cambiamos el gateway por defecto para redireccionar todo el tráfico por el túnel:
Finalmente lanzamos el cliente ssh:
Y probamos... ;)
Y ya está, ya podemos navegar... aunque recordar que conviene utilizar además un servicio VPN para mantener la privacidad de nuestros datos.
Lo primero comentaros lo que seguro ya sabéis: estas redes inalámbricas carecen de cualquier tipo de cifrado por lo que es posible esnifar el tráfico y robar la sesión de otro usuario conectado (o las credenciales de Facebook, Dropbox, Whatsapp, etc.). Es decir, no sería dificil envenenar ARP y/o hacer MiTM para obtener lo que buscamos puesto que la inmensa mayoría de los usuarios NO utilizan un servicio VPN para protegerse en este tipo de redes públicas. Pero no vamos a no ser demasiado malos y simplemente vamos a navegar sin robar nada a ningún otro cliente...
Para ello vamos a aprovecharnos de que normalmente estos puntos de acceso permiten utilizar el protocolo DNS sin necesidad de estar autenticado.
Veamos. Por ejemplo, si nos conectamos a un SSID "wifi_hotel" e intentamos navegar se nos redireccionará a un portal cautivo Cisco:
https://1.1.1.1/login.html?redirect=web
Pero sin embargo comprobamos que si podemos resolver cualquier nombre de Internet:
Adaptador de LAN inalámbrica Conexión de red inalámbrica:
Sufijo DNS específico para la conexión. . :
Dirección IPv4. . . . . . . . . . . . . . : 192.168.2.133
Máscara de subred . . . . . . . . . . . . : 255.255.255.0
Puerta de enlace predeterminada . . . . . : 192.168.2.1
C:\Users\vmotos>ping www.oracle.com
Haciendo ping a e7075.b.akamaiedge.net [23.51.70.140] con 32 bytes de datos:
Control-C
^C
C:\Users\vmotos>ping www.google.es
Haciendo ping a www.google.es [173.194.41.215] con 32 bytes de datos:
Control-C
Gracias a esto podremos encapsular IPv4 en el payload de los datos de los paquetes UDP y establecer un túnel DNS con un servidor externo.
Quizás la herramienta más extendida y la que utilizaré en este caso es iodine que facilita el túnel cliente-servidor mediante un interfaz TUN/TAP normalmente creado por OpenVPN, aunque (no sé vosotros) yo no dispongo de un servidor externo, así que para tener la parte servidor de iodine utilizaré dns.canhasinter.net, que es un servicio que nos permitirá 500mb de tráfico gratuito ampliables mediante pago con bitcoins.
Para empezar tenemos que tener previamente instalado OpenVPN con un interfaz tun/tap creado y un cliente ssh, con puttygen.exe si os gusta el PuTTY (qué mal suena esto XD). En mi caso utilizaré Windows 7 con msysgit (Git para Windows) y los primero que haremos será generar un par de claves simétricas para luego registrarnos en el servidor del proveedor:
vmotos@PCVMOTOS ~
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/vmotos/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/vmotos/.ssh/id_rsa.
Your public key has been saved in /c/Users/vmotos/.ssh/id_rsa.pub.
The key fingerprint is:
7e:0c:73:b7:b6:ba:4c:4f:ce:f0:02:3c:3e:66:e8:c5 vmotos@PCVMOTOS
Ahora descargamos iodine para Windows y ejecutamos:
C:\Users\vmotos\Desktop\iodine-0.6.0-rc1-win32\bin>iodine.exe -f -P canhasinternet 166.78.128.18 i.dfw1.dns.canhasinter.net
Opening device Conexi¾n de ßrea local 4
Opened UDP socket
Opened UDP socket
Sending DNS queries for i.dfw1.dns.canhasinter.net to 166.78.128.18
Autodetecting DNS query type (use -T to override)Opened UDP socket
.
Using DNS type NULL queries
Version ok, both using protocol v 0x00000502. You are user #0
Enabling interface 'Conexi¾n de ßrea local 4'
Setting IP of interface 'Conexi¾n de ßrea local 4' to 172.16.0.2 (can take a few
seconds)...
Server tunnel IP is 172.16.0.1
Testing raw UDP data to the server (skip with -r)
Server is at 166.78.128.18, trying raw login: OK
Sending raw traffic directly to 166.78.128.18
Connection setup complete, transmitting data.
Con ésto hemos establecido un túnel virtual punto a punto mediante el interfaz tun/tap 'Conexi¾n de ßrea local 4'. Ahora tendremos que registrarnos con la clave pública generada:
vmotos@PCVMOTOS ~
$ ssh nopass@172.16.0.1
The authenticity of host '172.16.0.1 (172.16.0.1)' can't be established.
RSA key fingerprint is 17:79:60:65:21:8e:af:c6:4a:20:98:a5:8c:cc:e6:b5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.0.1' (RSA) to the list of known hosts.
Help:
a) About
r) Register
l) Login
q) Quit
? r
Register:
Enter in an SSH key (~/.ssh/id_rsa.pub) to register your account.
You must have a 2048 bit RSA key. No others accepted.
Input must be exactly 372 characters. Paste the key here.
Do not paste in the ssh-rsa prefix. Go from the start of the key to
the end without the user@host comment section.
Press ctrl+c if you wish to abort.
?
Does this key look good?
AAAAB3NzaC1yc2EAAAABIwAAAQEAu/iH3eybVrQcvXhSh4SKxsOUNfJmSogAoxOHlrx/Tu8IwmyA+0ha
G0R+ZFNxwikfLXmMrzNvBwVjWdQ9wfxVw9adwD7H7l4vORuj/Nh//Jxq7EV2fSPnmco8wRCFHoSidYmW
1baZijiv2hEcIDJlyMY9KM23vhOTI91XewCl5KSWsjVgz4tpSwOh2n9G/JFf8u53+HqP4N+eUgWNss/Z
G2OFcfb3rVuCm5LMDfClOQ41wiGH69bdvgubt7/eCREhJlfWS8NZsf4eFx5x+6sj44+2bU3TPHKKG1U2
jMiWQcRHp5PYKx9TwgC4pePe4MOgfvFC3A8ER2y8s6jNpfglMw==
? y
Registration successful!
? e
Help:
a) About
r) Register
l) Login
q) Quit
?
? q
Connection to 172.16.0.1 closed.
Ahora mantenemos las rutas para los servidores DNS y cambiamos el gateway por defecto para redireccionar todo el tráfico por el túnel:
D:\>route add 8.8.8.8 mask 255.255.255.255 192.168.2.1 Correcto D:\>route add 8.8.4.4 mask 255.255.255.255
192.168.2.1
Correcto D:\>route add 166.78.128.18 mask 255.255.255.255
192.168.2.1
Correcto D:\>route delete 0.0.0.0 Correcto D:\>route add 0.0.0.0 mask 0.0.0.0 172.16.0.1 Correcto
Finalmente lanzamos el cliente ssh:
ssh dns@172.16.0.1
Bandwidth purchased: N/A Bandwidth used: 560134
Bandwidth remaining: 499 MB
Bitcoin address: 1GMaV7RMyiagFmkv3EyPGGvgJ647bBFEfn
BTC/GB: 0.001. Minimum suggested payment 0.01 BTC.
Last transasction: N/A
Y probamos... ;)
D:\>ping www.oracle.com
Haciendo ping a e7075.b.akamaiedge.net [23.77.102.140] con 32 bytes de datos:
Respuesta desde 23.77.102.140: bytes=32 tiempo=265ms TTL=51
Respuesta desde 23.77.102.140: bytes=32 tiempo=260ms TTL=51
Estadísticas de ping para 23.77.102.140:
Paquetes: enviados = 2, recibidos = 2, perdidos = 0
(0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
Mínimo = 260ms, Máximo = 265ms, Media = 262ms
Control-C
^C
D:\>tracert www.oracle.com
Traza a la dirección e7075.b.akamaiedge.net [23.77.102.140]
sobre un máximo de 30 saltos:
1 135 ms 136 ms 135 ms 172.16.0.1
2 139 ms 136 ms 136 ms 166.78.16.2
3 140 ms 139 ms 138 ms core3.dfw1.rackspace.net [72.3.202.48]
4 182 ms 139 ms 138 ms coreb.dfw1.rackspace.net [74.205.108.22]
5 141 ms 138 ms 138 ms corea-edge6.dfw1.rackspace.net [74.205.108.113]
6 140 ms 139 ms 139 ms ae53.edge10.Dallas1.Level3.net [4.28.44.161]
7 143 ms 138 ms 149 ms ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
8 140 ms 139 ms 138 ms xe-8-1-2.dal33.ip4.tinet.net [77.67.71.221]
9 264 ms 262 ms 270 ms xe-0-0-0.bru20.ip4.tinet.net [89.149.187.121]
10 270 ms 267 ms 265 ms akamai-gw.ip4.tinet.net [77.67.65.90]
11 265 ms 259 ms 259 ms a23-77-102-140.deploy.static.akamaitechnologies.
com [23.77.102.140]
Traza completa.
Y ya está, ya podemos navegar... aunque recordar que conviene utilizar además un servicio VPN para mantener la privacidad de nuestros datos.
"...si os gusta el PuTTY[...]" LOL Buena info. Vaya, por que usaras el Windows y no alguna distro GNU/Linux me pregunto -.-
ResponderEliminarman yo soy cubano necesito ke me hagas un video para evadir un portal cautivo cubano ke es el unico internet ke hay en cuba pero esta super ke restringido men dime ke programas necesito en linux o en lo ke sea para darte los datos de ese portal para ke me puedas hacer un video porke sy un tipo bastante lento por esa parte es un abuso dos dolares la hora bueno aki son cuc saludos soy fan de tu foro
EliminarPero sí, lo ideal sería un debian o un arch con un servidor iodined propio en Internet, pero amigo, no siempre tenemos lo que queremos en cada momento... ;)
ResponderEliminarhermano vivo en cuuba e un lio conectarse a internet es demaciado cara esos portales cautivis nos sacan la vida como los puedo evadir la explicacin que dieron no la he entendido muy bien
Eliminarme pueden ayudar
Genial Maestro, llevo algun tiempo intentando montar un tunel dns. El hecho de poder empaquetar el trafico http en peticiones dns es algo que me fascina.
ResponderEliminarTengo mi servidor dns (en GNU/linux) configurado correctamente, tanto para peticiones de nombres como para ip's .. mi problema es iodine, y me imagino que la configuración variará con este escenario. ¿Sería posible que comentara su configuración?
Mis agradecimientos por su tiempo. Saludos.
gracias anónimo, tienes varios tutos en Internet para montar el iodined en Linux (por ej. http://grahamedgecombe.com/blog/ip-over-dns-with-iodine)
ResponderEliminarHabría que ver más especificamente cuál es tú problema, hacer un pequeño troubleshooting, etc..
Saludos!
Hola, excelente tuto.
ResponderEliminarTengo un problema, no entiendo que haces en "Finalmente lanzamos el cliente ssh: ". Levantas unas sesion ssh con el putty contra 172.16.0.1? redirecconas el puerto 80?
Disculpa, no me es claro
Saludos
una pregunta ago todo los pasos como esta aqui pero a la hora de conectarme con el msysgit hace todo pero se queda en esta parte u no hace mas nada
ResponderEliminar$ ssh nopass@172.16.0.1
The authenticity of host '172.16.0.1 (172.16.0.1)' can't be established.
RSA key fingerprint is 17:79:60:65:21:8e:af:c6:4a:20:98:a5:8c:cc:e6:b5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.0.1' (RSA) to the list of known hosts.
Help:
a) About
r) Register
l) Login
q) Quit
? r
Register:
Enter in an SSH key (~/.ssh/id_rsa.pub) to register your account.
You must have a 2048 bit RSA key. No others accepted.
Input must be exactly 372 characters. Paste the key here.
Do not paste in the ssh-rsa prefix. Go from the start of the key to
the end without the user@host comment section.
Press ctrl+c if you wish to abort.
?
ya de aqui no pasa q es lo q pase q no me funciona
Hola. esta aplicacion de verdad que es maravillosa. Estoy fascinado. Pero la verdad es que no entiendo ni papa. Lo unico que entiendo es que la parte servidos debe estar subido o puesto mejor dicho en un servidor ya contratado que esté vinculado a un dominio que por supuesto tambien tenga yo contratado. Estoy seguro que tunnel guru tambien utiliza esta aplicacion pero enmascarado en un software. Señor, quiero pedirle por favor si esta en sus posibilidades para que me haga una aplicacion personalizada que funcione con iodine disfrazado. Yo le pago previo acuerdo. Mi correo electronico es mariocheremos@gmail.com gracias
ResponderEliminarHola solo una duda compa...com obtienes estos datos
ResponderEliminarBandwidth purchased: N/A Bandwidth used: 560134
Bandwidth remaining: 499 MB
Bitcoin address: 1GMaV7RMyiagFmkv3EyPGGvgJ647bBFEfn
BTC/GB: 0.001. Minimum suggested payment 0.01 BTC.
Last transasction: N/A
hola compa, los datos se muestran al establecer una sesión ssh (ssh dns@172.16.0.1) y te muestra el contador del tráfico restante del servicio usado en el ejemplo (dns.canhasinter.net)
Eliminarpor esto y muchas cosas mas..... yo agregue una contraseña wpa + aes con un pass de 63 digitos entre letras minusculas mayusculas numeros y simbolos todos al azar.
ResponderEliminarmuy buen tutorial, siempre me ando buscando estos tutoriales para implementar mas seguridad a mi red, la mejor forma de saber tu seguridad es vulnerandola, gracias
ResponderEliminarme gustara que me dijeran como puedo entrar en una red con puerto cautivo ya que no hay manera , yo uso el windows 7 y nada , tiene que ver alguna manera mas facil de entrar a estas redes , espero respuesta ...
ResponderEliminarsaludos ....
Es mi técnica jajaja
ResponderEliminarOye e instalado un data logger para monitorear unos equipos electrónicos, la verdad no se mucho de redes pero el data logger necesita que configure una red para que pueda subir los datos a un portal de internet, el lugar cuenta con una red abierta con portal cautivo, pero no se como hacer que el data logger se conecte, me dieron un usuario y contraseña pero se trata de un data logger y a la hora de configurarlos solo me pide la red, el tipo de seguridad, y la contraseña si es que tiene.
ResponderEliminar¿Qué puedo hacer?
a bote pronto se me ocurre que utilices un gateway entre medias que haga previamente la validación contra el portal cautivo y enmascare (NAT) la salida del data logger hacia Internet...
ResponderEliminarhe instalado iodined y he establecido una conexion pero aun no logro que transmita datos
ResponderEliminarHola me interesa mucho eso de evadir un portal cautivo también soy de Cuba y es cierto que es lo único que tenemos por aca. Agradecería cualquier información a mi email martinezandry6@gmail.com
ResponderEliminarcon psiphon se puede descargalo en su ultima version es portable el programa abre se conecta y te abre el browser y la ip cambia constantemente y sin bloqueos
Eliminar