5 ene. 2011

Bypass de DNS : tuneling a portais cautivos (por Fer Real)

En moitas ocasións as redes Wi-Fi públicas sen codificación de datos  (as redes WEP, WPA , WPA2 son codificadas) requiren algún tipo de autentificación por parte do usuario, é decir, ao conectarse á rede , o usuario é redirixido a un “portal cautivo”  onde se lle esixe algún tipo de logueo, xa sexa por estar dirixidas a certo grupo pechado de usuarios (redes universitarias, de hospitais …) ou ben  por formar parte dun servizo de pago ( 'x' euros por 'm' minutos ), típico de moitas estacións de trens, autobuses, hoteis, aeroportos, étc.

O esquema xeral deste tipo de sistemas resúmese en que un servidor DNS responde a determinadas peticións mentras que un cliente responde xerando paquetes correctos a estas peticións , é decir:
  1. O cliente asóciase cun punto de acceso (AP), éste proporciónalle unha configuración de rede meidante DHCP.
  2. O cliente realiza unha petición DNS, a cal é resolta ( ex. mallando.com).
  3. Cando o cliente intenta acceder á IP de 'mallando.com' , o AP denégalle o acceso e o cliente é redireccionado ao portal cautivo onde deberá identificase.
  4. Se a identificación é correcta o AP permite a navegación libremente, se non , a cada petición de acceso , o cliente é redireccionado de novo ao portal .

O propósito deste artigo é exemplificar a creación dun túnel IP sobre o protocolo DNS co que lograr saltarse o portal cautivo e conseguir gañar o acceso a Internet .

Visto o anterior , será necesario :
  1. Un cliente dende o cal realizar o túnel.
  2. Un servidor DNS no que teñamos un dominio e poidamos administrar.
  3. Un servidor  túnel para correr a aplicación servidor.
  4. Acceso como cliente a un servidor DNS.
Antes de nada, compre facer un repaso rápido dos rexistros  importantes dos servidores DNS:
  • A = Address. Usado para traducir nomes de hosts a direccións IPv4. 
  • CNAME = Canonical Name – (Nome Canónico). Usado para crear nomes de hosts adicionais ou alias para os host dun dominio. 
  • NS = Name Server – (Servidor de Nomes). Define a  asociación existente entre un nome de dominio e os servidores de nomes que almacenan a  información de dito dominio. 
  • PTR = Pointer – (Indicador). Ou 'rexistro inverso', funciona á inversa do registro A, traducindo IPs en nomes de dominio. 
  • TXT = TeXT - ( Información textual). Permite aos dominios identificarse de modos arbitrarios. 

Existen varias ferramentas software co que levar a cabo o tunel DNS : nstx, ozymandns, Iodine... moitas delas con versión Linux(empregada) e Windows.

Vexamos que hai que facer:

Engádese unha entrada do tipo NS dentro ficheiro propio do noso servidor , de tal xeito que quede:

tunel.servidor.com NS servidor.com

Con isto conséguese que as peticións enviadas a ''tunel.servidor.com'' sexan resoltas polo servidor de nomes instalado en servidor.com

A continuación iníciase Iodine e configúrase do seguinte xeito:

iodined -f 10.0.0.1 tunel.servidor.com
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -s 10.0.0.0/24 -o eth0 -j MASQUERADE

(supondo que eth0 é a interface de saída a Internet). Tras introducir unha password aleatoria que logo deberemos recordar, finalizamos a configuración de Iodine. Con estes comandos, conséguese que o programa quede escoitando no porto 53 UDP. 

Neste momento, supoñamos que estamos na rúa, con acceso a unha rede WI-FI que nos direcciona a un portal cautivo, xa conectados ó AP e coa configuración asignada por dhcp :

Enlace Destino Máscara
30.125.0.0 0.0.0.0 255.254.0.0
0.0.0.0 30.125.1.1 0.0.0.0

Onde 30,125,1,1 é a IP do AP

A continuación elimínanse os servidores DNS e o gateway asignados:

route add -host 55.25.26.32 gw  30.125.1.1
route add -host DNS1 gw  30.125.1.1
route add -host DNS2 gw  30.125.1.1
route del default gw  30.125.1.1

Onde  55.25.26.32 é a IP  asociada a “ servidor.com” e DNS1, DNS2 son os servidores asignados por dhcp  (en linux cat /etc/resolv.conf ).

Agora iniciamos Iodine, que creará unha interfaz virtual dns0 e se conectará mediante peticións DNS ó noso servidor.

iodine -f 94.23.44.214 tunel.servidor.com

Por último engadimos :

route add default gw 10.0.0.1

Deste xeito conectarémonos mediante a interface ath0  para comunicarnos cos  servidores DNS e  o noso servidor  servidor .com . Por outro lado, a interface dns0 para o resto de peticións.

Bibliografía

No hay comentarios:

Publicar un comentario