Praktische implementatie van relay aanvallen - COSIC

Praktische implementatie van relay
aanvallen
Kristof Mariën
Thesis voorgedragen tot het behalen
van de graad van Master of Science
in de ingenieurswetenschappen:
elektrotechniek, optie Ingebedde
systemen en multimedia
Promotoren:
Prof. dr. ir. Bart Preneel
Prof. dr. ir. Ingrid Verbauwhede
Assessoren:
Prof. dr. ir. Sofie Pollin
Dr. ir. Stefaan Seys
Begeleider:
Dr. ir. Dave Singelée
Academiejaar 2013 – 2014
c Copyright KU Leuven
Zonder voorafgaande schriftelijke toestemming van zowel de promotoren als de
auteur is overnemen, kopiëren, gebruiken of realiseren van deze uitgave of gedeelten ervan verboden. Voor aanvragen tot of informatie i.v.m. het overnemen en/of
gebruik en/of realisatie van gedeelten uit deze publicatie, wend u tot ESAT, Kasteelpark Arenberg 10 postbus 2440, B-3001 Heverlee, +32-16-321130 of via e-mail
[email protected].
Voorafgaande schriftelijke toestemming van de promotoren is eveneens vereist voor het
aanwenden van de in deze masterproef beschreven (originele) methoden, producten,
schakelingen en programma’s voor industrieel of commercieel nut en voor de inzending
van deze publicatie ter deelname aan wetenschappelijke prijzen of wedstrijden.
Voorwoord
Deze masterproef vormde een belangrijk en zeer interessant onderdeel van mijn
laatste opleidingsjaar. Zonder de vele mensen die ik hierbij wil bedanken was dit
werkt niet tot stand gekomen.
In de eerste plaats zou ik mijn twee promotoren, professor Bart Preneel en
professor Ingrid Verbauwhede, willen bedanken voor de kans die ik gekregen heb om
deze thesis te maken.
Verder wil ik ook mijn begeleider, Dave Singelée, bedanken. Hij was steeds bereid
om op al mijn vragen te antwoorden en hij hielp me ook heel goed verder als ik een
probleem ondervond met de thesis. Ook wil ik hem bedanken voor de vele tijd die
hij heeft besteed aan het nalezen en verbeteren van mijn tekst.
Daarnaast bedank ik ook mijn twee assessoren, professor Sofie Pollin en Stefaan
Seys, voor het aanwezig zijn op mijn presentatie en het lezen van deze tekst.
Ook wil ik alle werknemers van de KU Leuven, waar ik rechtstreeks of onrechtstreeks in contact ben met gekomen, bedanken voor het mogelijk maken van deze
thesis. Zo verschafte de technische dienst me extra achtergrondinformatie over toegangscontrole, waarvoor ik hen heel dankbaar ben.
Tenslotte wil ik ook nog mijn naaste omgeving bedanken. In de eerste plaats mijn
ouders, dat ze mij de kans gegeven hebben om deze opleiding te starten. Ook mijn
vrienden en kotgenoten ben ik zeer dankbaar. Zij zorgen voor de nodige ontspanning
en hielpen me verder tijdens de moeilijkere momenten.
Kristof Mariën
i
Inhoudsopgave
Voorwoord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i
Samenvatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iv
Lijst van figuren en tabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
v
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
vii
Lijst van afkortingen
1
Inleiding . . . . . . . . . . . . .
1.1 RFID . . . . . . . . . . .
1.2 Toegangscontrole . . . . .
1.3 Relay aanval . . . . . . .
1.4 Overzicht van deze thesis
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
3
4
ISO/IEC 14443 . . . . . . . . . . .
2.1 Fysische karakteristieken . . .
2.2 Radio frequentie vermogen en
2.3 Initialisatie en anti-botsing .
2.4 Transmissie protocol . . . . .
2.5 Voorbeeld . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
signaal interface
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
8
10
12
13
3
MiFare . . .
3.1 MiFare
3.2 MiFare
3.3 MiFare
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
16
17
4
Proxmark3 . . . . . . . .
4.1 Hardware . . . . .
4.2 Computer software
4.3 ARM software . .
4.4 FPGA . . . . . . .
4.5 Antenne . . . . . .
4.6 Signalen . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
20
21
22
23
23
ii
. . . . . .
Classic .
Plus . . .
DESFire
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Inhoudsopgave
Opstelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
5.1
Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
5.2
Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
5.3
ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.4
FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.5
Test Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.6
Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
Relay aanval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
6.1
Computer en ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
6.2
FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
6.3
Werking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
6.4
Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
Mogelijke aanpassingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
7.1
Alleenstaande implementatie . . . . . . . . . . . . . . . . . . . . . .
51
7.2
Relay verbinding . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
7.3
Proxmark3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
7.4
Intelligentere aanval . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
Tegenmaatregelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
8.1
Strikte tijdslimiet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
8.2
Distance bounding . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
9.1
Relay Aanval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
9.2
Algemeen besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
A Proxmark3: Snoop resultaat . . . . . . . . . . . . . . . . . . . . . . . . . .
63
B Verilog: Relay test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
C Verilog: Relay encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
D Verilog: Relay decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
E Verilog: Relay Mode Switch . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
F Verilog: Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
G Wetenschappelijk Artikel . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
5
6
7
8
9
iii
Samenvatting
In de huidige leefwereld zijn er heel wat technologische ontwikkelingen die het leven
vereenvoudigen. Zo wordt er bijvoorbeeld gebruik gemaakt van toegangscontrole om
de toegang tot gebouwen op een gebruiksvriendelijke manier te beperken. Door een
kaart naast een lezer te houden kan de deur al dan niet open gaan. Dit kan ook
toegepast worden in de automobielsector, zodat je auto automatisch uit slot gaat
als je in de buurt bent. Maar zijn deze technologieën ook veilig? Het doel van deze
thesis is om een mogelijke aanval, de relay aanval, op deze systemen proberen te
implementeren.
Naast de implementatie van de aanval worden ook toegangscontrolesystemen
besproken. Zo wordt er uitgelegd hoe deze zijn opgebouwd en welke opties er zijn,
maar ook de standaard hiervoor, de ISO/IEC 14443, wordt uitgebreid besproken.
Daarnaast is er ook een deel van deze thesis gewijd aan één van de meest gebruikte
implementaties van deze standaard, namelijk de MiFare implementatie.
Deze aanval zal geïmplementeerd worden aan de hand van twee Proxmark3 borden. Dit zijn componenten die gebouwd zijn om RFID kaarten uit te lezen en te
simuleren, deze bevatten onder andere een ARM processor en een FPGA. Eén van
deze Proxmark3’s zal dienst doen als valse kaart en de andere als valse lezer. De
standaard code die aanwezig is zal aangepast moeten worden om de relay aanval
te implementeren. Al deze aanpassingen zullen op FPGA niveau gebeuren om de
vertragingen zo veel mogelijk te beperken. De implementatie zal ook toegepast
worden op een MiFare Plus systeem.
Er worden ook enkele tegenmaatregelen besproken die kunnen gebruikt worden
om een relay aanval te voorkomen. Eén tegenmaatregel, een distance bounding protocol, wordt uitvoeriger besproken. Een vorm van dit protocol is ook geïmplementeerd
in het MiFare Plus systeem dat aangevallen zal worden.
iv
Lijst van figuren en tabellen
Lijst van figuren
1.1
1.2
1.3
Toegangscontrolesysteem . . . . . . . . . . . . . . . . . . . . . . . . . .
Relay aanval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Distance bounding afstand . . . . . . . . . . . . . . . . . . . . . . . . .
2
3
4
2.1
2.2
2.3
PCD-PICC Communicatie . . . . . . . . . . . . . . . . . . . . . . . . . .
Stroomdiagram voor ISO/IEC 14443-3 . . . . . . . . . . . . . . . . . . .
ISO/IEC 14443-3 pakketten . . . . . . . . . . . . . . . . . . . . . . . . .
10
12
12
3.1
Geheugenstructuur MiFare Classic 4K . . . . . . . . . . . . . . . . . . .
16
4.1
4.2
Proxmark3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Proxmark3 Test pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
21
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
Opstelling van de relay aanval . . .
Antenne Interface . . . . . . . . . .
Proxmark3 connectie . . . . . . . .
Buffer Circuit . . . . . . . . . . . .
Zener Diode . . . . . . . . . . . . .
Diode . . . . . . . . . . . . . . . .
Symmetrische Voeding . . . . . . .
Synchronisatie Pad . . . . . . . . .
Vertraging analoog circuit . . . . .
Tijdsvariatie bij het nemen van een
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
sample
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
26
28
29
30
30
31
33
36
37
6.1
6.2
6.3
6.4
6.5
Verilog Architectuur . .
Buffer valse lezer . . . .
Buffer valse kaart . . . .
Werking Relay Aanval .
Extra vertragingen relay
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
43
44
44
47
8.1
Distance bounding protocol van Hancke-Kuhn . . . . . . . . . . . . . . .
57
. . . .
. . . .
. . . .
. . . .
aanval
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
v
Lijst van figuren en tabellen
Lijst van tabellen
2.1
2.2
2.3
PCD naar PICC Sequenties . . . . . . . . . . . . . . . . . . . . . . . . .
PICC naar PCD Sequenties . . . . . . . . . . . . . . . . . . . . . . . . .
Data overdracht ISO/IEC 14443a . . . . . . . . . . . . . . . . . . . . . .
8
9
13
4.1
Hexadecimale voorstelling uit te zenden sequenties . . . . . . . . . . . .
24
6.1
Gegevens ontvangen tijdens relay aanval . . . . . . . . . . . . . . . . . .
50
vi
Lijst van afkortingen
Afkortingen
ADC
AES
ASK
ATS
ATQA
ATQB
BPSK
CRC
DES
FPGA
FWI
FWT
MAC
NAK
NRZ
NRZ-L
NUID
OOK
PCD
PICC
RATS
REQA
REQB
RFID
SAK
SSP
UID
Analog-to-Digital Converter
Advanced Encryption Standard
Amplitude Shift Keying
Answer To Select
Answer To reQuest, type A
Answer To reQuest, type B
Binary Phase Shift Keying
Cyclic Redundancy Check
Data Encryption Standard
Field-Programmable Gate Array
Frame Waiting Integer
Frame Waiting Time
Message Authentication Code
Negative AcKnowledges
Non-Return to Zero
Non-Return to Zero Level
Non Unique IDentifier
On/Off Keying
Proximity Coupling Device
Proximity Integrated Circuit Card
Request for Answer To Select
REQuest command, type A
REQuest command, type B
Radio-Frequency IDentification
Select AcKnowledge
Synchronous Serial Port
Unique IDentifier
vii
Lijst van afkortingen
WTXM
WTXs
WUPA
WUPB
viii
Waiting Time eXtension Multiplier
Waiting Time eXtensions
Wake-UP command, type A
Wake-UP command, type B
Hoofdstuk
1
Inleiding
Deuren die opengaan als je met een smartcard in de buurt komt, auto’s die starten
als je de juiste smartcard op zak hebt,. . . In het dagelijkse leven wordt meer en meer
gebruik gemaakt van draadloze informatieoverdracht om het leven te vereenvoudigen.
Deze nieuwe technologieën, of hun nieuwe toepassingen, zijn vaak gevoelig voor vele
aanvallen. In deze thesis zal één mogelijke aanval, de relay aanval, onderzocht en
geïmplementeerd worden. De nadruk ligt hierbij vooral op de praktische haalbaarheid
van zo’n aanval.
In dit hoofdstuk worden enkele basis begrippen uitgelegd om het vervolg van
deze masterproef te kunnen begrijpen.
1.1 RFID
De technologie die veel gebruikt wordt om draadloos informatie uit te wisselen is
RFID. Met Radio-Frequency IDentification (RFID) kan, zonder fysiek contact te
maken, via radiogolven over een korte afstand informatie uitgewisseld worden [18].
Een voordeel van RFID ten opzichte van barcodes is dat er geen zichtlijn nodig is.
Om deze overdracht tot stand te kunnen brengen, stuurt de lezer een gemoduleerde draaggolf uit. Tags die voldoende dicht in de buurt zijn zullen deze draaggolf
ontvangen en de nodige informatie uitwisselen. Zo zal de UID (Unique IDentifier)
uitgewisseld worden en een eventuele vraag en antwoord authenticatie.
Er zijn twee groepen van tags: actieve en passieve. Actieve tags zijn voorzien van
een batterij waaruit ze hun vermogen halen. Hierdoor kunnen dergelijke tags over
een veel grotere afstand informatie uitwisselen, tot zelfs enkele honderden meters.
Passieve tags daarentegen halen hun vermogen via een spoel uit de draaggolf. Doordat er geen energiebron aanwezig is, zijn deze tags veel goedkoper dan hun actieve
variant. Het nadeel van deze tags is echter hun beperkt bereik, typisch in de orde
van enkele tientallen centimeters.
1
1. Inleiding
1.2 Toegangscontrole
Toegangscontrole kan op verschillende manieren gebruikt worden. Het kan gebruikt
worden om een gebouw te beveiligen of als monitoring, om te controleren wie in welk
deel van het gebouw komt.
Een gebouw beveiligen via een toegangscontrolesysteem is veel meer dan het
plaatsen van dit systeem. De mechanische beveiligingen (sloten en deuren) zijn
hierbij ook van belang, want een gebouw beveiligd met een heel goed toegangscontrolesysteem waarvan de deuren regelmatig niet in het slot vallen heeft nog steeds
een groot beveiligingslek. Bij de monitoring, steunt de beveiliging volledig op de
mechanische beveiligingen.
Een toegangscontrolesysteem is een complex geheel waarvan de gebruiker maar
een klein deel ziet, namelijk de toegangskaarten en de lezers. De lezers zijn meestal
bevestigd naast een deur, dewelke open gaat als de gebruiker hiervoor de rechten
heeft. Deze lezer is verbonden via een bus (Wiegand, RS232, RS485, IP,. . . ) met
de controllers en servers. Op deze servers worden dan alle UID’s en sleutels van
de kaarten bijgehouden. Aan deze UID’s worden dan de juiste rechten gekoppeld.
Een voorbeeld van een toegangscontrole systeem wordt weergegeven in Figuur 1.1.
In dit voorbeeld wordt er gebruik gemaakt van verschillende lezers, zowel IP lezers
(IP) als lezers verbonden via een RS232 bus (R). De deuren zijn samen met de
gewone lezers verbonden via een Input/Output blok aan een controller, dewelke verbonden is met een netwerk en eventuele storingen hierin opvangt met een lokale cache.
IP
IP
Netwerk
Server
R
R
R
R
RS232
IP
Controller I/O
RS232
Figuur 1.1: Toegangscontrolesysteem
In deze thesis zal alleen naar het draadloze gedeelte van de implementatie gekeken
worden. Hoe een toegangscontrole in het gedeelte achter de lezer werkt, beïnvloedt
2
1.3. Relay aanval
de relay aanval niet.
1.3 Relay aanval
Bij normaal gebruik is de maximale afstand tussen de lezer en de tag gelimiteerd tot
enkele tientallen centimeters. In praktijk is dit vaak slechts 5 à 10 centimeter [5].
Een relay aanval gaat deze afstand echter vergroten. Het voordeel van deze aanval is
dat de aanvaller het onderliggende protocol en de beveiliging niet moet kennen of
breken [9]. De signalen moeten slechts doorgestuurd worden.
R
A1
A2
Figuur 1.2: Relay aanval met A1 en A2 de extra antennes voor de aanval
Bij deze aanval zal een aanvaller het signaal opvangen bij de lezer en dan verzenden, via een draad of draadloos, naar de plaats waar zich een correcte smartcard
bevindt. Een ruwe schets van deze aanval wordt getoond in Figuur 1.2. Er zijn
hier twee antennes weergegeven die elk op een andere locatie staan. A1 zal een
smartcard nabootsen en A2 zal de lezer nabootsen. Hierbij moeten de vertragingen
die opgelopen worden bij het ontvangen, het doorsturen en het opnieuw verzenden
van het signaal zo klein mogelijk zijn. De afstand die dan overbrugd kan worden
kan sterk variëren en wordt beperkt door de maximaal toegelaten vertraging die het
signaal mag hebben bij de lezer [6] [7].
De relay aanval is een soort van man in the middle aanval. Bij een man in
the middle aanval is er in het algemene geval kennis vereist van het protocol en
de gebruikte versleuteling. Op deze manier kan bijvoorbeeld bij een geldtransactie
het bedrag aangepast worden. Bij een relay aanval daarentegen is er geen kennis
vereist van het protocol of van de beveiliging. Hierbij worden de signalen doorgegeven naar de andere kant van de tunnel zonder deze te interpreteren of te wijzigen [9].
Een praktisch voorbeeld waarbij deze relay aanval zou kunnen gebruikt worden
is bijvoorbeeld het stelen van een auto die via een smartcard te ontgrendelen is.
3
1. Inleiding
Stel dat de eigenaar op een terras zit en zijn auto staat 100 meter verder. Dan
zou je, door middel van deze aanval, ongemerkt met zijn auto kunnen vertrekken.
Hiervoor moet je kompaan ook op het terras plaats nemen, in het bereik van de
smartcard, en moet je zelf naast de auto gaan staan met een antenne. Afhankelijk
van de implementatie zal de overdracht draadloos of via draad gebeuren.
Een RFID systeem beveiligen tegen relay aanvallen is niet eenvoudig. Er zouden
fysische mechanismen zoals het afschermen of uitschakelen van de smartcard gebruikt
kunnen worden, maar hierdoor wordt de eenvoud bij gebruik verminderd [6]. Eén
van de enige protocols die kan gebruikt worden om relay aanvallen te voorkomen zijn
de zogenaamde distance bounding protocols. Deze zullen een verhoogde vertraging,
geïntroduceerd door de aanvaller, in de overdracht detecteren. Bij het distance
bounding protocol zal de lezer de afstand, waarbinnen de kaart zich moet bevinden,
limiteren. In Figuur 1.3 zal de afstand gelimiteerd worden tot d. Hierdoor zal de
kaart A wel toegelaten worden en de kaart B niet. Om dit te realiseren zal de
lezer de round trip time meten tussen zichzelf en de smartcard. Deze lezer weet
over welk medium het signaal wordt uitgezonden en kan zo de afgelegde afstand
berekenen. Hierbij moet ook de verwerkingstijd in de smartcard in rekening gebracht
worden. Een belangrijke eigenschap van distance bounding protocols is dat de gedane
berekeningen in de kaart zo eenvoudig en zo snel mogelijk zijn [4].
d
A
V
B
Figuur 1.3: Distance bounding afstand
1.4 Overzicht van deze thesis
In de eerstvolgende hoofdstukken zal er nog achtergrond informatie gegeven worden in verband met toegangscontrole. Zo wordt er gestart met de veel gebruikte
ISO/IEC 14443 standaard uit te leggen. Hierna zal er verder gegaan worden met
een implementatie van deze standaard, namelijk de MiFare implementatie van NXP
Semiconductors.
4
1.4. Overzicht van deze thesis
Na deze achtergrondinformatie zal er overgeschakeld worden op de implementatie
van de aanval. Hiervoor zal eerst de Proxmark3 uitgelegd worden, dit toestel ligt
namelijk aan de basis aan deze relay aanval implementatie. Nadat deze component
is uitgelegd, zal de eigenlijke implementatie uit de doeken gedaan worden.
Als laatste zullen mogelijke uitbreidingen en verbeteringen van deze aanval besproken worden. De mogelijke beveiligingen tegen een relay aanval zullen ook kort
aan bod komen. Tenslotte zal er afgesloten worden met een samenvatting en hieruit
zullen de conclusies worden getrokken.
5
Hoofdstuk
2
ISO/IEC 14443
ISO/IEC 14443, of Identification cards – Contactless integrated circuit cards – Proximity cards [11], is een internationale standaard die de gebruikte smartcard voor
toegangscontrole en de transmissie protocols die ermee gepaard gaan, definieert.
Deze standaard is opgesteld door International Organization for Standardization
(ISO) en International Electrotechnical Commission (IEC ).
In deze standaard worden er twee hardware componenten gedefinieerd. De Proximity Coupling Device (PCD) is de lezer die zich bijvoorbeeld naast een deur bevindt.
De Proximity Integrated Circuit Card (PICC ), ook wel de tag of smartcard genoemd,
is de ‘sleutel’ die de gebruiker op zak heeft om bijvoorbeeld de deur te openen.
De standaard bestaat uit vier delen die telkens een ander onderdeel van het
systeem bespreken. Het eerste deel gaat over de fysische kant van de contactloze
kaarten, hoe ze er uit zien. In het tweede deel wordt de draadloze overdracht besproken, welke modulaties er worden toegepast, de draaggolf, . . . De twee laatste delen
gaan over de dataoverdracht, met in deel drie alle informatie voor het selecteren
van een juiste smartcard en in het vierde deel hoe het transmissie protocol moet
geïnitialiseerd worden.
2.1 Fysische karakteristieken
In het eerste deel worden de fysische karakteristieken van de RFID tag gedefinieerd.
Onder andere de plaats en de grootte van de antenne worden hier vastgelegd. Daarnaast wordt ook bepaald bij welke sterktes van het magnetisch veld (op 13.56 MHz)
de PICC moet kunnen werken en hoe lang deze hieraan zeker mag blootgesteld
worden.
7
2. ISO/IEC 14443
2.2 Radio frequentie vermogen en signaal interface
Dit deel van de standaard beschrijft het veld dat aangelegd moet worden voor het
vermogen en de bidirectionele verbinding tussen PCD’s en PICC’s. De frequenties en
de modulatie technieken worden hier ook in vastgelegd. Er wordt ook een onderscheid
gemaakt tussen de twee typen, type A en type B PICC’s.
Het door de PCD opgewekte magnetische veld heeft een frequentie van 13.56 MHz
± 7 kHz, die verderop met fc zal aangeduid worden. Er zijn verschillende mogelijke
bitsnelheden die ondersteund worden. Voor de initialisatie en anti-botsing wordt
altijd fc /128 (106 kbit/s) gebruikt. De verdere delen van de data overdracht kunnen
met een andere bitsnelheid afgehandeld worden, maar meestal wordt de gehele communicatie afgehandeld met een bitsnelheid van 106 kbit/s.
Type A
Voor type A wordt er bij de communicatie van de PCD naar de PICC, bij een
bitsnelheid van fc /128, 100% Amplitude Shift Keying (ASK ) modulatie gebruikt
samen met Modified Miller codering. Hierbij zal een ‘1’ gecodeerd worden door in het
midden van een bit frame het veld even uit te schakelen. Dit word een X sequentie
genoemd. Een ‘0’ wordt gecodeerd afhankelijk van de voorgaande bit. Indien dit
een ‘1’ was, zal het veld gedurende het hele frame aan blijven, een zogenaamde Y
sequentie. Was dit een ‘0’, dan zal een Z sequentie verzonden worden, hierbij zal het
veld in het begin van het frame even uitgezet worden.
Elke communicatie start met een start of communication en eindigt met een
end of communication. Bij de start zal er een zogenoemde sequentie Z uitgestuurd
worden die wordt voorgesteld door een frame waarbij het veld in het begin even wordt
uitgezet. Het einde van de communicatie word voorgesteld door de opeenvolging
van twee nullen waarbij de eerste wordt voorgesteld volgens de voorgaande regel
van twee opeenvolgende nullen. De tweede nul wordt voorgesteld met een veld dat
voortdurend actief blijft, een sequentie Y. Een overzicht van deze sequenties en
wanneer ze gebruikt worden is te vinden in Tabel 2.1
Te versturen data
logische ‘1’
logische ‘0’
start bericht
einde bericht
Sequentie
X
Y
Z
‘0’ + Y
voorgaande bit ‘0’: sequentie Z
eerste bit na start bericht: sequentie Z
logische ‘0’ gevolgd door sequentie Y
Tabel 2.1: Gebruikte sequenties voor communicatie van PCD naar PICC
8
2.2. Radio frequentie vermogen en signaal interface
Bij de communicatie van de PICC naar de PCD wordt de informatie op een
sub-draaggolf met een frequentie van 847.5 kHz geplaatst. Op deze sub-draaggolf
wordt dan load modulation toegepast door het in en uitschakelen van een interne
weerstand waarna dit dan via On/Off Keying modulatie (OOK ) op de draaggolf
wordt geplaatst. De bits worden via Manchester coding gecodeerd. Voor een ‘1’ wordt
de weerstand gedurende de eerste helft van een bit frame ingeschakeld, dit is een D
sequentie. Bij een ‘0’ is dit in het tweede deel van het frame, een E sequentie. Door
het opsplitsen van een bit frame, zal er telkens een overgang zijn in het midden van
een bitperiode, dankzij deze eigenschap kan de PCD zich synchroniseren met de PICC.
Ook hierbij zal de start en einde van de communicatie aangeduid worden. Het
begin wordt aangeduid met dezelfde modulatie als bij een ‘1’. Het einde wordt
aangeduid door geen modulatie toe te passen, dit is een F sequentie. Een overzicht
van deze sequenties en wanneer ze gebruikt worden is te vinden in Tabel 2.2
Te versturen data
logische ‘1’
logische ‘0’
start bericht
einde bericht
Sequentie
D
E
D
F
Tabel 2.2: Gebruikte sequenties voor communicatie van PICC naar PCD
Type B
Voor type B wordt er gebruik gemaakt van 10% ASK modulatie bij de communicatie
van PCD naar PICC. De codering die gebruikt wordt is Non-Return to Zero (NRZ ),
bij een ‘1’ heeft de draaggolf een hoge amplitude, bij een ‘0’ heeft deze een lage
amplitude.
Bij de communicatie van de PICC naar de PCD wordt ook gebruikt gemaakt
van load modulation, maar er wordt Binary Phase Shift Keying (BPSK ) toegepast.
De codering die gebruikt wordt is Non-Return to Zero Level (NRZ-L). Deze codering
verschilt alleen maar bij de eerste bit van NRZ, bij NRZ wordt de eerste data bit
niet gezien als een polariteitsverandering, NRZ-L doet dit wel.
Een voorbeeld van de gebruikte modulatie technieken en coderingen wordt gegeven in Figuur 2.1.
9
2. ISO/IEC 14443
Type A
Type B
ASK 100% - Modified Miller
ASK 10% - NRZ
0
1
0
0
1
Load Modulation - OOK - Manchester
0
1
0
0
1
0
1
0
0
1
Load Modulation - BPSK - NRZ-L
0
1
0
0
1
Figuur 2.1: PCD naar PICC communicatie (bovenaan), PICC naar PCD communicatie (onderaan)
2.3 Initialisatie en anti-botsing
Dit deel van de standaard behandelt het zoeken naar PICC’s die in het magnetische
veld van de PCD komen en hoe deze worden aangesproken en geïnitialiseerd. Ook
het afhandelen van meerdere PICC’s in het veld van één PCD wordt hier uitgelegd
en valt onder de term anti-botsing, beter bekend als anticollision.
Om PICC’s te kunnen detecteren zal de PCD aanvraag commando’s uitsturen.
Er zal hier ook onderscheid gemaakt worden tussen de twee typen van kaarten. Zo
wordt er afwisselend een REQA (REQuest commando voor type A) of WUPA (Wake
UP commando voor type A) en een REQB (REQuest commando voor type B) of
WUPB (Wake UP commando voor type B) uitgestuurd, respectievelijk voor type A
en type B. De kaarten, die in het bereik van het magnetische veld zijn, zullen op de
aanvraag voor hun type antwoorden met een ATQA (Answer To reQuest) voor type
A en met een ATQB voor type B. Hierna wordt de anti-botsing en initialisatie per
type verder afgehandeld.
Type A
De communicatie kan op verschillende bitsnelheden gebeuren, van 106 kbit/s tot
848 kbit/s. De frames die verzonden worden, moeten ook voldoen aan verschillende
tijdsvereisten. Het gaat hier telkens over de minimale tijd die er moet zijn voordat
een nieuw frame start. De maximale tijd is echter niet gedefinieerd in deze standaard
en is dus afhankelijk van de implementatie.
Alle frames starten met een start of communication en eindigen met een end of
communication zoals in de vorige sectie reeds besproken is. Elke byte in het frame
wordt gevolgd door een pariteits bit. Er is ook nog een mogelijkheid om een frame
10
2.3. Initialisatie en anti-botsing
te eindigen met een Cyclic Redundancy Check (CRC ).
Na het opwekken van de PICC met een REQA of WUPA zal de PICC antwoorden
met een Answer To reQuest voor type A (ATQA). Hierna zal de anticollision loop
starten om elke PICC afzonderlijk te kunnen benaderen. In deze lus, zal de PCD
starten met een SELECT. Alle PICC’s die dat commando ontvangen, zullen hierop
antwoorden met hun UID. Als de PCD geen botsing detecteert, dan zal de enige
actieve kaart geselecteerd worden. Als er wel een botsing opgetreden is, zijn er
meerdere kaarten actief en zal er naar het volgende niveau gegaan worden in de
anti-botsings lus. Hierbij zal de PCD opnieuw een SELECT uitsturen, gevolgd door
een deel van een UID, tot en met de bit waar de botsing was gedetecteerd. Dit
proces wordt herhaald totdat er maar één PICC overblijft. De PCD zal de volledige
UID op het einde nog uitsturen waarop de desbetreffende PICC zal antwoorden met
een Select AcKnowledge (SAK ). In dit commando staat of deze compatibel is met
ISO/IEC 14443-4. Indien dit zo is, kan naar deel 4 van de standaard gegaan worden.
Een schematisch overzicht van dit protocol is te zien in Figuur 2.2.
De PCD kan botsingen detecteren omwille van de codering van de signalen. Als
er tegelijk een ‘0’ en een ‘1’ worden verzonden van de PICC naar de PCD, zal door de
Manchester codering geen geldige ‘0’ of ‘1’ kunnen gedetecteerd worden. Aangezien
een ‘0’ wordt gekenmerkt door een ingeschakelde weerstand in het tweede deel van
de bit periode en bij een ‘1’ is dit in het eerste deel (zie Figuur 2.1). Als deze
dan gelijk verzonden worden, gaan deze twee gesuperponeerd worden en zal de lezer niet kunnen beslissen of het een ‘0’ of een ‘1’ was. Dit wordt een botsing genoemd.
Alle gegevens worden in pakketten uitgezonden. Zoals reeds aangehaald in Hoofdstuk 2.2 wordt elk pakket voorafgegaan door een start van het bericht en gevolgd
door een einde van bericht. Tussen deze twee symbolen bevindt zich de eigenlijke
inhoud van het bericht. De twee belangrijkste soorten pakketten zijn een kort pakket
en een standaard pakket.
Een kort pakket bestaat uit een boodschap van acht bit. Dit bericht wordt weergegeven in Figuur 2.3. De eerste bits die worden doorgestuurd zijn de minst significante
bits.
Bij een standaard pakket wordt er na elke byte nog een pariteitsbit toegevoegd. Deze
pariteitsbit wordt berekend aan de hand van het oneven pariteitsschema. Als het
aantal ‘1’ bits in de vorige byte oneven is, dan zal de pariteitsbit ‘0’ zijn. Anders zal
deze ‘1’ zijn. Een bericht van dit type wordt weergegeven in Figuur 2.3.
Type B
Type B kaarten gebruiken andere commando’s voor de anti-botsing en de selectie en
zullen dus andere stappen door gaan, maar het principe is gelijkaardig. Vandaar dat
dit niet verder behandeld zal worden in deze thesis.
11
2. ISO/IEC 14443
Start
Send REQA
Receive AT QA
Select Cascade Level 1
Increase Cascade Level
Bit Anticollision
UID niet volledig
UID volledig,
niet compatibel
met deel 4
Check SAK
UID volledig, compatibel met deel 4
ISO/IEC 14443 − 4
Figuur 2.2: Stroomdiagram voor ISO/IEC 14443-3
Kort pakket
Start b1 b2 b3 b4 b5 b6 b7 b8 Einde
Start
b1
Byte 1
Standaard pakket
b8
P
b1
Byte n
b8
P Einde
Figuur 2.3: ISO/IEC 14443-3 pakketten
2.4 Transmissie protocol
In het laatste deel van de standaard wordt het half-duplex transmissie protocol
uitgelegd. Dit is voor type A en type B hetzelfde.
Nadat de PCD een SAK heeft gekregen met de bevestiging dat de PICC compatibel is met dit deel van de standaard, zal de PCD een Request for Answer To
12
2.5. Voorbeeld
Select (RATS) uitsturen. Hierop zal geantwoord worden met een Answer To Select
(ATS). De PICC zal hierin zijn configuratie weergeven, met onder andere de lengte
van deze boodschap, welke velden er beschikbaar zijn,. . . . De PCD zou nog enkele
parameters in de PICC kunnen wijzigen als deze dat ondersteunt.
Hierna zal overgegaan worden naar het eigenlijke transmissie protocol. Aangezien
dit specifiek is per leverancier en merk, is dit niet gespecifieerd in de standaard. Een
mogelijk en vaak gebruikt protocol is dit van de MiFare familie.
2.5 Voorbeeld
In Tabel 2.3 wordt een voorbeeld gegeven van de gegevensoverdracht tijdens de
initialisatie en anti-botsing van deze standaard. Eerst zal de lezer afwisselend een
REQA (0x26) of WUPA (0x52) uitzenden. Hierop zal de kaart antwoorden met een
ATQA (0x4200), hierin staat de grootte van de UID en dat er bit frame anti-botsing
actief zal zijn. In de volgende stap zal de lezer de kaart selectie starten met het
uitzenden van een SELECT commando (0x9320). De kaart zal dan zijn eerste
4 byte van de UID uitzenden, deze kaart heeft een UID van 7 byte. Deze eerste
4 byte zullen samen met een CRC door de lezer opnieuw uitgezonden worden als
bevestiging om met de juiste kaart verder te gaan voor de volgende stap. De kaart,
waarvan dit eerste deel van de UID overeenkomt, zal deze UID bevestigen door
een SELECT Acknowledge naar de lezer te sturen met de melding dat er nog een
vervolg is van deze UID. Waarop de lezer voor het volgende deel van de UID zal
vragen (0x9520). Nadat de kaart de volgende bytes heeft doorgestuurd, zal de lezer opnieuw om bevestiging vragen. De kaart zal nu bevestigen dat de UID volledig is.
Bron
Lezer
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Data
26
52
42 00
93 20
88 04
93 70
04 da
95 20
8a 4d
95 70
20 fc
e0 80
0c 75
5c 64 b4
88 04 5c 64 b4 df ac
17
2b
8a
70
31
77
80 6c
4d 2b 80 6c af d5
73
80 02 c1 05 2f 2f 01 bc d6 60 d3
Tabel 2.3: Data overdracht ISO/IEC 14443a
13
2. ISO/IEC 14443
Vanaf nu is deel 3 van de standaard afgelopen en is er één kaart geselecteerd.
Er zal gestart worden met deel 4 van de standaard. Hierbij zal de lezer een RATS
uitzenden waarop de kaart zal antwoorden en zijn configuratie zal doorgeven. Uit
deze configuratie kan ook het type kaart afgeleid worden.
Voor de exacte betekenis van alle commando’s kan de documentatie van de
standaard geraadpleegd worden [11]. Hierin wordt elke bit verklaard.
14
Hoofdstuk
3
MiFare
De meest gebruikte implementatie van ISO/IEC 14443 is de MiFare implementatie
van NXP Semiconductors. Er zijn vele verschillende types van deze implementatie. De drie meest gekende zijn MiFare Classic, MiFare Plus en MiFare DESFire.
Daarnaast is er onder andere de MiFare Ultralight, deze kaart bevat echter geen
beveiliging en is bijgevolg heel goedkoop, maar zeer onveilig.
3.1 MiFare Classic
Het meest populaire type van MiFare is de Classic variant. Omwille van de populariteit van deze kaarten is de veiligheid al grondig onderzocht en zijn er vele problemen
gevonden. Deze kaart implementeert ISO/IEC 14443 type A tot en met deel 3.
Een MiFare Classic kaart heeft een interne geheugenstructuur die onderverdeeld
is in verschillende sectoren. De MiFare Classic 1K heeft 16 sectoren met elk 4
blokken en elke blok heeft een grootte van 64 bytes [16]. De MiFare Classic 4K
heeft 40 sectoren, 32 sectoren bevatten 4 blokken en 8 sectoren bevatten 16 blokken.
Elke blok heeft een grootte van 64 bytes. Een overzicht van deze structuur wordt
weergegeven in Figuur 3.1 [2] [13].
Het allereerste blok dat in deze geheugenstructuur voorkomt, bevindt zich in
sector 0 blok 0. Dit blok kan alleen gelezen worden en bevat de UID en producent
gegevens. Deze UID bestaat uit 4 bytes. Op het einde van elke sector is er nog
een Sector Trailer, deze bevat geheime sleutels en de toegangsvoorwaarden voor die
sector [16]. Deze toegangsvoorwaarden worden per sector gedefinieerd.
Dit type heeft geen enkele beveiliging aan boord tegen relay aanvallen, maar
naast deze aanval is de kaart bovendien ook nog vatbaar voor Brute Force aanvallen en Keystream Recovery aanvallen [3]. Bij een Brute Force aanval zullen alle
mogelijke sleutels geprobeerd worden in de communicatie tussen een kaart en een
lezer. Een Keystream Recovery aanval is geavanceerder. Om deze uit te voeren
moet er volledige toegang zijn over een lezer. Deze zal commando’s verzenden
15
3. MiFare
0xff
Key A, Access Conditions, U, Key B
Sector 0x27
16 blocks, 256 bytes
0xf0
Data Block
Sector Trailer
0x07
Key A, Access Conditions, U, Key B
0x06
Data Block
0x05
Data Block
0x04
Data Block
0x03
Key A, Access Conditions, U, Key B
0x02
Data Block
0x01
Data Block
0x00
UID, BCC, Manufacturer Data
Sector 0x01
4 blocks, 64 bytes
Sector 0x00
4 blocks, 64 bytes
Figuur 3.1: Geheugenstructuur MiFare Classic 4K
naar de kaart. De sleutel die gebruikt wordt in de communicatie zal door een
zwakheid in de pseudo-willekeurige nummer generator na een tijd zich herhalen.
Doordat er volledige controle is over de lezer, kan het commando waarbij de herhaling optreedt vrij gekozen worden. Op deze manier kan dan de data ontcijferd worden.
3.2 MiFare Plus
Om de problemen van MiFare Classic op te lossen, is er een opvolger gemaakt, de
MiFare Plus [15]. Deze bevat veel meer beveiligingstechnieken. Daardoor zijn ook
vele problemen met de Classic opgelost. Zo is de UID van 4 bytes uitgebreid naar
7 bytes, want door de grote hoeveelheid kaarten was de UID niet meer uniek. Om
de compatibiliteit met de Classic variant te verzekeren kan er nog steeds gekozen
worden voor een 4 byte, niet unieke, UID (NUID).
De geheugenstructuur van deze variant is gelijkaardig opgebouwd als bij de
Classic versie. Er zijn hier opnieuw 2 groottes, een 2K en een 4K variant. De MiFare
Plus 2K heeft 32 sectoren met elk 4 blokken. De MiFare Plus 4K heeft 32 sectoren
van 4 blokken en 8 sectoren van 8 blokken. Elke blok is 16 bytes groot. Ook hier
is het eerste blok gereserveerd voor de producent gegevens en het laatste van elke
sector bevat de toegangsvoorwaarden voor deze sector.
Deze kaarten ondersteunen vier verschillende veiligheidsniveaus. Veiligheidsniveau 0 is de standaard beveiliging bij levering. Hierbij kan de kaart gebruikt worden
met achterwaartse compatibiliteit voor MiFare Classic of met het ISO/IEC 14443-4
protocol. Veiligheidsniveau 1 geeft dezelfde functionaliteit als MiFare Classic, maar
16
3.3. MiFare DESFire
er kan bijkomstig nog gekozen worden voor een AES authenticatie. Veiligheidsniveau
2 is een uitbreiding van niveau 1. Hierbij is de AES authenticatie verplicht en heeft
het zwakke CRYPTO1 algoritme een wijziging ondergaan voor het genereren van
de sleutels. Deze worden vanaf nu gegenereerd op basis van de resultaten van de
AES authenticatie. Bij het gebruiken in veiligheidsniveau 3 is er geen achterwaartse
compatibiliteit en zal de kaart volledig werken volgens ISO/IEC 14443-4. In dit
beveiligingsniveau is er een verplichte AES authenticatie tussen de lezer en de kaart.
Alle berichten die verzonden worden tussen de kaart en de lezer kunnen voorzien
worden van een bericht authenticatie code (MAC ). Als er een hoge performantie
vereist is, dan kan dit uitgeschakeld worden. In dit laatste niveau is er ook een
mogelijkheid om een nabijheidscontrole te doen met een distance bounding protocol
om relay aanvallen te voorkomen.
Het distance bounding protocol dat gebruikt wordt in het hoogste beveiligingsniveau zal later blijken geen echt distance bounding protocol te zijn. Zoals in
Hoofdstuk 8.2 besproken zal worden, moet zo’n protocol een 1-bit uitwisseling fase
bevatten. Uit metingen, in Bijlage A, blijkt dat deze niet aanwezig is. Er is echter niet
geweten hoe deze distance bounding geïmplementeerd is aangezien de implementatie
van deze standaard niet publiek beschikbaar is.
3.3 MiFare DESFire
Naast de zonet besproken Plus versie, is er ook een MiFare DESFire implementatie [14] die betere beveilingingstechnieken aan boord heeft dan MiFare Classic. Dit
type is volledig compatibel met ISO/IEC 14443, van deel 1 tot en met deel 4. Voor
de beveiliging wordt er gebruik gemaakt van zowel 3DES als van AES.
Deze kaarten hebben een totaal verschillende geheugenstructuur dan de reeds
behandelde kaarten. Hier wordt een bestanden en mappenstructuur gebruikt in
plaats van de eenvoudige blokken, hierdoor zijn deze kaarten veel flexibeler in het
gebruik.
17
Hoofdstuk
4
Proxmark3
Om de relay aanval te kunnen realiseren zal er gebruik gemaakt worden van een
Proxmark3 [21]. Met dit instrument kunnen RFID signalen onderschept en uitgelezen worden, alsook gegenereerd en uitgezonden, en dit zowel op hoge frequenties
(13.56 MHz) als op lage frequenties (125 kHz). Deze eigenschappen maken dit bord
uitermate geschikt voor een relay aanval implementatie. In dit hoofdstuk zal de
functionaliteit van de Proxmark3 toegelicht worden, in de volgende hoofdstukken
wordt ingegaan op hoe deze zal gebruikt worden voor de implementatie van de relay
aanval.
Het Proxmark3 project is oorspronkelijk gestart door Jonathan Westhues en
wordt nu door verschillende mensen onderhouden en verder uitgebreid. Zo zijn er
verschillende standaarden toegevoegd aan het Proxmark3 project, waaronder ook
de ISO/IEC 14443a standaard. Om ervoor te zorgen dat het project gestructureerd
blijft, kan men het conceptueel onderverdelen in een aantal verschillende onderdelen.
Zo wordt er een deel van de code op de computer uitgevoerd, kunnen intensieve
berekeningen op de ARM processor gebeuren en voor de aansturing van de antenne
is er een FPGA aanwezig.
4.1 Hardware
De Proxmark3 bevat hardware die gebruikt wordt om RFID signalen te verwerken,
zowel hoog- als laagfrequente signalen. Hiervoor is er onder andere een ARM processor en een FPGA aanwezig. Deze twee componenten worden in de volgende secties
verder besproken. In Figuur 4.1 zijn de belangrijkste componenten aangeduid.
Voor de verbinding met de computer is er een USB poort aanwezig die het bord
ook van stroom voorziet. Naast deze interface is er ook nog een antenne interface
aanwezig. Deze bestaat uit vier pinnen: een hoog frequente in- en uitgang, en een
laag frequente in- en uitgang. Deze scheiding is nodig omwille van een verschillend
analoog circuit voor de laag- en hoogfrequente signalen. De gebruikte componenten
in de twee circuits zijn iets verschillend. Zo hebben de weerstanden een andere
19
4. Proxmark3
resistiviteit, dit om andere filter karakteristieken te bekomen.
Voordat het antenne signaal de FPGA binnen komt, wordt dit nog gedigitaliseerd
door de aanwezige Analoog-naar-Digitaal Convertor (ADC ). Deze zal het analoge
signaal omzetten naar een acht-bit signaal en dit daarna aan de FPGA aanleggen.
USB
ADC
Antenne
ARM
FPGA
Figuur 4.1: Proxmark3
Het bord is ook voorzien van vele test pinnen. Dit zijn plaatsen waar je een
signaal eenvoudig kan uitlezen met bijvoorbeeld een oscilloscoop. Zo zijn de antenne
in- en uitgangen beschikbaar via test pinnen. Het analoge signaal dat aangelegd
zal worden aan de ADC is ook uit te lezen via een test pin. Er is ook een mogelijkheid om signalen vanuit de FPGA aan een test pin aan te leggen. Deze test pin
wordt weergegeven in Figuur 4.2. Dit kan heel handig zijn voor het debuggen van
de FPGA code. Als laatste is er ook een pin aanwezig die verbonden is met de
grond van de Proxmark3, later zal deze nodig zijn voor de relay aanval implementatie.
4.2 Computer software
Vanop de computer kunnen er commando’s naar de Proxmark3 verzonden worden.
Deze zullen via USB naar het bord doorgestuurd worden. Samen met de commando’s
kunnen er eventueel ook nog parameters doorgegeven worden naar het bord. Op
de Proxmark3 zullen ze door de ARM processor geïnterpreteerd worden. De code
op de computer, die hiervoor zorgt, is geschreven in C. Naast het verzenden van
commando’s zal deze code ook de resultaten ontvangen en op een overzichtelijke
manier weergeven. Eventueel kunnen er zelfs grafieken getekend worden.
20
4.3. ARM software
Figuur 4.2: Proxmark3 Test pin
4.3 ARM software
Net als de software op de computer is ook de software voor de ARM processor
geschreven in C. Deze software zal voortdurend naar de USB interface luisteren en
als er een commando wordt herkend, dan zal deze USB interface even genegeerd
worden en zal het opgegeven commando worden uitgevoerd. Er zijn vele verschillende
commando’s mogelijk. De belangrijkste commando’s in het kader van deze thesis
zijn de commando’s van de ISO/IEC 14443a implementatie.
In de implementatie van de ISO/IEC 14443a standaard zijn de drie belangrijkste
commando’s snoop, reader en sim.
Met het snoop commando kan de communicatie tussen een lezer en een kaart
afgeluisterd worden. Alle overgedragen bits worden opgeslagen in de ARM processor
en via het list commando kunnen deze weergegeven worden op de computer. Een
afluister resultaat van de communicatie tussen een kaart en lezer wordt weergegeven
in Bijlage A.
Door middel van het reader commando kan een kaart uitgelezen worden. Dit commando zal deel 3 van de ISO/IEC 14443 standaard uitvoeren. Op deze manier kan
het type kaart (MiFare Classic, MiFare Plus, . . . ) gevonden worden alsook de UID
van de kaart. Het verdere verloop van een MiFare implementatie, de communicatie
bovenop de ISO/IEC 14443-4 standaard, wordt niet ondersteund door de Proxmark3.
Code 4.1 geeft een voorbeeld van het reader commando en de bijhorende resultaten.
Via het sim commando kan een kaart gesimuleerd worden, via de computer moet
er onder andere een UID doorgegeven worden. Aan de hand van die gegevens zal
de Proxmark3 pakketten maken en deze op het juiste moment doorgeven naar de lezer.
proxmark>
ATQA : 42
UID : 04
SAK : 20
hf 14a reader
00
5c 64 8a 4d 2b 80
[1]
21
4. Proxmark3
SAK : NXP MIFARE DESFire 4k | DESFire EV1 2k/4k/8k | Plus 2k/4k | JCOP
31/41
ATS : 0c 75 77 80 02 c1 05 2f 2f 01 bc d6 60 d3
- TL : length is 12 bytes
- T0 : TA1 is present, TB1 is present, TC1 is present, FSCI is 5
- TA1 : different divisors are supported, DR: [2, 4, 8], DS: [2, 4, 8]
- TB1 : SFGI = 0, FWI = 8
- TC1 : NAD is NOT supported, CID is supported
- HB : c1 05 2f 2f 01 bc d6 -> MIFARE Plus X 2K or 4K
c1 -> Mifare or (multiple) virtual cards of various type
05 -> Length is 5 bytes
2x -> MIFARE Plus
2x -> Released
x1 -> VCS, VCSL, and SVC supported
Code 4.1: Proxmark3 Reader Commando
Om deze functies te kunnen uitvoeren zijn er nog rekenintensieve bewerkingen
nodig. Zo moeten de ontvangen signalen gedecodeerd worden, want de signalen verzonden door een lezer zijn Miller gecodeerd en de signalen verzonden door een kaart
zijn Manchester gecodeerd. De codering is veel eenvoudiger, zo kan voor Manchester
codering elke ’1’ vervangen worden door het hexadecimale symbool 0xF0 en een ’0’
door het hexadecimale symbool 0x0F. Deze symbolen worden dan met acht keer
hogere snelheid doorgestuurd zodat er een Manchester codering ontstaat. Hetzelfde
wordt gedaan voor Miller codering, maar hierbij moet er rekening gehouden worden
met de voorgaande bit. Voor meer informatie over de codering verwijzen we naar
Hoofdstuk 2.2 van deze thesis.
Voordat de signalen uiteindelijk kunnen verzonden worden via de antenne naar de
kaart zullen deze in de FPGA verder worden verwerkt. De pakketten worden via een
Synchronous Serial Port (SSP) verzonden naar de FPGA. De belangrijkste pinnen
voor deze interface zijn een klok, een data in, een data uit en een frame signaal. Met
het frame signaal worden de bytes voorgesteld door telkens bij het begin van een
byte dit signaal hoog te maken. Vanuit de ARM processor kan er byte per byte
gelezen of geschreven worden naar deze interface. In de FPGA zal er bit per bit
moeten gewerkt worden en er moet rekening gehouden worden met het frame signaal
om bytes te kunnen vormen.
4.4 FPGA
Voor de eigenlijke communicatie met de antenne wordt er gebruik gemaakt van een
FPGA. Hier wordt een Spartan II gebruikt die op een klok frequentie van 13.56 MHz
werkt. De logica voor deze FPGA wordt gegenereerd met Verilog. De FPGA zal de
laatste operaties uitvoeren op het signaal voordat dit uitgezonden wordt of de eerste
operaties, na ontvangst, voordat deze verder verwerkt worden door de ARM processor.
22
4.5. Antenne
De signalen die in de FPGA binnenkomen vanuit de ARM processor zijn reeds
Manchester of Miller gecodeerd. Deze zullen door de FPGA nog verder worden
gemoduleerd op de draaggolf. De gebruikte modulatie is ASK of belastingsmodulatie
zoals beschreven in Sectie 2.2. Hierna worden ze via tri-state buffers op de antenne
geplaatst. Hiervoor zijn er zes uitgangen op de FPGA, één uitgang zal uit het hoog
frequente signaal bestaan, één zal het laag frequente signaal zijn en de vier andere
zullen de tri-state buffers in- en uitschakelen. Op deze manier kan het gemoduleerde
signaal samen met de draaggolf gegenereerd worden.
Alle signalen die opgevangen worden door de antenne, worden eerst gedigitaliseerd
door de acht-bit ADC. Deze acht bits worden daarna gedemoduleerd, zodat het
overblijvende signaal alleen nog Manchester of Miller gecodeerd is. De overblijvende
bit stroom zal dan via de SSP naar de ARM verzonden worden waar de verdere
bewerkingen plaats vinden.
Om de FPGA tijdens een live test nog te kunnen debuggen, is er een extra
output aanwezig die rechtstreeks aan de test pin verbonden is. Op deze manier
kan een signaal rechtstreeks vanuit de FPGA uitgelezen worden door een oscilloscoop.
4.5 Antenne
Om de signalen te kunnen opvangen en uitzenden wordt er een antenne aan de
Proxmark3 aangesloten. Dit gebeurd via een Hirose connector. Er zijn twee soorten
antennes beschikbaar, een hoog frequente en een laag frequente antenne. De laag
frequente antenne is er voor signalen met een frequentie van 125 kHz. De antenne
die in deze thesis gebruikt zal worden, de hoog frequente antenne, is gemaakt voor
13.56 MHz signalen.
De hoog frequente antenne is opgebouwd uit een draad die een circulair spoel
van drie windingen vormt met een diameter van 5 cm [21].
4.6 Signalen
Alle sequenties, die ontvangen en verzonden worden via de Proxmark3, worden op
een hexadecimale manier voorgesteld. In het verdere verloop zal soms op deze hexadecimale voorstellingswijze teruggekomen worden. Een overzicht van de gebruikte
hexadecimale waarden kan gevonden worden in Tabel 4.1. Voor het gebruik van de
sequenties kan er terug gegrepen worden naar Hoofdstuk 2.2.
Deze hexadecimale symbolen maken de verwerking van de signalen in de FPGA
eenvoudiger. Om bijvoorbeeld een signaal uit te zenden naar de kaart zullen de
sequenties X, Y en Z gebruikt worden. Dit wil dus zeggen dat er in de hexadecimale
23
4. Proxmark3
voorstelling twee symbolen kunnen doorgestuurd worden, namelijk 0xC en 0x0. Deze
vier bits worden dan telkens gebruikt voor de aan-uit modulatie van de draaggolf
van 13.56 MHz.
Sequentie
D
E
F
X
Y
Z
Hexadecimale voorstelling
0xF0
0x0F
0x00
0x0C
0x00
0xC0
Tabel 4.1: Hexadecimale voorstelling uit te zenden sequenties
24
Hoofdstuk
5
Opstelling
De Proxmark3, het bord dat in het vorige hoofdstuk is besproken, zal aan de basis
liggen van onze implementatie van de relay aanval. Door het gebruik hiervan is er al
een werkende implementatie voor de communicatie met de smartcard en de lezer van
het toegangscontrolesysteem. In dit hoofdstuk zal de opstelling van de aanval opgebouwd worden samen met een methode om deze te testen. In het volgende hoofdstuk
wordt dan besproken hoe deze opstelling gebruikt zal worden in de eigenlijke relay
aanval en welke specifieke implementatie aanpassingen hiervoor nodig zijn.
5.1 Concept
Voor deze implementatie van de relay aanval zullen er twee Proxmark3 borden
gebruikt worden. Er zal er één gebruikt worden als valse lezer, deze zal zich naast
de geldige smartcard van een gebruiker bevinden. De andere Proxmark3 wordt
gebruikt als valse kaart en zal zich dus naast de echte lezer bevinden. Deze twee
componenten zullen met elkaar verbonden worden door middel van enkele draden en
analoge componenten. Een schematisch overzicht van deze opstelling kan gevonden
worden in Figuur 5.1.
5.2 Hardware
Connectiemogelijkheden
Om een verbinding tussen de twee Proxmark3 borden tot stand te brengen, moet
er een mogelijkheid gevonden worden om extra signalen te kunnen uitsturen en
deze vervolgens ook opnieuw in te lezen. Voor deze toepassing is de Proxmark3
echter niet gemaakt, maar er zijn wel enkele mogelijkheden om extra verbindingen te
maken. Zo worden er bijvoorbeeld maar twee van de vier antenne pinnen gebruikt.
Bijgevolg kunnen we de twee resterende pinnen eventueel gebruiken in onze opstelling.
25
5. Opstelling
Proxmark3
(Valse kaart)
Lezer
ARM
Proxmark3
(Valse lezer)
PC
PC
ARM
FPGA
FPGA
Buffer
Figuur 5.1: Opstelling van de relay aanval
Laag uit
Laag in
Hoog uit
Hoog in
Een schematisch overzicht van de antenne interface wordt weergegeven in Figuur 5.2. De Hoog in en Hoog uit pin worden gebruikt door de antenne om de signalen
te kunnen verzenden en ontvangen. Om deze te kunnen gebruiken voor de relay
aanval zal er extern nog logica moeten toegevoegd worden, zoals een FPGA. Dit zou
echter voor een minder voor de hand liggende implementatie en een sterk verhoogde
complexiteit zorgen. Vandaar dat er niet voor gekozen is. De twee laag frequente
pinnen worden echter nog niet gebruikt. Er moeten echter voldoende hoge snelheden
kunnen gehaald worden, aangezien één van de essentiële vereisten bij een relay aanval
de snelheid is. De laag frequente uitgang kan signalen tot 13.56 MHz goed uitzenden.
Hogere frequenties zijn ook mogelijk, maar deze zijn niet nodig omdat de kloksnelheid
van de FPGA gelimiteerd is tot 13.56 MHz. Voor inkomende signalen is de snelheid
echter beperkt tot 1 à 2 kHz. De oorzaak van deze lage snelheid is te vinden in het
analoge circuit dat voor de eerste verwerking van deze signalen zorgt.
Figuur 5.2: Antenne Interface
26
5.2. Hardware
De snelheid van de inkomende signalen zou heel laag liggen indien er alleen
gebruik gemaakt zou worden van de antenne interface. Er is echter ook nog een test
pin aanwezig die rechtstreeks verbonden is met de FPGA. Standaard wordt deze
gebruikt als uitgang om te kunnen debuggen. Door de Verilog code aan te passen is
het ook mogelijk om deze te gebruiken als ingang. De maximale snelheid van deze
pin wordt gelimiteerd door de aansturing, die verder in dit hoofdstuk ontworpen
wordt, en de kloksnelheid van de FPGA. Er kan dus ontvangen worden tot 13.56 MHz.
Voordat de uitgang van de ene Proxmark3 met de ingang van de andere verbonden kan worden, moet er nog met enkele zaken rekening gehouden worden. De
standaard connector van de antenne kan niet gebruikt worden. Want bij deze connector bevindt de draad met het laag frequente uitgangssignaal, de draad die het
signaal zal bevatten dat naar de tweede Proxmark3 verstuurd zal worden, zich net
naast de draad met het hoog frequente uitgangssignaal. Deze signalen zullen elkaar,
door de ontstane capaciteit, beïnvloeden, dit wordt overspraak genoemd. De oorzaak
is te vinden bij de draden zelf, deze zijn namelijk niet geïsoleerd en ze zijn op een
korte afstand van elkaar gepositioneerd. Bij het verzenden van een ‘1’ over de laag
frequente uitgang, wordt deze naar een spanning van ongeveer 5 V gebracht. Dit zal
dus de naastliggende draad van het hoog frequente signaal beïnvloeden en hierop
zal een spanning van ongeveer 0.5 V verschijnen. Deze extra ongewenste spanning
wordt gesuperponeerd op het gewenste signaal dat een maximale amplitude heeft
van 5 V. Deze extra ruis zorgt voor een afwijking van 10 % op het signaal en dat
is te veel. Tijdens het uitzenden van signalen via de antenne, zal er hierdoor dus
ook een ruissignaal naar de andere Proxmark3 verzonden worden en dit zorgt voor
vele fouten. Om dit op te lossen werd er een nieuwe connector gemaakt waarbij de
draden van de laag frequente signalen verwijderd zijn. De ongewenste capaciteit
is nu sterk gereduceerd door de afgenomen ‘oppervlakte’ van de capaciteit. Door
het verwijderen van de draden kan het signaal niet meer via de antenne uitgelezen
worden. Dankzij de aanwezige test pinnen is er toch nog een mogelijkheid om het
signaal op de laag frequente uitgang te kunnen uitlezen. De spanning die bij deze
nieuwe connector gesuperponeerd wordt op de andere draad is nu nog maar 0.1 V.
Indien dit nog verder moet gereduceerd worden, zal de connector nog verder moeten
aangepast worden. Zo kunnen de twee niet gebruikte metalen plaatjes voor de laag
frequentie signalen verwijderd worden. Deze plaatjes zijn aanwezig om de draden
aan te solderen, maar deze worden niet gebruikt zoals hierboven reeds vermeld.
Zonder deze laatste aanpassing van de connector werden de signalen niet meer zo
erg beïnvloed door elkaar. Daarom is deze laatste aanpassing niet meer doorgevoerd.
Op Figuur 5.3 worden de gebruikte in- en uitgang aangeduid.
Toegevoegde hardware
De uitgang van de valse lezer kan niet rechtstreeks verbonden worden met de ingang
van de valse kaart. Dit komt doordat het signaal dat uit de laag frequente uitgang
komt een amplitude heeft van 5 V en de poort waar het signaal binnenkomt recht27
5. Opstelling
Uitgang
Ingang
Figuur 5.3: Proxmark3 connectie
streeks aan de FPGA verbonden is. De maximale amplitude van het ingangssignaal
wordt dus bepaald door de FPGA. Het signaal van deze test pin komt de FPGA
binnen via pin P22, deze bevindt zich in bank 6 [22]. De maximale ingangsspanning
van bank 6 bedraagt 3.3 V. Dit heeft als gevolg dat de amplitude van het signaal
moet verlaagd worden zodat deze niet hoger dan 3.3 V kan worden. Daarnaast is
het ook niet zeker dat de laag frequente uitgang van het bord voldoende stroom kan
leveren om het signaal over een langere draad te verzenden. Door dit signaal door
een buffer te laten gaan worden deze problemen opgelost.
Omwille van de problemen die in de vorige paragraaf beschreven zijn, is er bijgevolg een schakeling gebouwd die al deze problemen zal oplossen. Een schematisch
overzicht van deze schakeling wordt weergegeven in Figuur 5.4. Deze schakeling zal
twee keer gebouwd worden, één keer voor het signaal van de valse kaart naar de valse
lezer en één keer voor de signalen in de andere richting.
Als eerste component in de schakeling is er een operationele versterker in eenheidsterugkoppeling geplaatst. Deze zal aan de uitgang dezelfde spanning hebben als aan
zijn ingang. Het doel van deze versterker is om meer energie aan het verdere deel
van het circuit te kunnen leveren. Dit is de bufferfunctionaliteit van de schakeling.
De operationele versterker wordt symmetrisch gevoed met een bron van −7 V en
7 V. Er is voor deze spanning gekozen omdat het ingangssignaal tijdens normale
werking amplitudes heeft tot 5 V. Bij een stijgende flank kunnen er echter pieken
ontstaan van 7 V of meer. Om de mogelijke problemen met het dynamische bereik
van de versterker te minimaliseren is er dus gekozen voor een voeding van ±7 V. Deze
operationele versterker moet blokgolf signalen van 847.5 kHz kunnen versterken. Een
blokgolf bestaat uit een oneindige sommatie van sinussen, hoe hoger de frequentie van
de sinus kan zijn, hoe beter de blokgolf wordt benaderd. Vandaar dat de versterker
28
5.2. Hardware
een voldoende hoge bandbreedte moet hebben. Er is nog een tweede belangrijke
eigenschap nodig voor de versterker. Deze moet namelijk snel zijn uitgangsspanning
kunnen laten stijgen, de slew rate moet hoog genoeg zijn. De beide specificaties van
de TL084A [10] versterker zijn voldoende voor deze toepassingen. Deze heeft een
bandbreedte van 3 MHz en een slew rate van 13 V/µs, dit zou voldoende moeten zijn
om de blokgolf voldoende te kunnen bufferen.
+7 V
−
vin
+
15 kΩ
−7 V
vuit
8.2 kΩ
Figuur 5.4: Buffer Circuit
Aan de test pin mag slechts een signaal met een amplitude van maximaal 3.3 V
geplaatst worden. Momenteel wordt er door de operationele versterker een signaal
met een amplitude van 5 V uitgezonden. Om de nodige spanningsreductie te realiseren wordt er gebruik gemaakt van een spanningsdeler. Na enkele testen blijkt dat
het aanleggen van een signaal van 1.5 V reeds voldoende is om het signaal als een ‘1’
te laten voorstellen in de FPGA. Aan de hand van Formule 5.1 is er dan voor een
weerstand van 15 kΩ en een van 8.2 kΩ gekozen. Door deze twee weerstanden zal
de maximale uitgangsspanning gereduceerd worden tot ongeveer 1.7 V. In extreme
gevallen kan de uitgang van de versterker toch 7 V worden, door de spanningsdeler
wordt deze maximale spanning aan de ingang van de FPGA vervolgens gelimiteerd
tot 2.5 V. Als extra beveiliging zou er nog een Zener diode kunnen geplaatst worden
aan de uitgang, deze zou dan de maximale spanning limiteren tot 2.4 V (met behulp
van BZX55/2.4V [20]). Dit wordt in Figuur 5.4 weergegeven in stippellijnen.
Vout =
Z2
Vin
Z1 + Z2
(5.1)
Deze Zener diode moet in sper worden geplaatst. Een Zener diode werkt in voorwaartse richting zoals een gewone diode en zal in die configuratie stroom doorlaten.
De speciale eigenschap van een Zener diode kan gebruikt worden als deze in sper
wordt geplaatst. In die configuratie zal de component de spanning limiteren, dit
gebeurt doordat de diode gaat geleiden als de spanning boven de zenerspanning (Vz )
29
5. Opstelling
stijgt. Bij de BZX55/2.4V Zener diode bedraagt deze 2.4 V. Vanaf dat punt zal
deze stroom laten wegvloeien om zo te voorkomen dat de spanning te hoog wordt.
De karakteristiek van een Zener diode wordt weergegeven in Figuur 5.5, op de x-as
wordt de negatieve uitgangsspanning weergegeven. De hoge frequenties die in onze
opstelling gebruikt worden zijn echter te hoog voor de meeste Zener diode’s en de
maximale spanning wordt ook reeds gelimiteerd door de voeding van de versterker
juist te kiezen en te laten volgen door een spanningsdeler. Omwille van deze redenen
werd de beveiliging met een Zener diode niet toegepast in onze opstelling.
I
Vz
Figuur 5.5: Zener Diode
I
V
Vd
V
Figuur 5.6: Diode
Om negatieve pieken tot het minimum te beperken is er een diode geplaatst
tussen de grond en de uitgang van deze schakeling. Er is gekozen voor een diode die
hoge snelheden kan verwerken, de 1N914 [19] diode. Deze diode staat bij normale
werking in sper en zal dus geen invloed hebben op het circuit. Als de uitgangsspanning negatief wordt, dan zal deze wel gaan geleiden. Zo zal vanaf een uitgang
lager dan −0.7 V de diode perfect gaan geleiden. Op deze manier zal een te hoge
negatieve uitgangsspanning voorkomen worden. De karakteristiek van een diode
wordt weergegeven in Figuur 5.6, de spanning die wordt weergegeven is de negatieve
uitgangsspanning. Vd is de spanning waarop de diode gaat geleiden.
Als voeding moet er een symmetrische spanning gegenereerd worden. Dit wordt
gerealiseerd door twee voedingen te nemen en in te stellen op 7 V. Hierna wordt de
positieve uitgang van de ene voeding verbonden met de negatieve uitgang van de
tweede voeding zoals weergegeven in Figuur 5.7. Hierdoor hebben we een grond,
−7 V en +7 V. De grond van deze voeding moet gelijk gesteld worden aan de grond
van de Proxmark3. Als dit niet gedaan wordt, dan zal er een verschil ontstaan tussen
de spanningen. Zo zou een digitale ‘0’ moeten worden voorgesteld door 0 V op de
Proxmark3. Als de gronden niet verbonden zijn, kan dit niet gegarandeerd worden
30
5.3. ARM
aangezien een ‘0’ wordt voorgesteld door de grond van de voeding. En de grond van
de symmetrische voeding kan een spanningsverschil hebben met de grond van de
Proxmark3. Dit kan opgelost worden door de grond van de voeding te verbinden
met de grond test pin van de Proxmark3. Voor een uitvoering van deze relay aanval
over grote afstand moet hier ook rekening met gehouden worden. De gronden van de
twee Proxmark3 borden en de analoge schakeling moeten gelijk zijn, hiervoor zal er
dus een derde draad nodig zijn.
+
+7 V
7V
−
+
7V
−
0V
−7 V
Figuur 5.7: Symmetrische Voeding
5.3 ARM
De C code op de ARM processor zal niet veel wijzigingen moeten ondergaan. Deze
zal enkel dienst doen om de extra toegevoegde commando’s van de computer door te
geven aan de FPGA. Zo wordt de FPGA in een juiste mode geplaatst. Deze beslissing
is genomen omdat het doorsturen van data vanop de ARM processor moeilijk is door
het ontbreken van communicatiemogelijkheden met een andere Proxmark3. Er is
alleen toegang tot de USB interface en deze is verbonden met de computer. Wanneer
deze interface dan zou gebruikt worden als verbinding met de andere Proxmark3,
dan zal alle data door de computer moeten doorgestuurd worden naar de andere
Proxmark3. Dit zou voor een zeer hoge vertraging zorgen. Er zou eventueel een extra
bord kunnen gemaakt worden dat de USB bus zou onderbreken en alle data voor
de relay aanval hier uit zal filteren en de data die bestemd is voor de computer zal
doorlaten. Dit zou voor een zeer hoge complexiteit zorgen.
Naast deze problemen met de interface moet er ook een zo laag mogelijke vertraging zijn bij het uitvoeren van de relay aanval. Als deze data van de antenne door
de FPGA naar de ARM processor zou komen, zou dit voor veel extra vertraging en
complexiteit zorgen. Ook zorgt een USB interface voor extra data in de hoofding
van deze pakketten, hetgeen ook voor een extra vertraging zou zorgen.
31
5. Opstelling
5.4 FPGA
Zoals reeds aangehaald in de vorige sectie zal het effectieve doorsturen van de data
gebeuren op FPGA niveau. Hoe de relay aanval zal worden gerealiseerd in de Verilog
code zal in het volgende hoofdstuk uitgelegd worden. In deze sectie zal het principe
en het testen van de verbinding besproken worden.
De twee Proxmark3 borden zullen met elkaar communiceren via twee pinnen,
namelijk pin P22, de debug pin, en pin P81, de laag frequente uitgang. Deze eenvoudige interface kan volledig zelf gedefinieerd worden, maar aangezien er maar
twee lijnen ter beschikking zijn, zijn er niet veel mogelijkheden meer. De twee
FPGA’s werken beide op dezelfde kloksnelheid, namelijk 13.56 MHz. Er wordt verondersteld dat deze niet erg zullen uit elkaar lopen. Er mag namelijk enkel een
constant fase verschil zijn tussen deze twee klokken. Deze limitatie is nodig om
geen klok te moeten doorsturen over de interface. Moest dit nodig zijn, zou de
klok moeten afgeleid worden uit de data. Dit is bij Manchester codering mogelijk,
maar niet bij Miller codering. Ook zouden er dan op de FPGA van de Proxmark3
twee klokdomeinen zijn. Dit zou extra hardware en extra vertraging veroorzaken
om de data over te dragen tussen deze domeinen. Op de twee pinnen wordt dus
alleen maar data verzonden: één pin voor inkomende data en één voor uitgaande data.
Het inkomende signaal in de FPGA kan echter niet rechtstreeks in een register
geplaatst worden. Doordat er een mogelijk faseverschil is tussen de klokken van de
twee FPGA’s, samen met een ongekende vertraging ten gevolge van het analoge buffer
circuit, kan het zijn dat de aanleg- en aanhoudtijden van het register niet worden
gerespecteerd. Hierdoor bestaat er de mogelijkheid dat het register in een metastabiele toestand terecht komt [1]. Tijdens een metastabiele toestand zal de uitgang
van een register zich tussen hoog en laag bevinden en zich na een tijd in een stabiele
toestand plaatsen. De tijd die hiervoor nodig is, kan echter de opgelegde restricties
voor het correct werken overschrijden. Hierdoor zullen er verderop in de logica fouten
optreden omwille van een fout signaal. Om dit te voorkomen wordt het signaal door
een synchronisatiepad gestuurd. Het gebruikte synchronisatie pad wordt weergegeven
in Figuur 5.8. Dit bestaat uit twee registers waar de data wordt ingeklokt. Telkens
er een register wordt toegevoegd verkleint de kans op metastabiliteit sterk. Het
toevoegen van een register zal ook voor een extra vertraging zorgen tijdens het uitvoeren van de relay aanval. Vandaar dat er voor een ketting van twee registers is gekozen.
5.5 Test Code
De communicatiemogelijkheid, die is toegevoegd aan het Proxmark3 project, moet
eenvoudig te testen zijn. Op deze manier kan dan eenvoudiger gevonden worden
waarom een mogelijke relay aanval niet werkt. Tijdens deze test zullen er gegevens
van de ene Proxmark3 naar de andere worden verzonden. Er is ook een mogelijkheid
32
5.5. Test Code
Datain
D Q
D Q
Dataout
Clock
Figuur 5.8: Synchronisatie Pad
ingebouwd om de vertraging op te meten die ontstaat bij het verzenden en ontvangen.
De code, die hiervoor geschreven is, bestaat uit drie delen. Net zoals het eigenlijke
project is er een klein deel dat op de computer werkt, een deel op de ARM processor
en als laatste een stuk Verilog code voor op de FPGA. De Verilog code is terug te
vinden in Bijlage B.
Computer
Het gedeelte van de code voor de computer is zeer miniem en zal enkel de mogelijkheid toevoegen om een commando naar de ARM door te sturen. Zo is het
algemene commando relay toegevoegd, hierbij zijn er nog extra parameters nodig.
De mogelijke parameters zijn master, slave en delay. In de meester (master)
modus zal de Proxmark3 gegevens verzenden over de verbinding naar de andere
Proxmark. Tevens zal er een teller gestart worden die gestopt wordt als dezelfde
gegevens opnieuw aankomen. In de slaaf (slave) modus zal de Proxmark3 alle
gegevens die via de verbinding ontvangen worden onmiddellijk weer uitsturen. Ook
zullen de ontvangen gegevens weergegeven worden in de terminal van de computer.
Als laatste is er ook nog een mogelijkheid om de vertraging (delay), opgemeten
door de Proxmark3 die in de meester modus heeft gewerkt, uit te lezen.
ARM
De eerste functionaliteit die de ARM processor op zich neemt, is het doorgeven van
het commando naar de FPGA. Naast deze operatie, zal de ARM ook nog een LED
die aanwezig is op het bord laten oplichten. Op deze manier kan er eenvoudig worden
gezien welk bord de meester is en welke de slaaf. In meester modus zullen alle LED’s
oplichten (een gele, groene en twee rode). Bij het gebruik in slaaf modus zullen er
maar twee oplichten, namelijk de gele LED en de rode LED.
Vanop de ARM processor zullen ook de gegevens doorgegeven worden die dienen
verzonden te worden in de meester modus. Voor het verzenden is er gekozen voor
het hexadecimale woord 0xDEADBEEF. Dit woord vereenvoudigt het oplossen van
fouten omdat het een eenvoudig te herkennen patroon heeft. De gegevens moeten
per acht bits doorgegeven worden naar de FPGA. Om de slaaf Proxmark3 op een
33
5. Opstelling
eenvoudige manier geldige gegevens, gegevens die verzonden zijn door de meester,
te laten detecteren, is er overal een prefix van vier ‘1’ bits toegevoegd. Deze keuze
is gemaakt aangezien dit eenvoudig te detecteren is en de snelheid is hier niet van
belang. Er moet op een eenvoudige manier kunnen getest worden of de verbinding
correct functioneert of niet.
De gegevens die ontvangen worden via de relay verbinding, worden door de
FPGA per acht bit doorgegeven naar de ARM processor. Deze zal er voor zorgen
dat deze worden weergegeven in de terminal van de computer via het Dbprintf
commando. Met het delay commando is het ook mogelijk om de vertraging die
optreedt uit te lezen en weer te geven op de computer. De vertraging wordt berekend
in klok cycli van 13.56 MHz en opgeslagen in een 32-bit register. De periode van
één klokslag bedraagt 74 ns. De maximale vertraging die hierdoor kan opgeslagen
worden is ongeveer 316 s, hetgeen zeker voldoende is. Die SSP interface tussen de
ARM processor en de FPGA ondersteunt echter maar 8-bit transacties. Hierdoor
zullen bij het ontvangen de bits moeten verschoven worden in een 32-bit woord en
dan opgeteld worden. De vertraging kan echter niet zomaar omgezet worden naar
gelijk welke tijdseenheid, want de ARM processor ondersteunt geen floating point
operaties. Vandaar dat het resultaat van de meting weergegeven in cycli en in nano
seconden. Deze transformatie heeft alleen een vermenigvuldiging nodig. Dus het
aantal cycli wordt met 74 vermenigvuldigd om zo het resultaat te bekomen.
FPGA
Om gegevens van de ARM processor te kunnen ontvangen moet de FPGA de SSP
interface configureren. Aan deze interface zal er een klok moeten aangelegd worden
met de juiste frequentie. De klok zal een frequentie hebben van 847.5 kHz, dit is ook
de frequentie waarmee de gegevens zullen ontvangen en verzonden worden. Ook het
frame signaal dat de start van een byte zal aanduiden moet gegenereerd worden. Deze
zal gedurende één klokslag van de SSP klok hoog zijn en daarna zeven klokslagen laag.
De gegevens die worden ontvangen via de extra aangemaakte verbinding tussen
de twee Proxmark3 borden zullen, zoals in Hoofdstuk 5.4 besproken is, eerst door
een synchronisatie pad gestuurd worden.
Als de FPGA met het master commando in de meester modus wordt geplaatst,
zal deze alle binnenkomende gegevens van de ARM processor onmiddellijk doorsturen
naar de andere Proxmark3. Hierna zal er een teller gestart worden die blijft ophogen
totdat de uitgezonden data opnieuw worden ontvangen. De ontvangen data zijn in
tussentijd binnen gelezen en heruitgezonden in de slaaf Proxmark3.
In slaaf modus zal de FPGA alle gegevens, die via de extra verbinding toekomen,
in een acht-bit register bufferen. De bit die net is binnengekomen zal ook onmiddellijk
worden teruggezonden naar de andere Proxmark3. Voor het heruitzenden wordt er
34
5.6. Resultaten
niet gecontroleerd of de gegevens geldig zijn door middel van de prefix, deze controle
zal gebeuren in de meester Proxmark3. Van het moment dat in het acht-bit register
de vier meest beduidende bits ‘1’ zijn, zal dit register doorgegeven worden naar de
ARM processor.
Als de FPGA gevraagd wordt om de opgemeten vertraging door te geven, dan
zal deze eerst enkele klokcycli moeten wachten aangezien de ARM processor alle
code sequentieel moet doorlopen. Tussen het plaatsen van de FPGA in de juiste
modus en het starten met luisteren worden er nog enkele acties uitgevoerd, dus de
ARM processor zal nog niet onmiddelijk luisteren naar de SSP interface. Zo zal de
functieoproep voor het configureren van de FPGA nog moeten worden afgesloten
en zal de while lus gestart worden waarin de resultaten ingelezen worden. Als
deze empirisch te bepalen aantal cycli afgelopen zijn, zal de vertraging bit per bit
doorgegeven worden over de SSP interface.
5.6 Resultaten
Het uitvoeren van de relay verbindingstest gebeurt niet op de maximale snelheid,
maar op de snelheid waarbij ook de eigenlijke relay aanval zal uitgevoerd worden.
Een hogere snelheid is niet mogelijk omdat alle ontvangen symbolen onmiddellijk
worden weergegeven in de console van de computer. Wanneer er dan een hogere
snelheid, tot de de maximale snelheid van 13.56 Mbit/s, wordt gezonden over deze
verbinding, dan zal de ARM processor voortdurend aan het wachten zijn op de USB
interface. De oorzaak hiervan is de zeer simplistische wijze waarop deze interface
gebruikt wordt. Elke byte wordt hier afzonderlijk doorgestuurd. Hierdoor zal er veel
tijd verloren gaan bij het uitzenden van de headers en ondertussen blijft de FPGA
symbolen ontvangen en doorsturen naar de ARM. De laatste zal deze niet kunnen
ontvangen, want de ARM processor kan niet gelijktijdig verzenden over USB en
ontvangen via de SSP interface. Deze problemen gaan niet optreden bij het uitvoeren
van de relay aanval, want tijdens deze aanval zullen gegevens op een andere manier
naar de computer verzonden worden. Tijdens de aanval wordt alles eerst opgeslagen
in het geheugen van de ARM processor waarna dit via het hf 14a list commando
kan uitgelezen worden.
De opgemeten vertraging die optreedt bij het verzenden en ontvangen van de
signalen is 16 klokcycli bij een frequentie van 13.56 MHz. Zoals reeds vermeld is dit
de vertraging opgemeten door de meester Proxmark3. Deze zal dus tweemaal de
vertraging opmeten, één keer van de meester naar de slaaf en daarna nog eens van de
slaaf naar de meester. De vertraging van een enkele verbinding is bijgevolg 8 cycli,
wat ongeveer gelijk is aan 590 ns.
De gebruikte draden bij het uitvoeren van deze test waren maar enkele centimeters
lang. De vertraging die hierin zou optreden, samen met het analoge circuit zou ver35
5. Opstelling
waarloosbaar moeten zijn. Dit is ook af te leiden uit de opgemeten vertraging. Deze is
8 cycli op een frequentie van 13.56 MHz, maar er wordt maar om de 8 cycli verzonden
en ontvangen. Zo wordt er bijvoorbeeld in cyclus 0 verzonden, het volgende moment
dat er ontvangen kan worden is in cyclus 8. Met deze korte lengtes van draden
is de opgetreden vertraging verwaarloosbaar. Deze veronderstellingen worden ook
bevestigd door het opmeten van de uitgang van het analoge circuit bij een stapingang
van 5 V. Zoals te zien is in Figuur 5.9 reageert het circuit bijna onmiddellijk, maar
het duurt ongeveer 800 ns voordat het uitgangssignaal zijn verwachtte uitgang heeft.
De oorzaak hiervan is de operationele versterker, deze kan zijn uitgang niet zo snel
op de gewenste spanning brengen. De aangelegde stapingang was 5 V, maar door de
schaling van de probe wordt er een stapingang van 10 V weergegeven op de figuur.
Figuur 5.9: Vertraging analoog circuit
Bij de transmissie treden echter fouten op. Deze worden veroorzaakt doordat er
om de 8 cycli één sample wordt genomen. Indien dit moment echter op een stijgende
of dalende flank van het signaal zit, dan kan een kleine variatie ∆ in de tijd waarop
het sample wordt genomen, een fout veroorzaken. In Figuur 5.10 wordt dit grafisch
weergegeven. Als het sample rond de tijd Ts wordt genomen kan een kleine variatie
in de tijd een foutief sample opleveren. Als dit een ∆ vroeger is, dan zal dit een
‘1’ zijn, maar is dit een ∆ later, dan wordt er een ‘0’ opgeslagen. Dit kan opgelost
worden door meerdere samples te nemen, namelijk in de tussenliggende cycli, maar
deze code doet enkel dienst om de relay verbinding te testen. Vandaar dat deze code
zo eenvoudig mogelijk is gehouden, dus ook zonder foutcorrecties.
36
5.6. Resultaten
V
Ts−∆ Ts+∆
Ts
t
Figuur 5.10: Tijdsvariatie bij het nemen van een sample
37
Hoofdstuk
6
Relay aanval
De basis van de relay aanval is reeds gelegd in het voorgaande hoofdstuk. Nu zal er
alleen nog logica moeten toegevoegd worden in de FPGA zodat de Proxmark3 de
specifieke ISO/IEC 14443 signalen correct kan ontvangen en doorzenden via de relay
verbinding. Na deze toevoegingen zal de aanval worden uitgevoerd op een MiFare
Plus toegangscontrolesysteem dat geconfigureerd is in beveiligingsniveau 3. Er zal
dus een distance bounding protocol actief zijn tijdens de overdracht van gegevens
zoals besproken in Hoofdstuk 3.2.
6.1 Computer en ARM
Voor het uitvoeren van de relay aanval zijn er zeer kleine aanpassingen doorgevoerd
in de code voor op de computer en de ARM processor. Deze moeten enkel de
commando’s om de FPGA in de juiste modus te plaatsen doorgeven. Hiervoor is er
het commando relay toegevoegd aan het deel van de ISO/IEC 14443 standaard.
Zo kan de Proxmark3 in de valse lezer mode geplaatst worden met het commando hf
14a relay r en voor de valse kaart mode wordt het commando hf 14a relay
t gebruikt. In de ARM processor werd ook nog code toegevoegd om de via de
antenne ontvangen gegevens op te slaan en later weer te geven in de console via hf
14a list.
6.2 FPGA
Doordat dezelfde antenne wordt gebruikt voor het uitzenden en ontvangen van
gegevens naar de kaart of lezer, mogen deze twee acties niet gelijktijdig uitgevoerd
kunnen worden. Dit heeft als gevolg dat de FPGA op een intelligente wijze zal
moeten omschakelen tussen deze twee modi, ofwel zendt de FPGA signalen naar
de kaart of lezer, ofwel zal deze gegevens hiervan ontvangen. De aansturing van
de antenne en de relay verbinding kan wel gelijktijdig gebeuren. Standaard zal
de FPGA in luister modus staan, hij zal dus voortdurend luisteren naar signalen
39
6. Relay aanval
die binnenkomen via de antenne en afkomstig zijn van de kaart of de lezer. Elke
ontvangen bit zal doorgegeven worden via de relay verbinding. Van het moment dat
er echter geldige gegevens worden ontvangen via de relay verbinding zal de FPGA
omschakelen naar de zend modus. Als de boodschap beëindigd is, zal de FPGA
opnieuw luisteren naar de antenne.
Bij het uitvoeren van de relay aanval zullen de gegevens, die bij de normale
werking van de Proxmark3 naar de ARM processor doorgegeven worden, via de relay
verbinding doorgestuurd worden. Dit wil zeggen dat deze gegevens enkel maar zijn
ontdaan van de draaggolf waarop ze werden verzonden. Omdat bij het onmiddellijk
doorsturen het foutenpercentage te hoog ligt, is er nog een extra stap toegevoegd.
Zo worden de gegevens eerst gecodeerd voordat ze worden uitgezonden. Bij het
ontvangen moeten deze dus ook eerst een decodering ondergaan. Verder zijn er geen
bewerkingen op deze signalen uitgevoerd, dit zou immers teveel vertraging veroorzaken. De ruwe signalen, die worden ontvangen zonder de codering, worden ook
rechtstreeks doorgestuurd naar de ARM processor. Hierin worden deze nog verder
verwerkt, ze worden onder andere gedemoduleerd, en opgeslagen in een lokale buffer.
Indien gewenst kunnen achteraf via het commando hf 14a list de ontvangen
commando’s van de kaart of lezer weergegeven worden in de console op de computer.
Indien er geen codering zou toegepast worden op de signalen die via de relay
verbinding verstuurd worden, dan zouden er drie verschillende hexadecimale symbolen moeten doorgestuurd kunnen worden. Namelijk 0xF, 0xC en 0x0, Met deze 3
symbolen kunnen alle mogelijke sequenties voorgesteld worden, in Tabel 4.1 worden
deze weergegeven. Het hexadecimale symbool 0xF komt enkel voor bij de signalen
die door de lezer worden uitgezonden en het hexadecimale symbool 0xC komt enkel
voor in de signalen van de kaart. Hierdoor kan het aantal hexadecimale symbolen
per relay verbinding gereduceerd worden tot twee. Er wordt ofwel het symbool 0xF
of het symbool 0x0 uitgestuurd, het symbool 0xC wordt vervangen door 0xF. Deze
codering heeft de Hamming afstand van de mogelijke symbolen verdubbeld. De Hamming afstand tussen de initiële symbolen, 0xF, 0xC en 0x0, is 2, bij de gecodeerde
symbolen is deze 4. Dit komt dus zeker ten goede voor het foutenpercentage. De code
voor het coderen van de gegevens kan teruggevonden worden in Bijlage C. Voor het
decoderen worden de op elkaar volgende enen en nullen geteld. Na 64 samples wordt
er beslist over het binnengekomen hexadecimale symbool. De 64 samples bevatten
vier bits, voor elke bit worden er 16 samples genomen. In plaats van 64 samples zou
men al per 16 samples over de bit kunnen beslissen. Dat zou een lagere vertraging
geven, maar dit zorgde voor een nog te hoog foutenpercentage. De uiteindelijke code
van de decoder staat in Bijlage D. Zowel de encoder als de decoder worden gereset
bij het einde van elk pakket. Op deze manier kunnen eventuele fouten door het
uiteenlopen van de twee klokken opgelost worden.
Om de relay aanval uit te voeren moeten de twee gebruikte Proxmark3’s elk op
een verschillende manier geconfigureerd worden. De ene zal als valse lezer worden
geconfigureerd, deze wordt ook wel de mole genoemd. De andere Proxmark3, ook
40
6.2. FPGA
wel proxy genoemd, wordt als valse kaart geconfigureerd. In Bijlage E kan de Verilog
code gevonden worden voor het wisselen van modus zowel in de valse lezer als de
valse kaart. Deze componenten, de encoder, decoder en de modus logica worden
samengebundeld aan de hand van de code in Bijlage F.
Een schematisch overzicht van de gebruikte architectuur van de Verilog code in
deze relay aanval wordt weergegeven in Figuur 6.1. De drie componenten die hiervoor
kort besproken zijn, zijn hierin duidelijk zichtbaar. Alle lijnen die zichtbaar zijn op
deze figuur zijn één bit breed, enkel mod_type is drie bits breed en D is vier bits
breed. De logica voor de relay aanval communiceert met drie externe componenten.
De eerste is de computer, hierdoor wordt de FPGA in de juiste modus geplaatst. De
tweede component, de relay verbinding, wordt gebruikt om gegevens door te geven
naar en te ontvangen van de andere Proxmark3. De laatste externe component is
de logica voor de communicatie met de antenne, in de figuur wordt deze Hi 14443
genoemd naar de geïmplementeerde standaard.
Hi 14443
Relay
1
Relayin
Decoder
D
4
Computer
1
clk
3
1
reset
1
Dbesch
1
mode
3
mod_type
M ode
1
Dout
mod_type
clk
reset
1
1
mode
1
Hi 14443
1
Din
1
clk
Encoder
Relay
1
Relayout
Figuur 6.1: Verilog Architectuur
Valse lezer
De valse lezer zal bij initialisatie luisteren naar de relay verbinding en naar de signalen
die ontvangen worden van de kaart via de antenne. Deze signalen zullen van hun
draaggolf ontdaan worden. Hierna zullen deze een codering ondergaan en vervolgens
via de relay verbinding doorgestuurd worden naar de valse kaart. Deze Proxmark3
zal zich dus voordoen als een lezer.
41
6. Relay aanval
Inkomende gegevens van de relay verbinding, worden na decodering gebufferd
in een 20-bit schuifregister. De decodering gebeurt in blokken van vier bits, telkens
als er nieuwe bits gedecodeerd zijn, zal er nagekeken worden of de laatste vier ingeschoven bits een start van de communicatie symbool vormen. Meer informatie
over het starten van een bericht wordt beschreven in Hoofdstuk 2.2. De overige 16
bit die zich in het schuifregister, die in de voorgaande klokcycli gedecodeerd zijn,
bevinden moeten nul zijn. Dit is nodig om te voorkomen dat er in het midden
van een bericht een start van het bericht wordt gevonden. Want de hexadecimale
waarde 0xC, dit is het eerste hexadecimale symbool van de start van een bericht
(sequentie Z, zie Tabel 4.1), zal vele keren voorkomen in een bericht. Een voorbeeld
van de buffer wordt in Figuur 6.2 weergegeven. Indien een start van het bericht
wordt gedetecteerd, dan zal de Proxmark3 in zend modus worden geplaatst om zo de
inkomende signalen, met een vertraging van 64 cycli, uit te zenden naar de echte kaart.
Meer informatie over de vertragingen wordt verderop in dit hoofdstuk gegeven. Er
wordt ook een één-bit teller gestart die zal ophogen telkens er vier bit gedecodeerd zijn.
Om de codering tot een goed einde te brengen moet er gesynchroniseerd worden
op het begin van een bericht. De eerste byte van een bericht moet gelijk zijn aan de
binaire 111X 000X. Hierbij is de X een don’t care, dit mag een ‘1’ of een ‘0’ zijn. Als
er op deze sequentie gesynchroniseerd is, dan kunnen de volgende symbolen succesvol
gecodeerd worden. Er zijn drie mogelijke symbolen die ontvangen kunnen worden
(naast 0x0): 0x7, 0xE en 0xF. Deze symbolen hebben telkens drie opeenvolgende
enen, door het moment van bemonsteren en de aanwezigheid van de draaggolf wordt
er af en toe foutief een ‘1’ vervangen door een ‘0’. Deze worden alle drie omgezet
naar het hexadecimale symbool 0xF.
Het schuifregister wordt ook, bij elke toevoeging van vier gedecodeerde bits,
gecontroleerd op een einde van een bericht symbool (zie Tabel 4.1). Dit zijn 16
opeenvolgende nullen (twee maal sequentie Y) of de hexadecimale waarde 0xC000
(sequentie Z gevolgd door sequentie Y). Deze waarden kunnen ook op andere momenten in het bericht gedetecteerd worden. Om verkeerde detecties te voorkomen is
bij de start van het bericht de één-bit teller herstelt op ‘0’. Deze zal de waarde ‘1’
krijgen als er een halve byte is ingelezen en terug op ‘0’ komen als er een volledige
byte is ingelezen en een nieuwe byte van het bericht zal starten. Een einde van een
bericht mag alleen voorkomen als de teller op nul staat en de laatste 16 verzonden
bits het einde van een bericht voorstellen. Als er aan deze voorwaarden voldaan
is, dan zal de Proxmark3 opnieuw overschakelen naar de luister modus. Er word
hier gekeken naar de laatste verzonden bits, wat dus 64 klokcycli later is dan dat
ze in de Proxmark3 ontvangen worden via de relay verbinding. Door te kijken
naar de laatste verzonden bits, kan de Proxmark3 onmiddellijk na het verzenden
hiervan van modus veranderen. Zou er gekeken worden naar de laatste, via de relay
verbinding ontvangen, bits, dan zou er nog een extra vertraging toegevoegd moeten
worden voor het omschakelen omdat deze nog moeten gedecodeerd worden. Deze
extra moeilijkheid wordt omzeild in de bovenstaande methode. De inhoud van de
buffer voor het einde van een communicatie symbool wordt weergegeven in Figuur 6.2.
42
6.2. FPGA
Buffer bij start van een bericht:
0x0000
Buffer bij einde van een bericht:
0x0000 of 0xC000
0xC
Wordt uitgezonden
Wordt uitgezonden
Figuur 6.2: Buffer valse lezer
Valse kaart
De Proxmark3 die werkt als een valse kaart, zal zich voordoen als een kaart naar
de echte lezer. Een valse kaart werkt op een zeer gelijkaardige manier als een valse
lezer, welke deze dan op zijn beurt kan doorsturen naar de echte kaart. Zo worden
alle inkomende berichten van de echte lezer na codering doorgestuurd naar de valse
lezer. Ook zullen de inkomende data van de relay verbinding in een schuifregister
geschoven worden en vervolgens gecontroleerd worden op een start en een einde
van een bericht. Deze controles gebeuren op een identieke manier als bij de valse lezer.
De codering is echter verschillend van deze bij de valse lezer. De oorzaak hiervan
zijn de inkomende gegevens van de antenne. In de Proxmark3 wordt een sequentie F
altijd voorgesteld door het hexadecimale symbool 0x00, maar na ontvangst en demodulatie van deze sequentie wordt deze voorgesteld met het hexadecimale symbool
0xFF. De oorzaak is een keuze die de ontwikkelaars van deze Verilog implementatie
hebben gemaakt om het rekenwerk in de FPGA te beperken. Ook de andere sequenties worden op een verschillende wijze voorgesteld. Sequentie D wordt voorgesteld
met 0xZF, hierbij stelt Z een symbool voor met twee opeenvolgende nullen, en er
werd 0xC0 verwacht. Sequentie E is nu 0xFZ terwijl er 0x0C verwacht werd. Om
deze codering tot een goed einde te brengen, moet er ook nog gesynchroniseerd
worden op de juiste bit positie. Dit gebeurt aan de hand van de start van het bericht.
Deze byte moet gelijk zijn aan het binaire 00XX 1111. De X is een don’t care, deze
bits mogen ‘1’ of ‘0’ zijn.
Naast de verschillen in het coderingproces met de valse lezer, zijn ook de symbolen
waarop gecontroleerd moet worden in de valse kaart verschillend. Een start van
een bericht is in dit geval het hexadecimale symbool 0xF0 (sequentie D) en het
einde van een bericht is 0x00 (sequentie F). De inhoud van de het schuifregister
43
6. Relay aanval
voor het veranderen van modus wordt weergegeven in Figuur 6.3. Daarnaast zal
de FPGA ook in een andere modus geplaatst moeten worden. Deze zal standaard
naar een lezer luisteren en bij de detectie van een bericht op de relay verbinding
zal deze de gegevens naar een lezer verzenden in plaats van een kaart bij de valse lezer.
Buffer bij start van een bericht:
0x0000
0xF
Wordt uitgezonden
Buffer bij einde van een bericht:
0x00
Wordt uitgezonden
Figuur 6.3: Buffer valse kaart
6.3 Werking
Tijdens het uitvoeren van de relay aanval zullen er vele berichten heen en weer
verzonden worden. Verderop zal dit uitgelegd worden aan de hand van een voorbeeld.
Hierbij zal de lezer een REQA of WUPA verzenden en de kaart zal antwoorden
met een ATQA. Dit zijn tevens de eerste commando’s tijdens het uitvoeren van de
relay aanval. Een schematisch overzicht van de relay aanval waarin de belangrijkste
onderdelen zijn aangeduid, wordt getoond in Figuur 6.4. Na deze twee commando’s
gaat het protocol verder, maar de werking hiervan is volledig analoog aan diegene
die hieronder wordt beschreven.
2
4
1
5
Valse kaart
Lezer
FPGA 1
3
8
Valse lezer
Kaart
FPGA 2
10
6
9
7
Figuur 6.4: Werking Relay Aanval
1 Bij een toegangscontrolesysteem zal de lezer periodisch een REQA of WUPA
44
6.4. Resultaten
uitzenden. Dit zal worden ingelezen in de FPGA van de valse kaart via de
antenne.
2 Bij het binnenkomen van het signaal in de FPGA van de valse kaart, wordt het
signaal eerst verwerkt door een ADC, en vervolgens gecodeerd. Deze codering
is uitgelegd in de voorgaande sectie.
3 Op de relay verbinding zullen er maar twee hexadecimale symbolen verzonden
worden, namelijk 0xF en 0x0. Deze worden gebufferd door middel van een
operationele versterker. Daarna wordt dit via een spanningsdeler omgevormd
naar de correcte spanning die mag aangelegd worden aan de FPGA van de
valse lezer.
4 In de valse lezer wordt de gecodeerde REQA ontvangen en deze zal eerst
gedecodeerd worden. Na het decoderen worden de ontvangen bits in een buffer
geplaatst en zal er gewacht worden totdat er een start van bericht gedetecteerd
wordt. Als deze wordt gedetecteerd zal de Proxmark3 zich in zend modus
plaatsen en het binnengekomen bericht uitzenden.
5 De valse lezer zal de REQA opnieuw uitzenden, maar ditmaal naar de echte
kaart. Als het hele bericht verzonden is en het einde van het bericht wordt
gedetecteerd, dan zal de Proxmark3 zich opnieuw in luister modus plaatsen.
6 De echte kaart zal op deze REQA antwoorden met een ATQA. Dit bericht zal
opnieuw ontvangen worden in de valse lezer via de antenne van de Proxmark3.
7 De ontvangen ATQA zal in de FPGA van de valse lezer binnenkomen en
gecodeerd worden. Hierna zal het via de relay verbinding verzonden worden
naar de valse kaart.
8 Het antwoord van de kaart zal opnieuw via de relay verbinding door een buffer
gaan, gevolgd door een spanningsdeler voordat het in de FPGA van de valse
kaart wordt ingelezen.
9 In de valse kaart zal dit antwoord ingelezen worden en gedecodeerd. De
binnengekomen bits zullen in een buffer geplaatst worden totdat een start van
het bericht gevonden wordt. Hierna zal de Proxmark3 in zend modus geplaatst
worden en dit bericht uitzenden naar de echte lezer.
10 Het ATQA bericht van de kaart wordt uitzonden naar de echte lezer. Na
het uitzenden en detecteren van het einde van het bericht zal de Proxmark3
opnieuw in luister modus worden geplaatst.
6.4 Resultaten
De volledige relay aanval is nu geïmplementeerd en de aanval kan uitgevoerd worden op een toegangscontrolesysteem. Het systeem dat zal aangevallen worden is
een operationeel toegangscontrolesysteem dat gebruik maakt van MiFare Plus met
45
6. Relay aanval
beveiligingsniveau 3. Dit is het hoogste beveiligingsniveau dat kan gekozen worden
bij MiFare Plus. Alle informatie over de verschillende beveiligingsniveaus kan teruggevonden worden in Hoofdstuk 3.2.
Vertragingen
Tijdens het verwerken van de signalen treden er verschillende vertragingen op. Er is
getracht om deze zo laag mogelijk te houden, want dit is een van de meest bepalende
factoren voor het al dan wel of niet werken van deze implementatie van de relay
aanval. Alle vertragingen die optreden, tussen het ontvangen van het signaal in de
valse kaart totdat het antwoord wordt uitgezonden in de valse kaart, bedragen samen
416 klokcycli op een frequentie van 13.56 MHz. Dit geeft een vertraging van iets
minder dan 30 µs.
Het inkomende signaal van de echte lezer moet eerst gecodeerd worden. Deze
codering heeft een vertraging van 128 cycli. De oorzaak hiervan is dat er acht bits
moeten gebufferd worden voordat er een beslissing kan genomen worden over het
ontvangen signaal. Zoals reeds eerder uitgelegd werd, moet er gesynchroniseerd
worden op dit signaal aan de hand van acht opeenvolgende bits. En er wordt één bit
ontvangen per 16 cycli, samen geeft dit dan de vertraging van 128 cycli.
De decodering van dit signaal in de valse lezer kan efficiënter gebeuren. Hier
moeten er maar vier bits gebufferd worden voordat er een beslissing genomen kan
worden. Tijdens het bufferen van deze vier bits kunnen er 64 samples genomen
worden en dit is het aantal nodig om voldoende fouten te kunnen onderdrukken,
zoals reeds eerder in dit hoofdstuk uitgelegd. Deze decodering zorgt hierdoor voor
een vertraging van 64 cycli.
Dit signaal zal dan uitgezonden worden in de valse lezer. Deze moet een beslissing
kunnen nemen over het al dan niet starten van het uitzenden. Na decodering worden
de vier bits gelijktijdig doorgegeven om de beslissing te maken over het wisselen van
modus, van luisteren naar zenden of omgekeerd. Deze logica werkt echter op een
andere klokfrequentie dan die van de decoder, namelijk op 847.5 kHz in plaats van
op 13.56 MHz zoals de decoder. Hierdoor is er nog een variabele vertraging mogelijk
met een maximale waarde van 16 cycli.
De echte kaart zal antwoorden en dit antwoord moet gecodeerd worden in de valse
lezer. Deze codering is wat betreft de vertraging gelijkaardig aan deze in de valse kaart.
Er is hier ook een buffering van acht bits nodig, wat een vertraging van 126 cycli geeft.
Als voorlaatste stap voordat het antwoord aankomt bij de echte lezer, moet
het signaal opnieuw gedecodeerd worden. Ook hier moeten er vier bits gebufferd
worden. Zoals in de voorgaande gevallen geeft dit hier weer een vertraging van 64 cycli.
46
6.4. Resultaten
Dit gedecodeerde signaal moet nu uitgezonden worden naar de echte lezer. Hiervoor moet de Proxmark3 van modus wisselen. Net zoals in de valse lezer is er hier
ook een maximale vertraging van 16 cycli omwille van het verschil in klokfrequentie.
Al deze vertragingen samen geeft een vertraging van 416 cycli of 30 µs, hierbij
is de propagatie vertraging van het signaal in de relay verbinding verwaarloosbaar.
Zoals in Figuur 5.9 getoond wordt, is deze vertraging ook zeer klein ten opzichte
van de veroorzaakte vertragingen in de FPGA. Ook zijn er twee extra draadloze
overdrachten nodig, normaal is er alleen een draadloze overdracht van de lezer naar
de kaart en terug. Nu is er een draadloze overdracht van de lezer naar de valse kaart,
van de valse lezer naar de kaart en terug. De vertraging van deze twee extra draadloze
overdrachten wordt ook verwaarloosd. Een overzicht van alle extra vertragingen
wordt weergegeven in Figuur 6.5 [12].
Draadloze overdracht
Draadloze verbinding
Draadloze verbinding
Valse kaart
Codering
Decodering
Relay verbinding
Relay verbinding
Relay verbinding
Valse lezer
Decodering
Codering
Draadloze overdracht
Draadloze verbinding
Draadloze verbinding
Kaart
Extra vertraging
Lezer
Berekening
Figuur 6.5: Extra vertragingen relay aanval
Aanval
Ondanks de veelbelovende testen is het uitvoeren van de relay aanval niet gelukt.
Tijdens het uitvoeren worden er verschillende stappen in het protocol succesvol
doorlopen, maar na enkele stappen treed er telkens een fout op. Tijdens de aanval
kan er een kaart worden opgewekt met het WAKE UP commando en wordt er elke
keer gestart met het uitwisselen van de UID en soms lukt het om een deel van de
UID succesvol uit te wisselen, maar telkens stopt het protocol ergens en wordt er
47
6. Relay aanval
van in het begin opnieuw gestart.
Na verder onderzoek zijn er al vele problemen opgelost en eventuele problemen
geëlimineerd. Zo waren er problemen met de zelf gemaakte antennes, deze hadden
namelijk hun resonantiefrequentie rond 17 MHz. Om echter optimaal te kunnen
functioneren moet deze rond de gebruikte frequentie liggen, namelijk rond 13.56 MHz.
Dit is opgelost door extra capaciteiten te plaatsen in parallel met de antenne. Dit
loste het probleem van de vele transmissiefouten op. Daarnaast was er geen goede
overgang tussen de luister en de zend modus van de FPGA, hierdoor werd de kaart
soms gereset doordat de draaggolf wegviel.
Alle aparte blokken Verilog code zijn ook goed gesimuleerd geweest op de computer. Zo zijn er vele mogelijke berichten aan de encoder blok aangelegd en is er
gecontroleerd of de uitgang de gewenste resultaten gaf. Hetzelfde is ook gebeurd met
de decoder. Om eventuele problemen met de communicatie tussen deze blokken op
te sporen is ook het geheel zo goed als mogelijk gesimuleerd op de computer. Al deze
simulaties gaven de gewenste resultaten, zo wisselde de Proxmark3 van mode bij de
start en einde van een bericht en werden de correcte gegevens naar de standaard
Verilog code van het Proxmark3 project gestuurd.
Ook kan er met zekerheid gezegd worden dat de verbinding van de valse kaart tot
de echte kaart en terug goed werkt. Dit is getest door de valse kaart de echte kaart
te laten uitlezen door de pakketten door te sturen over de relay verbinding en te
laten uitzenden door de valse lezer. Deze test kon elke keer succesvol worden afgerond.
In de vorige test wordt er één onderdeel van de hele opstelling niet getest, namelijk
de verbinding tussen de valse kaart en de echte lezer. Er kan wel gebruik gemaakt
worden van de andere Proxmark3 om het uitzenden van signalen voor de echte lezer
te testen, maar dit kan niet als de hele relay opstelling actief is. Hiervoor is er nog
een derde Proxmark3 nodig. Aan de hand van deze Proxmark3 zouden de draadloze
communicaties tussen de lezer en valse kaart of tussen de kaart en de valse lezer
beter kunnen getest worden.
Om de draadloze communicatie tussen de lezer en de valse kaart of de kaart
en de valse lezer toch nog beter te kunnen testen is er een proefopstelling gemaakt
bestaande uit twee Proxmark3 borden. De ene simuleerde de valse kaart of lezer en
de andere simuleerde de echter lezer of kaart. Op deze manier is er nagekeken of
de signalen die moeten uitgezonden worden ook effectief correct verzonden worden.
Het uitzenden van signalen voor de echte kaart kon al zeer snel succesvol voltooid
worden. Echter signalen die voor de lezer uitgezonden werden, konden minder goed
ontvangen worden. Zo traden er zeel veel transmissiefouten op. Deze problemen
werden opgelost door de antenne aan te passen zodat de resonantie frequentie zich
op 13.56 MHz bevindt. Deze opstelling maakt slechts gebruik van een imitatie van
de echte lezer. De echte lezer zou iets anders kunnen werken of minder tolerant zijn
voor slechtere signalen en dat zou een mogelijk probleem kunnen zijn. Dit is enkel te
48
6.4. Resultaten
controleren door volledige controle te hebben over een lezer.
In Tabel 6.1 worden de gegevens die ontvangen worden tijdens de relay aanval
weergegeven. Pakketten die van de lezer komen, worden ontvangen in de valse kaart
en pakketten van de kaart worden ontvangen in de valse lezer. Bij het bekijken van
deze gegevens kan er besloten worden dat telkens de lezer iets uitzendt de kaart
hierop correct zal antwoorden. Enkel wanneer de vraag van de lezer foutief is, dan
zal de kaart hier niet op antwoorden en zal de lezer na enige tijd opnieuw een REQA
(0x26) uitzenden. Het omgekeerde is niet het geval, telkens de kaart iets uitzendt
komt er, ofwel het correcte antwoord en dan gaat het protocol verder, ofwel zendt de
lezer een REQA uit en dan start het protocol opnieuw van bij het begin, maar soms
antwoord de lezer ook met een reeds uitgezonden pakket. Uit deze gegevens kan ook
afgeleid worden dat de lezer een REQA uitzendt nadat er gedurende een bepaalde
tijd geen reactie is gekomen van de kaart. Uit meer gedetailleerde gegevens kunnen
we ook afleiden dat de lezer standaard om de 320 ms een REQA uitzendt als er geen
antwoord van de kaart is ontvangen. De reden waarom er meerdere malen achter
elkaar om de UID gevraagd wordt (0x9320) is echter onduidelijk.
49
6. Relay aanval
Bron
Lezer
Kaart
Lezer
Kaart
Lezer
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Lezer
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Lezer
Kaart
Lezer
Gegevens
26
42 00
93 20
88 04 5c 64 b4
93 70 00 00 00 00 00
26
42 00
93 20
88 04 5c 64 b4
93 20
88 04 5c 64 b4
93 20
88 04 5c 64 b4
93 53!
26
42 00
93 20
88 04 5c 64 b4
93 70 88 04 5c 64 b4 df ac
04 da 17
26
42 00
93 20
Tabel 6.1: Gegevens ontvangen tijdens relay aanval. Het uitroepteken duidt erop
dat er een fout was in de pariteits bit.
50
Hoofdstuk
7
Mogelijke aanpassingen
Er zijn nog vele manieren om deze relay aanval te verbeteren. Om deze uiteindelijk
toe te passen, moet eerst de aanval succesvol uitgevoerd kunnen worden. Daarnaast is
er nog veel ruimte voor verbeteringen en meer gebruiksvriendelijkheid. Verschillende
van deze uitbreidingen zullen in dit hoofdstuk besproken worden.
7.1 Alleenstaande implementatie
De huidige uitwerking van de relay aanval vereist dat de twee Proxmark3 borden
verbonden zijn met een computer. Dit is nodig om de FPGA in de juiste modus te
plaatsen, maar ook om het bord van stroom te voorzien. Verder wordt het analoge
circuit voorzien van stroom door twee voedingen. Dit maakt het geheel allerminst
draagbaar.
Om de computer uit te opstelling te kunnen verwijderen zijn er enkele kleine aanpassingen nodig. Zo zal de FPGA automatisch in de juiste modus moeten geplaatst
worden. Dit is mogelijk door deze configuratie automatisch via de ARM processor
te laten gebeuren. Deze kan dit bijvoorbeeld doen nadat er op de drukknop van het
bord gedrukt is. Men zou ook de FPGA van bij de opstart in de relay aanval modus
kunnen plaatsen. De laatste oplossing is het eenvoudigst toepasbaar aangezien bij de
andere oplossing heel diep in de C code moet ingegrepen worden. Want bij normale
werking moet er eerst een commando van de computer komen voordat er naar de
drukknop wordt geluisterd. Nu zou men echter van bij het begin dat deze code start
met uitvoeren naar de drukknop moeten luisteren.
Naast deze aanpassingen in de code zal er ook een meer draagbare voeding
moeten voorzien worden. Om de twee Proxmark3 borden van stroom te voorzien is
er een voeding van 5 V nodig, dit kan gerealiseerd worden met batterijen. Hetzelfde
kan met het analoge circuit, hiervoor is er een spanning van −7 V, 0 V en +7 V
nodig. De gronden van al deze voedingen moeten op dezelfde spanning geplaatst
worden. Hiervoor zal er dus nog een extra kabel moeten voorzien worden die de
51
7. Mogelijke aanpassingen
gronden van de twee Proxmark3 borden verbindt met de grond van het analoge circuit.
7.2 Relay verbinding
De relay verbinding kan ook aangepast worden om de aanval gebruiksvriendelijker te
maken. Momenteel worden er draden gebruikt tussen de twee fysieke plaatsen van de
aanval. Dit zorgt ervoor dat de relay verbinding heel weinig vertraging toevoegt, maar
de aanval zou veel eenvoudiger uit te voeren zijn indien deze verbinding draadloos
zou gebeuren. Hierbij moet wel rekening gehouden worden met een zo laag mogelijke
vertraging.
Een draadloze verbinding zal het bereik van een relay aanval verkleinen. Zo
zal er een hogere verwerkingstijd nodig zijn om de signalen voor te bereiden op de
draadloze overdracht. Ook zal er nog een sterkere foutcorrectie moeten toegepast
worden om de signalen correct te kunnen ontvangen. Extra foutcorrectie toevoegen
in de FPGA van de Proxmark3 is zeer moeilijk aangezien deze FPGA bijna volledig
wordt gebruikt. De verwerking van de draadloze signalen zal dus in een externe
FPGA moeten gebeuren.
7.3 Proxmark3
De Proxmark3 is een heel handig toestel om snel van start te kunnen gaan met RFID
toepassingen. Alle communicatie kan uitgelezen worden en er kunnen heel eenvoudig
signalen met uitgezonden worden. Deze vele mogelijkheden en de gebruiksvriendelijkheid gaan gepaard met een hogere complexiteit. Alle verwerking in de Proxmark3
gebeurt ook digitaal, dit zorgt ervoor dat alles eenvoudig kan weergegeven worden
op een computer. Ook dit verhoogt de complexiteit.
Op deze Proxmark3 is er een FPGA aanwezig waarop alle bewerkingen kunnen
gebeuren. Door de nodige foutcorrectie was er heel wat logica nodig, waardoor we
dicht tegen de limiet van de FPGA komen. Dit heeft als gevolg dat er geen ruimte
meer over is om extra debugmogelijkheden toe te voegen. Deze zijn nodig om de
huidige problemen te kunnen oplossen, want alle afzonderlijke onderdelen werken.
Zoals in het voorgaande hoofdstuk reeds aangehaald, wordt er heel wat tijd
besteed aan het klaarmaken van de signalen om deze over een analoog medium door
te geven, de codering. Daarna moeten deze gegevens ook weer digitaal voorgesteld
worden en dat vergt ook tijd. Deze omzettingen vergen dus heel wat tijd en zorgen
voor een steeds groter wordende vertraging. Om een relay aanval uit te voeren kan
er dus beter gekozen worden om geen digitale verwerking te doen. Men kan beter
van in het begin het signaal analoog gaan bewerken en klaarmaken om door te geven
52
7.4. Intelligentere aanval
naar de andere kant van de aanval.
7.4 Intelligentere aanval
Deze relay aanval implementatie kan ook aangepast worden om intelligenter te
werken zodat de kans op succesvol uitvoeren van de aanval vergroot. Twee aanpassingen die kunnen gemaakt worden hiervoor zijn: een deel van de communicatie
opslaan en enkele commando’s van de ISO/IEC 14443 uitbuiten. Om deze toe te passen moet er echter wel steeds een digitale verwerking aanwezig blijven in de opstelling.
Kaartgegevens opslaan
Het eerste deel van het protocol, de kaartselectie met de uitwisseling van de UID, is
elke keer opnieuw hetzelfde. Deze gegevens kunnen dus opgeslagen worden. Om dit
te kunnen realiseren zal echter de ARM processor moeten gebruikt worden van de
Proxmark3, want hiervoor is nog heel wat extra intelligentie en opslagruimte nodig
en hiervoor is de FPGA te gelimiteerd.
De relay aanval zal starten met het uitlezen van de echte kaart door de valse kaart
en deze zal al de ontvangen gegevens opslaan. Hierna zal de relay aanval kunnen
starten. Telkens er een bericht van de lezer wordt ontvangen in de valse kaart, zal er
in de ARM processor gecontroleerd worden of er op dit bericht reeds een antwoord
gekend is. Om de vertraging te minimaliseren indien het antwoord nog niet gekend
is, moet het bericht ook onmiddellijk doorgegeven worden via de relay aanval. Als
er in de ARM processor een antwoord opgeslagen is, zal dit uitgezonden worden.
Het echte antwoord van de kaart, dat wat later zal komen, zal echter moeten tegen
gehouden worden.
ISO/IEC 14443 uitbuiten
De ISO/IEC 14443 standaard bevat op zich geen beveiligingen tegen relay aanvallen,
het bevat zelfs enkele mechanismen die kunnen misbruikt worden tijdens een relay
aanval. Zo is er een configureerbare Frame Waiting Time (FWT ), een Waiting Time
eXtensions (WTXs) pakket en een Negative Acknowledges (NAK ) pakket [12].
Bij het starten van deel 4 van de ISO/IEC 14443 standaard, worden er eerst
parameters uitgewisseld. Een van deze parameters is de Frame Waiting Integer
(FWI ). Aan de hand van dit getal kan de Frame Waiting Time bepaald worden.
Deze wordt berekend aan de hand van Formule 7.1, in deze formule is fc de draaggolf
frequentie (13.56 MHz). De Frame Waiting Integer heeft een waarde tussen 0 en 14
wat een minimale tijd geeft van 302 µs en een maximum van 4.95 s. Binnen deze tijd
53
7. Mogelijke aanpassingen
moet de kaart een antwoord gegeven hebben op het bericht van de lezer.
F W T = (256 ×
16
) × 2F W I
fc
(7.1)
Daarnaast is er nog een mogelijkheid om extra tijd te vragen voor het berekenen
van het antwoord. Dit is mogelijk met een Waiting Time eXtensions pakket. In
dit pakket zit er een zes-bit vermenigvuldiger (Waiting Time eXtension Multiplier,
WTXM ) om de tijd, die de kaart krijgt om een antwoord te geven aan de lezer, met
te vermenigvuldigen (Formule 7.2). De standaard definieert de vermenigvuldiger als
een getal tussen 1 en 59. Deze nieuwe maximale wachttijd mag echter de bovengrens
van 4.95 s niet overstijgen. Deze pakketten kunnen gebruikt worden door in de valse
kaart een teller te starten bij het doorsturen van een pakket. Indien er binnen de
FWT geen antwoord is gekomen, zal er een wacht pakket uitgezonden worden. Als
de kaart wel heeft geantwoord, dan zal deze teller opnieuw ingesteld worden.
F W Ttmp = F W T × W T XM
(7.2)
In de standaard is er ook een herstel procedure voorzien door het verzenden
van negatieve bevestigingen, zogenoemde Negative Acknowledges (NAK ). Telkens de
lezer geen of een foutief antwoord krijgt van de kaart, zal deze een NAK uitzenden.
Hierna krijgt de lezer opnieuw de standaard wachttijd voordat er een antwoord moet
gegeven worden. Dus indien de valse kaart deze NAK pakketten negeert, krijgt de
kaart extra tijd. Deze herstelprocedure wordt niet verplicht door de standaard en
ook het aantal toegestane opeenvolgende NAK pakketten is vrij te kiezen. Het is
dus niet zeker of deze functionaliteit geïmplementeerd is in MiFare Plus.
54
Hoofdstuk
8
Tegenmaatregelen
Er zijn maar enkele methoden om een RFID systeem te beveiligen in de context van
toegangscontrole zonder dat de gebruiksvriendelijkheid afneemt. Indien men hier
geen rekening met zou houden, zijn er vele mogelijkheden. Zo zijn er reeds enkele
oplossingen kort aangehaald in Hoofdstuk 1.3. Men kan de kaart afschermen door
deze in een afgesloten doos of portefeuille te plaatsen, waardoor er geen draadloze
signalen meer kunnen propageren, of men zou de kaart kunnen uitschakelen. Deze
twee oplossingen zorgen voor een sterk verminderde eenvoud in gebruik. In dit hoofdstuk zullen we ons daarom enkel focussen op technische oplossingen die voldoende
gebruiksvriendelijk zijn.
8.1 Strikte tijdslimiet
Een vrij eenvoudige aanpassing die kan gemaakt worden, is het inbouwen van een
zeer strikte en korte tijdslimiet. Binnen die bepaalde tijd moet de boodschap bij de
kaart zijn aangekomen, het antwoord berekend worden en vervolgens opnieuw bij de
lezer aangekomen zijn.
Deze tijdslimiet is echter zeer moeilijk te bepalen. Zo is de afstand tussen de
kaart en de lezer variabel. Daarnaast is ook de benodigde rekentijd in de kaart
variabel tussen verschillende boodschappen. Deze benodigde rekentijd is ook vele
malen groter dan de propagatietijd van de boodschap. De rekentijd is nodig om
de boodschap te kunnen verwerken en de nodige cryptografische bewerkingen te
kunnen uitvoeren. Hierbij wordt de vertraging genomen in het slechts mogelijke
geval. Om deze tijd te reduceren zou men de cryptografische bewerkingen moeten
vereenvoudigen, maar dit zou de veiligheid doen dalen. Men zou in de kaart ook alle
bewerkingen op een analoge manier kunnen doen, hierbij is de vertraging kleiner dan
wanneer de gegevens op een digitale manier worden verwerkt [17].
Deze beveiliging zal dus zeer moeilijk te realiseren zijn. Dit omdat alle vertragingen variabel zijn en hetgeen je eigenlijk vooral wil limiteren, de propagatietijd, maar
55
8. Tegenmaatregelen
een klein onderdeel uitmaakt van de totale op te meten tijd.
8.2 Distance bounding
Een distance bounding protocol heeft wel de mogelijkheid om op een zeer nauwkeurige
wijze de afstand tussen de lezer en de kaart te meten. Het opmeten van de tijd
moet zo laag mogelijk in de protocol stack gebeuren, bij voorkeur op de fysische
laag. Hoe verder deze opmeting zich in de applicatie laag bevindt, hoe groter de
onnauwkeurigheid is doordat er ook tijd verloren gaat aan het synchroniseren van de
signalen, de anti-botsing,. . .
De afstand tussen de twee toestellen kan berekend worden aan de hand van
Formule 8.1 [8]. Hierbij is d de afstand tussen de kaart en lezer, c is de propagatiesnelheid, tm is de opgemeten totale round trip tijd, td is de tijd nodig om het signaal
te verwerken in de kaart en tp is de propatietijd van één weg. Hoe kleiner en hoe
minder variatie er is in de verwerkingstijd in de kaart (td ), hoe nauwkeuriger de
afstand kan berekend worden.
tm − td
2
(8.1)
tm = 2 ∗ tp + td
(8.2)
d=c∗
Een mogelijke implementatie van een distance bounding protocol wordt weergegeven in Figuur 8.1. Dit is gebaseerd op het Hancke-Kuhn protocol [4] [8].
Bij dit protocol bezitten zowel de kaart als de lezer een geheime sleutel K. Voordat een distance bounding protocol uitgevoerd wordt, zal de kaart zijn ID uitzenden.
Aan de hand van die uitgewisselde ID kan de lezer weten welke kaart er actief is en
welke geheime sleutel er dus moet gebruikt worden. Om misbruik te voorkomen is
er ook authenticatie aanwezig in het distance bounding protocol. Naast de geheime
sleutel bezitten beide componenten ook een identieke pseudo-willekeurige functie H.
Deze functie zal drie parameters nodig hebben: de geheime sleutel K en twee nonces.
Deze twee nonces worden in de eerste stap van het protocol uitgewisseld. De lezer
genereert een nonce NV en geeft deze door naar de kaart. De kaart doet hetzelfde
met zijn nonce NP . Het is belangrijk dat deze nog nooit eerder zijn gebruikt. Indien
deze toch reeds gebruikt zijn geweest, kan men een replay aanval uitvoeren welke
de beveiliging erg kan reduceren. Indien de nonce van de lezer NV vroeger al eens
zou verzonden zijn, dan kan de aanvaller antwoorden met de opgeslagen nonce van
de kaart NP . Hierdoor zullen de schuifregisters RiCi dezelfde waarden hebben. Ook
de antwoorden RiCi op de uitdagingen Ci toen dezelfde nonces gebruikt werden zijn
56
8.2. Distance bounding
Lezer
Kaart
Geheime sleutel K
Pseudo-random
functie H
Geheime sleutel K
Pseudo-random
functie H
NV
Genereer nonce NP
Genereer nonce NV
NP
Genereer willekeurige bits Ci
Bereken
H(K, NV , NP ),
splits in R0 en R1
C1
Bereken
H(K, NV , NP ),
splits in R0 en R1
R1C1
Cn
Vergelijk ontvangen
RiCi met berekende
waarden
RnCn
Figuur 8.1: Distance bounding protocol van Hancke-Kuhn
opgeslagen. Als de lezer nu eenzelfde Ci uitzendt, dan kan de aanvaller hier het
correcte antwoord RiCi op geven. Indien de Ci verschillend is van de opgeslagen, dan
zal de aanvaller een gok moeten wagen. Als de herhaling van de nonce verschillende
keren gebeurt, zullen alle antwoorden gekend zijn.
Nadat beide entiteiten de nonces uitgewisseld hebben, kunnen ze de pseudowillekeurige functie H berekenen. Het resultaat hiervan zal opgesplitst en opgeslagen
worden in twee schuifregisters, namelijk Ri0 en Ri1 .
In de volgende fasen van het protocol is de tijd zeer kritiek, hier zal de afstand tussen de kaart en lezer bepaald worden. De lezer zal cryptografisch veilige,
pseudo-willekeurige 1-bit uitdagingen (challenges) Ci sturen naar de kaart. Deze
heeft de antwoorden (responses) RiCi al in de schuifregisters klaar staan, er kan dus
onmiddellijk geantwoord worden met het juiste antwoord RiCi . Tijdens al deze 1-bit
uitwisselingen wordt telkens de tijd gemeten tussen het verzenden van een uitdaging
en het krijgen van het bijhorende antwoord. Het is belangrijk dat het antwoord
vrijwel onmiddellijk wordt verzonden, op die manier kan er heel nauwkeurig de
afstand tussen de kaart en lezer berekend worden.
Als het protocol succesvol is afgelopen, dan kan de lezer verifiëren of het ontvangen antwoord correct is. Dit is mogelijk omdat de lezer over dezelfde gegevens
beschikt als de kaart. Bij elke uitdaging en antwoord wordt ook de tijd opgemeten
57
8. Tegenmaatregelen
die nodig was voor het ontvangen van een antwoord. Aan de hand van die gegevens
kan er dus ook beslist worden of de afstand tot de kaart niet te groot is.
Een relay aanval uitvoeren op een systeem dat een distance bouding protocol
zoals dit implementeert, is zeer moeilijk aangezien er bijna geen rekentijd nodig is
om het antwoord te genereren op de uitdaging. De minste vertraging die zal worden
geïntroduceerd door de aanval zal dus kunnen gedetecteerd worden. En het gevolg
hiervan is dat de lezer zal denken dat de kaart zich op een grotere afstand bevindt.
58
Hoofdstuk
9
Besluit
Het doel van deze thesis was een praktische implementatie te maken van een relay
aanval en deze aanval ook echt uit te voeren. Deze implementatie werd ook getest
op een bestaand toegangscontrolesysteem dat gebruik maakt van MiFare Plus en
geconfigureerd is in beveiligingsniveau 3. In dit hoofdstuk zullen de belangrijkste
bevindingen herhaald worden en er zullen besluiten getrokken worden.
9.1 Relay Aanval
De opzet van een relay aanval lijkt heel eenvoudig, de signalen uitgezonden door
de lezer moeten opgevangen en doorgestuurd worden naar de kaart die zich buiten
het bereik van deze lezer bevindt. Het antwoord van de kaart moet op zijn beurt
opgevangen en doorgestuurd worden naar de lezer. Dit moet allemaal zeer snel
gebeuren, want het systeem waarop getest zal worden is een MiFare Plus systeem
met beveiligingsniveau 3. Op dit systeem zal dus een implementatie van een distance
bounding protocol actief zijn, hierdoor zijn de toegelate vertragingen nog een stuk
kleiner dan op een systeem zonder deze beveiliging.
Om de signalen van de lezer en de kaart op te vangen en signalen hier naar toe
te zenden, werd er gebruik gemaakt van een Proxmark3. Dit toestel heeft standaard
al code om te kunnen communiceren met een toegangscontrolesysteem dat gebruik
maakt van de ISO/IEC 14443 standaard, de standaard waarvan MiFare gebruik
maakt. Hierdoor kon er veel van het inlezen en uitzenden van de signalen gedaan
worden door deze code. Er moest alleen maar voor gezorgd worden dat de gegevens
correct werden uitgewisseld tussen de twee Proxmark3 borden en dat deze in de juiste
modus stond. Een Proxmark3 is echter niet gemaakt voor deze aanval, dit zorgde
voor vele uitdagingen. Zo zijn de externe communicatiemogelijkheden beperkt en is
de FPGA vrij beperkt qua grootte. Dit zorgde voor vele problemen bij het testen en
detecteren van fouten. Alle digitale bewerkingen, die nodig waren om de signalen
correct te kunnen verzenden naar de andere Proxmark3, zijn geïmplementeerd op de
FPGA van de Proxmark3. Op deze manier konden de extra toegevoegde vertragingen
59
9. Besluit
eenvoudiger mimimaal gehouden worden.
9.2 Algemeen besluit
De volledige relay aanval, op het bestaande toegangscontrole systeem, kon niet
succesvol uitgevoerd worden en de exacte reden waarom deze niet lukt is tot op
het moment van dit schrijven niet gekend. Het probleem vinden is niet eenvoudig
aangezien alle afzonderlijke componenten werken en het probleem enkel optreedt als
we de echte lezer opnemen in de opstelling. Hierover hebben we ook geen controle
aangezien deze in een bestaand toegangscontrolesysteem is opgenomen.
De oorzaak voor het niet lukken van de aanval is nog niet gekend. Het vermoeden is dat het probleem zich bevindt tussen de lezer en de valse kaart, want alle
andere componenten zijn voldoende getest en deze waren succesvol. Enkele mogelijke
problemen zijn transmissiefouten, fouten in de laatste laag logica voor het uitzenden
en problemen met de timing. De twee eerste zijn zo goed als mogelijk getest en deze
testen waren ook succesvol. Het laatste probleem, dat de fouten veroorzaakt worden
door een te hoge vertraging, is niet te verifiëren aangezien er geen controle is over de
lezer.
Met de kennis die we nu hebben, was de Proxmark3 niet de beste keuze voor het
uitvoeren van deze relay aanval. Deze component was heel handig voor het begrijpen
van de standaard en welke gegevens er worden uitgezonden. Er kon ook snel gestart
worden doordat er al een implementatie was om te communiceren met de kaart en
lezer. De mogelijkheden om te debuggen zijn echter heel beperkt door de beperkte
grootte van de FPGA en weinig mogelijkheden voor externe communicatie. Deze
worden nog eens extra beperkt doordat we de bestaande gaan gebruiken voor de
relay aanval implementatie.
Voor het uitvoeren van een relay aanval kan er beter gekozen worden voor een
volledig analoge implementatie, zonder enige digitale verwerking van signalen. Er
zou dus een eigen ontvanger en zender moeten gebouwd worden, hierbij zal er van in
het begin gefocust worden op het analoge signaal. In de huidige implementatie is dit
lang verwaarloosd waardoor er op de draadloze interface een onzekerheid is over de
correcte werking.
Om een toegangscontrolesysteem te beveiligen tegen een relay aanval is een distance bounding protocol de beste optie. Deze worden echter zelden geïmplementeerd
op een manier dat ze het systeem goed beveiligen. Meestal wordt er een afgezwakte
vorm geïmplementeerd. Zo wordt in een MiFare Plus systeem geen één-bit uitdaging
en antwoord deel uitgevoerd, hoe de distance bounding hier exact geïmplementeerd
wordt is niet gekend.
60
Bijlagen
61
Bijlage
A
Proxmark3: Snoop resultaat
Start |
End | Src | Data
----------|----------|-----|-------0 |
1056 | Rdr | 26
2228 |
4596 | Tag | 42 00
11392 |
13856 | Rdr | 93 20
15028 |
20852 | Tag | 88 04 5c 64 b4
27904 |
38368 | Rdr | 93 70 88 04 5c 64 b4 df ac
39604 |
43124 | Tag | 04 da 17
49152 |
51616 | Rdr | 95 20
52788 |
58612 | Tag | 8a 4d 2b 80 6c
65664 |
76192 | Rdr | 95 70 8a 4d 2b 80 6c af d5
77380 |
80964 | Tag | 20 fc 70
86672 |
91440 | Rdr | 50 00 57 cd
111120 |
112176 | Rdr | 26
1636608 | 1637600 | Rdr | 52
1638852 | 1641220 | Tag | 42 00
1647872 | 1658336 | Rdr | 93 70 88 04 5c 64 b4 df ac
1659572 | 1663092 | Tag | 04 da 17
1669760 | 1680288 | Rdr | 95 70 8a 4d 2b 80 6c af d5
1681460 | 1685044 | Tag | 20 fc 70
1691776 | 1696544 | Rdr | e0 80 31 73
1697716 | 1713972 | Tag | 0c 75 77 80 02 c1 05 2f 2f 01 bc d6 60 d3
1751552 | 1759776 | Rdr | 02 5a f6 f5 30 b8 76
1770932 | 1775604 | Tag | 02 0b c3 93
1804416 | 1812640 | Rdr | 03 70 00 40 00 b9 01
1851572 | 1874740 | Tag | 03 90 4a f8 0d 28 83 9a be b2 d6 c9 90 51 c3
72 ba 5a d2 4f
1907200 | 1948832 | Rdr | 02 72 ab b4 cb 3f 43 41 6d a0 d9 6d d8 dc 4f
6b 16 47 b1 8b d1 1b 72 d9 df 83 16 e4 cc 5e 73 6d 37 63 0c df
1969332 | 2010868 | Tag | 02!90 95 ce!49 6f 16 25 3f 76 7a f9 61 0c b2
ea 17 b4 72 e7 bb 7a 14 f5 50 72 66 05 59 d2 f2 9e 2d 3a 77 ff
2045312 | 2062752 | Rdr | 03 33 01 00 02 13 21 12 dc 57 08 19 99 09 ba
2076484 | 2127236 | Tag | 03!90!bb!01!02!00!56 07 57!07 6d!53 58 07 6e
53 59 07 5a 07 5b 07 5c 07 5d 07 5e 07 5f 07 60 07 61 07 cb 63 71
f1 63 e3 71 cd d7 3c
2165504 | 2173664 | Rdr | 02 70 08 40 00 3f cc
2212404 | 2235508 | Tag | 02 90 de 83 c0 ca 30 60 61 ad e8 e6 7f de 6d
f5 37 63 c0 96
63
A. Proxmark3: Snoop resultaat
2268288
3c
2330052
09
2408448
2442804
9f
2508288
2523188
| 2309920 | Rdr | 03 72 30 8c 1e 49 9b e5 fb 0e a6 ff 28 89
ac 74 36 d0 08 ee 36 cf 0a fd b6 b4 1e 53 8b 9e a8 42 13 d6
| 2371588 | Tag | 03 90 2c e4 aa 70 54 93 b6 4c 98 f3 ff e6
3a ed 8b 7e 77 54 19 54 2d dd e2 35 f8 a9 ed 31 c3 d4 1c fa
| 2425760 | Rdr | 01 18 08 80 00 5f 44 b3 41 43 e5 9a 20 e1
!crc
| 2475188 | Tag | 02 90 f2 a5 ed fd 82 fd 27 12 b7 09 ec c9
96 fa 4f 4d 39 23 26 91 0c d5 9b 2f
| 2511840 | Rdr | c2 e0 b4
| 2526708 | Tag | c2 e0 b4
6d
5e
31
bb
Code A.1: Gegevensuitwisseling tussen lezer en kaart opgemeten met een Proxmark3
64
Bijlage
B
Verilog: Relay test
‘define MASTER
‘define SLAVE
‘define DELAY
3’b000
3’b001
3’b010
5 module relay_test(
pck0, ck_1356meg, ck_1356megb,
ssp_frame, ssp_din, ssp_dout, ssp_clk,
data_in, data_out,
mod_type
10 );
input pck0, ck_1356meg, ck_1356megb;
input ssp_dout;
output ssp_frame, ssp_din, ssp_clk;
input data_in;
15
output data_out;
input [2:0] mod_type;
// SSP signals
reg ssp_clk = 1’b0;
20 reg ssp_frame = 1’b0;
reg data_out = 1’b0;
reg ssp_din = 1’b0;
reg [6:0] div_counter = 7’b0; // Clock divider
25
reg [0:0] buf_data_in = 1’b0; // Synchronization chain
reg [0:0] receive_counter = 1’b0;
reg [31:0] delay_counter = 32’h0;
30 reg [3:0] counter = 4’b0;
reg [7:0] receive_buffer = 8’b0;
reg
35 reg
reg
reg
sending_started = 1’b0;
received_complete = 1’b0;
[7:0] received = 8’b0;
[3:0] send_buf = 4’b0;
reg [16:0] to_arm_delay = 17’b0;
65
B. Verilog: Relay test
40
always @(posedge ck_1356meg)
begin
div_counter <= div_counter + 1;
buf_data_in = data_in;
45
if (div_counter[3:0] == 4’b1000) ssp_clk <= 1’b0;
if (div_counter[3:0] == 4’b0000) ssp_clk <= 1’b1;
if (sending_started == 1’b1 && received_complete == 1’b0) begin
delay_counter = delay_counter + 1;
end
50
if (div_counter[2:0] == 3’b100) // 1.695MHz
begin
if (mod_type == ‘MASTER) // Sending data from ARM to other
Proxmark
begin
receive_counter <= receive_counter + 1;
55
if (div_counter[6:4] == 3’b000) ssp_frame = 1’b1;
else ssp_frame = 1’b0;
60
if (receive_counter[0] == 1’b0) begin
data_out = ssp_dout;
send_buf = {send_buf[2:0], ssp_dout};
receive_buffer = {receive_buffer[6:0], buf_data_in};
65
if (send_buf == 4’ha && sending_started == 1’b0) begin
delay_counter = 32’b0;
sending_started = 1’b1;
end
70
if (receive_buffer[3:0] == 4’ha && sending_started == 1’
b1) begin
receive_buffer = 8’b0;
received_complete = 1’b1;
end
75
end
counter <= 4’b0;
end
else if (mod_type == ‘SLAVE) // Sending received data from other
Proxmark to ARM
begin
counter <= counter + 1;
80
if (counter[0] == 1’b0) begin
receive_buffer = {receive_buffer[6:0], buf_data_in};
data_out = buf_data_in;
85
ssp_frame = (receive_buffer[7:4] == 4’b1111);
if (receive_buffer[7:4] == 4’b1111) begin
received = receive_buffer;
90
66
receive_buffer = 8’b0;
end
ssp_din <= received[7];
received = {received[6:0], 1’b0};
95
end
receive_counter <= 4’b0;
end
else if (mod_type == ‘DELAY) // Sending delay to ARM
begin
if (to_arm_delay[16] == 1’b1) begin
sending_started = 1’b0;
received_complete = 1’b0;
counter <= counter + 1;
100
105
110
if (counter[0] == 1’b0) begin
ssp_frame = (counter[3:0] == 4’b0000);
ssp_din <= delay_counter[31];
delay_counter = {delay_counter[30:0], 1’b0};
end
115
if (counter[3:0] == 4’b1111) begin
to_arm_delay <= 17’b0;
end
end
else begin
to_arm_delay <= to_arm_delay + 1;
end
120
end
end
end
125 endmodule
67
Bijlage
C
Verilog: Relay encode
module relay_encode(
clk,
reset,
mode,
5
data_in,
data_out
);
input clk, reset, mode, data_in;
output data_out;
10
reg [0:0] data_out = 1’b0;
reg [7:0] buffer_in = 8’b0;
reg [7:0] data_out_counter = 8’b0;
15 reg [6:0] data_out_delay_counter = 7’b0;
reg [2:0] bit_counter = 3’b0;
reg [0:0] comm_active = 1’b0;
reg [0:0] received_zero = 1’b0;
20
reg [3:0] counter = 4’b0;
always @(posedge clk)
begin
25
// encode
counter = counter + 1;
30
35
if (counter[3:0] == 4’b0)
begin
bit_counter = bit_counter + 1;
buffer_in = {buffer_in[6:0], data_in};
end
if (|data_out_counter == 1’b1)
data_out_counter = data_out_counter - 1;
if (|data_out_delay_counter == 1’b1)
data_out_delay_counter = data_out_delay_counter - 1;
69
C. Verilog: Relay encode
if (mode == 1’b0 && counter[3:0] == 4’b0)
begin // Encode reader data
if (buffer_in[7:6] == 2’b0 && buffer_in[3:0] == 4’hf &&
comm_active == 1’b0)
begin // Start of communication
bit_counter = 3’b0;
comm_active = 1’b1;
received_zero = 1’b0;
end
40
45
if (comm_active == 1’b1 && bit_counter == 3’b0)
begin
if (buffer_in == 8’hff && received_zero == 1’b1)
begin // End of communication
comm_active = 1’b0;
received_zero = 1’b0;
end
if (buffer_in == 8’hff)
begin // 0xff => 0x00
data_out = 1’b0;
received_zero = 1’b1;
end
else if (buffer_in[3:0] == 4’hf)
begin // 0xXf => 0xc0
data_out_counter = 8’b1000000;
data_out = 1’b1;
received_zero = 1’b1;
end
else if (buffer_in[7:4] == 4’hf)
begin // 0xfX => 0x0c
data_out_delay_counter = 7’b1000000;
data_out_counter = 8’b10000000;
data_out = 1’b0;
received_zero = 1’b0;
end
end
50
55
60
65
70
75
end
else if (mode == 1’b1 && counter[3:0] == 4’b0)
begin // Encode tag data
if (buffer_in[7:5] == 3’b111 && buffer_in[3:1] == 3’b0 &&
comm_active == 1’b0)
begin // Start of communication
bit_counter = 3’b0;
comm_active = 1’b1;
received_zero = 1’b0;
end
80
if (comm_active == 1’b1 && bit_counter == 3’b0)
begin
if (buffer_in == 8’h00)
begin
if (received_zero == 1’b1) // End of communication
comm_active = 1’b0;
received_zero = 1’b1;
end
85
90
70
else if (buffer_in[3:0] == 4’h0)
begin // 0xX0 => 0xf0
data_out_counter = 8’b1000000;
data_out = 1’b1;
received_zero = 1’b0;
end
else if (buffer_in[7:4] == 4’h0)
begin // 0x0X => 0x0f
data_out_delay_counter = 7’b1000000;
data_out_counter = 8’b10000000;
data_out = 1’b0;
received_zero = 1’b0;
end
95
100
105
end
end
if (data_out_counter == 8’b0)
data_out = 1’b0;
110
if (data_out_delay_counter == 7’b0 && |data_out_counter == 1’b1)
data_out = 1’b1;
if (reset == 1’b1) // Reset
begin
buffer_in = 8’b0;
data_out = 1’b0;
received_zero = 1’b0;
comm_active = 1’b0;
data_out_counter = 8’b0;
data_out_delay_counter = 7’b0;
end
115
120
end
125
endmodule
71
Bijlage
D
Verilog: Relay decode
module relay_decode(
clk,
reset,
mode,
5
data_in,
data_out,
data_available
);
input clk, reset, mode, data_in;
10
output[3:0] data_out;
output[0:0] data_available;
reg
reg
15 reg
reg
reg
[3:0]
[0:0]
[6:0]
[6:0]
[0:0]
data_out = 4’b0;
data_available = 1’b0;
one_counter = 7’b0;
zero_counter = 7’b0;
receiving = 1’b0;
always @(posedge clk)
20 begin
receiving = receiving | data_in == 1’b1;
one_counter = one_counter + (data_in == 1’b1 & receiving);
zero_counter = zero_counter + (data_in == 1’b0 & receiving);
25
30
if (one_counter + zero_counter == 7’d64) // After 64 cycles, take
decision of received data
begin
if (one_counter > zero_counter)
data_out = (mode == 1’b1 ? 4’hc : 4’hf);
else
data_out = 4’b0;
data_available = 1’b1;
one_counter = 7’b0;
zero_counter = 7’b0;
35
end
else
73
D. Verilog: Relay decode
begin
data_out = 4’b0;
data_available = 1’b0;
end
40
if (reset == 1’b1) // Reset
begin
one_counter = 7’b0;
zero_counter = 7’b0;
receiving = 1’b0;
data_out = 4’h0;
data_available = 1’b0;
end
45
50
end
endmodule
74
Bijlage
E
Verilog: Relay Mode Switch
‘define
‘define
‘define
‘define
5 ‘define
‘define
‘define
‘define
10 ‘define
‘define
‘define
TAGSIM_LISTEN
TAGSIM_MOD
READER_LISTEN
READER_MOD
FAKE_READER
FAKE_TAG
3’b001
3’b010
3’b011
3’b100
3’b101
3’b110
READER_START_COMM_FIRST_CHAR
READER_END_COMM_1
READER_END_COMM_2
TAG_START_COMM_FIRST_CHAR
TAG_END_COMM
8’hc
16’h0000
16’hc000
8’hf
8’h00
module relay_mode (
clk,
data_in,
data_in_available,
hi_simulate_mod_type,
mod_type,
20
data_out
);
input clk, data_in_available;
input [3:0] data_in;
input [2:0] hi_simulate_mod_type;
25
output [2:0] mod_type;
output data_out;
15
reg [2:0] mod_type = 3’b0;
wire [0:0] data_out;
30
reg [3:0] div_counter = 4’b0;
reg [19:0] receive_buffer = 20’b0;
reg [0:0] half_byte_counter = 1’b0;
35
assign data_out = receive_buffer[3];
always @(posedge clk)
begin
75
E. Verilog: Relay Mode Switch
div_counter <= div_counter + 1;
40
if (div_counter[3:0] == 4’b1000 && (hi_simulate_mod_type ==
‘FAKE_READER || hi_simulate_mod_type == ‘FAKE_TAG))
receive_buffer = {receive_buffer[18:0], 1’b0};
45
if (hi_simulate_mod_type == ‘FAKE_READER && mod_type == 3’b0)
mod_type = ‘READER_LISTEN;
else if (hi_simulate_mod_type == ‘FAKE_TAG && mod_type == 3’b0)
mod_type = ‘TAGSIM_LISTEN;
50
if (data_in_available == 1’b1 && (hi_simulate_mod_type ==
‘FAKE_READER || hi_simulate_mod_type == ‘FAKE_TAG))
begin
receive_buffer[3:0] = data_in;
half_byte_counter = half_byte_counter + 1;
if (hi_simulate_mod_type == ‘FAKE_READER) // Fake Reader
begin
if (receive_buffer[19:0] == {16’b0,
‘READER_START_COMM_FIRST_CHAR})
begin
mod_type = ‘READER_MOD;
half_byte_counter = 1’b0;
end
else if ((receive_buffer[19:0] == {‘READER_END_COMM_1, 4’b0}
|| receive_buffer[19:0] == {‘READER_END_COMM_2, 4’b0}) &&
half_byte_counter == 1’d0)
begin
mod_type = ‘READER_LISTEN;
end
end
else if (hi_simulate_mod_type == ‘FAKE_TAG) // Fake Tag
begin
if (receive_buffer[19:0] == {16’b0,
‘TAG_START_COMM_FIRST_CHAR})
begin
mod_type = ‘TAGSIM_MOD;
half_byte_counter = 1’b0;
end
else if (receive_buffer[11:0] == {‘TAG_END_COMM, 4’b0} &&
half_byte_counter == 1’d0)
begin
mod_type = ‘TAGSIM_LISTEN;
end
end
55
60
65
70
75
end
80 end
endmodule
76
Bijlage
F
Verilog: Relay
‘include "relay_mode.v"
‘include "relay_decode.v"
‘include "relay_encode.v"
5 module relay (
clk,
reset,
data_in,
hi_simulate_mod_type,
10
mod_type,
data_out,
relay_raw,
relay_encoded
);
15
input clk, reset, data_in;
input [2:0] hi_simulate_mod_type;
output [2:0] mod_type;
output data_out;
input relay_raw;
20
output relay_encoded;
wire [3:0] data_in_decoded;
reg [2:0] previous_mod_type;
wire mod_switched;
25
assign mod_switched = (previous_mod_type == ‘READER_MOD && mod_type ==
‘READER_LISTEN) || (previous_mod_type == ‘TAGSIM_MOD && mod_type ==
‘TAGSIM_LISTEN);
always @(posedge clk)
begin
30
previous_mod_type = mod_type;
end
relay_mode rm(
clk,
35
data_in_decoded,
data_in_available,
hi_simulate_mod_type,
77
F. Verilog: Relay
mod_type,
data_out
40 );
relay_encode re(
clk,
reset || mod_switched,
45
(hi_simulate_mod_type == ‘FAKE_READER),
(mod_type != ‘TAGSIM_MOD && mod_type != ‘READER_MOD) & relay_raw,
relay_encoded
);
50 relay_decode rd(
clk,
reset || mod_switched,
(hi_simulate_mod_type == ‘FAKE_READER),
data_in,
55
data_in_decoded,
data_in_available
);
endmodule
78
Bijlage
G
Wetenschappelijk Artikel
79
G. Wetenschappelijk Artikel
1
Practical implementation of relay attacks
Kristof Mari¨en
Abstract—Radio-Frequency IDentification (RFID) is one of the
technologies that facilitate our daily life. It can be used to restrict
access to buildings on individual person level and this in a user
friendly way. Also the automotive sector is using RFID to unlock
cars. But are these applications safe? Relay attacks pose a serious
threat and circumvent most of the security and cryptography
used in these protocols. In this paper we study access control
systems together with the most used standard, ISO/IEC 14443,
and one of the most widely used implementations: MiFare. The
aim of the paper is to study the feasability of implementing a
relay attack. This will be done in the context of an existing
access control system using MiFare Plus. We will evaluate this
implementation and discuss some countermeasures.
Index Terms—Relay attack, distance bounding, MiFare, access
control, Proxmark3.
I. I NTRODUCTION
OORS opening when you swipe your card next to the
reader, your car unlocking when you approach it,. . . In
daily life wireless data transactions are more and more used
to make life easier. However, these new technologies, or there
new applications, are sometimes vulnerable for attacks. This
paper aims to give an understanding of the threat, by studying
the practical feasibility of a relay attack.
D
A. RFID
The most common technology for wireless transactions
of information is Radio-Frequency IDentification (RFID). It
enables information exchange over short distances through
radio waves, not requiring a line of sight [1].
To achieve this transaction, the reader broadcasts a modulated carrier. Tags sufficiently close to the reader receive the
carrier and exchange the needed information. Two groups of
tags exist: active and passive tags. Active tags are equipped
with an own power source and have a wider range. Passive tags
generate their power from the carrier through a coil hence they
are much cheaper.
B. Relay Attack
The distance between a tag and a reader is mostly limited to
a few centimeters [2]. The goal of a relay attack is to increase
this distance. A relay attack is some sort of man in the middle
attack, with the particular advantage of not requiring any
knowledge about underlying security mechanisms [3]. During
this attack the signal of the reader is captured by the proxy and
relayed to the mole who is located near the real tag. There they
are retransmitted and received by the tag. The answer of the
tag will be captured by the mole and relayed again to the proxy.
Here it will be transmitted for the reader. The limiting factor
of the achievable distance is the maximum delay permitted by
the reader. Therefore the extra delays added to the signals by
the implementation should be kept to the minimum [4].
80
C. ISO/IEC 14443
The international standard that defines proximity card and
the associated transmission protocol is ISO/IEC 14443 [5].
In this standard two hardware components are defined, the
Proximity Coupling Device (PCD), this is the reader next to
the door, and the Proximity Integrated Circuit Card (PICC),
this is the smartcard of the user. The ISO/IEC 14443 standard
is divided in four parts.
In the first part the physical characteristics are defined.
The second part defines the radio frequency power and the
signal interface. Herein a distinction is made between two
types, type A en type B. This paper only discusses type A,
as the MiFare implementation makes use of this type. In both
types the PCD generates a magnetic field with a frequency
of 13.56 MHz ± 7 kHz. In type A, in order to transmit data
to the PCD, 100% Amplitude Shift Keying modulation is
used together with Modified Miller encoding. The interface
in the opposite direction, from the PICC to the PCD, uses
On/Off Keying with Manchester coding. Before and after
every message a start and an end of communication is sent
respectively. This property will be exploited in our relay attack
implementation.
The third part of the standard explains the card initialization
and anti-collision. What type of messages are needed to select
a card and to read out the configuration are defined in this part.
These messages are encapsulated in different kind of packets
depending on there size.
Part four defines the transmission protocol used after a PICC
is selected.
The third and fourth part of the standard will be used in
conjunction with the first and second. For our implementation
part two of the standard is the most important. We will
capture packets based on the information from that part of
the standard, completely ignoring the content of the packets.
D. MiFare
MiFare is the most widespread implementation of ISO/IEC
14443, which contain a whole family of products. The most
well known variants are MiFare Classic, MiFare Plus and
MiFare DESFire.
The Classic [6] variant was long the most used product of
MiFare, but this type was vulnerable for various attacks such
as Brute Force and Keystream Recovery attacks [7].
MiFare Plus [8] is the successor to the unsecure MiFare
Classic, together with security fixes the UID was updated from
4 bytes to 7 bytes. To raise the level of security, different
security levels are supported, starting from level 0, which is
fully backwards compatibility with MiFare Classic. In level
1, AES authentication can be enabled and in level 2, the
weak CRYPTO1 algorithm was updated. In the highest security
2
level, level 3, all messages can be signed with a Message
Authentication Code (MAC) and a distance bounding protocol
was implemented.
The MiFare DESFire [9] also has improved security mechanisms to the Classic variant, but the memory structure was
updated as well. This variant will not be discussed further in
this paper, because our relay attack implementation will be
tested on a MiFare Plus system.
II. S ETUP
To realize the relay attack we have chosen a setup with two
Proxmark3 RFID tools such as shown schematically in Figure 1. There are a lot of possible setups, but in the beginning
this one seemed to be the best choice. We will evaluate this
choice later. In this setup one Proxmark3 acts as a fake tag, this
one is called the proxy and will communicate with the reader.
The other one acts as a fake reader, also called the mole, and
exchanges data with the tag. Two signal wires connect the
mole to the proxy, enabling two-way communication. A small
analog circuit is added to this relay connection, which act as
a buffer.
Proxmark3
(Proxy)
Reader
ARM
Proxmark3
(Mole)
PC
PC
FPGA
ARM
FPGA
Buffer
Fig. 1. Schematical setup
A. Proxmark3
The Proxmark3 is the result of an open source project started
by Jonathan Westhues [10]. During the years extra standards
were added and now the ISO/IEC 14443a standard is also
included in the project. The code is divided into three parts:
a part of code written in C for the computer, another C part
for the ARM processor and the last part written in Verilog for
the Field-Programmable Gate Array (FPGA).
1) Hardware: The Proxmark3 has some specific hardware
to process both high and low frequency RFID signals. The
digital part of the processing is done by an ARM processor and
a FPGA. The analog part is split into two paths, again a high
and low frequency path, these paths have a filter functionality.
The antenna connector is also designed to use different pins for
the low and high frequency, which is an interesting property
for our implementation. Another important component is the
Analog to Digital Converter (ADC), which digitalizes the
signals before feeding them to the FPGA. For debugging
purposes some test pins were added to the Proxmark3, these
will be exploited by our implementation.
2) Computer: A small piece of the code was developed
to run on the computer. This will send the commands to the
Proxmark3 through a USB interface.
3) ARM processor: The ARM processor is used to interpret
the commands received through the USB from the computer.
Using these commands the FPGA will be controlled. The ARM
is also responsible for encoding and decoding the signals sent
to and received from the FPGA. The communication towards
the FPGA is done with a Synchronous Serial Port (SSP).
4) FPGA: In the Proxmark3 a small FPGA, a Spartan II, is
responsible for the communication with the antenna. Running
on 13.56 MHz it will modulate and demodulate the signals on
the carrier by controlling some tri-state buffers.
B. Hardware
To connect the two Proxmark3 devices to each other, some
hardware has to be designed. However, first of all a method
to read and write signals from and to the FPGA must be
found. This is done using the test pins: the test pin for the low
frequency antenna, which is unused with the ISO/IEC 14443
implementation, will be the output. As input we use a debug
test pin of the FPGA.
Before the low frequency output can be used, the antenna
connector has to be updated. A new antenna has been made,
without the low frequency pins connected, because the original
connector suffered from crosstalk. This was due to the original
antenna was not designed to use both the high and low
frequency output at the same time.
It is impossible to connect the output of the proxy directly to
the input of the mole, as the output is a signal with amplitude
of 5 V and the input is limited to 3.3 V. So the voltage has to be
reduced. It is also impossible for the FPGA to deliver enough
output power. To solve these problems an analog buffer circuit
was designed, this is shown in Figure 2. In order to solve
the power problem, it contains an operational amplifier. This
is connected in unity feedback, because no amplification is
needed, only a buffering. The next stage of the analog circuit
consists of a resistive voltage divider to reduce the voltage
to a maximum of 3.3 V. To protect the FPGA from too high
voltages, the amplifier is powered by a symmetrical source of
−7 V and +7 V, which yields a maximal voltage of 3.3 V after
the voltage divider. To prevent the FPGA from breaking down
due to negative voltage spikes, a diode is added in reverse
direction.
+7 V
−
vin
+
15 kΩ
−7 V
vout
8.2 kΩ
Fig. 2. Buffer Circuit
The components used in this circuit needed to be chosen
carefully. The operational amplifier needs to be able to amplify
81
G. Wetenschappelijk Artikel
3
the high frequency signal and the diode also has to have a fast
response time. A TL084A [11] has a sufficient slew rate and
bandwidth. For the diode, one working on high speeds was
chosen, the 1N914 [12] diode.
III. I MPLEMENTATION
Next to the hardware the whole implementation of the relay
attack is realized in the FPGA. This would be easier to do
in the ARM processor, thanks to its support of a high-level
programming language. However, programming in Verilog
for the FPGA reduces the added delay. Figure 3 shows the
architecture of the Verilog modules. Three main modules can
be found: decoder, encoder and a mode module.
Relay
3) Mode Switch: The FPGA is continuously listening to the
relay connection, but it can also send any available data over
the relay connection. As the antenna doesn’t allow to send and
receive simultaneously a decision has to be made whether data
will be sent or received.
By default the FPGA will listen to the antenna and forward
received data to the encoder. However, when new data is
received from the decoder, this will be buffered in a 20-bit
shift register. If a start of communication is detected in this
shift register, the FPGA will switch his mode to send data
towards the antenna. When an end of communication is found
in the shift register, the FPGA will switch again to the listen
mode. The definition of the start and end of communication
is described in the ISO/IEC 14443 standard, part 2.
IV. R ESULTS
Hi 14443
1
Relayin
Decoder
D
4
Computer
3
clk
1
1
reset
1
1
3
Dav
mode
M ode
mod type
1
The relay attack was performed on an operational access
control system using MiFare Plus configured in security level
3. Component-level tests have proved successful, but the
system as a whole does not successfully implement a relay
attack at this point in time.
Dout
mod type
clk
reset
1
1
A. Delays
1mode
clk
Hi 14443
1
Din
Encoder
1
Relay
1
Relayout
Our implementation added additional delays to every transaction between the transmission of a request of the reader and
the receipt of the answer of the tag. Figure 4 gives an overview
of these delays.
Reader
1) Encoder: Foreseeing transmission errors on the relay
connection, an encoder block was added. This block reduces
the number of distinct transmitted hexadecimal symbols from
three to only two and as such increases the Hamming distance.
It also fixes some errors in the symbols received from the antenna. To accomplish this task, the encoder has to buffer 8 bits
(2 hexadecimal symbols). Using these 8 bits it synchronizes
to the correct bit position, replaces wrongly received symbols
and encodes them.
In the proxy the synchronization happens on the binary
sequence 00XX 1111, with X denotes a don’t care. Using
this synchronization position, the received data from the reader
will be encoded. Only two hexadecimal symbols will be send
out, 0xF and 0x0
The mole will encode based on the synchronization using
the binary sequence 111X 000X.
2) Decoder: The decoder will only receive the hexadecimal
symbols 0xF and 0x0. To account for the uncertainty on time
of data reception, the decoder counts all the incoming zeros
and ones. After 64 cycles, 4 bits will be received. These four
bits were 0xF or 0x0 when they were sent. The decision in
the decoder will be made based on the counted zeros and ones.
If more ones were counted, these four bits will all be read as
‘1’, otherwise they are read as ‘0’. After every packet, the
counters will be reset and the decoder restart counting after
receiving the first ‘1’.
82
Wireless transmission
Wireless connection
Wireless connection
Proxy
Encoding
Decoding
Relay connection
Relay connection
Relay connection
Mole
Decoding
Encoding
Wireless transmission
Wireless connection
Wireless connection
Tag
Additional delay
Fig. 3. Verilog Architecture
Computation
Fig. 4. Delays of relay attack
The introduced delays are the same for the path to the tag
and the path to the reader. Before the signals are transmitted
over the relay connection they are encoded. This adds a delay
of 128 cycles to the signal because of the need for buffering
8 bits. Next, once every 16 cycles one bit is received from the
antenna. Next is the relay connection, of which the added delay
is negligible. When the signal enters the Proxmark3, it has to
be decoded. This requires a buffering of 4 bit, introducing
a delay of 64 cycles. Due to the difference in clock domain
between the decoder and mode switch module, a variable delay
of maximum 16 cycles is introduced. The path in the opposite
direction adds the same delays.
The full implementation gives a total additional delay of 416
cycles, measured on a frequency of 13.56 MHz corresponding
4
to a delay of 30 µs. In these calculations, the delays of the
extra wireless transaction between the mole and the tag are
ignored, as they are negligible compared to the delay in the
FPGA.
B. Relay attack
The one-bit challenge response phase only consumes a
minimal amount of computing time, so this phase can be used
to measure the round trip time of the signals. Based on this
time the distance between the tag and reader can be calculated.
Tag
Reader
During the execution of the relay attack, some packets were
successfully transmitted and answered. However, the protocol couldn’t finish, because after some packets the protocol
restarts. The WAKE UP command of the reader was always
answered correctly and the reader sends a request for the UID
of the tag. The tag transmits it UID, but for a reason which is
still unclear, the reader asks it again. A second problem that
occurs is the incorrect reception of reader messages in the
proxy: when the tag receives these packets, it doesn’t answer.
The protocol starts again when, after a timeout, the reader
retransmits a WAKE UP.
Trying to debug this implementation of the relay attack,
some problems with the custom-made antenna came to the surface. It had a resonance frequency of 17 MHz, by adding some
parallel capacitance the frequency was shifted to 13.45 MHz.
This didn’t solve the failing relay attack.
Probably the remaining problem is located at the transmission of the signal to the reader. All the other parts were
successfully tested together, by reading out a tag by the proxy.
The only part of the implementation that wasn’t part of this
test, was the wireless connection between the proxy and the
reader.
Further debugging requires full control of the reader instead
of continuing to use it like a black box, without knowledge of
the implementation of the security mechanism or the tolerance
for noisy signals. The Proxmark3 device is a very useful tool
to start understanding an access control system, but it was not
designed to perform a relay attack. This makes it very hard to
implement one, and even harder to debug, because the FPGA
is small and the live debugging is very hard.
V. C OUNTERMEASURES
A lot of countermeasures can be taken to protect a system
from a relay attack, but most of them are very user-unfriendly.
By shutting down the card or by shielding the card in a metal
box or in a special wallet, a relay attack can be prevented
[13]. Another possibility is to implement a distance bounding
protocol [14].
By using a distance bounding protocol, the distance between
the tag and reader can be measured very accurately. In Figure ?? the distance bounding protocol of Hancke-Kuhn[14] is
displayed. The protocol starts by exchanging 2 fresh nonces
(NV and NP ). With these nonces and a secret key K the
pseudo-random function H is calculated. The result is split
into two and saved in two shift registers Ri0 and Ri1 . The next
step is a one-bit challenge response phase, in which the reader
transmits pseudo-random challenges Ci and the tag answers
with RiCi . These responses are precalculated, so the tag can
answer nearly immediately. When this one bit exchange has
finished, the reader can verify the received bits with his own
calculated responses.
Secret key K
Pseudo-random
function H
Generate nonce NV
Secret key K
NV
Pseudo-random
function H
Generate nonce NP
NP
Generate random
bits Ci
Calculate
H(K, NV , NP ),
split in R0 and R1
C1
R1C1
Calculate
H(K, NV , NP ),
split in R0 and R1
Cn
Compare received
RiCi with calculated
values
RnCn
Fig. 5. Distance bounding protocol (Hancke-Kuhn)
VI. C ONCLUSION
A relay attack seems to be very easy, only consisting of
capturing signals and relay them to another device. However,
these actions have to be performed very quickly and our test
was on a system with an active distance bounding protocol.
The signals were captured and processed by a Proxmark3,
a device designed to communicate with RFID components.
Despite this, the relay attack pushes the device to its boundaries in terms of communication possibilities and size. The
external communication possibilities are limited, making it
difficult to relay the signals and even harder to debug. Also
the default antenna of the Proxmark3 was replaced to solve
communication problems.
Due to not be able to debug well and having no control
of the reader, the problem during the relay attack couldn’t be
located. However, we are strongly convinced that the problem
is located in the communication between the proxy and the
reader.
With the knowledge we have gained after this paper, we
wouldn’t choose again for using two Proxmark3 devices in the
setup. We would more focus on the analog part of the protocol.
In our implementation the Proxmark3 handles the receiving
and transmitting of signals. By building our own receiver and
transmitter the delay could be reduced, because we wouldn’t
need the digital processing. We also would study the RFID
transaction in more detail, what we have long ignored by using
the Proxmark3.
ACKNOWLEDGMENT
This paper is the result of my master’s thesis. I would like
to thank my promotors prof. dr. ir. Bart Preneel and prof. dr.
ir. Ingrid Verbauwhede for giving me the opportunity to do
this research. I would also like to thank my daily supervisor
dr. ir. Dave Singel´ee for helping me find answers to all kind
83
G. Wetenschappelijk Artikel
5
of questions which arose during the creation of this thesis.
Kristof Mari¨en
June 6, 2014
R EFERENCES
[1] W. van Dullink and P. Westein, “Remote relay attack on RFID access
control systems using NFC enabled devices,” Technical report, University of Cambridge Computer Laboratory, 13 pages, 2005.
[2] A. Francillon, B. Danev, and S. Capkun, “Relay Attacks on Passive
Keyless Entry and Start Systems in Modern Cars,” in Network &
Distributed System Security, feb 2011.
[3] G. P. Hancke, K. Mayes, and K. Markantonakis, “Confidence in smart
token proximity: Relay attacks revisited.” in Computers & Security,
vol. 28, no. 7, 2009, pp. 615–627.
[4] G. P. Hancke, “A Practical Relay Attack on ISO 14443 Proximity
Cards,” Technical report, University of Cambridge Computer Laboratory,
13 pages, 2005.
[5] ISO and IEC, “ISO/IEC 14443, Proximity cards (PICCs),”
http://wg8.de/sd1.html, November 2013.
84
[6] NXP Semiconductors, “MF1S503x,” Public Data Sheet, 2011, http://
www.nxp.com/documents/data sheet/MF1S503x.pdf.
[7] G. de Koning Gans, J.-H. Hoepman, and F. D. Garcia, “A Practical
Attack on the MIFARE Classic,” in CARDIS, 2008, pp. 267–282.
[8] NXP Semiconductors, “MF1PLUSx0y1,” Public Data Sheet, 2011, http:
//www.nxp.com/documents/data sheet/MF1PLUSX0Y1 SDS.pdf.
[9] ——, “MF3ICDx21 41 81,” Public Data Sheet, 2010, http://www.nxp.
com/documents/short data sheet/MF3ICDX21 41 81 SDS.pdf.
[10] J. Westhues, “Proxmark3,” 2013, https://github.com/Proxmark/
proxmark3.
[11] T. Instruments, “TL08xx JFET-Input Operational Amplifiers,” 2014,
http://www.ti.com/lit/ds/symlink/tl084a.pdf.
[12] Vishay, “Small Signal Fast Switching Diodes,” 2013, http://www.vishay.
com/docs/85622/1n914.pdf.
[13] L. Francis, G. P. Hancke, K. Mayes, and K. Markantonakis, “Practical Relay Attack on Contactless Transactions by Using NFC Mobile
Phones,” IACR Cryptology ePrint Archive, 16 pages, 2011, http://eprint.
iacr.org/.
[14] G. P. Hancke and M. G. Kuhn, “An RFID Distance Bounding Protocol,”
in SecureComm, 2005, pp. 67–73.
Bibliografie
[1] Altera. Understanding Metastability in FPGAs, 2009. http://www.altera.
com/literature/wp/wp-01082-quartus-ii-metastability.pdf.
[2] G. de Koning Gans and J.-H. Hoepman. Analysis of the MIFARE Classic used
in the OV-Chipkaart project, 2008.
[3] G. de Koning Gans, J.-H. Hoepman, and F. D. Garcia. A Practical Attack on
the MIFARE Classic. In CARDIS, pages 267–282, 2008.
[4] S. Drimer and S. J. Murdoch. Keep Your Enemies Close: Distance Bounding
Against Smartcard Relay Attacks. In USENIX Security Symposium, pages
87–102, 2007.
[5] A. Francillon, B. Danev, and S. Capkun. Relay Attacks on Passive Keyless
Entry and Start Systems in Modern Cars. In Network & Distributed System
Security, feb 2011.
[6] L. Francis, G. P. Hancke, K. Mayes, and K. Markantonakis. Practical Relay
Attack on Contactless Transactions by Using NFC Mobile Phones. IACR
Cryptology ePrint Archive, 16 pages, 2011. http://eprint.iacr.org/.
[7] G. P. Hancke. A Practical Relay Attack on ISO 14443 Proximity Cards. Technical
report, University of Cambridge Computer Laboratory, 13 pages, 2005.
[8] G. P. Hancke and M. G. Kuhn. An RFID Distance Bounding Protocol. In
SecureComm, pages 67–73, 2005.
[9] G. P. Hancke, K. Mayes, and K. Markantonakis. Confidence in smart token
proximity: Relay attacks revisited. In Computers & Security, volume 28, pages
615–627, 2009.
[10] T. Instruments. TL08xx JFET-Input Operational Amplifiers, 2014. http:
//www.ti.com/lit/ds/symlink/tl084a.pdf.
[11] ISO and IEC.
ISO/IEC 14443,
http://wg8.de/sd1.html, November 2013.
Proximity
cards
(PICCs).
85
Bibliografie
[12] W. Issovits and M. Hutter. Weaknesses of the ISO/IEC 14443 protocol regarding
relay attacks. In RFID-TA, pages 335–342, 2011.
[13] NXP Semiconductors. MF1S703x. Public Data Sheet, 2010. http://www.
nxp.com/documents/data_sheet/MF1S703x.pdf.
[14] NXP Semiconductors. MF3ICDx21_41_81. Public Data Sheet, 2010.
http://www.nxp.com/documents/short_data_sheet/MF3ICDX21_
41_81_SDS.pdf.
[15] NXP Semiconductors. MF1PLUSx0y1. Public Data Sheet, 2011. http:
//www.nxp.com/documents/data_sheet/MF1PLUSX0Y1_SDS.pdf.
[16] NXP Semiconductors. MF1S503x. Public Data Sheet, 2011. http://www.
nxp.com/documents/data_sheet/MF1S503x.pdf.
[17] A. Ranganathan, N. O. Tippenhauer, B. Skoric, D. Singelée, and S. Capkun.
Design and Implementation of a Terrorist Fraud Resilient Distance Bounding
System. In ESORICS, pages 415–432, 2012.
[18] W. van Dullink and P. Westein. Remote relay attack on RFID access control
systems using NFC enabled devices. Technical report, University of Cambridge
Computer Laboratory, 13 pages, 2005.
[19] Vishay. Small Signal Fast Switching Diodes, 2013. http://www.vishay.
com/docs/85622/1n914.pdf.
[20] Vishay. Small Signal Zener Diodes, 2013. http://www.vishay.com/docs/
85604/bzx55-se.pdf.
[21] J. Westhues.
proxmark3.
Proxmark3, 2013.
https://github.com/Proxmark/
[22] Xilinx. Spartan-II FPGA Family Data Sheet, 2008. http://www.xilinx.
com/support/documentation/data_sheets/ds001.pdf.
86