
BtleJuice framework Man-in-the-Middle per Bluetooth Smart (LE)
BtleJuice è un framework completo per effettuare attacchi Man-in-the-Middle su dispositivi Bluetooth Smart (noti anche come Bluetooth Low Energy). È composto da:
Installare BtleJuice è un gioco da ragazzi. Prima di tutto, assicurati che il tuo sistema usi una versione recente di Node.js (>=4.3.2) e npm. Quindi, assicurati di installare tutte le dipendenze richieste:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
### Fedora / Altre basate su RPM
sudo yum install bluez bluez-libs bluez-libs-devel npm
Infine, installa BtleJuice usando npm:
sudo npm install -g btlejuice
Se tutto è andato bene, BtleJuice è pronto per l'uso!
BtleJuice è composto da due componenti principali: un proxy di intercettazione e un core. Questi due componenti devono essere eseguiti su macchine indipendenti per utilizzare contemporaneamente due adattatori bluetooth 4.0+. BtleJuice Proxy non funziona in un contenitore Docker.
L'uso di una macchina virtuale può aiutare a far funzionare questo framework su un singolo computer.
Dalla tua macchina virtuale, installa btlejuice e assicurati che il tuo adattatore USB BT4 sia disponibile dalla macchina virtuale:
$ 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
Quindi, assicurati che la tua macchina virtuale abbia un indirizzo IP raggiungibile dall'host.
Avvia il proxy nella tua macchina virtuale:
$ sudo btlejuice-proxy
Sulla tua macchina host, non dimenticare di fermare il servizio bluetooth e assicurati che il dispositivo HCI rimanga aperto/inizializzato:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
Infine, esegui il seguente comando sulla tua macchina host:
$ sudo btlejuice -u <Indirizzo IP Proxy> -w
Il flag -w dice a BtleJuice di avviare l'interfaccia web mentre l'opzione -u specifica l'indirizzo IP del proxy.
L'interfaccia utente web è ora disponibile all'indirizzo http://localhost:8080. Nota che la porta del server web può essere cambiata tramite riga di comando.
L'interfaccia web di BtleJuice fornisce nell'angolo in alto a destra un insieme di link per controllare il core di intercettazione, come mostrato di seguito.

Prima, clicca sul pulsante Select target e apparirà una finestra di dialogo che mostra tutti i dispositivi Bluetooth Low Energy disponibili rilevati dal core di intercettazione:

Fai doppio clic sul target desiderato e attendi che l'interfaccia sia pronta (l'aspetto del pulsante bluetooth cambierà). Una volta che il dispositivo fittizio è pronto, usa l'applicazione mobile associata o un altro dispositivo (a seconda di ciò che ci si aspetta) per connetterti al dispositivo fittizio. Se la connessione riesce, un evento Connected verrà mostrato sull'interfaccia principale.

Tutte le operazioni GATT intercettate vengono quindi visualizzate con i corrispondenti UUID dei servizi e delle caratteristiche, e ovviamente i dati associati. I dati vengono mostrati di default in formato HexII (una variante del formato ideato da Ange Albertini), ma puoi passare da HexII a Hex (e viceversa) cliccando sui dati stessi. Entrambi i formati Hex e HexII sono supportati da BtleJuice.
È possibile riprodurre qualsiasi operazione GATT facendo clic destro su di essa e selezionando l'opzione Replay, come mostrato di seguito:


Clicca sul pulsante Write (o Read) per riprodurre la corrispondente operazione GATT. Questa operazione verrà registrata nell'interfaccia principale.
Ultimo ma non meno importante, l'interfaccia può intercettare localmente o globalmente qualsiasi operazione GATT e permettere la modifica dei dati al volo. Puoi usare l'intercettazione globale cliccando sul pulsante Intercept nell'angolo in alto a destra o usare il menu contestuale per abilitare o disabilitare un hook su un determinato servizio e caratteristica. Ogni volta che un'operazione GATT viene intercettata, apparirà la seguente finestra di dialogo:

Dalla versione 1.0.6, l'interfaccia fornisce una funzionalità di esportazione dati che permette esportazioni in formato leggibile e JSON. Queste esportazioni sono generate in base alle operazioni GATT intercettate, ma includono anche informazioni sul dispositivo target. Quando si clicca sul pulsante Export, apparirà la seguente finestra di dialogo:

Clicca sul pulsante Export in fondo alla finestra di dialogo per scaricare una versione JSON (o testo) dei dati intercettati.
La finestra delle impostazioni offre al momento una singola opzione che permette di riconnettere automaticamente il proxy quando il dispositivo target si disconnette. Questo può essere utile quando si ha a che fare con dispositivi attivi per un breve periodo di tempo.

Cliccando sul pulsante Select Target in alto a destra quando il proxy è attivo lo fermerà e permetterà di selezionare nuovamente il target.
I binding Node.js di BtleJuice possono essere installati anche tramite npm:
$ sudo npm install -g btlejuice-bindings
Maggiori informazioni su come usare i binding Node.js nella documentazione del pacchetto.
Un ringraziamento speciale a Slawomir Jasek che ha segnalato molti trucchi di noble/bleno per evitare problemi con le applicazioni mobili, e ha condiviso strategie MITM BLE durante il DEF CON 24 =). È anche l'autore di Gattacker.
Copyright (c) 2016 Econocom Digital Security
Con la presente viene concessa, gratuitamente, a qualsiasi persona che ottenga una copia di questo software e dei file di documentazione associati (il "Software"), l'autorizzazione a utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software, e a consentire alle persone a cui il Software viene fornito di fare altrettanto, alle seguenti condizioni:
L'avviso di copyright sopra riportato e il presente avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.
IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA, IVI INCLUSE, MA NON LIMITATE, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN FINE PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, ILLECITO O ALTRO, DERIVANTE DA, O IN CONNESSIONE CON, IL SOFTWARE O L'USO O ALTRE OPERAZIONI CON IL SOFTWARE.