
Prova de Conceito das vulnerabilidades Sweyntooth Bluetooth Low Energy (BLE).
Este repositório é parte do resultado de uma pesquisa do ASSET Research Group.

O SweynTooth cobre uma família de 18 vulnerabilidades em diferentes kits de desenvolvimento de software (SDKs) de Bluetooth Low Energy (BLE) de seis grandes fornecedores de system-on-a-chip (SoC). As vulnerabilidades expõem falhas em implementações específicas de BLE SoC que permitem a um invasor dentro do alcance de rádio acionar deadlocks, crashes e buffer overflows ou contornar completamente a segurança, dependendo das circunstâncias. (Atualização) Também incluímos um script de teste para verificar dispositivos contra a variante BLE KNOB.
Você pode ver mais informações sobre as vulnerabilidades, patches disponíveis e dispositivos afetados no site de divulgação do SweynTooth do ASSET Research Group.
Fitbit, August Smart Lock, Eve Energy, CubiTag e outras coisas "Inteligentes" são afetadas.
Este PoC utiliza bibliotecas bem mantidas, como Scapy e Colorama. A criação e a dissecação de pacotes BLE são feitas por meio de camadas de protocolo Scapy personalizadas (bluetooth4LE e bluetooth.py). Há um merge em andamento para incluir nossas adições no repositório principal do Scapy.
Primeiro, certifique-se de ter Python2.7 no seu sistema e os pacotes Python listados no arquivo requirements.txt.
Se você estiver usando Ubuntu, execute o seguinte:
sudo apt-get install python2.7
sudo pip install -r requirements.txt
Em segundo lugar, o SweynTooth usa o Nordic nRF52840 Dongle para enviar/receber pacotes brutos da camada de enlace de/para o periférico vulnerável via rádio. É necessário gravar o firmware do driver na placa antes de iniciar os scripts Python 2.7.
O binário do nosso firmware está no arquivo nRF52_driver_firmware.zip. Você precisa instalar a ferramenta nrfutil para gravar o firmware na placa. Lembre-se de colocar o nRF52840 em modo DFU antes de gravar (reinicie o dongle USB enquanto ele estiver conectado ao seu PC pressionando o pequeno botão de reset).
Você pode executar os seguintes comandos para instalar as dependências do Python e gravar o firmware:
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
Os scripts funcionam no Linux ou no Windows. Você só precisa alterar o parâmetro COM_PORT para corresponder ao nome da porta do nRF52840.
Se o método de gravação anterior não funcionar, você também pode gravar o firmware usando o nRF Connect App for Desktop, que oferece uma interface prática para gravar o firmware hex (nRF52_driver_firmware.hex).
Após instalar os requisitos, você pode executar um script de exploit usando o seguinte comando:
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
O primeiro argumento é o nome da porta serial (geralmente /dev/ttyACM0 no Linux) e o segundo é o endereço do dispositivo BLE vulnerável. Você pode usar qualquer scanner BLE ou o aplicativo nRF Connect para descobrir esse endereço.
Tomando como exemplo a vulnerabilidade Key Size Overflow, o script fornece a seguinte saída se o dispositivo vulnerável travar após a falha:

Se você deseja usar o SweynTooth por meio de uma imagem Docker para evitar instalar dependências do Python, você pode usar o script auxiliar docker.sh para construir e executar a instância Docker ou baixar a imagem Docker pré-construída (link) disponível na página de releases. O uso de docker.sh está descrito abaixo.
--------- HELP -------------
sudo ./docker run <script_name> <serial_port> <ble_target_address> - Start any sweyntooth script by its name (<script_name>)
sudo ./docker build - Build docker container
sudo ./docker build release - Build docker container and create compressed image for release
sudo ./docker shell - Start docker container shell
---------- EXAMPLE ----------
./docker.sh run extras/Microchip_and_others_non_compliant_connection.py /dev/ttyACM0 f0:f8:f2:da:09:63
Cada script de exploit corresponde a uma falha. A tabela resumo a seguir mostra a correspondência entre a vulnerabilidade e um script para explorá-la nos SoCs afetados.