Creando un WIDS casero (II)

En la primera parte de la historia me quedé con mi flamante router D-Link 2740B recién flasheado con OpenWRT. Se me olvidó contar, al final de ese post, que lo último que hice fue una copia de seguridad para poder volver al punto donde lo dejé si fuera menester.

El objetivo de este esfuerzo es construir un sistema de detección de intrusiones en la red inalámbrica basado en un antiguo router y el software de Kismet. Kismet es un software que, de forma pasiva, es capaz de detectar los dispositivos y redes inalámbricas (802.11*) que hay en su rango de detección. Es una herramienta de captura de información muy útil pero, llegar a construir un sistema de detección de intrusiones a partir de estos mimbres es, más que nada, realizar una prueba de concepto o de factibilidad. El resultado de esta prueba de concepto podría ser una solución de seguridad para redes WiFi económicamente muy accesible (si la comparamos con soluciones de Meraki, Aruba, Fortinet o Mojo Networks) y que podría ser muy válida para PYMEs u oficinas o delegaciones pequeñas.

Menos rollos y vamos al tajo. Kismet tiene tres componentes:

  1. Kismet Drone que captura las tramas radio y las envía al servidor.
  2. Kismet Server que almacena las tramas capturadas.
  3. Kismet Client que proporciona acceso a los datos almacenados en el servidor.

En principio la idea es instalar el drone en el router D-Link y el servidor y cliente en un servidor virtual desplegado en el entorno ESXi del lab casero.

En este post, voy a abordar el intento de instalación del Kismet Drone en el router D-Link. Si este intento es satisfactorio, abordaré en posts posteriores la configuración del servidor y cliente Kismet.

En primer lugar, me conecto a través de SSH al router, empleando, como no podía ser de otra forma, putty:

Imagen8

Navego hasta el fichero /etc/network/config para ver la configuración de red que tengo:

Imagen9

Como vemos, no está configurada la red inalámbrica (todavía). Abordamos, a continuación, la instalación de Kismet Drone. Entro en LuCI y me voy a la opción System > Software:

Imagen10

y pulso el botón Update list:

Imagen11

Ahora busco kismet drone en la lista de paquetes disponibles …

Imagen12

y le doy a la opción “Install” …

Imagen13

¡Cagada!, el equipo no tiene espacio suficiente para la instalación de los paquetes necesarios.

He probado distintas alternativas (desinstalar LuCI, ir a una versión de OpenWRT más antigua, etc) y sigue sin tener espacio. El cacharro es verdaderamente antiguo y no queda más que reconocer la derrota.

Pero como sigo empeñado en intentarlo, voy a probar con la Raspberry Pi como drone. Más en el siguiente post.

Creando un WIDS casero (I)

Antes de nada aclarar, para quien no lo sepa, que WIDS son las siglas, en inglés, de sistema de detección de intrusiones inalámbricas (Wireless Intrusion Detection System). Un WIDS es, por lo tanto, un dispositivo que monitoriza las redes inalámbricas para detectar la presencia de puntos de acceso no autorizados y que puede tomar las contramedidas necesarias frente a esta situación (prevención de intrusiones).

La idea es, aprovechando que con el cambio en la red doméstica, mi antiguo router inalámbrico D-Link 2740B (que hacía las funciones de bridge inalámbrico) se ha quedado en paro, darle un nuevo servicio. Voy a utilizarlo como sonda de detección de intrusiones en mi red inalámbrica. No es que me haya vuelto paranoico es, simplemente, que quiero aprender algo.

d-link-dsl-2740b.3391432

Lo que pretendo hacer es montar un entorno de detección basado en Kismet que es una herramienta de código fuente abierto que se encarga de la captura y proceso de tramas 802.11. El principal problema al que me enfrento es que el router, tal y como viene de fábrica, soporta los estándares antiguos (802.11b/g) y no los más nuevos. El router hace como equipo de captura de tramas y tendré que montar un servidor específico (virtual) para el análisis de esas tramas. Veremos hasta dónde somos capaces de llegar.

En esta serie de post voy a intentar ser más preciso y detallado lo que, sin duda, va a redundar en una mayor longitud de los mismos. En esta primera parte, voy a describir el proceso de flashear el equipo y dejarlo listo para la detección.

El primer paso, y esto es importante, es pensar un poco por anticipado los pasos a seguir para no perder tiempo rehaciendo cosas. Para flashear el equipo necesito:

  • La imagen que voy a poner en el equipo.
  • Un equipo desde el que conectarme, transferir la imagen y realizar las primeras y más básicas configuraciones.

Descubrir la imagen de OpenWrt no es tarea fácil. La web, en formato Wiki no ayuda mucho y uno acaba dando mil vueltas. En primer lugar entro en la página correspondiente a mi modelo de router y veo que el chip que tiene es un BCM6358.

Busco, a continuación, en la tabla de hardware de la web de OpenWrt, los detalles técnicos del equipo y me lleva a esta página donde aparece el enlace a la imagen a descargar.

Imagen2

El equipo desde el que me voy a conectar al router para flashearlo va a ser mi Raspberry Pi con sistema operativo Raspbian. Fundamentalmente porque, como está encima de la mesa, es más fácil realizar los tejemanejes de cables y cambios de direcciones IP necesarios para poder configurar el router. Lo primero que hago es arrancar la Rasp y, a través de WinSCP copiar la imagen recién descargada a la Rasp.

Voy a flashear el router. En primer lugar, lo que necesito hacer es arrancarlo en el modo que permite la carga de imagen flash. Los pasos que sigo son:

  1. Conecto la fuente de alimentación del router.
  2. Conecto el cable de red de la Rasp al puerto 1 del router.
  3. Presiono con un objeto punzante el botón de reset del router y, con este botón presionado:
  4. Arranco el router (botón de power).
  5. El router se enciende y la luz de power parpadea, al cabo de unos segundos se queda fija en color rojo, momento en el que dejo de presionar el botón de reset.

En principio, ya me puedo conectar al router para subir e instalar la imagen de OpenWRT. Por defecto, el router tiene la dirección IP 192.168.1.1 y la interfaz eth0 de mi Rasp la dirección 192.168.1.12 por lo que debería haber conectividad.

Abro un navegador en la Rasp y me conecto a la dirección IP del router y voilá:

2016-09-11-103843_1360x768_scrot

Siguiente paso, pulso el botón “Elegir Archivo” y navego hasta donde se encuentra la imagen a instalar:

2016-10-17-225331_1360x768_scrot

Selecciono el archivo correspondiente a la imagen y pulso el botón “Update Software”. En principio da un error pero veo que el LED de encendido del router parpadea al igual que el LED de la interfaz a la que está conectado el cable Ethernet de la Rasp. Cuando el LED de encendido del router se queda fijo me conecto de nuevo por http a la dirección IP del router y accedo a la página de login de Luci (la interfaz web de OpenWRT). Introduzco el nombre de usuario (root) y sin contraseña, entro en el entorno OpenWRT:

2016-10-17-225654_1360x768_scrot

Lo primero que hago es configurar una contraseña para root:

2016-10-17-230123_1360x768_scrot

Y, a continuación, una dirección IP que me permita conectar este equipo a la red doméstica (la dirección 192.168.1.1 es la del router de acceso a internet).

2016-10-17-230835_1360x768_scrot

A continuación apago el router, conecto la interfaz ethernet de la Rasp al switch y la boca 1 del router a otra boca libre del switch y rearranco el router. Ahora, debería poder acceder desde mi PC (o cualquier otro equipo de la red) a la interfaz web de OpenWRT:

Imagen5

Imagen7

En el siguiente post de esta serie voy a entrar a transformar en router en una sonda de paquetes WiFi para detectar intrusiones.

La conectividad

Como ya he comentado en algún post anterior, el servidor que adquirí para mi lab casero no tiene (ni pretendo ponerle) conectividad WiFi dado que en la habitación donde trabajo sólo tengo conectividad WiFi, era necesario que buscara una solución de conectividad. En principio, esa solución de conectividad pasaba bien por instalar una solución de cableado PLC o bien buscar algún tipo de bridge WiFi. En cualquier caso, parecía claro que algo me iba a tocar comprar.

Resulta que tengo por casa un par de modems router ADSL antiguos y una idea era reutilizar uno de estos como base para la solución de conectividad del servidor. Los cacharros son un D-Link 2740B y un Belkin F5D7632-4.

d-link-dsl-2740b.3391432

DCP_1498

Buceando por Internet, encontré que existía un firmware, basado en Linux, DD-WRT que permite reciclar este tipo de equipos. Ni corto ni perezoso, busco en su base de datos si alguno de mis equipos estaba soportado pero, desgraciadamente, ninguno lo estaba. Mi gozo en un pozo, parece que no me libro de comprar un nuevo cacharro.

Buscando en Internet, descubro un nuevo sitio donde mantienen firmware open source para routers: OpenWRT. Al parecer, OpenWRT es un esfuerzo más open mientras que DD-WRT tiene una vertiente más comercial. Ambos parten de la misma base de código que no es otra cosa que un Linux embebido.

Busco en la base de datos de openWRT y descubro que para el Belkin no hay esperanza, sin embargo, el D-Link está soportado. Así que ¡manos a la obra! Ni la web de OpenWrt es de las más amigables del mundo ni yo me entero muy bien de cómo están organizadas las versiones de software así que en la página correspondiente al modelo de mi router me entero que la imagen que tengo que instalar es la experimental que tiene el problema que no tiene la interfaz web  Luci pero como se puede instalar a posteriori pues nada, a por ello.

Para la instalación del firmware voy a usar una Raspberry PI 2 que tengo con un Kali Linux. Me conecto a Internet con la Rasp a treavés de la WiFi y descargo las imágenes de OpenWRT, del firmware de mi router de la página de D-Link (por si acaso) y la última versión de Luci. A partir de este momento comienza el show, cojo aire y hago lo siguiente:

  1. Desconecto la rasp de la WiFi haciendo un down de la interfaz.
  2. Conecto un cable de red al puerto ethernet de la Rasp y a uno de los puertos del router.
  3. Configuro la interfaz ethernet de la Rasp a la dirección IP 192.168.1.2.
  4. Hago un reseteo del router en la forma específica para la carga inicial de firmware.
  5. 5. Abro una sesión de navegador a la dirección 192.168.1.1 (router) y me aparece una interfaz que me pide que seleccione la imagen a instalar.
  6. Selecciono la imagen a instalar (OpenWRT) y ¡adelante!
  7. Después de un par de minutos el router arranca, hago SSH al router y … ¡Me conecto!. Primer paso conseguido.

Ahora toca instalar Luci, pues vamos a por ello. ¡Coño! primer problema, para descargarme los paquetes, necesito que el router se conecte a internet y para esto tengo que configurar la interfaz WiFi del router para que se conecte a la WiFi casera, evitar el conflicto de direcciones IP, … Pero como no hay nada que perder, a por ello. Despues de una hora y un bote de cerveza está conseguido, hay ping desde el OpenWRT al 8.8.8.8 (DNS de Google) y lanzamos la descarga e instalación de Luci. Esto es fácil como en Ubunto pero en vez de apt opt.

Primera cagada, el dispositivo no tiene suficiente memoria para guardar el paquete e  instalarlo. Efectivamente, hago un df y todo está al 100%. ¡Mierda! al final va a haber que buscar un cacharro nuevo. Abro otro bote de Mahou y me pongo a mirar en Amazon qué comprar …

Antes de meter el pedido en Amazon de un repetidor WiFi con puerto Ethernet voy a hacer un último intento, voy a buscar en la última release de OpenWRT (Chaos Calmer) si hay una imagen estándar para mi router (la Wiki de mi modelo de router era antigua) y, efectivamente, la hay. Me la bajo a la Rasp y vuelvo a repetir los pasos numerados arriba. Esta vez el router arranca y, al conectarme, a través de HTTP aparece la página de Luci. ¡Cojonudo! ahora a configurar el bridge en modo cliente WiFi.

Descubro que lo que tengo que hacer es configurar un cliente WiFi en modo pseudobridge con relayd. Para no equivocarme sigo la receta y, en algún punto, la cago y no chuta. Después de un rato intentándolo decido que lo mejor es comenzar de cero y, por tercera vez, cargo la imagen en la flash, vuelvo a configurarla y esta vez lo consigo. Ya tengo mi bridge.