Menú principal

martes, 10 de mayo de 2016

Bloquear la WiFi con Latch desde OS X & Raspberry Pi (Parte II de II) #RaspBerryPi #WiFi #OSX #Latch

En el artículo anterior hicimos una migración del plugin Lockifi a su versión para OS X totalmente funcional. Al hacer la migración observamos que sería muy sencillo para cualquier usuario doméstico utilizar una Raspberry Pi y poder utilizarla como punto de acceso WiFi conectada al router, por lo que el WiFi del router lo deshabilitariamos. Nuestra Raspberry estaría ejecutando nuestro plugin y gestionando de forma sencillo cuando el punto de acceso debe estar arriba o abajo. Para llevar a cabo esta implementación, ¿Qué necesitamos?

Como vais a ver no será difícil poder implementar esto en cualquier entorno. Los requisitos son bastante obvios y son los siguientes:
  • Raspberry Pi.
  • Adaptador WiFi. En la nueva Raspberry Pi 3 ya viene el adaptador integrado. Es vital que el adaptador utilizado sea compatible.
  • Distribución Linux para la Raspberry. En esta implementación se ha utilizado una versión de Kali Linux para Raspberry, pero valdría, por ejemplo, con una Raspbian.
  • Nuestro plugin Lockifi OS X creado en el anterior artículo. El plugin sufrirá una ligera modificación. 
 Paso 0: Empezando con hostapd y dnsmasq

Lo primero es convertir nuestra Raspberry en un punto de acceso WiFi. hay que tener en cuenta que utilizaremos la Raspberry como punto de acceso y haremos forwarding a los paquetes que lleguen por dicha interfaz. El forwarding se realizará por el cable Ethernet que el dispositivo tendrá enchufado. Este cable Ethernet estará conectado entre la Raspberry y el router de casa.

Lo primero es instalar, en caso de que sea necesario, el driver del adaptador Wireless. Esto dependerá del modelo de adaptador utilizado. Una vez que vemos que ejecutando ifconfig o iwconfig obtenemos información del adaptador podemos continuar. La instalación de hostapd y dnsmasq es importante. El primero será el que "levante" el punto de acceso, mientras que el segundo se encargará de proporcionar dirección IP a los clientes que se conecten a la WiFi mediante DHCP y proporcionar también un servidor DNS a los clientes conectados. Para instalarlos debemos ejecutar:
  • apt-get install dnsmasq.
  • apt-get install hostapd.
Una vez instalado ambas aplicaciones y sus dependencias debemos configurar una dirección IP estática para el punto de acceso. Para este caso hemos utilizado la dirección IP 10.0.0.1. Esta configuración se lleva a cabo dentro de la Raspberry en el fichero /etc/network/interfaces. La configuración del fichero es la siguiente:

          auto [interfaz]
          iface [interfaz] inet static
          address 10.0.0.1
          netmask 255.255.255.0
          network 10.0.0.0
          broadcast 10.0.0.255
          gateway 10.0.0.1

Respecto al fichero /etc/hostapd/hostapd.conf debemos configurar lo siguiente:

          interface=[interfaz WiFi]
          ssid=freewifi
          channel=[número canal]
          driver=[driver de nuestro adaptador] 

Si queremos fortificar la red WiFi podremos configurar WPA2 en ese mismo fichero. Ahora crearemos un script denominado run.sh, el cual se encargará de ejecutar todo lo necesario para "levantar" el punto de acceso en el arranque y configurar el forwarding entre interfaces. Las instrucciones necesarias son las siguientes:

          iptables -t nat -F
          iptables -F
          iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
          iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
          echo 1 > /proc/sys/net/ipv4/ip_forward
          /etc/init.d/hostapd start
          /etc/init.d/dnsmasq start
          ruby [directorio ssh.rb]

Si escaneamos las redes WiFi con nuestro iPhone podremos observar una red denominada freewifi, tal y como se puede ver en la imagen.

Figura 1: Punto de acceso disponible desde la Raspberry Pi

Paso 1: Modificando el programa Ruby

Ahora tenemos que modificar la aplicación que hicimos para gestionar la WiFi desde OS X. El cambio será sencillo, ya no tenemos que entrar por SSH al router. Solamente tendremos que indicar en nuestro código que cuando Latch esté cerrado se pare el servicio hostapd y cuando Latch esté abierto el servicio hostapd arranque. El algoritmo utilizado es realmente sencillo:

Mientras true
         Compruebo estado de Latch
         Si Latch está Abierto
                Indico que está abierto
                Levanto hostapd
        Si no 
                Indico que se cerrará 
                Apago hostapd
        Fin Si
Fin Mientras

Figura 2: Snippet de código del nuevo ssh.rb corriendo en Raspberry Pi

Paso 2: Comprobar funcionalidad

Con todo preparado ejecutamos el script run.sh sobre la Raspberry, si no lo configuramos para arrancar en el arranque del sistema operativo. A los pocos segundo veremos que podemos conectarnos a la WiFi configurada. Abriremos Latch con el objetivo de que el programa escrito en Ruby verifique que el punto de acceso debe estar levantado.


Figura 3: Lockifi OS X Raspberry abierto

Viendo la salida del programa se observa como nos indica "Open". Cuando pasen 20 segundos, esto es totalmente configurable, se volverá a preguntar si Latch está abierto o no. En el caso de que esté cerrado se ejecutará la instrucción service hostapd stop, con el objetivo de "tirar" la red WiFi creada con el servicio.

Figura 4: Comprobación del estado

Ahora conectamos un dispositivo móvil o equipo a la red WiFi, pero decidimos cerrar el Latch. Cuando el programa despierte de la función sleep se encontrará con que Latch fue cerrado, por lo que nos mostrará el mensaje "No Open" y ejecutará la instrucción para parar el servicio de hostapd.


Figura 5: Deteniendo el servicio del punto de acceso WiFi
Cuando se detecte que Latch está cerrado se nos mostrará un mensaje en el dispositivo móvil indicando que hubo un intento de acceso. Esto quiere decir que se ha comprobado el estado de Latch y éste estaba cerrado. La acción a realizar es clara, detener el servicio. Esto puede ser similar a salir de casa y decidir apagar la WiFi, para que solo pudiéramos conectarnos por cable. Al final es similar a minimizar el nivel de exposición de nuestra red WiFi.

Figura 6: WiFi apagada

Es fácil entender el potencial que tiene esto. Otra opción sería integrar Latch en routers con OpenWRT con el que ya se hizo una primera integración. De esta forma no tendríamos que tener un punto de acceso aparte. Sea como sea, el potencial y la imaginación dependerá de vosotros. Cada vez hay más aplicaciones y usos de Latch en el mundo IoT y alineado en todo momento con la seguridad de nuestra información.

Figura 7: Artículo sobre la integración de Latch en OpenWRT

Por último, ¿Cómo evitar el polling? Para evitar estar constantemente realizando consultas a Latch podríamos utilizar la técnica de esperar un paquete en un puerto concreto de nuestra Raspberry. En otras palabras, nuestra Raspberry podría tener a la escucha en la interfaz Ethernet un servicio en un puerto X. El objetivo es que cuando se reciba un paquete en dicho puerto se invoque la ejecución, de una sola iteración, de nuestro programa Ruby. Éste consultará el estado de Latch y en función del on/off se realizará una u otra operación. Para más información sobre este tipo de soluciones se puede consultar el artículo "Modo Paranoia: Port-Knocking y Latch para fortificar tus sistemas".

Si tienes más ideas sobre integraciones con Latch, no dudes en participar con ellas en la sección Latch de nuestra comunidad de Eleven Paths -  donde también puedes poner Latch a tu cuenta-.

No hay comentarios:

Publicar un comentario en la entrada

Entrada destacada

Vente al "Security Innovation Day 2016: Let Security Be"

El Security Innovation Day es el evento desde el que Telefónica y ElevenPaths comparten los últimos lanzamientos y novedades en innovació...

Otras historias relacionadas

Entradas populares