De technologie achter rolling codes, RollJam, RollBack en relay-aanvallen
🤓
TL;DR: sleutels met rolling codes kunnen óók gekraakt worden, en met een relay-aanval is het niet eens nodig...

Goedkope of oude afstandsbedieningen/sleutels werken met één of twee codes (open en dicht), die telkens op dezelfde frequentie worden uitgezonden. Meestal zenden ze uit op 433Mhz. Open is dan 1, dicht 0. Met een goedkope radio als de Quansheng (hier heb je dus echt geen Flipper Zero voor nodig) kan je luisteren op die frequentie, opnemen, en opnieuw afspelen. Zo is zonder dat je het wist de sleutel voor jouw hek gecloned, en kan iemand met slechte intenties het hek op een moment openen wanneer je er niet bent. Dat heet een replay attack. Spreekt voor zich toch?

Daar hebben ze gelukkig wel wat op bedacht; rolling codes. Bij het maken van de zender (sleutel) en de ontvanger (auto, garagepoort, toegangsdeur) spreken de zender en de ontvanger een algoritme af, waarin volgorde een oneindige lijst van unieke codes wordt aangemaakt. Nu is het:

Stap Zender (bijv. autosleutel) Ontvanger (bijv. auto) Toelichting
1. Initiële synchronisatie Beide apparaten starten met dezelfde initiële code (bijv. 12345). Beide apparaten slaan dezelfde code op (bijv. 12345). Zowel zender als ontvanger hebben een vooraf gedeelde sleutel of algoritme om codes te genereren.
2. Knop indrukken De zender genereert een nieuwe code (67890) door de oude code te hashen. Ontvanger wacht op een overeenkomst met de gegenereerde code (67890). De nieuwe code wordt berekend op basis van de oude code met een cryptografisch algoritme.
3. Code verzenden De zender stuurt de nieuwe code (67890) naar de ontvanger via een draadloos signaal. Ontvanger ontvangt de code (67890) en vergelijkt deze met de verwachte code. De ontvanger accepteert de code alleen als deze overeenkomt met of binnen een toegestaan venster valt.
4. Validatie Geen actie (wacht op respons van de ontvanger). Ontvanger valideert de code (67890) en voert de actie uit (bijv. auto ontgrendelen). Na validatie wordt de code ongeldig gemaakt (eenmalig gebruik).
5. Synchronisatie De zender genereert alvast een nieuwe code (34567) voor de volgende keer. Ontvanger synchroniseert zichzelf om de volgende code (34567) te verwachten. Dit voorkomt dat oude codes opnieuw kunnen worden gebruikt (bescherming tegen replay-aanvallen).

Luistert er nu iemand mee bij stap 2, hoort de stiekeme luisteraar een code waar hij vanaf dat precies dat moment niks meer aan heeft.

Maar goed, hackers zouden hackers niet zijn als ze hier iets voor zouden bedenken om toch een nuttig signaal te onderscheppen...

Hoe werkt een RollJam attack?

Jamming & repeating

⚠️
We kunnen niet duidelijk genoeg zijn: probeer dit niet thuis met je eigen spullen of die van iemand anders. Je kunt met deze methode de sleutel en de ontvanger uit synchronisatie halen, en dan ben je de sjaak.

Een RollJam attack werkt door een signaal van de zender naar de ontvanger te jammen, en met een ander apparaat te luisteren naar het signaal. Zo ontvangt de ontvanger geen signaal, maar een apparaat als de HackRF One of zelfs de €40 kostende Quansheng radio wél. Die neemt dat signaal op en bewaart het voor een later moment.

Omdat het eerste signaal werd geblokkeerd, ontgrendelt de auto niet en zal de eigenaar natuurlijk opnieuw proberen. Niets geks toch? Elke sleutel doet het soms een keertje niet. Dat creëert een tweede signaal dat ook wordt opgenomen en geblokkeerd, maar dit keer speelt de aanvaller de eerste code af om de deur te ontgrendelen. De eigenaar merkt hier niets van, maar nu weet de aanvaller de volgende code in de reeks — die dus nog niet is verlopen — en kan deze op zijn gemak gebruiken om de auto te ontgrendelen op een ander moment.

Een RollJam attack werkt dus als volgt:

Stap Wat doet de eigenaar? Wat doet de aanvaller? Gevolg
1. Eerste poging De eigenaar drukt op de knop van de sleutel om de auto te ontgrendelen. Een code (code #1) wordt naar de auto verzonden. De aanvaller blokkeert het signaal van Code 1 zodat de auto het niet ontvangt en slaat deze code op. De auto blijft vergrendeld omdat het signaal is geblokkeerd. De eigenaar probeert opnieuw.
2. Tweede poging De eigenaar drukt nogmaals op de knop van de sleutel. Een nieuwe code (code #2) wordt verzonden. De aanvaller blokkeert code #2 en slaat deze op. Tegelijkertijd speelt de aanvaller code #1 af om de auto te ontgrendelen. De auto ontgrendelt met code #1, en de eigenaar merkt niets verdachts.
3. Na de aanval De eigenaar loopt weg, denkend dat de auto normaal is ontgrendeld. De aanvaller heeft nu code #2, die nog geldig is, en kan deze later gebruiken om de auto te ontgrendelen. De aanvaller heeft toegang tot de auto zonder dat de eigenaar het doorheeft.

Best slim toch? Maar om nog terug te komen op onze waarschuwing bovenaan dit artikel; de zender en ontvanger zijn gesynchroniseerd. Speelt er dus een andere code af dan de volgorde die de ontvanger verwacht? Dan zijn de sleutel en ontvanger niet meer gesynchroniseerd, en is er een grote kans dat de sleutel niet meer werkt. Een dure grap bij de autodealer kunnen wij je uit persoonlijke ervaring vertellen...

Goed, hoe beschermen fabrikanten zich tegen deze exploit? Soms hebben de codes bijvoorbeeld een houdbaarheidslimiet. De code is slechts voor een beperkte periode in tijd geldig, en kan ongeldig worden gemaakt. Dan werkt je RollJam niet en mogen de hackers weer aan tafel om iets anders te bedenken.

Wat is een RollBack attack?

Re-syncing

Een RollBack-aanval maakt gebruik van de manier waarop rolling-code-systemen omgaan met synchronisatieproblemen. Rolling-code-systemen accepteren doorgaans een reeks opeenvolgende codes (bijvoorbeeld 2 tot 5) om de sleutel en de auto opnieuw te synchroniseren als ze buiten sync raken. Deze functie, bedoeld voor gebruiksgemak, opent echter de deur voor misbruik.

Het verschil met RollJam:

  • RollJam vereist dat een aanvaller het signaal van de sleutel actief blokkeert en opslaat om op een later moment een replay-aanval uit te voeren.
  • RollBack vereist geen jamming. Het enige wat nodig is, is dat de aanvaller meerdere opeenvolgende codes onderschept (bijvoorbeeld door de sleutel te bespioneren). Met deze reeks codes kan de aanvaller het rolling-code-systeem "resyncen" en toegang krijgen tot de auto zonder dat de eigenaar het merkt.
Stap Wat doet de eigenaar? Wat doet de aanvaller? Gevolg
1. Normaal gebruik De eigenaar drukt op de knop van de sleutel om de auto te ontgrendelen. Een code (code #1) wordt naar de auto verzonden. De aanvaller onderschept code #1 zonder deze te blokkeren. De auto wordt normaal ontgrendeld, en de eigenaar merkt niets.
2. Meerdere keren drukken De eigenaar drukt meerdere keren op de knop van de sleutel (bijvoorbeeld per ongeluk of omdat de auto buiten bereik is). De aanvaller onderschept opeenvolgende codes (code #2, code #3, code #4), maar blokkeert niets. De auto blijft normaal functioneren, maar de aanvaller heeft nu een reeks geldige codes.
3. Resynchronisatie Geen actie van de eigenaar. De aanvaller gebruikt de reeks codes om het rolling-code-systeem van de auto opnieuw te synchroniseren. De auto accepteert de aanvaller als "legitieme" zender, omdat het systeem de codes als geldig beschouwt.
4. Toegang verkrijgen Geen actie van de eigenaar. De aanvaller gebruikt een opgeslagen code om op elk gewenst moment de auto te ontgrendelen. De auto blijft kwetsbaar, en de eigenaar heeft niets door.

Welke zenders en ontvangers gevoelig zijn voor deze aanval, wordt uiteraard niet geadverteerd. Maar het is een zeker zorgelijke exploit.

Relay-attack

Exploit van het keyless-entry systeem

Tot slot kijken we naar een van de meest voorkomende aanvallen die wordt toegepast bij het stelen van auto's. Deze maakt misbruik van het gemak van keyless-entry. Hierbij hoef je bij normaal gebruik jouw sleutel niet eens uit je zak te halen, maar kun je door de sleutel in de directe omgeving te hebben, het handvat van de deur aanraken, en opent de auto zichzelf. In de auto werkt het systeem verder; de auto heeft door als de sleutel in de auto is. Zo ja? Dan start de auto met de start/stop knop. In volgorde gebeurt het volgende; de eigenaar houdt zijn/haar hand tegen het portier van de auto, de auto stuurt een signaal uit om te 'vragen' of de sleutel in de buurt is, de sleutel reageert op dat signaal, en de auto opent zichzelf. PKE (Passive Keyless Entry) is dus gevoelig voor een aanval. Hoe gemakkelijker de technologie is voor de gebruiker, hoe eenvoudiger het is voor een hacker om hier misbruik van te maken.

Een relay-attack werkt door de ontvanger te laten denken dat de sleutel in de buurt is. Dit wordt gedaan door het signaal van de sleutel én de ontvanger te versterken.

Relay-attack

Deze aanval gebeurt zoals je ziet met twee personen. Terwijl de eigenaar al op afstand is, gaat één aanvaller bij de auto staan, en de ander bij de sleutel. Terwijl aanvaller #2 zijn hand op het portier houdt, krijgt die een signaal binnen dat vervolgens versterkt over 433Mhz wordt verstuurd naar aanvaller #1. Die hoeft er alleen voor te zorgen dat die dicht genoeg bij de sleutel staat, en dan gebeurt het hele proces opnieuw. De aanvallers maken gebruik van een SDR, een relay-transceiver, of hebben zelf met een Raspberry Pi iets in elkaar gesleuteld die de signalen kunnen herhalen. Je maakt het voor de dieven makkelijk als je jouw auto op de oprit laat, en je sleutels in de buurt van de voordeur hangt.

Relay attack

Jezelf beschermen tegen een relay-attack is relatief eenvoudig, maar je geeft er wel wat gemak voor op. De beste methode is natuurlijk om het keyless systeem van de auto uit te schakelen. Nu moet je de afstandsbediening zelf indrukken. Kleine moeite toch? Voor degenen die wel erg gehecht zijn aan hun keyless-entry: zorg er in ieder geval voor dat de sleutel als je thuis bent in een signaal-blokkerende omgeving is. Dit kan met een H4ck3r8r0 sleutelhoesje, of gewoon in het midden van je huis. In ieder geval niet naast je voordeur.