- Vor dem Hintergrund der Kontroverse um ein Verbot des Flipper Zero in Kanada werden RF-Signale von Autoschlüssel-Fobs praktisch erfasst und analysiert, um zu prüfen, wie weit einfache Replay-Angriffe tatsächlich reichen
- RTL-SDR kann Roh-I/Q-Daten im Bereich von 24 bis 1750 MHz empfangen und visualisieren, speichern und analysieren; der CC1101 des Flipper Zero kann zwar senden und empfangen, benötigt dafür aber die richtigen RF-Einstellungen
- Bei 433,92 MHz waren bei jedem Tastendruck drei kurze Bursts zu sehen; die zwei Peaks auf beiden Seiten der Mittenfrequenz werden als 2-FSK interpretiert, bei dem 0 und 1 auf unterschiedlichen Frequenzen übertragen werden
- In Universal Radio Hacker zeigten sich nach Anwendung von FSK, 50 samples/symbol und Manchester-II-Decoding eine lange Burst-Phase ohne Daten, drei Hauptpakete und ein kurzes finales Paket
- Im Signal wurden ein Bereich hoher Entropie für den Rolling Code, ein inkrementierender Counter, Befehlsbytes für lock/unlock, Paket-Sequenznummern, eine XOR-Checksumme und ein Syncword identifiziert, was zur Schlussfolgerung führt, dass die meisten Autos durch bloßes Replay nur schwer zu stehlen sind
Ziel und Kontext des Experiments
- Seit einigen Jahren werden mit einem RTL-SDR-Dongle drahtlose Kommunikationsprotokolle untersucht; diesmal liegt der Fokus darauf, wie ein Autoschlüssel-Fob Daten überträgt und ob Replay-Angriffe möglich sind
- Auch früher wurden bereits Schlüssel-Fob-Signale erfasst, doch der Zugang zu einem testbaren Auto war begrenzt, sodass keine aussagekräftige Analyse möglich war
- Dieses Experiment dient als Vorbereitung, um ein Schlüssel-Fob-Signal tatsächlich zu reverse-engineeren und wiederzugeben, und folgt dabei den grundlegenden RF-Konzepten bis zum Analyseablauf
- Behandelt wird auch die Einschätzung, dass die meisten Autos — anders als es das kanadische Flipper-Zero-Verbot nahelegt — nicht einfach nur per Replay-Angriff zu stehlen sind
- Als Ausnahme im Zusammenhang mit Honda wird RollingPwn erwähnt
Verwendete Hardware
-
RTL-SDR
- Ein etwa 10 US-Dollar teurer USB-Dongle für terrestrisches TV/Radio lässt sich in einen Mehrzweck-RF-Empfänger verwandeln, mit dem Signale im Bereich von 24 bis 1750 MHz untersucht und dekodiert werden können
- RTL-SDR ist dank des RTL2832U-Chips leistungsfähig, der SDR ermöglicht
- Die normalerweise in Hardware erledigte Signalverarbeitung kann umgangen werden, sodass der Host direkten Zugriff auf rohe I/Q-Daten erhält
- Mit Rohdaten lassen sich Signale empfangen, visualisieren, speichern und anschließend selbst analysieren, ohne die konkreten Einstellungen wie Modulationsart, Bandbreite oder Datenrate vorab zu kennen
-
Flipper Zero und CC1101
- Der für dieses Experiment wichtige Teil des Flipper Zero ist das Sub-GHz-Modul
- Dieses Modul basiert auf dem CC1101-Chip und unterstützt Frequenzen unter 1 GHz, wie sie in vielen Consumer-Funkgeräten genutzt werden
- CC1101-Module können auch separat für mehr als 5 US-Dollar gekauft und mit Arduino, Raspberry Pi oder USB-to-TTL-Adaptern verwendet werden
-
Unterschiede zwischen CC1101 und RTL2832U
- Der CC1101 im Flipper Zero ist ein Transceiver und kann daher Signale sowohl senden als auch empfangen
- Der RTL2832U im RTL-SDR kann empfangen und rohe Signale analysieren, aber nicht senden
- Da der CC1101 kein SDR unterstützt, liefert er nur vollständig verarbeitete Daten zurück; nützlich ist das nur, wenn die RF-Einstellungen des gesendeten Signals stimmen
- Es gibt auch SDR-Geräte, die senden und empfangen können, sie sind jedoch vergleichsweise teuer
Grundkonzepte zum Lesen von RF-Signalen
- Funkübertragungen senden Signale über elektromagnetische Wellen, also Radiowellen
- Um die Zuverlässigkeit der Übertragung durch die Luft zu erhöhen, wird eine Trägerwelle mit höherer Frequenz als das eigentlich zu übertragende Signal verwendet
- Die Frequenz bezeichnet, wie oft die Trägerwelle pro Sekunde auftritt, und wird üblicherweise zur Definition eines Kommunikationskanals verwendet
- Modulation ist die Art und Weise, wie Daten in Radiowellen dargestellt werden
- AM stellt Daten über Änderungen der Amplitude dar
- FM stellt Daten über Änderungen der Frequenz dar
- Die Bandbreite ist der Frequenzbereich, den ein moduliertes RF-Signal belegt, und steht in Zusammenhang mit der Datenmenge, die das Signal tragen kann
Mit SDR# beobachtetes Schlüssel-Fob-Signal
-
Tools und Frequenz
- SDR# ist eine kostenlose DSP-Anwendung in C#, die Echtzeit-Spektrumvisualisierung für SDRs und Demodulation einiger gängiger Modulationsarten unterstützt
- Der RTL-SDR-Dongle wird angeschlossen und statt des standardmäßigen DVB-T-Treibers der WinUSB-Treiber verwendet
- Wenn man auf 433,92 MHz abstimmt, lässt sich Aktivität von Fernbedienungen in der Nähe beobachten
- 433,92 MHz wird als standardisierte, lizenzfreie Frequenz vorgestellt, die in der EU und umliegenden Ländern sowie am Wohnort Marokko verwendet wird
-
Beobachtetes Muster
- Bei jedem Druck auf eine Taste des Autoschlüssel-Fobs entstehen drei kurze Bursts hintereinander
- Auf beiden Seiten der 433,92-MHz-Mitte des Spektrums erscheinen zwei große Peaks
- Nach Prüfung gängiger Modulationsarten scheint diese Form zu 2-FSK zu passen
- Die kleineren Peaks auf dem Bildschirm werden als unerwünschte Frequenzen betrachtet, die durch günstige Sendehardware und den kurzen Abstand zwischen Fernbedienung und Antenne entstehen, und ignoriert
-
Interpretation als 2-FSK
- FSK steht für Frequency-Shift Keying und ist eine Frequenzmodulation, bei der Daten kodiert werden, indem die Trägerfrequenz zwischen mehreren diskreten Frequenzen gewechselt wird
- Die „2“ in 2-FSK bezeichnet die Anzahl der für die Kodierung verwendeten Kanäle
- In diesem Fall werden 0 und 1 über zwei unterschiedliche Frequenzen kodiert, was die beobachteten zwei Peaks erklärt
Bits und Bytes mit Universal Radio Hacker extrahieren
-
Analyse mit URH
- Universal Radio Hacker ist eine Open-Source-Tool-Sammlung zur Untersuchung von Funkprotokollen und unterstützt mehrere SDRs direkt
- URH bietet Signaldemodulation und automatische Erkennung von Modulationsparametern und wird genutzt, um die über die Luft übertragenen Bits und Bytes zu identifizieren
- Anfangs wurden wegen falsch erkannter Parameter falsche Ergebnisse geliefert
- Nachdem mehrere wiederholte Signale auf einmal aufgezeichnet wurden, stieg die Erfolgsrate der automatischen Erkennung; in diesem Fall erwiesen sich 50 samples/symbol, FSK als passende Einstellung
-
Burst-Struktur und Manchester-Decoding
- Beim Hineinzoomen in das Signal bestätigen sich die drei bereits in SDR# gesehenen Bursts
- Der zweite Burst besteht wiederum aus drei getrennten Teilen, sodass insgesamt fünf Abschnitte zu analysieren sind
- Nachdem aus jedem Abschnitt automatisch Bitfolgen extrahiert und in Hexadezimaldarstellung umgewandelt wurden, zeigten sich Wiederholungsmuster; da jedoch dieselben fünf Hex-Zahlen und viele
0x55-Bytes wiederholt auftraten, war weitere Verarbeitung nötig - Beim Ausprobieren mehrerer Decoding-Algorithmen im Analysis-Tab von URH wandelte Manchester II die
0x55-Bytes in null um, ohne Decoding-Fehler zu erzeugen
-
Rolle der Manchester-Kodierung
- Manchester ist ein einfaches digitales Modulationsverfahren, das verhindert, dass ein Signal lange in einem logischen Low- oder High-Zustand verharrt
- Es wandelt ein Datensignal in ein kombiniertes Daten- und Synchronisationssignal um und ist daher nützlich für clock recovery
- Da analoge Medien anfällig für Rauschen und Interferenzen sind, helfen solche Eigenschaften beim Senden digitaler Daten
- Bei Manchester werden Binärdaten in zwei einander entgegengesetzte Bits kodiert
- Beispiel:
0wird zu01,1zu10, oder je nach Konvention umgekehrt
Paketstruktur und vermuteter Rolling Code
-
Struktur pro Tastendruck
- Ein manueller Vergleich mehrerer Aufzeichnungen zeigt, dass jeder Tastendruck eine feste Struktur hat
- Es gibt einen langen Burst ohne Nutzdaten, der nach dem Decoding 100 Null-Bytes ergibt
- Es gibt drei Bursts, die einander sehr ähnlich sind, sich aber teilweise in 2 Bytes unterscheiden
- Danach folgt ein finaler Burst, der den vorherigen drei recht ähnlich, aber kürzer ist
- Die mittleren drei Bursts werden als zentrale Pakete betrachtet und genauer analysiert
- Es wurde eine inkrementierende ID gefunden, die bei jedem neuen Signal um 1 zu steigen scheint
-
Rolling-Code-Mechanismus
- Rolling Codes werden in Keyless-Entry-Systemen verwendet, um einfache Replay-Angriffe zu verhindern
- Sie verhindern, dass ein Angreifer eine Übertragung aufzeichnet und später wiedergibt, um den Empfänger zum Entriegeln zu bringen
- Auto und Fernbedienung einigen sich auf einen kryptografisch sicheren Algorithmus, um den für die Authentifizierung verwendeten Rolling Code zu erzeugen
- Der Schlüssel wird mithilfe eines Counters erzeugt und nachverfolgt; die Counter von Fernbedienung und Auto müssen synchron bleiben
- Ein Gültigkeitsfenster sorgt dafür, dass die Fernbedienung nicht aus der Synchronisation gerät, auch wenn das Auto ein Signal nicht empfängt
- Viele Implementierungen erlauben bis zu 255 Tastendrücke außerhalb der Reichweite; danach muss die Fernbedienung manuell neu synchronisiert werden
-
Identifizierte Signalfelder
- Da der Rolling Code kryptografisch sicher ist, wird der Bereich mit der höchsten Entropie im Signal als zu dieser Implementierung gehörender Bereich identifiziert
- Die zuvor gefundene inkrementierende ID wird als Counter des Rolling-Code-Systems vermutet
- Beim Vergleich von lock- und unlock-Signalen wurde das Byte identifiziert, das den Befehl darstellt
8= unlock4= lock
Sequenznummer, Checksumme und Syncword
-
Wert, der wie eine Paket-Sequenznummer aussieht
- Einer der verbleibenden variablen Bereiche zeigt auch in anderen erfassten Signalen dieselben wiederkehrenden Werte
- Betrachtet man die drei Werte binär, steigen die höherwertigen Bits wie eine Sequenznummer an
0x6:01100xA:10100xE:1110- Bezieht man das vierte finale Paket ein, ergibt sich mit
0x13:10011 eine Form, die zur Interpretation als Paket-Sequenznummer passt - Die Änderung des niederwertigsten Bits wird bei dieser Bewertung ausgeklammert
-
XOR-Checksumme
- Das letzte Byte ändert sich von Paket zu Paket und wirkt auch zwischen vollständigen Signalen zufällig
- Da es das letzte Byte eines Pakets ist und unregelmäßig variiert, könnte es eine Checksumme sein
- XORt man dieses Byte mit dem zuvor analysierten Sequenznummer-Byte, ergibt sich in den jeweiligen Beispielen ein fester Wert
- Beispiel 1:
0x06 ^ 0xB9 = 0xBF0x0A ^ 0xB5 = 0xBF0x0E ^ 0xB1 = 0xBF
- Beispiel 2:
0x06 ^ 0xCC = 0xCA0x0A ^ 0xC0 = 0xCA0x0E ^ 0xC4 = 0xCA
- Wendet man XOR auf alle Paketbytes an, liegt der Wert stets um 1 daneben; daher ist es wahrscheinlich, dass die ersten 2 Bytes von der Checksumme ausgenommen sind
- Die ersten 2 Bytes werden als Syncword interpretiert, das den Empfänger synchronisiert und den Beginn der Daten markiert
Finale Signalstruktur und nächste Schritte
- Der anfängliche lange Burst dient dazu, den Funkempfänger aus einem Low-Power-Modus im Leerlauf aufzuwecken und auf den Datenempfang vorzubereiten
- Dass die Fernbedienung drei Pakete mit nahezu denselben Daten sendet, erhöht die Zuverlässigkeit für den Fall, dass eine Übertragung beschädigt wird
- Das finale Labeling interpretiert das Signal des Autoschlüssel-Fobs als aufgeteilt in Syncword, Rolling-Code-bezogenen Bereich, Counter, Befehlsbyte, Paket-Sequenznummer und XOR-Checksumme
- Der nächste Schritt besteht darin, dieses Signalformat in den Flipper Zero zu integrieren, um Lesen, Reserialisierung und Replay zu unterstützen
- Bei ungenauen Informationen oder Verbesserungsmöglichkeiten kann auf GitHub ein pull request geschickt werden
1 Kommentare
Kommentare auf Hacker News
Ich musste wegen eines Elektronikprojekts eine günstige Auto-Schlüsselfernbedienung von AliExpress reverse-engineeren, und nur mit einem Oszilloskop und Wikipedia konnte ich es nach langem Dranbleiben schaffen.
Beim nächsten Mal will ich die Methode aus diesem Blogbeitrag ausprobieren und ein besserer Hacker werden.
Es gibt auch einen GNU-Radio-Flowgraph für einen ähnlichen Zweck: https://github.com/bastibl/gr-keyfob
Präsentationsfolien: https://www.fleark.de/keyfob.pdf
Wenn Fernbedienung und Auto per Zähler Schlüssel erzeugen und verfolgen, um synchron zu bleiben, habe ich mich immer gefragt, wie lernende Fernbedienungen das umgehen.
Mein Auto hat ein paar eingebaute Garagentor-Tasten, und ich meine, ich habe sie eingerichtet, indem ich das Auto in den Lernmodus versetzt und dann die Taste auf der Garagen-Fernbedienung gedrückt habe. Ich frage mich, ob das nicht einfaches Replay ist, sondern eine viel komplexere Funktion: Signal decodieren, Typ erkennen und dann ein Pairing mit dem Öffner starten.
Soweit ich es verstehe, arbeiten sie mit mehreren Firmen zusammen, unterstützen feste Codes und Rolling Codes und ermöglichen das Pairing mit dem jeweiligen Garagentor. Chamberlain[0], der größte Garagentorhersteller in den USA, besitzt mehrere Marken und verwendet bekannte Rolling-Code-Algorithmen, die decodierbar sind[1].
[0] https://www.chamberlain.com/
[1] https://github.com/argilo/secplus
Der Vorgang ist eher so, als würde man dem Öffner sagen: „Hörst du diese neue Fernbedienung? Sie soll das Tor auch öffnen dürfen.“ Die Taste im Auto scheint ein paar gängige Protokolle durchzuschalten; realistisch dürften in den USA vor allem etwa 4 bis 5 aus den Familien Chamberlain/Liftmaster oder Genie weit verbreitet sein.
Eine lernende Fernbedienung für solche Systeme kann schon funktionieren, indem sie das aufgezeichnete Signal unverändert wiedergibt. Wenn bei der Aufnahme aber andere Signale im selben Band dazwischenkommen, etwa eine drahtlose Türklingel, können auch diese fälschlich mit abgespielt werden. Deshalb braucht man mindestens eine Verarbeitung, die nur den eigentlichen Tor-Signalteil herausschneidet; besser ist es, das Signal zu decodieren, den Code zu ermitteln und dann jedes Mal ein sauberes neues Signal zu erzeugen.
Fast alle Hersteller von Garagentoröffnern für Privathaushalte in den USA haben ihre neuen Modelle in den 1990er-Jahren auf Rolling Codes umgestellt. Wenn die Installation also nicht deutlich älter als etwa 25 Jahre ist, verwendet sie ziemlich sicher Rolling Codes. Typischerweise erzeugt die Fernbedienung eine Pseudozufallsfolge mit einem Seed und sendet bei jedem Tastendruck den nächsten Wert; das Gerät sieht im Lernmodus einige aufeinanderfolgende Werte und schätzt daraus den Seed, um die Fernbedienung zur Liste hinzuzufügen.
Im Betrieb decodiert das Gerät den empfangenen Folgenwert und prüft, ob er bei einer bekannten Fernbedienung im erwarteten Bereich liegt. Wenn ja, öffnet es das Tor und aktualisiert die Position dieser Fernbedienung. Es gibt auch etwas Spielraum, damit das Tor nicht plötzlich nicht mehr aufgeht, wenn ein Kind unterwegs mehrmals auf die Taste drückt.
Eine lernende Fernbedienung, die eine vorhandene Rolling-Code-Fernbedienung klont, ist prinzipiell ebenfalls möglich. Aus Sicht des Geräts sind Kopie und Original dann aber dieselbe Fernbedienung. Wenn eine der beiden lange nicht benutzt wird und die andere die Folge außerhalb des Toleranzfensters weitergeschoben hat, kann eine davon nicht mehr funktionieren; auch ein erneutes Pairing kann je nach Implementierungsdetails des Systems durcheinandergeraten.
Die Universalfernbedienungen für Rolling Codes, die ich tatsächlich gesehen habe, lernten nicht von einer vorhandenen Fernbedienung. Stattdessen teilte man der Fernbedienung den Typ des Geräts mit und koppelte sie dann wie eine Herstellerfernbedienung neu mit dem Gerät. Da die Benutzeroberfläche dürftig ist, läuft es wahrscheinlich so ab, dass man in einer Tabelle im Handbuch eine Nummer nachschlägt, eine versteckte Taste drückt und dann die zu programmierende Taste entsprechend oft betätigt.
Es wäre schön, automatisch anhand des Signals einer vorhandenen Fernbedienung zu erkennen, welches Rolling-Code-System es ist. Dafür bräuchte man aber einen Empfänger, der außer für diesen Zweck kaum Nutzen hat und sich daher schwer rechtfertigen lässt. Pairing und Öffnungs-/Schließbefehle bei Garagentoren sind im Grunde Einweg-Kommunikation von der Fernbedienung zum Gerät.
Der Autor hat zwar alles decodiert, aber die Autotür nicht tatsächlich geöffnet. Dafür müsste noch der Rolling Code geknackt werden, und einfach 1 zu addieren und erneut zu senden funktioniert nicht.
Von außen betrachtet sollte der nächste Rolling Code wie zufällig aussehen.
Ich wünschte, Autohersteller würden anfangen, sehr kleine, vielleicht RFID-Fernbedienungen zu bauen, die in die Geldbörse passen.
Oder ich hoffe, dass ein kleines Flipper-ähnliches Gerät im Kreditkartenformat dasselbe erledigt. Ernsthaft: Der Autoschlüssel ist nach dem Handy das größte Ding in meiner Tasche und zumindest von der Dicke her ziemlich störend.
Es war erfrischend, nach langer Zeit mal wieder einen verständlichen Artikel zu lesen.
Interessant ist, dass mit dem leichteren Zugang zu Key-Programming-Equipment die Berechtigung zur Schlüsselprogrammierung hinter stärkere „Sicherheit“ wandert.
Was Teil eines „Sicherheits“-Systems ist, entscheidet der Hersteller, und das kann sich nicht nur auf Schlüssel, sondern auch auf zahlreiche Module ausweiten. Ob das bei Kriminellen, die bekanntlich sehr regelkonform sind, Wirkung zeigt, ist umstritten (/s), aber einige Anbieter trifft es definitiv.
Wer vorbestraft ist, kann von der Teilnahme ausgeschlossen werden. Nach verbüßter Strafe den Weg in die Selbstständigkeit zu finden und damit Erfolg zu haben, ist für ehemalige Straftäter einer der wichtigen Wege; unter diesem System kann das sehr schwierig werden.
https://wp.nastf.org/?page_id=367
https://wp.nastf.org/wp-content/uploads/2023/07/ApplicationC...
Muss man das Signal wirklich abfangen, decodieren und wieder encodieren? Mit einer großen Antenne kann man einen Man-in-the-Middle-Angriff zwischen Schlüsselfernbedienung und Fahrzeug durchführen und beide glauben lassen, sie seien näher beieinander.
Heutzutage kann man, sobald man nur ins Auto gelangt, mit einem OBD-Tool einen neuen Schlüssel programmieren und einfach wegfahren. Das ist viel interessanter und ernsthaft unsicherer.
Auch ein Standard-Flipper kann Rohsignale empfangen.
Vielleicht kann man ihn dazu bringen, demodulierte rohe FSK- oder OOK-Daten ohne weitere Verarbeitung auszugeben, aber wirklich rohe IQ-Samples zu bekommen, erscheint mir sehr fragwürdig.