jueves, febrero 25, 2021

Apple_Bleee: airdrop_leak y otros scripts interesantes

Hace ya un tiempo, un par de años, la gente de Hexway publicaba una investigación sobre BLE y Airdrop en la que se podían conocer cosas bastante interesantes. Un proceso de ingeniería inversa al protocolo para mostrar cosas interesantes que se podía conocer haciendo uso de la tecnología BLE y simplemente ‘escuchar’ el aire, así como un trabajo bastante interesante, a la vez que brillante que hicieron sobre Airdrop.

Figura 1: Apple_Bleee: airdrop_leak y otros scripts interesantes

Todo el trabajo puede verse en su Github de hexway. El proyecto consta de varios scripts, los cuales son:

- ble_read_state.py: Este script permite hacer sniffing del tráfico BLE y muestra los mensajes que se están intercambiando los dispositivos de Apple. 
 
- airdrop_leak.py: Este script permite capturar el hash del número móvil del usuario, el cual es enviado vía Airdrop cuando se pulsa el botón de compartir. No es necesario que se envíe nada, solo con darle a compartir, el dispositivo envía esta información. Hablamos del caso de un iPhone. El hash es un sha256. 
 
- adv_wifi.py: Este script permite enviar mensajes BLE con la petición de compartición de password de la WiFi. De esto hemos hablado recientemente en el artículo sobre openwifipass. 
 
- adv_airpods.py: Este script es similar al anterior, pero para anunciar unos Airpods cerca. 
 
- hash2phone: Este script permite generar una base de datos de números de teléfono y su hash correspondiente. Hay que recordar que el hash es un sha256.

Incluso en su momento, nuestra herramienta HomePWN integró algunos de los scripts que se podían ver en este trabajo, con algunos retoques que en Ideas Locas se fueron dando.


Figura 2: HomePWN Apple BLE discovery

Además, Lucas Fernández estuvo trabajando en Airdrop Crazy un ‘hard fork’ del proyecto de Hexway donde integraba algunos de los scripts y añadía algunos detalles. La solución de Airdrop Crazy permitía disponer de una app de iOS donde se puede visualizar los diferentes dispositivos y cierta información que se puede obtener por BLE, como veíamos en ble_read_state.py

Figura 3: Airdrop Crazy

Además, se utilizaba airdrop_leak.py para recoger los hashes de los números de teléfono cercanos. Hay que hacer hincapié en que se montaba un "evil host" que anunciaba un número de teléfono ficticio para que el resto de dispositivos alrededor dieran su información.


Nuestro compañero tuvo que tocar ciertos aspectos para mejorar la estabilidad del código de Hexway, ya que hay detalles que entre diferentes versiones han ido cambiando, por ejemplo de un iOS 13 a un iOS 14. Aquí os dejo el vídeo sobre Airdrop Crazy y su funcionamiento que se dio en un Code Talk for Developers de IdeasLocas:
 

Figura 5: CodeTalk for Developers: AirDrop Leak

Y hoy, ¿tenemos algo nuevo? Pues realmente no, lo que hemos hecho es simplificar un poco el proceso y jugar con el proyecto de Hexway. El adaptador wireless que propone la gente de Hexway es interesante, pero puede ser difícil de encontrar. Por ello, hemos tenido que buscar algunos chipset y modelos compatibles con esto. Realmente, debería valer con que el chipset del adaptador WiFi sea compatible con el modo monitor y frame injection, si queremos hacer algo de Hacking iOS: iPad & iPhone.

Figura 6: Libro de Hacking iOS (iPhone & iPad) 2ª Edición

Para recrear la prueba de concepto de la gente de Hexway hemos utilizado una Alfa con chipset RT3070. Montar una Raspberry Pi con un Raspbian o un Ubuntu 19.10 sobre un PC de sobremesa, lo hemos probado con ambos, y enchufar la Alfa. Sin necesidad de instalar ningún driver funciona. Para colocar el modo monitor se puede ejecutar las siguientes instrucciones:
sudo ifconfig wlan1 down
sudo iwconfig wlan1 mode monitor
sudo ip link set wlan1 up 
Si queremos ver si la tarjeta inyecta paquetes, podemos hacer uso de aireplay-ng –test y deberíamos ver si la tarjeta es capaz de inyectar paquetes, algo totalmente necesario en esta prueba de concepto. Además, debemos arrancar owl y ejecutar el script de airdrop_leak.py:
sudo owl -i wlan1 -N &
sudo python3 airdrop_leak.py
El script se queda esperando a que haya alguien cercano que quiera compartir un fichero desde un iPhone y tenga Airdrop activo. Hay que indicar que vale con que se le dé al botón de compartir, aunque luego el fichero o lo que quieras compartir lo envíes por WhatsApp, por e-mail o por cualquier otro elemento del sistema operativo.

Figura 7: Arrancado owl y android_leak.py en nuestra Raspberry Pi

Respecto al código original de airdrop_leak.py se ha hecho una pequeña modificación para volcar los hashes obtenidos a un fichero llamado hash.txt. En este fichero no veremos hashes repetidos, esto ayudará a lo que haremos después.

Figura 8: Hashes capturados

Si miramos dentro del fichero hashes.txt encontraremos los diferentes hashes correspondientes a los números de teléfono. Uno por cada línea y cada uno de ellos es un sha256 representando el número de teléfono con el prefijo del país.

Figura 9: Fichero de hashes

Ahora, si vemos lo que la gente de Hexway proporciona con hash2phone se puede generar una base de datos con los números de teléfono. Como ejemplo, me he creado una base de datos con tres números de teléfono móvil que tengo disponibles y he creado un fichero llamado request_hash.py que permite tomar los hashes del fichero hashes.txt y lanzarlos contra una aplicación web escrita en flask (o en PHP, eso es lo de menos) y poder consultar los datos. Si el hash se encuentra entre los hashes correspondientes a mis números de teléfono puedo saber su valor en plano. Esto es lo que propone la gente de Hexway con el script hash2phone.

Figura 10: Script hash2phone

Mi script devuelve el valor en plano, el cual he dejado fuera de la imagen anterior. Luego cada cinco segundos duerme esperando a que el fichero hashes.txt engorde con otro hash, el cual poder comprobar.

Figura 11: Cada cinco segundos engordando el hashes.txt

Una PoC bastante chula, la cual con el hardware adecuado queda bien. Aunque sin la información adecuada todo puede ser complejo de montar. Si tienes alguna duda y quieres montarlo no dudes en hacerte con el hardware adecuado.

No hay comentarios:

Publicar un comentario