
Framework Man-in-the-Middle para BLE que intercepta, reproduce y modifica el tráfico GATT entre dispositivos Bluetooth Smart y aplicaciones móviles mediante un proxy de intercepción basado en web.
BtleJuice es un framework completo para realizar ataques Man-in-the-Middle en dispositivos Bluetooth Smart (también conocidos como Bluetooth Low Energy). Se compone de:
Instalar BtleJuice es muy sencillo. En primer lugar, asegúrate de que tu sistema utiliza una versión reciente de Node.js (>=4.3.2) y npm. A continuación, asegúrate de instalar todas las dependencias necesarias:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo yum install bluez bluez-libs bluez-libs-devel npm
Por último, instala BtleJuice usando npm:
sudo npm install -g btlejuice
Si todo ha ido bien, ¡BtleJuice está listo para usar!
BtleJuice se compone de dos componentes principales: un proxy de interceptación y un núcleo. Se requiere que estos dos componentes se ejecuten en máquinas independientes para poder operar simultáneamente dos adaptadores bluetooth 4.0+. BtleJuice Proxy no funciona en un contenedor Docker.
El uso de una máquina virtual puede ayudar a que este framework funcione en un solo ordenador.
Desde tu máquina virtual, instala btlejuice y asegúrate de que tu adaptador USB BT4 esté disponible desde la máquina virtual:
$ sudo hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 10:02:B5:18:07:AD ACL MTU: 1021:5 SCO MTU: 96:6
DOWN
RX bytes:1433 acl:0 sco:0 events:171 errors:0
TX bytes:30206 acl:0 sco:0 commands:170 errors:0
$ sudo hciconfig hci0 up
Luego, asegúrate de que tu máquina virtual tenga una dirección IP accesible desde el host.
Lanza el proxy en tu máquina virtual:
$ sudo btlejuice-proxy
En tu máquina host, no olvides detener el servicio bluetooth y asegurarte de que el dispositivo HCI permanezca abierto/inicializado:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
Finalmente, ejecuta el siguiente comando en tu máquina host:
$ sudo btlejuice -u <Proxy IP address> -w
El indicador -w le indica a BtleJuice que inicie la interfaz web, mientras que la opción -u especifica la dirección IP del proxy.
La interfaz web está ahora disponible en http://localhost:8080. Ten en cuenta que el puerto del servidor web puede cambiarse mediante la línea de comandos.
La interfaz web de BtleJuice proporciona en la esquina superior derecha un conjunto de enlaces para controlar el núcleo de interceptación, como se muestra a continuación.

Primero, haz clic en el botón Select target y aparecerá un diálogo que mostrará todos los dispositivos Bluetooth Low Energy disponibles detectados por el núcleo de interceptación:

Haz doble clic en el objetivo deseado y espera a que la interfaz esté lista (el aspecto del botón bluetooth cambiará). Una vez que el dispositivo simulado (dummy) esté listo, usa la aplicación móvil asociada u otro dispositivo (según lo esperado) para conectarte al dispositivo simulado. Si la conexión tiene éxito, se mostrará un evento Connected en la interfaz principal.

Todas las operaciones GATT interceptadas se muestran con los UUID de los servicios y características correspondientes y, por supuesto, los datos asociados. Los datos se muestran por defecto en formato HexII (una variante del formato diseñado por Ange Albertini), pero puedes cambiar de HexII a Hex (y viceversa) haciendo clic en los propios datos. BtleJuice soporta tanto el formato Hex como el HexII.
Es posible reproducir cualquier operación GATT haciendo clic derecho sobre ella y seleccionando la opción Replay, como se muestra a continuación:


Haz clic en el botón Write (o Read) para reproducir la operación GATT correspondiente. Esta operación se registrará en la interfaz principal.
Por último, pero no menos importante, la interfaz puede interceptar local o globalmente cualquier operación GATT y permitir la modificación de datos sobre la marcha. Puedes usar la interceptación global haciendo clic en el botón Intercept en la esquina superior derecha o usar el menú contextual para habilitar o deshabilitar un hook en un servicio y característica determinados. Cada vez que se intercepta una operación GATT, aparecerá el siguiente cuadro de diálogo:

Desde la versión 1.0.6, la interfaz proporciona una función de exportación de datos que permite exportaciones legibles y en JSON. Estas exportaciones se generan a partir de las operaciones GATT interceptadas, pero también incluyen información sobre el dispositivo objetivo. Cuando se hace clic en el botón Export, aparecerá el siguiente diálogo:

Haz clic en el botón Export en la parte inferior del cuadro de diálogo para descargar una versión JSON (o texto) de los datos interceptados.
El diálogo de ajustes proporciona por ahora una única opción que permite reconectar automáticamente el proxy cuando el dispositivo objetivo se desconecta. Esto puede ser útil cuando se trabaja con dispositivos que están activos durante un corto período de tiempo.

Al hacer clic en el botón Select Target de la esquina superior derecha cuando el proxy está activo, este se detendrá y permitirá seleccionar de nuevo el objetivo.
Los bindings de Node.js de BtleJuice también pueden instalarse mediante npm:
$ sudo npm install -g btlejuice-bindings
Puedes encontrar más información sobre cómo usar los bindings de Node.js en la documentación del paquete.