
Sniffer/Injetor Bluetooth BR/EDR ativo tão barato quanto qualquer placa ESP32 pode ser. Funciona com Scapy ;-)
Modo "monitor" simples para Bluetooth Classic. Capture ou injete pacotes Baseband BR/EDR em conexões BT do ESP32.
Este é um sniffer BR/EDR ativo de engenharia reversa e um ESP32 patching framework, que pode ser usado para explorar a interação Bluetooth (BT) BR/EDR entre o controlador ESP32 e um alvo remoto.
Diferentemente de sniffers passivos, que não interagem com a rede BT (piconet), o sniffer ativo conecta-se ao dispositivo BT remoto (alvo BR/EDR) e permite testar o protocolo BT até a camada Baseband enquanto é guiado por uma pilha de host BT, como blue-kitchen. O sniffer BrakTooth suporta placas baratas como ESP32-DOIT ($4) ou ESP32-DevKitC ($10).
git clone https://github.com/Matheus-Garbelini/esp32_bluetooth_classic_sniffer
cd esp32_bluetooth_classic_sniffer
./requirements.sh # (sudo required) Installs latest wireshark and standalone python3 runtime
./build.sh # Build BT Host programs and Wireshark h4bcm dissector
Antes de começar a usar o BrakTooth Sniffer, você precisa carregar um firmware personalizado na sua placa ESP32:
sudo chown $USER:$USER /dev/ttyUSB0 # Give user permission to serial port to avoid using sudo
./firmware.py flash /dev/ttyUSB0 # Change ttyUSB0 to match your port name
# Note: ESP-WROVER-KIT or ESP-ETHERNET-KIT uses /dev/ttyUSB1 instead as the first port is for the FTDI JTAG circuit.
Importante: Algumas placas exigem que você mantenha pressionado o botão BOOT para colocar o ESP32 corretamente em modo de gravação.
Usage: BTSnifferBREDR.py [OPTIONS]
Options:
--port TEXT Serial port name (/dev/ttyUSBx for Linux)
--host TEXT BDAddress of local host (default: E0:D4:E8:19:C7:68)
--target TEXT BDAddress of remote target (ex: a8:96:75:25:c2:ac)
--live-wireshark Opens Wireshark live session
--live-terminal Show a summary of each packet on terminal
--bridge-only Starts the HCI bridge without connecting any BT Host stack
--help Show this message and exit.
Você pode iniciar o sniffer no papel de mestre ou escravo. Se você usar o argumento --target, o sniffer tentará uma conexão com o seu alvo remoto. Caso contrário, ele apenas aguardará que alguém se conecte a ele.
Por fim, o --bridge-only apenas cria o pseudo terminal HCI (/dev/pts/x) para que o ESP32 possa operar como um controlador BT HCI padrão. Você pode usar esse recurso para conectar qualquer outra pilha de host BT ao ESP32.
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --target=E0:D4:E8:19:C7:69 --live-terminal --live-wireshark
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --live-terminal --live-wireshark
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --bridge-only --live-terminal --live-wireshark
O código-fonte pode ser compilado diretamente do repositório ESP32 Firmware Patching Framework da seguinte forma:
cd firmware
./build_from_source.sh # clone submodule & build firmware with platformio environment 'sniffer-serial'
./firmware.py flash <serial port> # flash built firmware to ESP32 via serial port
Os binários do firmware ESP32 (firmware.bin, bootloader.bin, partitions.bin) são copiados para a pasta firmware após a compilação bem-sucedida. Em seguida, você pode prosseguir com a gravação do firmware conforme descrito na etapa 1.B).
Como o sniffer BrakTooth usa uma pilha de host BT para orientar a conectividade, os seguintes exemplos modificados do BlueKitchen são usados:
Você pode modificar ou adicionar perfis BT aos programas atuais seguindo a documentação oficial do BlueKitchen. Observe que a pasta host_stack/bluekitchen/example/ já contém alguns exemplos de perfis.
O firmware personalizado do Sniffer/Injetor BR/EDR ESP32 comunica-se com o sistema host por meio de uma porta serial USB e aguarda receber comandos personalizados ou comandos HCI. Na inicialização, uma ponte HCI é criada para separar o protocolo personalizado do BrakTooth dos comandos HCI padrão enviados ou recebidos pelo ESP32. Quando o recurso "RX/TX Sniffer" está habilitado no firmware do ESP32, os pacotes Baseband são diretamente encaminhados para o script BTSnifferBREDR.py, que simplesmente decodifica os pacotes capturados por meio do protocolo personalizado e os imprime via Scapy e/ou os despeja no Wireshark por meio de captura ao vivo e na pasta logs.
A dissecção dos pacotes Baseband estende o InternalBlue Broadcom Wireshark Dissector. Especificamente, a dissecção estendeu o plugin h4bcm do Wireshark para suportar mais algumas camadas BT e o nosso cabeçalho de metadados personalizado do ESP32. Obrigado @jiska2342.
Obrigado a todos os seguintes projetos de código aberto: