martes, julio 16, 2019

AiroPy: Cómo crear tu Airodump con Python y Scapy

En el artículo de hoy vamos a ver cómo construir un código que nos permita tener una utilidad al estilo Airodump, tan común en el hacking de redes Wireless, pero creándolo en Python 3 para los amantes de Python para Pentesters y el Hacking con Python. Para esta primera versión nos interesa obtener los puntos de acceso y/o los dispositivos conectados a estos y hacer una descripción de las redes inalámbricas que tenemos cerca.

Figura 1: AiroPy: Cómo crear tu Airodump con Python y Scapy

Este tipo de soluciones nos puede venir bien en cualquier Ethical Hacking, pero conocer cómo se funcionan también nos sirve para crear nuevas tecnologías. Por ejemplo, el SSID Pinning que desarrollamos en ElevenPaths utiliza algo similar para detectar las redes cercanas y el perfilado de las mismas.

Figura 2: Libro de Ethical Hacking en 0xWord
(Ahora con 10% de descuento durante estos días)

En nuestro caso, para llegar a la solución que os voy a explicar, me voy a basar en el código que nos dejan en charlesreid1 con su Airodump Clone, que a su vez se basa en el código ‘WifiJammer’ de DanMclnerney.

Figura 3: AiroPy en GitHub

El código va a ser bastante extenso como para ponerlo aquí, por lo que puedes consultarlo completamente en mi GitHub, ya que aquí solo se va a hablar de la idea y de cómo poder usarlo en diferentes entornos

¿Qué necesitamos para lanzar el script?

Antes de hacer funcionar el script, tenemos que tener en cuenta los siguientes aspectos que necesitamos en nuestro entorno de pruebas.
  1. Tarjeta de red que permita el modo monitor, las Alfa suelen funcionar bien.
  2. Un sistema GNU/Linux (para probar el código se ha usado Ubuntu 18.04)
  3. Python 3
  4. Instalar las dependencias (requirements.txt): scapy-python3 & termcolor
No son muchos los requisitos, y si te dedicas al mundo de la seguridad, probablemente ya estés familiarizado con todos estos procesos.

Opciones y configuración del script

Tendrá una parte de configuración, que se encargará de recoger las distintas opciones. Los importantes se listan a continuación:
• ‘interface’: Nos sirve para escoger una interfaz o si no se especifica dejar al programa buscar una. 
• ‘america’: Para configurar el número de canales , si agregamos esta ‘flag’ 11, si no 13. 
• ‘channel’: Si lo elegimos se centrará en ‘esnifar’ el tráfico en dicho canal, si no, se pondrá a saltar entre los distintos canales. 
• ‘show_aps’: Si es True nos mostrará los puntos de acceso. 
• ‘show_stations’: Si es True nos mostrará los clientes en los puntos de acceso. 
• ‘filter_macs’: Si queremos que solo se muestren determinados dispositivos. Por ejemplo Huawei, Samsung, etcétera. Será un número de 0 a 7, de los que se ven en el archivo mac_vendors.py y que están basados en los usados por cada fabricante. En el caso de Apple, están los de iPhone & iPad tal y como se explica en el libro de Hacking iOS: iPhone & iPad [2ª Edición]
Figura 4: mac_vendors.py

La última opción, son prefijos de MACs obtenidas de terceros, no están verificadas, se verá más adelante. Entre las opciones show_aps y show_stations tenemos que elegir una o ambas, pero no nos sirve ‘ninguna’.

Entendiendo las partes en las que se divide el código

El código base ya traía una serie de comentarios que indicaban las partes y que me parece adecuado para entenderlo. Si lo repasamos vemos que consta de la siguiente funcionalidad:
Configuración de la Interfaz: Aquí entra en juego el argumento ‘interface’. Si se le especifica que una interfaz, se comprobará si está en modo monitor, si no lo está la intentará poner, en caso que no indiquemos interfaz, se encargará de buscar alguna en modo monitor, si no encuentra, escogerá una (la más ‘fuerte’) y la intentará poner en modo monitor.
Salto de canales: Se lleva a cabo con un hilo. A partir de ‘america’ se configura el máximo de canales a 11 u 13, y gracias a iw se va a ir saltando entre los distintos canales (más información sobre la herramienta en la figura 1)
Figura 5: Manual Page de iw
La salida por pantalla del script: Se pinta por una parte los clientes y por otra los puntos de acceso (por ello las 2 opciones indicadas antes). Cada vez que va a refrescar la pantalla se produce una limpieza con ‘clear’.
La captura de paquetes: En esta parte se hace uso de Scapy, para capturar los paquetes y administrarlos en nuestro listado de ‘clientes’ y puntos de acceso hay que tener en cuenta varias cosas: 
▪ No duplicar direcciones MAC, por lo que debemos filtrar y comprobar si ya se ha procesado. 
▪ Evitar ‘ruido’, por ejemplo la dirección de broadcast. 
El iniciador del código: Se encarga de lanzar un hilo para ir saltando por los canales y de iniciar el sniffer de Scapy.
Figura 6: Libro de Ataques en redes de datos IPv4 & IPv6 3ª Edición
Escrito por JL Rambla, Chema Alonso y Pablo González en 0xWord
(10% de descuento estos días con el cupón verano 2019)

La herramienta Scapy es una de las que se explica y utiliza en el libro de Ataques en redes de datos IPv4&IPv6 3ª Edición y muchos de los ataques que allí se explican se hacen o se pueden hacer con Scapy. De hecho, en este blog se ha hablado de ella en algunos artículos de hacking de redes:
- Neighbor Spoofing en IPv6 
- Polimorhp: Modificando paquetes en tiempo real 
- DHCP ACK Injector
Todos proyectos de hacking de redes - como este AiroPy  - en el que necesitamos tirar de esta maravillosa herramienta.

Generando los prefijos de MAC de los distintos dispositivos

He encontrado dos ficheros .txt en los que me he basado para generar el diccionario:
https://gist.github.com/aallan/b4bb86db86079509e6159810ae9bd3e4
https://raw.githubusercontent.com/hash3liZer/WiFiBroot/master/utils/macers.txt
Como manualmente revisar cerca de 25.000 líneas no es muy viable, con un pequeño código en Python leo los dos ficheros y compruebo el contenido para verificar que ambos coinciden con los datos que va a tener mi diccionario. El código se puede ver en la imagen siguiente:

Figura 7: Código para generar diccionario de direcciones MAC asociadas a vendors

No busca ser el más eficiente, sólo lo necesitaba para una acción en la generación del fichero. El resultado se puede ver en el fichero mac_vendors.py. Es probable que el listado no incluya todo, pero es bastante completo. Con ello nos basta para filtrar el contenido según los dispositivos, siempre y que al usuario le interese, si no se muestra todo.

Figura 8: Mac Vendors

Además, con la API de macvendors, podemos mostrar al usuario por pantalla el dispositivo de los clientes, se hace uso de la versión gratuita, limitada a 1.000 peticiones al día (y máximo de 1 por segundo).

Prueba de Concepto

Ya se ha visto por encima cómo funciona este script, es hora de verlo en acción con unas pequeñas pruebas de concepto - ya sabéis, las PoCs (Proof of Concept). Vamos a ver un par de ejemplos. El prime ejemplo es tan sencillo y útil como realizar una búsqueda de los clientes conectados a puntos de acceso con una instrucción como la siguiente: sudo python3 airopy.py -i wlx00c0ca81fb80 --stations

Figura 9: sudo python4 airopy.py - i wlx00c0ca81fb80 --stations

El segundo ejemplo es de cómo realizar una búsqueda de los puntos de acceso que hay alrededor de la máquina en la que estamos trabajando, con un comando como: sudo python3 airopy.py -i wlx00c0ca81fb80 --aps

Figura 10: sudo python3 airopy.py -i wlx00c0ca81fb80 --aps

Se podrían poner más ejemplos para que se muestren tanto los Access Points como las Stations, pruebas fijando el canal de escucha, etcetera. Pero creo que con estás dos capturas se puede apreciar el funcionamiento del script. Ahora lo puedes probar tú a gusto, y extender en funcionalidades.  Nos vemos en la próxima entrada. ¡Hasta pronto!

Autor: Josué Encinar García (@JosueEncinar), autor del blog BoomerNiX y Security Researcher en ElevenPaths y en el equipo de Ideas Locas de la unidad CDO de Telefónica.

No hay comentarios:

Entrada destacada

Mi nueva vida como CDCO (Chief Digital Consumer Officer)

Hace tres años y medio, cuando me convirtieron en CDO de Telefónica , se montó un lío en los medios que me pilló totalmente por sorpresa....

Entradas populares