
BtleJuice: framework Man-in-the-Middle para Bluetooth Smart (LE)
BtleJuice es un marco completo para realizar ataques de Hombre en el Medio (Man-in-the-Middle) en dispositivos Bluetooth Smart (también conocidos como Bluetooth Low Energy). Está compuesto por:
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. Luego, asegúrate de instalar todas las dependencias requeridas:
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 está compuesto por dos componentes principales: un proxy de interceptación y un núcleo. Estos dos componentes deben ejecutarse en máquinas independientes para poder operar simultáneamente con dos adaptadores bluetooth 4.0+. BtleJuice Proxy no funciona dentro de un contenedor Docker.
El uso de una máquina virtual puede ayudar a que este marco 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.
Inicia el proxy en tu máquina virtual:
$ sudo btlejuice-proxy
En tu máquina host, no olvides detener el servicio bluetooth y garantizar 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 <Dirección IP del proxy> -w
La opción -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 de usuario web ya está 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 Seleccionar objetivo y aparecerá un cuadro de diálogo mostrando 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 esté listo, usa la aplicación móvil asociada u otro dispositivo (dependiendo de lo que se espere) para conectarse al dispositivo simulado. Si la conexión tiene éxito, se mostrará un evento Conectado en la interfaz principal.

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


Haz clic en el botón Escribir (o Leer) 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 en tiempo real. Puedes usar la interceptación global haciendo clic en el botón Interceptar en la esquina superior derecha o usar el menú contextual para activar o desactivar un gancho (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 Exportar, aparecerá el siguiente cuadro de diálogo:

Haz clic en el botón Exportar 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 configuración proporciona actualmente una sola 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 período corto de tiempo.

Hacer clic en el botón Seleccionar objetivo en la esquina superior derecha cuando el proxy está activo lo detendrá y permitirá seleccionar un nuevo objetivo.
Los bindings de Node.js de BtleJuice también se pueden instalar a través de npm:
$ sudo npm install -g btlejuice-bindings
Más información sobre cómo usar los bindings de Node.js en la documentación del paquete.
Un agradecimiento especial a Slawomir Jasek, quien señaló muchos trucos de noble/bleno para evitar problemas con aplicaciones móviles y compartió estrategias de MITM BLE durante DEF CON 24 =). También es el autor de Gattacker.
Copyright (c) 2016 Econocom Digital Security
Por la presente se concede permiso, sin costo alguno, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender copias del Software, y para permitir a las personas a quienes se les proporcione el Software hacer lo mismo, sujeto a las siguientes condiciones:
El aviso de copyright anterior y este aviso de permiso deberán incluirse en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES POR CUALQUIER RECLAMACIÓN, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, EXTRACONTRACTUAL O DE OTRO TIPO, QUE SURJA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.