Proxmark3 Brute-Force – ProxBrute
Vandaag gaan we kijken hoe we een RFID tag kunnen brute-forcen. De Proxmark3 biedt standaard al diverse opties op LF en HF tags te lezen en schrijven. Als bepaalde blokken op de tag echter voorzien zijn van een leesbeveiliging is het zaak dat je de key weet. Weet je deze niet en kun je deze ook niet achterhalen dan kun je altijd nog proberen de communicatie tussen tag en reader af te luisteren om zo de keys te achterhalen. Als ook dat faalt heb je nog 1 optie, en dat is brute forcen die hap.
De brute-force aanval met ProxBrute maakt het mogelijk om via een achterhaalde key van een geldige kaart een andere kaart te “kraken”.
Deze code kan dan worden gebruikt om fysieke privileges verticaal of horizontaal te verhogen. Stel je voor dat je een kaart kunt scannen welke toegang geeft tot een openbare ruimte. Maar je wilt ook toegang tot een gesloten ruimte waar die tag geen toegang toe geeft. In dat geval kun je ProxBrute gebruiken via een achterhaalde code van de openbare kaart de code te achterhalen van de kaart welke meer privileges geeft. Hoewel de naam anders doet vermoeden zal ProxBrute niet de sitecode alswel de kaart bute-forcen. ProxBrute begint het met de waarde van een geldige kaart, haalt hiervan de key op en verlaagt het kaartnummer totdat hij 0x00000000 bereikt. Deze aanpak is gekozen omdat het brute-forcen van de volledige sleutellengte een lange tijd zou duren. Het is daarom waarschijnlijk dat je meer geluk hebt als je al een geldige key hebt. De volledige sleutelruimte voor een 26-bits key en kaartnummer is 2 ^ 8 * = 67.108.864 mogelijkheden. Het duurt ongeveer 1 seconde per poging en dus zou je voor een volledige brute-force 776 dagen bezig zijn.
Wanneer je een nieuwe set kaarten koopt, wordt je gevraagd een key code te leveren
en een startnummer voor de kaarten. Vaak zullen kaartnummers sequentieel verlopen of op basis van een voorspelbaar algoritme. Bijvoorbeeld, de kaartnummers beginnen bij 0x00000001. Als je nu elke mogelijke site-ID, (256 mogelijke waarden), met het kaartnummer 0x00000001 raadt kun je binnen 5 minuten elk kaartnummer met bijbehorende key identificeren.
ProxBrute is geen aanval die de default Proxmark3 firmware huisvest en dus moeten we de Proxmark3 firmware gaan flashen alvorens we een brute-force aanval kunnen doen. Dit gaan we doen met de ProxBrute firmware. Dit proces is als volgt.
De nieuwste Proxmark3 apparaten werken met de CDC interface en niet met de oudere lib32 USB interface. Laten we de juiste (nieuwste) ProxBrute firmware downloaden. Dit kunnen we doen vanaf de originele repository: https://github.com/brad-anton/proxbrute.
Maar op de ExploitAgency Github pagina vinden we meerdere firmware varianten incl. een flash utility, Windows flasher etc. Ik kies voor deze repository. In dit voorbeeld gebruiken we Windows waarbij de basis applicatie aanwezig is in C:\Proxmark3.
Download de ExploitAgency Github repository hier: https://github.com/exploitagency/github-proxmark3-standalone-lf-emulator. Pak de gownloaded files aan en plaats de waar ze makkelijk te benaderen zijn. Ik gebruik C:\Proxmark3\Firmware.
Vervolgens starten we de command prompt, en draaien we de “Run Easy Flasher for Windows.bat”. De eerste vraag is om aan te geven wat het COM poortnummer van de Proxmark3 is:
Vervolgens komen we in het hoofdmenu:
Als we kiezen voor “1” zien we een volledige lijst met mogelijke “Bootrom” images en kiezen we voor 2 dan krijgen we een lijst met mogelijke “Fullimage” images. Laten we eerst de bootrom flashen. We kiezen dus voor 1 en vervolgens voor nummer 3, de “Proxbrute with updated cdc bootrom”. Na het klikken op 3 moeten we nogmaals op ENTER drukken en dan wordt het flashen gestart.
Vervolgens gaan we op dezelfde manier de “Fullimage” flashen en dus kiezen we voor 2 en vervolgens voor 3. Het kan zijn dat na het flashen van de bootrom je Proxmark een ander COM poortnummer gekregen heeft. Herstart in dat geval even het script.
Het flashen is klaar en je kunt de ProxBrute functie gebruiken.
ProxBrute Inschakelen
De ProxBrute mode schakel je als volgt in:
- Schakel de Proxmark3 in
- Hou de functiebutton 2 seconde ingedrukt tot de LED’s gaan flikkeren en laat de button dan los. LED C blijft branden.
- Druk kort op de functiebutton zodat LED C&B gaan branden.
- Druk nogmaals kort op de functiebutton zodat alleen LED A brand.
- Hou nu de functiebutton ingedrukt tot LED A&D gaan branden.
- Scan nu de geldige kaart.
- Druk weer kort op de button tot LED B&C&A gaan branden.
- Scan de tag welke je wilt brute-forcen. De Proxmark3 zal nu de aanval gaan uitvoeren. Blijf de kaart gedurende dit proces scannen.
Download hier het schema met alle stand-alone Proxmark3 modes.
Om simpelweg de communicatie af te luisteren tussen een reader en een tag zodat je voldoende gegevens af kunt luisteren om op die manier de sleutels te verkrijgen gebruik je onderstaande commando’s:
Low Frequency:
lf snoop (vooraf gegaan aan het “lf config” commando om bepaalde parameters zoals sampling in te stellen).
High Frequency:
hf mf sniff
Al met al is het middels ProxBrute forceren van een versleutelde kaart niet moeilijk en beschikbaar voor LF en HF kaarten. Het enige nadeel is dat je wel een andere kaart (uit dezelfde serie) moet kunnen lezen om ProxBrute uit te voeren. Volledig brute-forcen is uiteraard mogelijk maar zou jaren in beslag nemen en die tijd hebben we meestal niet.