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
© Copyright 2024 ExpyDoc