
PoC zur Aufnahme von Audio von einem Bluetooth-Gerät

Dieses Repository enthält die Implementierung eines Proof of Concept zum Aufzeichnen und Abspielen von Audio von einem Bluetooth-Gerät, ohne dass der legitime Benutzer davon erfährt.
Das PoC wurde im Rahmen des Vortrags BSAM: Seguridad en Bluetooth auf der RootedCON 2024 in Madrid demonstriert.
Es soll das Bewusstsein für die unsichere Nutzung von Bluetooth-Geräten und die Notwendigkeit einer konsistenten Methodik für Sicherheitsbewertungen schärfen. Genau das ist der Zweck von BSAM, der Bluetooth Security Assessment Methodology, veröffentlicht von Tarlogic und verfügbar hier.
Dieses Proof of Concept nutzt die Nichteinhaltung der BSAM-PA-05-Kontrolle innerhalb der BSAM-Methodik aus. Infolgedessen ermöglicht das Gerät den Pairing-Vorgang ohne Benutzerinteraktion und setzt seine Funktionalität jedem Akteur innerhalb der Signalreichweite aus.
Weitere Informationen in unserem Blog.
Der Code ist in Python geschrieben und wurde mit Python 3.11.8 getestet, verwendet aber hauptsächlich weit verbreitete Tools in Linux-Systemen.
Das PoC verwendet die folgenden Tools:
bluetoothctlbtmgmtpactlparecordpaplayIn Arch-Linux-Distributionen können bluetoothctl und btmgmt mit dem Paket bluez-utils installiert werden, während pactl, parecord und paplay im Paket libpulse verfügbar sind.
Damit das PoC funktioniert, ist eine funktionierende Installation des BlueZ-Bluetooth-Stacks erforderlich, der in den Arch-Linux-Distributionen im Paket bluez verfügbar ist. Außerdem ist eine funktionierende Installation eines mit PulseAudio kompatiblen Audioservers wie PipeWire erforderlich, um Audio aufzunehmen und abzuspielen.
Stellen Sie sicher, dass Ihr Gerät als Audioquelle fungieren kann, also über ein Mikrofon verfügt, und dass es über Bluetooth auffindbar und verbindbar ist.
Damit sie beispielsweise auffindbar und verbindbar sind, müssen die während des Vortrags verwendeten Ohrhörer außerhalb ihrer Ladeschale sein. Standardmäßig aktivieren sie das Mikrofon nur, wenn sie sich in den Ohren des Benutzers befinden, obwohl diese Einstellung in der Konfigurations-App angepasst werden kann.
Stellen Sie außerdem sicher, dass das Gerät nicht bereits verbunden ist oder dass es alternativ mehrere Verbindungen unterstützt.
Zunächst muss die Adresse des Geräts mit einem Tool wie bluetoothctl ermittelt werden:
$ bluetoothctl
[bluetooth]# scan on
Sobald die Adresse des Geräts ermittelt wurde, kann das Skript den Rest übernehmen:
$ python BlueSpy.py -a <address>
Hinweis: Das Skript fragt möglicherweise nach Superuser-Berechtigungen, um die Konfiguration Ihrer BlueZ-Instanz zu ändern und sie mit dem entfernten Gerät zu koppeln.
BlueSpy.py ist das Hauptskript, das jeden Schritt des Prozesses ausführt. Wenn Sie jedoch Probleme mit einer der Phasen haben, kann es hilfreich sein, diese einzeln auszuführen:
pair.py verwendet das Befehlszeilentool btmgmt, um die Konfiguration Ihres BlueZ zu ändern und einen Pairing-Prozess mit dem entfernten Gerät zu starten. Die genauen verwendeten Befehle befinden sich in der Funktion pair in core.py.connect.py verwendet das Befehlszeilentool bluetoothctl, um einen schnellen Scan (für BlueZ erforderlich) zu starten und eine Verbindung zum Gerät herzustellen. Die genauen verwendeten Befehle befinden sich in der Funktion connect in core.py.just_record.py verwendet die Befehlszeilentools pactl und parecord, um das Gerät in den Audioquellen des Systems zu suchen (es muss als Mikrofon fungieren) und eine Aufnahmesitzung zu starten. Die genauen verwendeten Befehle befinden sich in der Funktion record in core.py.Wenn Sie Probleme mit einer der Phasen haben, untersuchen Sie die Befehle in core.py und versuchen Sie, sie in einer Shell auszuführen. Dies liefert weitere Informationen darüber, was möglicherweise fehlschlägt.
Wenn Sie Fragen zur Funktionsweise des Bluetooth-Standards oder zur Bewertung der Sicherheit eines Bluetooth-Geräts haben, lesen Sie bitte unsere Webseite zur BSAM-Methodik:
playback in core.py führt paplay aus, um das aufgezeichnete Audio abzuspielen.