
Framework Man-in-the-Middle per BLE che intercetta, riproduce e modifica il traffico GATT tra dispositivi Bluetooth Smart e app mobili tramite un proxy di intercettazione basato sul web.
===================
BtleJuice è un framework completo per eseguire 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 utilizzi 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
sudo yum install bluez bluez-libs bluez-libs-devel npm
Infine, installa BtleJuice usando :
sudo npm install -g btlejuice
Se tutto è andato bene, BtleJuice è pronto all'uso!
BtleJuice è composto da due componenti principali: un proxy di intercettazione e un core. Questi due componenti devono essere eseguiti su macchine indipendenti per poter gestire simultaneamente due adattatori bluetooth 4.0+. Il proxy BtleJuice 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 <Proxy IP address> -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 modificata tramite riga di comando.
L'interfaccia web di BtleJuice fornisce nell'angolo in alto a destra una serie di collegamenti per controllare il core di intercettazione, come mostrato di seguito.

Per prima cosa, fai clic 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 nell'interfaccia principale.

Tutte le operazioni GATT intercettate vengono quindi visualizzate con i corrispondenti UUID di servizi e caratteristiche e, naturalmente, con i dati associati. I dati vengono mostrati per impostazione predefinita nel formato HexII (una variante del formato progettato da Ange Albertini), ma puoi passare da HexII a Hex (e viceversa) facendo clic sui dati stessi. BtleJuice supporta sia il formato Hex che HexII.
È possibile riprodurre qualsiasi operazione GATT facendo clic con il tasto destro su di essa e selezionando l'opzione Replay, come mostrato di seguito:


Fai clic 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 consentire la modifica dei dati al volo. Puoi utilizzare l'intercettazione globale facendo clic sul pulsante Intercept nell'angolo in alto a destra oppure usare il menu contestuale per abilitare o disabilitare un hook su un determinato servizio e caratteristica. Ogni volta che un'operazione GATT viene intercettata, verrà mostrata la seguente finestra di dialogo:

A partire dalla versione 1.0.6, l'interfaccia offre una funzionalità di esportazione dei dati che consente esportazioni leggibili e in JSON. Queste esportazioni vengono generate in base alle operazioni GATT intercettate, ma includono anche informazioni sul dispositivo target. Quando si fa clic sul pulsante Export, verrà mostrata la seguente finestra di dialogo:

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

Facendo clic sul pulsante Select Target in alto a destra quando il proxy è attivo, lo si ferma e si consente nuovamente la selezione del target.
I binding Node.js di BtleJuice possono essere installati anch'essi tramite npm:
$ sudo npm install -g btlejuice-bindings
Maggiori informazioni su come usare i binding Node.js sono disponibili nella documentazione del pacchetto.
Un ringraziamento speciale a Slawomir Jasek, che ha segnalato molti trucchi noble/bleno per evitare problemi con le applicazioni mobili e ha condiviso strategie BLE MITM durante il DEF CON 24 =). È anche l'autore di Gattacker.
Copyright (c) 2016 Econocom Digital Security
Con la presente viene concesso gratuitamente a chiunque ottenga una copia di questo software e dei relativi file di documentazione (il "Software"), il diritto di utilizzare il Software senza alcuna restrizione, inclusi, senza limitazione, i diritti di utilizzare, copiare, modificare, fondere, pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, alle seguenti condizioni:
L'avviso di copyright sopra indicato e il presente avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.
IL SOFTWARE È FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA, COMPRESE, SENZA LIMITAZIONE, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RICHIESTA, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE DI CONTRATTO, ILLECITO O ALTRO, DERIVANTE DA, IN RELAZIONE A O IN CONNESSIONE CON IL SOFTWARE O DALL'USO O DA ALTRE OPERAZIONI DEL SOFTWARE.