miércoles, diciembre 13, 2017

Dirtytooth for Rasperry Pi v2: Soporte Raspbian Stretch para versiones iOS inferiores a 11.2

El pasado 17 de agosto salió una nueva versión de Raspbian llamada Raspbian Stretch. Una nueva versión del sistema operativo más utilizado en Raspberry Pi y que llegó para sustituir a Raspbian Jessie después de dos años sin tener una actualización mayor. Dentro de las novedades hay una que hacía que nuestro DirtyTooth for Rasperry Pi - que habíamos sacado el 10 de Agosto - no funcionara correctamente en esta nueva versión. Lo que sucedía es que los controladores de Bluetooth habían sido modificados, especialmente los relacionados con el audio. Había que buscar una solución y aprovechar las nuevas características de Bluetooth que ofrece Raspbian Stretch.

Figura 1: Dirtytooth for Rasperry Pi v2: Soporte Raspbian Stretch para versiones iOS inferiores a 11.2

La versión anterior utilizaba PulseAudio junto a un módulo para habilitar la conexión de audio Bluetooth, sin embargo la comunicación con ALSA (Advanced Linux Sound Architecture) en ocasiones provocaba cortes en la transmisión de la señal y ralentizaciones en el buffer de sonido.

Novedades en Dirtytooth for Rasperry Pi v2

Ahora es posible utilizar ALSA junto al proyecto bluez-alsa para realizar la conexión de audio Bluetooth. Este proyecto hace una integración directa entre la pila de Bluetooth de Linux (bluez) y el software de sonido por defecto en Linux, ALSA. El uso de este paquete mejora el streaming de audio Bluetooth con respecto a PulseAudio y además permite controlar el volumen desde el propio iPhone.

Figura 2: DirtyTooth for Raspberry Pi v2

Otro problema que se soluciona es esta versión es la captura de los datos. En la versión anterior se recogían todos los datos en una única tarjeta VCARD. Normalmente la captura de los datos se hace rápidamente, sin embargo, se podían experimentar problemas con las agendas que tuvieran muchas fotos asociadas a contactos. En estos casos se podía llegar incluso a interrumpir la conexión y en ese caso no se capturaba ningún dato. Para solucionar este error, ahora se capturan los contactos uno a uno, por lo que si ocurre alguna interrupción en la transmisión es posible visualizar la parte de los datos capturados.

Figura 3: Extracción de fotos de las VCARD de iOS < 11.2

Aprovechando el fallo de las fotos, nos dimos cuenta que podíamos conseguir también esta información. La información aparece en la VCARD bajo la etiqueta PHOTO y está codificada en BASE64 que habrá que convertir a JPEG para ver el resultado. En el siguiente vídeo tenéis un ejemplo de cómo funciona esta nueva versión.


Figura 4: DirtyTooth for Raspberry v2

Y como última mejora menor, es posible cambiar el nombre al altavoz a través de la linea de comandos utilizando:
sudo dirtytooth -n “My dirty speaker”
Después de la presentación del nuevo DirtyTooth en BlackHat Europa se pone a disposición de todos los que quieran probar este truco con los iPhone todavía compatibles, ya que se recuerda que Apple ha arreglado esto en la última versión de iOS, la versión 11.2, dejando deshabilitado por defecto la opción de sincronizar contactos. Aún así, sigue siendo un truco a sumar a la lista de todas las técnicas de Hacking iOS: iPhone & iPad.


Figura 5: Opción de sincronizar contactos por defecto deshabilitada en iOS 11.2

Esto, es algo que ya esperábamos desde el día que se hizo pública la técnica de DirtyTooth Hack, y Chema Alonso lo dijo el mismo mes que lanzamos el proyecto, como se puede ver en este vídeo.


Figura 6: Sobre lo que haría Apple con DirtyTooth

Esta es la lista de completa de novedades:
- Funcionamiento con Raspbian Stretch
- Mejora del streaming de audio bluetooth
- Control de volumen a través del iPhone
- Cambio de nombre del altavoz desde linea de comandos
- Posibilidad de obtener las fotos asociadas a los contactos
- Recogida de contactos uno a uno para evitar perder los datos si se interrumpe la conexión
Al igual que con la versión anterior, es posible editar el fichero .bashrc para hacer que el daemon de DirtyTooth arranque automáticamente al iniciar la terminal, muy práctico si se pone el login automático y en modo terminal desde la utilidad raspi-config.
DIRTY=$(ps cax | grep -v grep | grep dirtyagent)  
if [ "$DIRTY" == "" ] ; then 
sudo dirtytooth --start 
fi
Enjoy it!

Autor: Álvaro Núñez - Romero (@toolsprods), Security Researcher en ElevenPaths

No hay comentarios:

Publicar un comentario