Creando un WIDS casero (y IV)

En el post anterior de la serie, detallé cómo configuré la Raspberry Pi para actuar de sonda en la captura de paquetes 802.11 empleando Kismet (en modo drone). El objetivo es analizar esos paquetes para detectar la presencia de puntos de acceso inalámbricos no autorizados.

En este post, último de la serie, voy a describir como configuro el drone de Kismet en la Rasp y el servidor y el cliente en una máquina virtual para comprobar que puedo capturar los paquetes inalámbricos. En futuros posts iré viendo qué capacidades tiene esta solución.

En la arquitectura de Kismet, el drone captura los paquetes a través de la interfaz inalámbrica y el servidor se conecta al drone para procesar los paquetes que van a ser presentados a través de una aplicación cliente.  En mi entorno, servidor y cliente se ejecutarán en una una máquina virtual sobre Kali Linux, conectada a la DMZ de mi laboratorio virtual. Voy a obviar los detalles de la instalación de Kali para centrarme en el WIDS. La dirección IP de la máquina donde se encuentra el server será 10.1.4.9.

Lo primero que voy a hacer es comprobar que existe conectividad entre la rasp y Kali:

Imagen27

Imagen28

Hasta ahora todo bien, voy a configurar ahora el drone en la Rasp. Lo que voy a hacer es poner, bajo control de versiones, los ficheros de configuración de kismet para poder editarlos cómodamente en el PC.

En la Raspberry edito el fichero /usr/local/etc/kismet_drone.conf y configuro la conectividad del drone:

Imagen29

En kali, edito el fichero /etc/kismet/kismet.conf y configuro, como fuente de paquetes el drone:

Imagen30

Arranco el drone en la Rasp en modo daemon y compruebo que esté a la escucha en el puerto 2502:

Imagen31

Imagen32

Ahora toca el turno al cliente y al server en Kali. En una consola introduzco el comando kismet y, despues de un par de cuestiones relacionadas con el arranque del server veo algo así:

Imagen33

Esto está conseguido.

Creando un WIDS casero (III)

Tras el fracaso con el viejo router D-Link he decidido no darme por derrotado e intentarlo con la Raspberry Pi. Ya comente en otra parte que tengo una Raspberry Pi Model B con una instalación fresca de Raspbian que utilizo, fundamentalmente, para jugar con sensores. Bien, ahora voy a emplearla como sensor de tramas de 802.11.

El viejo router lo voy a emplear para que haga de punto de acceso falso y para otras pruebas de penetración que tengo en mente.

La única duda que me surge es si la tarjeta WiFi USB que tengo es de las soportadas por Kismet. Si no lo fuera, ya veríamos que rumbo tomamos a futuro pero lo que tengo claro es que se me ha metido en la cabeza construir el maldito WIDS.

Lo primero que voy a hacer es actualizar el Raspbian:

Imagen14

Después de un buen rato tengo mi dispositivo actualizado.

El siguiente paso es comprobar si la interfaz WiFi que tengo está soportada por Kismet. Fundamentalmente, lo que importa es ver si se puede poner en modo monitor.

El dispositivo WiFi que tengo en mi Rasp es un dispositivo USB como éste:

Imagen16

Le echo un ojo, en primer lugar, a la configuración de las interfaces de red (comando ifconfig):

Imagen15

La interfaz wireless, como no podía ser de otra forma, es la wlan0. Voy a mirar ahora en los dispositivos USB (comando lsusb):

Imagen17

El dispositivo es el número 004 y es del fabricante Ralink Technology y se trata de un adaptador inalámbrico modelo RT5370. Si quisiéramos obtener información más detallada podríamos usar el comando:

lsusb –D /dev/bus/usb/001/004

Miramos los parámetros del dispositivo inalámbrico con iwconfig:

Imagen18

Por último, comprobamos si el adaptador puede ponerse en modo monitor lo que permite capturar los paquetes:

Imagen19

Todo parece OK así que voy a instalar Kismet. La instalación de Kismet voy a hacerla por el camino largo, esto es, tal y como se describe en la documentación de Kismet: me voy a descargar el código fuente, realizar la configuración previa, compilarlo y, por último, instalar el producto.

Para empezar instalo algunas dependencias:

Imagen20

Ahora me voy a descargar, desde la web de Kismet la última versión estable de código fuente que, en el momento de escribir esto, es la 2016-07-R1. Una vez descargada, voy a usar WinSCP para copiarla a la Raspberry.

Imagen21

Extraemos y configuramos:

Imagen22

Imagen23

Todo parece correcto así que puedo lanzar el make y esperar (la compilación se tomará su tiempo).

Imagen24

A continuación lanzo la instalación. Kismet debe estar instalado en /usr/local/bin

Imagen25

Imagen26

Por último, para completar la instalación, voy a añadir el usuario pi al grupo kismet.

sudo usermod -a -G kismet pi

Rearranco la pi y me meto con la configuración.

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.