
Prova di concetto delle vulnerabilità Sweyntooth Bluetooth Low Energy (BLE).
Questo repository fa parte di un risultato di ricerca dell'ASSET Research Group.

SweynTooth cattura una famiglia di 18 vulnerabilità in diversi kit di sviluppo software (SDK) Bluetooth Low Energy (BLE) di sei importanti produttori di system-on-a-chip (SoC). Le vulnerabilità espongono difetti in specifiche implementazioni BLE SoC che consentono a un attaccante nel raggio radio di innescare deadlock, crash e buffer overflow o di bypassare completamente la sicurezza, a seconda delle circostanze. (Aggiornamento) Abbiamo anche incluso uno script di test per verificare i dispositivi contro la variante BLE KNOB.
Puoi trovare maggiori informazioni sulle vulnerabilità, le patch disponibili e i dispositivi interessati sul sito di divulgazione SweynTooth dell'ASSET Research Group.
Fitbit, August Smart Lock, Eve Energy, CubiTag e altri dispositivi "Smart" sono interessati.
Questo PoC utilizza librerie ben mantenute come Scapy e Colorama. La creazione e l'analisi dei pacchetti BLE vengono eseguite tramite livelli di protocollo Scapy personalizzati (bluetooth4LE e bluetooth.py). C'è un merge in corso per includere le nostre aggiunte nel repository principale di Scapy.
Per prima cosa, devi assicurarti di avere Python2.7 sul tuo sistema e i pacchetti Python elencati nel file requirements.txt.
Se stai usando Ubuntu, esegui quanto segue:
sudo apt-get install python2.7
sudo pip install -r requirements.txt
In secondo luogo, SweynTooth utilizza il Nordic nRF52840 Dongle per inviare/ricevere pacchetti grezzi del link layer da e verso la periferica vulnerabile via radio. È necessario flashare il firmware del driver sulla scheda prima di avviare gli script Python 2.7.
Il binario del nostro firmware si trova nel file nRF52_driver_firmware.zip. Devi installare lo strumento nrfutil per flashare il firmware sulla scheda. Ricorda di mettere l'nRF52840 in modalità DFU prima del flashing (resetta il dongle USB mentre è collegato al PC premendo il piccolo pulsante di reset).
Puoi eseguire i seguenti comandi per installare le dipendenze Python e flashare il firmware:
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
Gli script funzionano su Linux o Windows. Devi solo modificare il parametro COM_PORT per farlo corrispondere al nome della porta nRF52840.
Se il metodo di flashing precedente non ha funzionato, puoi anche flashare il firmware utilizzando la nRF Connect App for Desktop, che offre una bella interfaccia per flashare il firmware hex (nRF52_driver_firmware.hex).
Una volta installati i requisiti, puoi eseguire uno script di exploit con il seguente comando:
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
Il primo argomento è il nome della porta seriale (generalmente /dev/ttyACM0 su Linux) e il secondo è l'indirizzo del dispositivo BLE vulnerabile. Puoi usare qualsiasi scanner BLE o la nRF Connect App per scoprire tale indirizzo.
Prendendo come esempio la vulnerabilità Key Size Overflow, lo script fornisce il seguente output se il dispositivo vulnerabile si blocca dopo il crash:

Se desideri usare SweynTooth tramite un'immagine docker per evitare di installare le dipendenze Python, puoi usare lo script di supporto docker.sh per creare ed eseguire l'istanza docker oppure scaricare l'immagine docker precompilata (link) disponibile nella pagina delle release. L'utilizzo di docker.sh è descritto di seguito.
--------- 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
Ogni script di exploit corrisponde a un difetto. La seguente tabella riassuntiva mostra la corrispondenza tra la vulnerabilità e uno script per sfruttare la vulnerabilità sui SoC interessati.