
BtleJuice Bluetooth Smart (LE) framework man-in-the-middle
BtleJuice é uma framework completa para realizar ataques Man-in-the-Middle em dispositivos Bluetooth Smart (também conhecidos como Bluetooth Low Energy). É composto por:
Instalar o BtleJuice é muito fácil. Primeiramente, certifique-se de que seu sistema usa uma versão recente do Node.js (>=4.3.2) e do npm. Em seguida, certifique-se de instalar todas as dependências necessárias:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
### Fedora / Outros baseados em RPM
sudo yum install bluez bluez-libs bluez-libs-devel npm
Por último, instale o BtleJuice usando o npm:
sudo npm install -g btlejuice
Se tudo correu bem, o BtleJuice está pronto para uso !
O BtleJuice é composto por dois componentes principais: um proxy de interceção e um núcleo. Estes dois componentes precisam ser executados em máquinas independentes para operar simultaneamente dois adaptadores bluetooth 4.0+. O BtleJuice Proxy não funciona em um contêiner Docker.
O uso de uma máquina virtual pode ajudar a fazer esta framework funcionar em um único computador.
A partir da sua máquina virtual, instale o btlejuice e certifique-se de que o adaptador USB BT4 está disponível na 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
Em seguida, certifique-se de que sua máquina virtual tem um endereço IP acessível a partir do host.
Inicie o proxy na sua máquina virtual:
$ sudo btlejuice-proxy
Na sua máquina host, não se esqueça de parar o serviço bluetooth e garantir que o dispositivo HCI permaneça aberto/inicializado:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
Finalmente, execute o seguinte comando na sua máquina host:
$ sudo btlejuice -u <Endereço IP do Proxy> -w
A flag -w diz ao BtleJuice para iniciar a interface web, enquanto a opção -u especifica o endereço IP do proxy.
A Interface de Utilizador Web está agora disponível em http://localhost:8080. Note que a porta do servidor web pode ser alterada através da linha de comando.
A interface web do BtleJuice fornece no canto superior direito um conjunto de links para controlar o núcleo de interceção, conforme mostrado abaixo.

Primeiro, clique no botão Selecionar alvo e uma caixa de diálogo aparecerá exibindo todos os dispositivos Bluetooth Low Energy disponíveis detetados pelo núcleo de interceção:

Clique duas vezes no alvo desejado e aguarde até que a interface esteja pronta (o aspeto do botão bluetooth mudará). Assim que o dispositivo fictício estiver pronto, use a aplicação móvel associada ou outro dispositivo (dependendo do que é esperado) para se conectar ao dispositivo fictício. Se a conexão for bem-sucedida, um evento Connected será exibido na interface principal.

Todas as operações GATT intercetadas são então exibidas com os UUIDs dos serviços e características correspondentes e, claro, os dados associados a eles. Os dados são mostrados por padrão no formato HexII (uma variante do formato projetado por Ange Albertini), mas pode alternar de HexII para Hex (e vice-versa) clicando nos próprios dados. Ambos os formatos Hex e HexII são suportados pelo BtleJuice.
É possível repetir qualquer operação GATT clicando com o botão direito nela e selecionando a opção Repetir, conforme mostrado abaixo:


Clique no botão Write (ou Read) para repetir a operação GATT correspondente. Esta operação será registada na interface principal.
Por último, mas não menos importante, a interface pode intercetar localmente ou globalmente qualquer operação GATT e permitir a modificação de dados em tempo real. Pode usar a interceção global clicando no botão Intercept no canto superior direito ou usar o menu contextual para ativar ou desativar um hook num determinado serviço e característica. Sempre que uma operação GATT é intercetada, a seguinte caixa de diálogo aparecerá:

Desde a versão 1.0.6, a interface fornece uma funcionalidade de exportação de dados que permite exportações legíveis e em JSON. Estas exportações são geradas com base nas operações GATT intercetadas, mas também incluem informações sobre o dispositivo alvo. Quando o botão Export é clicado, a seguinte caixa de diálogo aparecerá:

Clique no botão Export na parte inferior da caixa de diálogo para descarregar uma versão JSON (ou texto) dos dados intercetados.
A caixa de diálogo de configurações fornece atualmente uma única opção que permite reconectar automaticamente o proxy quando o dispositivo alvo se desconecta. Isto pode ser útil ao lidar com dispositivos que estão ativos durante um curto período de tempo.

Clicar no botão Selecionar Alvo no canto superior direito quando o proxy está ativo irá pará-lo e permitir a seleção de alvo novamente.
Os bindings Node.js do BtleJuice também podem ser instalados através do npm:
$ sudo npm install -g btlejuice-bindings
Mais informações sobre como usar os bindings Node.js na documentação do pacote.
Um agradecimento especial a Slawomir Jasek, que apontou muitos truques noble/bleno para evitar problemas com aplicações móveis e partilhou estratégias de MITM BLE durante a DEF CON 24 =). Ele é também o autor do Gattacker.
Copyright (c) 2016 Econocom Digital Security
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos ficheiros de documentação associados (o "Software"), para lidar com o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, fundir, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e de permitir que as pessoas a quem o Software é fornecido o façam, sujeitas às seguintes condições:
O aviso de copyright acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU TITULARES DE DIREITOS DE AUTOR SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, QUER NUMA AÇÃO DE CONTRATO, DELITO OU OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.