
PoC per registrare l'audio da un dispositivo Bluetooth

Questo repository contiene l'implementazione di una prova di concetto per registrare e riprodurre l'audio da un dispositivo Bluetooth all'insaputa dell'utente legittimo.
La PoC è stata dimostrata durante il talk BSAM: Seguridad en Bluetooth alla RootedCON 2024 a Madrid.
È progettata per aumentare la consapevolezza sull'uso non sicuro dei dispositivi Bluetooth e sulla necessità di una metodologia coerente per le valutazioni di sicurezza. Questo è lo scopo di BSAM, la Bluetooth Security Assessment Methodology, pubblicata da Tarlogic e disponibile qui.
Questa prova di concetto sfrutta la mancata conformità al controllo BSAM-PA-05 all'interno della metodologia BSAM. Di conseguenza, il dispositivo abilita la procedura di associazione senza richiedere l'interazione dell'utente ed espone le proprie funzionalità a qualsiasi agente nel raggio del segnale.
Maggiori informazioni sul nostro blog.
Il codice è scritto in Python ed è stato testato con Python 3.11.8, ma utilizza principalmente strumenti ampiamente disponibili nei sistemi Linux.
La PoC utilizza i seguenti strumenti:
bluetoothctlbtmgmtpactlparecordpaplayNelle distribuzioni Arch Linux, bluetoothctl e btmgmt possono essere installati con il pacchetto bluez-utils, mentre pactl, parecord e paplay sono disponibili nel pacchetto libpulse.
Affinché la PoC funzioni, è necessaria un'installazione funzionante dello stack Bluetooth BlueZ, disponibile nel pacchetto bluez per le distribuzioni Arch Linux. È inoltre richiesta un'installazione funzionante di un server audio compatibile con PulseAudio, come PipeWire, per registrare e riprodurre l'audio.
Assicurati che il tuo dispositivo sia in grado di funzionare come sorgente audio, ovvero che abbia un microfono, e che sia rilevabile e connettibile tramite Bluetooth.
Ad esempio, per essere rilevabili e connettibili, gli auricolari utilizzati durante il talk devono essere fuori dalla loro custodia di ricarica. Per impostazione predefinita, attivano il microfono solo quando vengono inseriti nelle orecchie dell'utente, sebbene questa impostazione possa essere modificata nell'app di configurazione.
Inoltre, assicurati che il dispositivo non sia già connesso o, in alternativa, che supporti connessioni multiple.
Innanzitutto, l'indirizzo del dispositivo deve essere scoperto utilizzando uno strumento come bluetoothctl:
$ bluetoothctl
[bluetooth]# scan on
Una volta scoperto l'indirizzo del dispositivo, lo script può gestire il resto:
$ python BlueSpy.py -a <address>
Nota: lo script potrebbe richiedere i permessi di superutente per modificare la configurazione della tua istanza BlueZ e associarla al dispositivo remoto.
BlueSpy.py è lo script principale che esegue ogni fase del processo. Tuttavia, se incontri problemi con una qualsiasi delle fasi, potrebbe essere utile eseguirle singolarmente:
pair.py utilizza lo strumento da riga di comando btmgmt per modificare la configurazione del tuo BlueZ e avviare un processo di associazione con il dispositivo remoto. I comandi esatti utilizzati si trovano nella funzione pair all'interno di core.py.connect.py utilizza lo strumento da riga di comando bluetoothctl per avviare una scansione rapida (necessaria per BlueZ) e stabilire una connessione al dispositivo. I comandi esatti utilizzati si trovano nella funzione connect all'interno di core.py.just_record.py utilizza gli strumenti da riga di comando pactl e parecord per cercare il dispositivo nelle sorgenti audio del sistema (deve funzionare come microfono) e avviare una sessione di registrazione. I comandi esatti utilizzati si trovano nella funzione record all'interno di core.py.playback all'interno di core.py esegue paplay per riprodurre l'audio catturato.Se incontri problemi con una qualsiasi delle fasi, esamina i comandi in core.py e prova a eseguirli in una shell. Questo fornirà maggiori informazioni su ciò che potrebbe fallire.
Se hai domande su come funziona lo standard Bluetooth o su come valutare la sicurezza di un dispositivo Bluetooth, fai riferimento alla pagina web della nostra metodologia BSAM: