
Framework Man-in-the-Middle para BLE que intercepta, reproduz e modifica o tráfego GATT entre dispositivos Bluetooth Smart e aplicativos móveis por meio de um proxy de interceptação baseado na web.
O BtleJuice é um framework completo para realizar ataques Man-in-the-Middle em dispositivos Bluetooth Smart (também conhecidos como Bluetooth Low Energy). Ele é composto por:
Instalar o BtleJuice é brincadeira de criança. Antes de tudo, 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 / Outras distribuições baseadas em RPM
sudo yum install bluez bluez-libs bluez-libs-devel npm
Por fim, 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 interceptação e um núcleo. Esses 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 este framework funcionar em um único computador.
Na sua máquina virtual, instale o btlejuice e certifique-se de que seu 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 tenha 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
Por fim, execute o seguinte comando na sua máquina host:
$ sudo btlejuice -u <Proxy IP address> -w
A opção -w diz ao BtleJuice para iniciar a interface web, enquanto a opção -u especifica o endereço IP do proxy.
A Interface Web do Usuário agora está disponível em http://localhost:8080. Observe que a porta do servidor web pode ser alterada pela linha de comando.
A interface web do BtleJuice fornece no canto superior direito um conjunto de links para controlar o núcleo de interceptação, como mostrado abaixo.

Primeiro, clique no botão Select target e uma caixa de diálogo será exibida mostrando todos os dispositivos Bluetooth Low Energy disponíveis detectados pelo núcleo de interceptação:

Clique duas vezes no alvo desejado e aguarde a interface ficar pronta (a aparência do botão bluetooth mudará). Quando o dispositivo dummy estiver pronto, use o aplicativo móvel associado ou outro dispositivo (dependendo do que for esperado) para conectar-se ao dispositivo dummy. Se a conexão for bem-sucedida, um evento Connected será exibido na interface principal.

Todas as operações GATT interceptadas são então exibidas com os UUIDs dos serviços e características correspondentes e, é claro, os dados associados a elas. Os dados são mostrados por padrão no formato HexII (uma variante do formato criado por Ange Albertini), mas você 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 reproduzir qualquer operação GATT clicando com o botão direito nela e selecionando a opção Replay, como mostrado abaixo:


Clique no botão Write (ou Read) para reproduzir a operação GATT correspondente. Essa operação será registrada na interface principal.
Por último, mas não menos importante, a interface pode interceptar local ou globalmente qualquer operação GATT e permitir a modificação de dados em tempo real. Você pode usar a interceptação global clicando no botão Intercept no canto superior direito ou usar o menu de contexto para ativar ou desativar um hook em um determinado serviço e característica. Sempre que uma operação GATT é interceptada, a seguinte caixa de diálogo é exibida:

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

Clique no botão Export na parte inferior da caixa de diálogo para baixar uma versão em JSON (ou texto) dos dados interceptados.
A caixa de diálogo de configurações oferece, por enquanto, uma única opção que permite reconectar automaticamente o proxy quando o dispositivo alvo se desconectar. Isso pode ser útil ao lidar com dispositivos que ficam ativos por um curto período de tempo.

Clicar no botão Select Target no canto superior direito quando o proxy está ativo interromperá o proxy e permitirá a seleção de alvo novamente.
Os bindings Node.js do BtleJuice também podem ser instalados via 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 aplicativos móveis e compartilhou 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 arquivos de documentação associados (o "Software"), para lidar com o Software sem restrição, incluindo, sem limitação, os direitos de usar, copiar, modificar, combinar, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e para permitir que as pessoas a quem o Software for fornecido façam o mesmo, sujeito à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 "NO ESTADO EM QUE SE ENCONTRA", 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 DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER REIVINDICAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.