sábado, julio 20, 2019

Dos años sin ti. Dos años contigo. #ChesterBennington #linkinpark

Yo me enteré unos días después. No presté mucha atención a la noticia cuando salió. Solo una estrella del rock más que había perdido los papeles y se había suicidado. El 20 de Julio. Hace dos años. Pero … ¿por qué? No lo sabía. Tampoco me parecía tan importante. Y de repente todo cambió cuando empecé a escuchar su música en detalle, y descubrí One More Light.

Figura 1: Dos años sin ti. Dos años contigo. #ChesterBennington

Si escuchas el disco sin conocer el final de la historia puede no decirte mucho algunas de sus letras. Sin embargo, sabiendo el penoso fin, capturó mucho más mi atención. Y la historia me cambió. Me revolvió por dentro. Me sacó lo que tenía dentro y lo expulsó para afuera. Me limpió con un shock.

Figura 2: Lista de canciones de One More Light en Spotify

Ver que alguien de mi edad – menos de un año más joven que yo – decidió dejar familia y vida atrás, un triste día como hoy, hace ya dos años me impactó de verdad. Ver el vídeo de solo 36 horas antes feliz jugando con su hijo, y su familia me dejaba la mente llena de preguntas.


Figura 3: Solo 36 horas antes...

¿Cómo era posible que una persona con familia, que parecía feliz, que tenía éxito, dinero, y admiración por todo el mundo, decidiera quitarse la vida? La respuesta estaba en sus letras. En sus canciones. En lo que llevaba por dentro y no se veía. Y me cambió.


Figura 4: Iridescent... ¿te sientes frío y perdido en la desesperación?

Escuché sus canciones y me apoyé en ellas. Me vi a mí mismo desde fuera a través del cristal de sus canciones. Con Iridescent, HeavyOne more lightNobody can save me, What I've done, Talking to myself, Sharp Edges…o este Crawling de la última gira en directo que te araña el corazón. Todas tenían un significado distinto ahora que se había ido para siempre. Uno que estaba oculto ante todos y nadie había podido ver antes.

Figura 5: Crawling en la gira de One more light

Esa caja de conocimiento y mensajes ocultos que se destaparon con su fuga de este mundo, me regaló guía. Me regaló un mapa. En el cielo. Un camino a seguir mirando las estrellas para encontrar un destino en el que volver a reencontrarme. Revelador. Inspirador. Una bofetada de realidad en la cara.


Figura 6: ¿A quién le importa si una luz más se apaga? A mí me importa

He contado muchas veces esta historia a mis amigos. Lo que significó este hecho para mí. Una situación trágica que me sacó de mi laberinto y me devolvió a la vida bajo la luz. Y por eso, a pesar de que se fue un día como hoy hace dos años, Chester Bennington siempre se quedará conmigo. Vaya este post con un cariñoso recuerdo para él. Os dejo el dibujo que le hice en el año que se fue....


Saludos Malignos!

viernes, julio 19, 2019

iBombShell: Evolución desde la primera a la versión v03.b

Desde el equipo de Ideas Locas seguimos trabajando en iBombShell, nuestra herramienta de post-explotación para los proyectos de Ethical Hacking. En esta ocasión os venimos a anunciar la liberación de la versión 0.3b. Las novedades que trae, se pueden ver en un post publicado hace unas semanas aquí.

Figura 1: iBombShell: Evolución desde la primera a la versión v03.b

No vamos a contar de nuevo las novedades, si no que veremos la evolución de iBombShell desde sus comienzos, hasta el día de hoy. Y para terminar, probaremos los dos últimos módulos agregados, que se destinan al Bypass de UAC  para hacer Hacking Windows del que se hablo recientemente en este blog:

Hacking Windows: Bypass UAC en Windows 10 a través de Windows Store
Hacking Windows 10: Bypass de UAC con DLL Hijacking vía SystemPropertiesAdvanced.exe

Empecemos con los warriors, y es que al inicio la única posibilidad que teníamos era listarlos, y solo proporcionaba el nombre tal y como se ve en la imagen siguiente.

Figura 2: Warriors en la primera versión de iBombShell

En la actualidad es posible renombrar, matar y listar mayor información acerca de los warriors como se ve en la Figura 3, permitiendo saber si tenemos un warrior con privilegios (si aparece un símbolo * al lado del nombre del warrior). Además la conexión inicial se producía con un GET y ha pasado a ser una petición POST enviando los datos en el cuerpo.

Figura 3: Manejo de los warriors en la actualidad

La funcionalidad de autocompletar era bastante limitada, solo nos permitía rellenar con el tabulador las opciones principales y módulos, ahora podemos tabular incluso opciones y warriors, lo que facilitará el uso al usuario.


Figura 2: Libros de Python para Pentesters y  Hacking con Python en 0xWord
(Consíguelos estos días con un 10% de descuento con el cupón VERANO2019)

Como sabéis, iBombShell está escrito en Python - ya podéis saberos de memoria los contenidos de Python para Pentesters y Hacking con Python para hacer este tipo de herramientas - y a la hora de cargar los módulos, siempre nos mostraba el .py, y en algunas ocasiones nos mostraba la ruta completa del módulo en el prompt  como se ve en la imagen siguiente.

Figura 5: Módulos terminados en .py

Aunque esto no añade funcionalidad y solo se trata de algo visual, la forma actual se puede apreciar en la Figura 6, donde se ve como cargamos un par de módulos.

Figura 6: Los módulos en la actualidad (sin .py)

Como es lógico, dentro de iBombShell ha crecido el número de módulos disponibles, con cierta restructuración de carpetas, como es el caso de los casos y exploits de Bypass UAC, que partió con “bypassuac” y ahora se ha dividido en tres carpetas y cuenta con UAC, AMSI y Windows Defender para ir añadiendo los bypasses de estas tres tipos de tecnología. (Me pregunto para cuando los bypass de Gatekeeper en MacOS)

Figura 7: Estructura de los exploits de Bypass en UAC, AMSI y Windows Defender

Muchos de los cambios han sido internos, y no tan visuales como los comentados hasta ahora. El código se ha ido refactorizando, eliminando así duplicidades de código. Además, ahora cuenta con funcionalidades que no existían al inicio, como la ejecución de comandos en el sistema que se puede ver en la imagen siguiente.

Figura 8: Ejecución de comandos de sistema

PoC – Nuevos módulos para saltarnos UAC

Para ir terminando, vamos a poner en acción los dos nuevos módulos comentados al inicio del artículo y que nos permiten hacer Bypass de UAC con las dos nuevas técnicas añadidas, empezamos usando la tienda de Windows:

Figura 9: PoC Bypass UAC en Windows 10 usando Windows Store e iBombShell

Y el último vídeo a través de systempropertiesadvanced.exe:

Figura 10: PoC ByPass UAC en Windows 10 usando SystemPropertiesAdvanced.exe e iBombShell

Bugs, sugerencias, colaboraciones, todo es bienvenido, tenéis el enlace al repositorio en la parte de referencias ¡Larga vida a iBombShell! Por si quieres ampliar información y conocer más sobre iBombShell, aquí tienes todos los recursos publicados hasta la fecha sobre la herramienta, con toda la información que tenemos disponible.

- [GitHub] iBombShell
- [White Paper] iBombShell: Dynamic Remote Shell
- [Blog Post] Pentesting MacOS & Windows with iBombShell
- [Blog Post] iBombShell: Tu Shell de pentesting en MacOS con PowerShell
- [Blog Post] iBombShell: Creando una función para MacOS
- [Blog Post] iBombShell: Environment Injection in Windows 10
- [Blog Post] iBombShell: Crear módulo para extracción de claves SSH privadas
- [Blog Post] iBombShell: UAC Bypass con Mocking Trusted Directories
- [Blog Post] iBombShell: Nuevas funciones presentadas en BlackHat Europe 2018
- [Blog Post] iBombShell: Cómo saltarse AMSI y Windows Defender
- [Blog Post] iBombShell: Cómo hacer un popup phishing
- [Blog Post] BlackHat Arsenal: Tools for Research & Pentesting -> iBombshell
- [Blog Post] iBombShell: Módulo de RID Hijacking & C2 GUI en .Net
- [Blog Post] iBombShel: Últimas novedades de un proyecto creciendo
- [Blog Post] iBombShell: Evolución desde la primera a la versión v03.b

¡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.

jueves, julio 18, 2019

CrossLinked: Extracción y enumeración de nombres de empleados con técnicas de Web Scraping sobre LinkedIn

Una etapa fundamental en cualquier autditoría de seguridad es la recolección de información sobre el objetivo o sobre cualquier cosa interesante que esté relacionada con el objetivo final. Cuanta más información se tenga, la probabilidad de éxito en el Ethical Hacking será mayor, sobre todo en procesos de ataque de fuerza bruta basados en diccionario, ingeniería social, pruebas de autenticación de usuarios en servicios, etcétera.

Figura 1: CrossLinked: Extracción y enumeración de nombres de
empleados con técnicas de Web Scraping sobre LinkedIn

Una herramienta interesante durante el proceso de recolección de información es CrossLinked que está escriba en Python, ya que simplifica los procesos de búsqueda de LinkedIn para recopilar nombres de empleados válidos de una organización que cuenten con perfil en la red social Linkedin donde anuncien en qué organización trabajan o han trabajado.

Figura 2: CrossLinked en GitHub

CrossLinked utiliza técnicas OSINT apoyándose en motores de búsqueda como Google y Bing  donde hace un poco de Hacking con Buscadores. Encontrará nombres de empleados válidos y ayudará a formatear la salida de los datos, por ejemplo, de acuerdo con la convención de nomenclatura en las cuentas de correo electrónico que esté utilizando dicha organización.

Figura 4: Libro de Hacking con Buscadores: Google, Bing & Shodan + Robtex [3ª Edición]
[Lo puedes adquirir en 0xWord estos días con el cupón 10% descuento]

Los nombres de usuario o las cuentas de correo electrónico generadas por la herramienta se almacenaran por defecto en el archivo 'names.txt' en el directorio actual de trabajo para que puedas llevártelo a cualquier otro script.

Instalación de Crosslinked

La instalación de la herramienta es sencilla, basta obtener una copia desde su repositorio de GitHub ejecutando el comando “git clone https://github.com/m8r0wn/crosslinked” desde nuestro Kali Linux.

Figura 5: Instalación de CrossLinked desde Kali Linux

El siguiente paso es instalar las dependencias de los paquetes necesarios para el funcionamiento de la herramienta ejecutando del comando “pip install -r requirements.txt”.

Figura 6: Instalación de las dependencias necesarias para CrossLinked

Tras estos sencillos pasos ya  podemos comenzar a trabajar con nuestra herramienta y hacer las pruebas de sus funcionalidades.

Funcionalidad de CrossLinked

Para consultar las opciones de la herramienta ésta dispone del parámetro “-h” con lo que obtendremos la lista de parámetros que podemos utilizar en cada ejecución para sacar el máximo de sus capacidades.

Figura 7: Parámetros de funcionamiento de CrossLinked

Las opciones de las que la herramienta dispone son las siguientes:
-h, --help: muestra información sobre los argumentos que acepta la herramienta, cuáles son obligatorios y cuáles son opcionales. 
-t TIMEOUT: Limitado temporal antes de fallar utilizado en el proceso de búsqueda multihilo (Default: 25). Si al cabo de ese tiempo no obtiene respuesta la herramienta finaliza la búsqueda. 
-j JITTER: parámetro utilizado para introducer información espuria en caso de ser detectados durante el proceso de scraping (Default: 0
-o OUTFILE: Cambiar el nombre del fichero de salida con la información encontrada (Default: names.txt).
-f NFORMAT: Formato de nombres. Pro ejemplo: 'domain\{f}{last}', '{first}.{last}@domain.com'. 
-s, --safe:    Solo analiza los nombres que aparezcan en el título de la web (reduce los falsos positivos pero se deja datos sin obtener)
-v: Modo "Verbose" que muestra nombres y títulos recuperados después de la enumeración.
Búsqueda del patrón en la formación de los nombres de usuario

Una manera sencilla de conocer el posible patrón en la formación de los nombres de usuario de los servicios utilizados por una organización es estudiar la estructura de los nombres de cada uno de los usuarios en sus cuentas de correo electrónico. El uso de la herramienta hunter.io es una buena opción, ya que permite encontrar direcciones de correo electrónico de una organización utilizando técnicas OSINT y determinar el patrón de generación de los usuarios de las cuentas de correo electrónico encontradas.

Figura 8: Cuentas de correo electrónico de una organización, 
junto con el posible patrón de generación.

Para este ejemplo, proporcionando un nombre de dominio público Hunter.io encuentra un total de 55 direcciones de correo electrónico y determina que el posible patrón de formación de los usuarios de las cuenta de correo electrónico descubiertas es “{f}{last}@aytoXXX.es”.

Generación de nombres de usuarios utilizando la información pública de Linkedin

Conociendo el parámetro de generación de los usuarios del correo electrónico, “{f}{last}@aytoXXX.es”, lo siguiente es utilizar la herramienta CrossLinked de la forma:
 “python3 crosslinked.py -f '{first}.{last}@aytoXXX.es' Ayuntamiento de XXX”
Figura 9: Uso de la herramienta CrossLinked en busca de información en Linkedin.

La herramienta por defecto genera el fichero “namex.txt” con los correos formados gracias a la información pública descubierta en Linkedin y siguiendo el patrón de generación indicado.

Figura 10: Posibles cuentas de correo electrónico generadas por CrossLinked.

Se observa cómo CrossLinked utiliza los motores de búsqueda de Google y Bing utilizando el dorksite:linkedin.com/in+"Ayuntamiento de XXX”:

https://www.google.com/search?q=site:linkedin.com/in+"Ayuntamiento de XXX"&num=100&start=0
https://www.google.com/search?q=site:linkedin.com/in+"Ayuntamiento de XXX"&num=100&start=117
…

https://www.bing.com/search?q=site:linkedin.com/in+" Ayuntamiento de XXX "&first=0
[*] 10 : https://www.bing.com/search?q=site:linkedin.com/in+" Ayuntamiento de XXX "&first=29
…

Utilizando directamente el dork anterior en Google, para hacer el Hacking con Buscadores manualmente, se obtienen los siguientes resultados:

Figura 11: Resultado de las búsquedas utilizando el dorking de CrossLinked.

Si en lugar de necesitar cuentas de correo electrónico en el proceso de Ethical Hacking lo que se necesitan son los nombres de usuario, para por ejemplo, hacer pruebas sobre el servicio SSH que usan sus usuarios, una forma de generar estos nombres con CrossLinked es la siguiente:
“python3 crosslinked.py -f '{first}.{last}' Ayuntamiento de XXX”
Únicamente especificando el patrón de generación '{first}.{last}' la herramienta es capaz de aplicar técnicas OSINT sobre los perfiles en Linkedin que tienen los miembros de la organización y formar nombres de usuarios en base al patrón indicado.

Figura 12: Posibles nombres de usuarios para poder realizar ataques de fuerza bruta en diversos servicios.

A partir de este punto dentro de un Ethical Hacking, ya tendremos en nuestra mano información más que interesante para utilizar en aquellos servicios que lo permitan. No os olvidéis de probar todos estos nombres de usuario sin contraseña, probar únicamente el mismo login con ese mismo password o, nunca olvidar la propiedad de suprayectividad intrínseca al uso de contraseñas en prácticamente la totalidad de todos los servicios.

Autor: Amador Aparicio (@amadapa), escritor de libro "Hacking Web Technologies" y CSE en ElevenPaths

miércoles, julio 17, 2019

Hacking in your life: Jugando con los “encuentra-cosas” en el mundo BLE o BlueTooth Low-Energy

Llevamos tiempo trabajando con varios proyectos en Ideas Locas, el departamento de pre-innovación del área CDO de Telefónica. Hay uno del que esperamos pronto daros novedades, aunque será después del verano. En este proyecto trabajamos algunas cosas con Bluetooth Low Energy o BLE. Bluetooth es un tema que siempre me ha llamado la atención, aunque no siempre he tenido el tiempo para dedicarle.

Figura 1: Hacking in your life: Jugando con los “encuentra-cosas
 en el mundo BLE o BlueTooth Low-Energy

Es cierto que a BlueTooth le hemos dado caña en estos años y tienes pruebas de ello en este blog, donde encontrarás desde el ya achifamoso DirtyTooth que ha hecho que todos los iPhone ahora te pregunten si quieres compartir tu agenda de contactos con ese dispositivo al que te acabas de conectar, hasta las pruebas de Hacking WebBlueTooth que hizo nuestro colega Enrique Rando. Y por supuesto, lo usamos tanto en Rubika donde nos apoyamos BLE como forma de comunicación entre nuestro cubo impreso en 3D y la web de autenticación, como en la implementación de nuestra solución de Second Factor Web Browsing.


Pero ahora que tenía un poco de tiempo, centrándome en BlueTooth Low Energy, me dio por mirar ciertas cosas, su funcionamiento, su estructura y, ¿por qué no? sus debilidades. Leyendo el post de BluedIoT de este blog me gustó la simplicidad del ataque y las posibilidades en el mundo de los dispositivos que nos rodean y que cada vez más tienen BLE. Antes uno tiene que documentarse sobre Bluetooth Low Energy y ver cómo funciona en la teoría y en la práctica.

BLE: BlueTooth Low Energy

BLE está disponible desde la versión 4.0 de Bluetooth. El objetivo es sencillo: conseguir que los dispositivos disminuyan drásticamente el consumo de energía. Además, aporta un soporte interesante para el mundo IoT. Estamos uniendo un paradigma, el IoT, donde en muchos casos la seguridad brilla por su ausencia, con el BLE, el cual no tiene la mayor seguridad que podamos imaginar.

La estructura básica en BLE es GATT o Generic Attribute Profile. Este se encarga de la transferencia de datos. Tenemos tres posibilidades:
• Perfil: Nos indica el tipo de dispositivo basándose en el servicio. 
Servicio: Indica qué función tiene el dispositivo. Por ejemplo, un servicio tendrá un montón de características, siendo un montón de 1 a N. 
Característica: Es utilizado para el envío o recepción de datos. Tenemos permisos: lectura, escritura, notificación…). Esto será con lo que interactuaremos al final para enviar o recibir información.
Los servicios y las características tienen un UUID con el que se les identificará unívocamente. Otro valor importante y qué veremos en las tramas será el handle. Los servicios tienen un rango de manejadores (handlers) y este rango se asocia con un UUID.

La vulnerabilidad en el Bluetooth del M365 Scooter

Otra noticia que llamó mucho mi atención fue la de la aparición de una vulnerabilidad en el patinete de Xiaomi en su modelo M365 scooter. La vulnerabilidad consistía en que cualquier usuario se podía conectar al patinete vía Bluetooth sin ningún tipo de contraseña y podía, entre otras cosas, bloquear el motor del dispositivo. No digo nada, pero el "boss" tiene uno de esos que espero haya actualizado - prometo que no me interesé en este bug porque tuviera en mente nada... de verdad. -


En el vídeo se puede ver un ejemplo de lo que podía ocurrir. Un usuario mediante el uso de Bluetooth podía conectarse al dispositivo y enviar una trama a la característica X con el valor Y concreto que le dijera al patinete que el bloqueo de motor está activo. En el momento que el usuario del patinete quiere volver a iniciar la marcha, el patinete está bloqueado y no le responde como se espera.


Figura 4: PoC e Bug en Xiaomi M365 Scooter

También se comentaba que se podía subir un firmware malicioso al patinete debido a la baja seguridad en la manipulación e interacción, o al menos eso decían algunos medios. La gente de Zimperium publicó un post sobre la vulnerabilidad con gran detalle. Además, publicaron código sobre la vulnerabilidad que permitía bloquear cualquier patinete que no estuviera actualizado. Esto hace que sea de vital importancia actualizar el patinete. 

Figura 5: Código para manejar por BLE el M365 en GitHub

Por lo que se puede ver o entender se puede cambiar parámetros fácilmente, por ejemplo, encender o apagar la luz, cambiar velocidad de crucero, etcétera. Buscando un poco por Github uno puede encontrar ingeniería inversa como ésta sobre el uso del BLE del M365

Tramas Bluetooth en un PCAP 

La ingeniería inversa de un protocolo de red se puede hacer a través del estudio del tráfico que genera el protocolo, y leyendo bien el RFC. Aquí necesitamos algo parecido. Necesitamos un sniffer que nos ayude a generar ese PCAP de las tramas que se están enviando a través del Bluetooth

Uno puede usar diferentes elementos para hacer esas capturas, por ejemplo, un UbertTooth. Si tenemos un móvil Android a mano con una versión superior a la 4.4 podremos utilizar éste para sniffar el tráfico Bluetooth generado desde el dispositivo y las respuestas que éste obtiene. 

Figura 6: Activar BlueTooth HCI snoop log en Android 4.4

Esto genera un fichero llamado btsnoop_hci_[números] en la carpeta, generalmente, /Android/Data o en la raíz del almacenamiento interno. Yo compré una serie de “encuentra-todo” en Aliexpress. Esperábamos que su seguridad fuera baja y que cualquier usuario que conociera o pudiera sniffer tráfico BLE encontrara un patrón repetitivo. 

La teoría se cumplió. A estos “encuentra-todo” se les puede hacer Replay. Analizando las tramas capturas con el móvil Android vemos cómo se repite el patrón cuando se activa la búsqueda del dispositivo, pero...

¿Qué es un “encuentra-todo”? 

Es un pequeño dispositivo Bluetooth que puede ser utilizado como llavero o puede ser introducido en una cartera, en una mochila, o en cualquier sitio que queramos tener “controlado”. Si en algún momento lo perdemos podemos intentar buscarlo accionando, desde nuestro móvil, un pitido. Además, tienen otras características como búsqueda de la última ubicación GPS conocida o, ¿por qué no? permite accionar la cámara para tomarnos un "selfie"

Figura 7: Tramas de comandos BLE

En la captura se puede ver dos peticiones “write” ese flujo de datos va desde nosotros hacia el dispositivo con BLE. La petición es aceptada, y el dispositivo empieza a pitar. Esto hizo que pudiéramos observar las tramas que activaban el pitido del dispositivo.

Jugamos con dos dispositivos y cada uno era distinto. Uno era muy simple, recibía una trama con un valor para activar el pitido y otra trama con un valor diferente para desactivarlo. Podemos ejemplificarlo con value=0x00 activar y value=0x01 para desactivar. Muy simple. 

Figura 8: Trama  BLE para controlar los pitidos

El segundo dispositivo tenía un poco más de “miga”. Tenía un formato más amplio y utilizaba un byte para la velocidad del sonido, otro byte para el número de pitidos, pudiendo ser 256 pitidos seguidos, es decir, una locura. Haciendo pruebas se pudo ir sacando estos parámetros curiosos.

¿Cómo podemos enviar las pruebas?

Hay muchas aplicaciones que permiten utilizar BLE. Por ejemplo, en macOS puedes utilizar Bluetility. No es la mejor herramienta, pero permite hacer las pruebas. Por otro lado, desde un dispositivo móvil LightBlue o nRF Connect son buenas soluciones. Nosotros trabajamos en algo que ya os presentaremos, y hasta aquí podemos leer.  Para esta prueba utilizamos nRF Connect para iOS. Con un simple escaneo se puede encontrar diferentes dispositivos en un rango cercano. 

Figura 9: Escaneo de dispositivos nRF Connect

Vemos que es conectable, por lo que nos conectamos con el dispositivo. Una vez conectados vemos los servicios, por ejemplo, podemos ver la batería que tiene ese dispositivo sin necesidad de ninguna autenticación. 

Analizando el PCAP anterior, miramos qué características son escribibles, entrando dentro de los servicios. Esto es importante, porque si la característica sólo es de lectura, no es la que estamos buscando. El handle nos ayude a identificar qué estamos buscando. 

Figura 10: Lista de dispositivos encontrados

En este caso, encontramos la característica que buscábamos, y vemos que podemos escribir valores. La herramienta nos da a elegir en un formato de texto o de byte array, y si queremos enviar comandos o peticiones. Como se puede ver en la imagen escribimos el valor en hexadecimal y enviamos el comando. Esto hará sonar al dispositivo, como se verá en el video posteriormente. 

Figura 11: Envío de valores para las características

Ahora os dejamos un pequeño video dónde se puede ver. Lo interesante es entender el procedimiento de cómo se puede observar y entender el funcionamiento del BLE con los dispositivos que nos rodean.


Figura 12: Demo de envío de comandos por BLE

Por supuesto, no siempre es tan fácil, ya que dependiendo de la implementación esto puede ser más complejo o no ser vulnerables a ataques de replay. Por desgracia este comportamiento lo podemos encontrar en más sitios y dispositivos de lo que nos gustaría. 

Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica.

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.

Entrada destacada

Cupón descuento en @0xWord: Unos libros "dibujados" y vacaciones

Como todos los años, 0xWord va a cerrar durante unas semanas en el mes de Agosto, así que desde hoy mismo hasta el día 25 de Julio a las 2...

Entradas populares