Contents
Inleiding
RFID (Radio Frequency IDentification) is een verzamelterm voor alles wat op afstand kan geïdentificeerd worden via RF-signalen. Daaronder vallen bijvoorbeeld ook de antidiefstal tags in winkels, de tags voor de opvolging van producten in een logistieke keten en deze voor de identificatie van dieren …
In het geval van toegangscontrole zijn er twee veelgebruikte RFID technologieën. Deze worden onderscheiden d.m.v. hun frequentie:
- 125 kHz: Low frequency (LF) wordt het meest gebruikt voor pure toegangscontrole. Deze tags kunnen doorgaans geen wijzigbare data bevatten en hebben meestal als codenummer “EM4xx”.
- 13,56 MHz: Beter bekend als Near Field Communication (NFC). Deze technologie is de focus van dit artikel en wordt steeds meer toegepast. Een veelgebruikte standaard hiervoor is “ISO/IEC 14443 Type A”. NFC komt voor in verschillende producten ontworpen door verschillende fabrikanten. De meest populaire vorm is de Mifare lijn van NXP met o.a. de Mifare Classic.
Layout (Mifare Classic)
Geheugen layout voor NFC (hier Mifare 1K)
De bovenstaande figuur is een overzicht van de eerste 384 bytes van een 1024 byte geheugenkaart. Elke kaart is onderverdeeld in sectoren van 64 bytes (16 sectoren bij een 1K kaart). Sleutels en toegangsrechten kunnen per sector ingesteld worden. Elke 16 bytes wordt een block genoemd. Een 1K kaart is dus onderverdeeld in 16 sectoren met elk 4 blokken van 16 bytes. Bij een 4K kaart zijn er 40 sectoren: 32 sectoren met 4 blokken en 8 sectoren met 16 blokken.
–> Concreet zijn er op een 1K kaart echter slechts 800 bytes vrij te gebruiken.
Werking
- De eerste 4 bytes bevatten de unieke ID (UID) van elke kaart. Dat betekent dat er 4 miljard mogelijke combinaties bestaan waardoor de kans op twee identieke kaarten zeer klein wordt. Deze UID wordt meestal gebruikt voor de identificatie bij toegangscontrole. Deze kunnen niet overschreven worden.
- De 5de byte van sector 0, blok 0 is een controlesom voor de UID, de technische naam is CRC8. Dit komt neer op het uitvoeren van een Xor (exclusieve or) operatie op de eerste 4 bytes. M.a.w. in bovenstaand voorbeeld is F6 Xor C7 Xor C8 Xor 1E gelijk aan E7. Dit kan worden gebruikt om leesfouten te detecteren en eventueel zelfs op te lossen.
- De 6de byte heet typisch SAK en wordt samen met de ATQA (bytes 7 & 8) gebruikt om het type kaart aan te duiden. Een Mifare Classic 1K heeft altijd ATQA 0400 met SAK 08, terwijl een 4K als ATQA 0200 zou hebben met SAK op 18.
- Een overzicht kan hier gevonden worden.
- De laatste 8 bytes van de eerste blok zijn vrij in te vullen door de fabrikant.
- Per sector wordt het laatste blok gereserveerd om sleutels en rechten te beheren.
Deze wordt ook wel sector trailer genoemd omdat dit nooit kan gebruikt worden om data te bewaren.
De eerste 6 bytes bevatten sleutel A (key A) en de laatste 6 bytes (byte 10 tot 16) bevatten sleutel B (key B).- Dit betekent dus dat elke Mifare 1K kaart met 16 sectoren dus 16 verschillende A sleutels en 16 verschillende B sleutels kan hebben.
- Er zijn een 4-tal standaard, gekende, sleutels die door de fabrikant worden ingesteld: FFFFFFFFFFFF, A0A1A2A3A4A5, D3F7D3F7D3F7 of 000000000000.
- Per sleutel kunnen andere rechten ingesteld worden. Dit maakt het mogelijk om applicaties te ontwikkelen die enkel specifieke sectoren kunnen schrijven of lezen.
- Bytes 7, 8 en 9 beschrijven wat met welke sleutel kan worden gedaan. De berekening hiervan wordt bespoedigd door applicaties of websites zoals deze Mifare Access Bits Calculator.
- Let op met deze Access Conditions want het is perfect mogelijk om een kaart onbruikbaar te maken. Zo kan ingesteld worden dat het onmogelijk is om sleutels te lezen of schrijven en zelfs om hele sectoren leesbaar of schrijfbaar te maken.
Software
Kaartlezers, zoals de populaire en goedkope ACR122U, zijn voldoende om zeer snel aan de slag te gaan: de stuurprogramma’s voor dit toestel zitten reeds jaren ingebakken in Windows. Vanuit Visual Studio is het perfect mogelijk om een kaart in te lezen. Er bestaan ook relatief eenvoudige command line programma’s zoals libfnc.
Populaire combinatie: ACR122U en C#
Een van de meest populaire platformen voor NFC zijn smartphones, het meer open ecosysteem van Android biedt tal van mogelijkheden om kaarten te lezen, te schrijven of te kopiëren.
Een eenvoudige optie is ‘NFC Tools’ of de open source ‘MifareClassicTool’ die in staat is om kaarten te klonen.
Gratis Android App, let erop dat niet alle smartphones de Mifare Classic (1K/4K) kaarten ondersteunen.
Security
Probleem 1: UID kan niet beschermd worden
Er zijn twee manieren om een NFC kaart te benaderen: identificatie of authenticatie. Technisch houdt dit in dat er voor het lezen eerst een “identificatie” commando wordt gestuurd waarop de kaart reageert met haar eerste 16 bytes. Dat laat elke applicatie toe om de UID te lezen en te verifiëren samen met het type kaart (SAK & ATQA). Dit kan niet beveiligd worden, iedereen met een lezer kan dit dus uitlezen.
De tweede manier om een kaart te benaderen, wordt gebruikt om data uit te lezen. Er moet eerst een authenticatie commando worden gestuurd dat uit volgende onderdelen bestaat: sectornummer, soort sleutel (A of B) en de sleutel van 6 bytes. Indien succesvol kan vervolgens blok 0, 1 of 2 van die sector worden uitgelezen. Dit commando moet herhaald worden voor iedere sector.
De security implicatie is dat er tal van Mifare Classic kaarten in omloop zijn waarbij de eerste sector niet vergrendeld is door de fabrikant. Deze kaarten kosten amper meer dan de normale Mifare Classic kaarten en laten toe om zonder sleutels elke byte op de kaart uit te lezen en te wijzigen. Ze worden vaak “Chinese klonen” genoemd.
Kaarten waarbij de UID (“unieke” ID) aanpasbaar is.
M.b.v. de standaard tools zoals mfclassic of zelfs bepaalde smartphone apps (zie boven) kan een UID dus eenvoudig worden gekopieerd naar een dergelijke kaart.
Op die manier is het dus vrij eenvoudig om een kaart bvb. van een hotel of een bezoekerskaart bij een bedrijf te kopiëren om zodoende later terug toegang te verkrijgen.
Bij (tijdelijke) toegang tot een persoonlijke kaart van een werknemer kan men vervolgens zijn identiteit overnemen.
Twee mogelijke oplossingen:
- Security Awareness training: persoonlijke kaarten moeten persoonlijk blijven, zorg ervoor dat deze niet kunnen uitgelezen worden. Speciale hardware tools zoals de populaire Proxmark kunnen de afstand uitbreiden tot ruim een meter.
- Om die reden is het aan te raden de kaart af te schermen, eventueel met een speciale hoes maar twee kaarten tegen elkaar leggen is ook voldoende. Dan kan ook geen van beide worden uitgelezen
- De keuze voor een andere soort kaart zoals bvb. Mifare Ultralight i.p.v. de Mifare Classic. Voor zover bekend zijn hier nog geen dergelijke “chinese klonen” voor te vinden, al lijkt het niet ondenkbaar dat deze in de toekomst wel zullen verschijnen. De UID is bij de Mifare Ultralight uitgebreid van 4 bytes naar 7 bytes.
- Indien de product keuze vrij is, is het toekomstgericht interessanter om meteen voor de Mifare DESFire te kiezen, die encryptie op de kaart aanbiedt. De eerder genoemde Proxmark hardware kan zich namelijk tóch voordoen als een Mifare Ultralight kaart met willekeurige UID.
Probleem 2: Het kraken van de Mifare Classic sleutels
Al in 2009 werden problemen gevonden met het gebruikte protocol om de A & B sleutels uit te wisselen. De exacte details kunnen in de betreffende paper gelezen worden: The Dark Side of Security by Obscurity.
De aanval komt op het volgende neer: elke sleutel is 6 bytes lang en er kunnen zoals gezegd tot 32 verschillende sleutels op één kaart worden ingesteld. Een standaard brute force poging (alle sleutels uitproberen) kan tot 93 jaar duren. Uit onderzoek bleek echter een fout te zitten in de willekeurige codes (“nonces”) die gebruikt worden bij de authenticatie. Sommige worden hergebruikt en ze zijn niet echt volledig willekeurig. Concreet is één sleutel meestal binnen de 15 minuten te achterhalen.
Met de tool ‘mfoc’ worden de standaard sleutels geprobeerd op alle sectoren. Hier zien we dat deze niet werken op sectoren 3 of 4. Meer details hier.
Conclusie
Het is dus niet goed om Mifare Classic kaarten te gebruiken om effectief gevoelige data op te slaan. Het is namelijk onder alle omstandigheden mogelijk om de beveiliging te kraken en de data leesbaar te maken. De sleutels geven slechts een vals gevoel van veiligheid en vertragen hooguit de kwaadwillige.
Maar zelfs al wordt enkel gebruik gemaakt van systemen die de unieke kaart ID koppelen aan een identiteit, dan nog moet de toegang tot een persoonlijke kaart goed bewaakt worden. Zorg dat deze UID dus ook nooit zichtbaar is.
Een veel beter alternatief is dus Mifare Ultralight of nog beter Mifare Desfire.
Tijl Deneut
Met dank aan Hans Ameel