
Coltellino svizzero per Bluetooth Low Energy
BtleJack: un nuovo coltellino svizzero per Bluetooth Low Energy #####################################################
Btlejack fornisce tutto il necessario per sniffare, disturbare e dirottare dispositivi Bluetooth Low Energy. Si basa su uno o più dispositivi BBC Micro:Bit <http://microbit.org/>_ che eseguono un firmware dedicato. Potresti anche voler utilizzare un Adafruit Bluefruit LE sniffer <https://www.adafruit.com/product/2269>_ o un nRF51822 Eval Kit <https://www.waveshare.com/wiki/BLE400>_, dato che abbiamo aggiunto il supporto per questi dispositivi.
La versione attuale di questo strumento (2.0) supporta BLE 4.x e 5.x. Il supporto per BLE 5.x è limitato, in quanto supporta solo il PHY 1Mbps non codificato e non supporta gli aggiornamenti della mappa dei canali.
Hai bisogno di un sistema basato su UNIX (ad esempio un Raspberry Pi). Se usi un BBC Micro:Bit, avrai bisogno da uno a tre dispositivi Micro:Bit (tre dispositivi consigliati) e per ogni dispositivo una porta USB libera. Il consumo energetico di un Micro:Bit è piuttosto basso, quindi puoi usare una singola porta USB e un hub passivo per alimentare le tre unità consigliate.
Se colleghi 3 microbit contemporaneamente al tuo computer, Btlejack sarà in grado di sniffare su tutti i canali pubblicitari e avrà molte più possibilità di catturare la richiesta di connessione.
Per prima cosa, installa il software client Python3 btlejack con Pip:
::
$ sudo pip3 install btlejack
Poi, collega il tuo dispositivo Micro:Bit al computer con un cavo USB, monta il dispositivo di archiviazione di massa associato (il punto di montaggio deve contenere MICROBIT), ed esegui il seguente comando:
::
$ btlejack -i
Questo programmerà ogni dispositivo Micro:Bit collegato al tuo computer, rendendoli pronti all'uso con Btlejack. Utilizzerà la versione corretta del firmware per il software client corrente, quindi è altamente consigliato eseguire questa procedura di installazione del firmware ogni volta che aggiorni Btlejack.
Se stai usando un Bluefruit LE sniffer o un nRF51822 Eval Kit, utilizza un programmatore SWD esterno per flashare il tuo dispositivo con questo firmware <https://github.com/virtualabs/btlejack-firmware/raw/master/dist/btlejack-firmware-ble400.hex>_.
Tieni i tuoi dispositivi collegati e sei pronto!
NOTA Funziona solo con sistemi compatibili posix.
Usare Btlejack è abbastanza semplice. Btlejack può:
Btlejack normalmente cerca di rilevare e utilizzare automaticamente i dispositivi compatibili collegati (solo Micro:Bit per ora), ma poiché il firmware può essere hackerato o modificato per funzionare con altre schede basate su nRF51822, fornisce un'opzione specifica per permettere la compatibilità con questi dispositivi.
L'opzione -d ti permette di specificare uno o più dispositivi con Btlejack. Nota che questa opzione disabiliterà il rilevamento automatico dei dispositivi, e dovresti aggiungere tanti dispositivi quanti ne servono:
::
$ btlejack -d /dev/ttyACM0 -d /dev/ttyACM2 -s
Prima, trova una connessione esistente da targetizzare con btlejack:
::
$ btlejack -s BtleJack version 1.1
[i] Enumerating existing connections ... [ - 54 dBm] 0xcd91d517 | pkts: 1 [ - 46 dBm] 0xcd91d517 | pkts: 2
Il primo valore (in dBm) mostra la potenza del segnale, maggiore è questo valore, migliore sarà la connessione sniffata.
Il secondo valore (esadecimale) è l'access address associato, un valore a 32 bit che identifica un collegamento tra due dispositivi compatibili Bluetooth Low Energy.
L'ultimo valore è il numero di pacchetti visti con questo access address. Più alto è questo valore, più è probabile che il corrispondente access address sia in uso.
Poi, usa l'opzione -f per seguire una connessione specifica:
::
$ btlejack -f 0xdda4845e BtleJack version 1.1
[i] Detected sniffers:
Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0xdda4845e ... ✓ CRCInit: 0x2a035e ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 15 [i] Synchronized, packet capture in progress ... LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70 LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70
Se stai usando più di 1 microbit, Btlejack parallelizzerà alcune operazioni di sniffing per velocizzare il recupero dei parametri di connessione!
L'opzione -c supportata da btlejack ti permette di specificare l'indirizzo BD target, oppure potresti voler usare any per catturare qualsiasi nuova connessione creata.
::
$ btlejack -c any BtleJack version 1.1
[i] Detected sniffers:
Sniffer #0: version 1.1 Sniffer #1: version 1.1 LL Data: 05 22 df b4 6f 95 c5 55 c0 0a f6 99 23 40 1d 7b 2f 0a 9a f4 93 01 12 00 27 00 00 00 d0 07 ff ff ff ff 1f 0b [i] Got CONNECT_REQ packet from 55:c5:95:6f:b4:df to 40:23:99:f6:0a:c0 |-- Access Address: 0x0a2f7b1d |-- CRC Init value: 0x93f49a |-- Hop interval: 39 |-- Hop increment: 11 |-- Channel Map: 1fffffffff |-- Timeout: 20000 ms
LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 0b 06 0c 08 0f 00 09 41 LL Data: 03 06 0c 07 1d 00 d3 07
oppure potresti voler specificare l'indirizzo BD target:
::
$ btlejack -c 03:e1:f0:00:11:22
Una volta che una connessione è stata identificata tramite il suo access address, puoi disturbarla usando l'opzione -j:
::
$ btlejack -f 0x129f3244 -j̀
Btlejack è anche in grado di dirottare una connessione esistente; usa l'opzione -t per farlo. Una volta dirottata, Btlejack ti fornirà un prompt che ti permette di interagire con il dispositivo dirottato.
Prima, dirotta una connessione esistente:
::
$ btlejack -f 0x9c68fd30 -t -m 0x1fffffffff BtleJack version 1.1
[i] Using cached parameters (created on 2018-08-11 01:48:24) [i] Detected sniffers:
Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0x9c68fd30 ... ✓ CRCInit: 0x81f733 ✓ Channel map is provided: 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 9 [i] Synchronized, hijacking in progress ... [i] Connection successfully hijacked, it is all yours \o/ btlejack>
Poi usa i seguenti comandi per interagire con il dispositivo:
Comando discover ^^^^^^^^^^^^^^^^^^
Il comando discover invierà e riceverà pacchetti Bluetooth LE e recupererà tutti gli UUID dei servizi e i parametri, così come gli UUID delle caratteristiche e i parametri:
::
btlejack> discover start: 0001 end: 0005 start: 0014 end: 001a start: 0028 end: ffff Discovered services: Service UUID: 1801 Characteristic UUID: 2a05 | handle: 0002 | properties: indicate (20) \ value handle: 0003
Service UUID: 1800 Characteristic UUID: 2a04 | handle: 0019 | properties: read (02) \ value handle: 001a
Characteristic UUID: 2a00 | handle: 0015 | properties: read (02) \ value handle: 0016
Characteristic UUID: 2a01 | handle: 0017 | properties: read (02) \ value handle: 0018
Service UUID: 1824 Characteristic UUID: 2abc | handle: 0029 | properties: write indicate (28) \ value handle: 002a
Comando read ^^^^^^^^^^^^^^
Il comando read accetta un singolo parametro, l'handle di valore corrispondente alla caratteristica da cui vuoi leggere:
::
btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56
Comando write ^^^^^^^^^^^^^^^
Il comando write accetta tre parametri:
::
btlejack> write
Formati di dati supportati:
hex: dati esadecimali (es. "414261")str: stringa di testo, può essere racchiusa tra virgoletteComando ll ^^^^^^^^^^^^
Quest'ultimo comando permette di inviare PDU del livello di collegamento Bluetooth Low Energy, in forma esadecimale, come specificato nel Volume 6, Parte B, Capitolo 2.4.
Una caratteristica interessante di Btlejack è la possibilità di esportare i dati catturati in un file PCAP.
Btlejack supporta i seguenti formati DLT:
Il file di output può essere specificato usando l'opzione -o, mentre il formato di output può essere specificato con l'opzione -x. I valori validi per il formato sono: ll_phdr, nordic, o pcap (default).
::
$ btlejack -f 0xac56bc12 -x nordic -o capture.nordic.pcap
Il tipo di esportazione ll_phdr è utile quando si sniffa una connessione crittografata, poiché è supportato anche da crackle <https://github.com/mikeryan/crackle>_. Quindi, se vuoi sniffare e rompere connessioni crittografate, questa è la strada da seguire.
Potresti anche aver bisogno di dire a crackle di usare una strategia di cracking specifica, usando l'opzione -s:
::
$ crackle -i some.pcap -s 1
Btlejack utilizza una cache delle connessioni per memorizzare alcuni valori relativi alla connessione al fine di velocizzare le cose. Questa cache può causare alcuni problemi, specialmente se un access address è già stato visto in precedenza.
Questa cache può essere svuotata con l'opzione -z:
::
$ btlejack -z
Btlejack 2.0 introduce una nuova opzione -w che permette di specificare un percorso FIFO (esistente o meno) per eseguire l'analisi live dei pacchetti:
::
$ btlejack -c any -w /tmp/blepipe
Puoi persino usare un FIFO e un file di output contemporaneamente:
::
$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap
Se hai precedentemente abilitato virtual ethernet over USB (RNDIS), ad esempio per configurare un Raspberry Pi Zero W tramite USB, devi disabilitarlo di nuovo (ovvero rimuovere dtoverlay=dwc2 da boot/config.txt e modules-load=dwc2,g_ether da boot/cmdline.txt, poi sudo reboot), perché questo altrimenti interferirebbe con le connessioni USB degli sniffer.
Questa versione supporta Bluetooth Low Energy versioni 5 e 5.1 e in particolare il nuovo algoritmo di selezione dei canali introdotto nella versione 5 (CSA #2). Tuttavia, poiché l'hardware utilizzato non supporta i due nuovi PHY aggiunti dalla versione 5, sarà in grado solo di sniffare, disturbare e forse dirottare connessioni che utilizzano il PHY 1Mbps non codificato.
Si prega inoltre di notare che l'attuale implementazione di CSA #2 inclusa in Btlejack non supporta, per ora, gli aggiornamenti della mappa dei canali.
Btlejack rileva automaticamente l'algoritmo di selezione dei canali utilizzato, quindi non devi preoccuparti e cattura i pacchetti come al solito.
Sniffare una connessione BLE 5 esistente (che utilizza il PHY 1Mbps non codificato, e solo questo PHY) non è così difficile. Per prima cosa, devi specificare che vuoi targetizzare una connessione BLE 5 usando l'opzione -5. Si prega di notare che non c'è modo di sapere se una connessione esistente utilizza CSA #2 o CSA #1, quindi devi provare entrambe le tecniche finché una non funziona.
::
$ btlejack -f 0x11223344 -5
Btlejack recupererà quindi la mappa dei canali utilizzata e poi il valore dell'intervallo di salto:
::
$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160
Poi proverà a recuperare il valore del contatore PRNG di questa connessione:
::
$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160 ✓ CSA2 PRNG counter = 5137 [i] Synchronized, packet capture in progress ...
Una volta fatto, Btlejack è sincronizzato con questa connessione e processerà i pacchetti come al solito.
Niente di nuovo qui, tranne che devi specificare che stai attaccando una connessione BLE 5, usando l'opzione -5.
Si prega di notare che puoi ottimizzare questo attacco specificando anche la mappa dei canali e il valore dell'intervallo di salto da usare, utilizzando rispettivamente i flag -m e -p. Entrambi DEVONO essere forniti, altrimenti non funzionerebbe.
Non sono riuscito a dirottare una connessione BLE 5 in questo momento, poiché questo attacco è sensibile al tempo. I miei dispositivi BLE 5 usano una latenza di 0, quindi non consentono alcun ritardo e causano il fallimento di questo attacco.
Quando avrò tra le mani alcuni legittimi dispositivi BLE 5, migliorerò questa funzionalità.