Hack NFC - Proxmark3
Présentation
Contexte:
La technologie RFID est de plus en plus utilisées, notamment pour les cartes bancaires ou les cartes Monéo.
Plus directement, les cartes RFID sont présentes sur le campus de Lille 1, pour le paiement des repas au Restaurant Universitaire, ou pour l'ouverture de portes sécurisées.
Leurs fiabilité est donc un enjeu crucial. Il existe cependant des techniques de hackage de ces cartes : http://www.youtube.com/watch?v=7BQDgPMF_fo
Objectif :
L'objectif de ce PFE est d'étudier la vulnérabilité de ces cartes sans contacts, et de trouver un moyen de renforcer leur sécurité.
Ennoncé :
En utilisant des systèmes Proxmark 3 (http://proxmark3.com/index.html) vous commencerez par une simple copie de carte MiFare. Cela vous permettra de prendre en main l'environnement. Vous travaillerez ensuite sur les différents aspects suivants : - Amélioration des antennes pour permettre la capture de cartes à "longues distance" (entre 2 et 10 m) - Packaging de l'appareil et des nouvelles antennes dans un sac à dos - Description de procédures de mise en oeuvre automatique - Mise en place de contre-mesure Quelques liens : http://bigbrotherawards.eu.org/Le-GIE-cartes-bancaires https://code.google.com/p/readnfccc/source/browse/#svn%2Ftrunk%2FNFCCreditCardTool
Avancement du projet
17/09/2013 : Compréhension et recherches sur le sujet
Discussions avec nos encadrants pour comprendre les enjeux du projet. Prise en main du système Proxmark3, et essais de différents logiciels. L'utilitaire proxmark3 (Client Software) peut être téléchargé à cette addresse: "proxmark3.com/downloads.html". Il contient les pilotes pour permettre à un système Windows de reconaitre le matériel, ainsi que le logiciel client Proxmark3 qui permet de communiquer avec le périphérique grâce à une invite de commandes. LF = Low Frequency (125 kHz, 132.5 kHz) HF = High Frequency (13.56 MHz) UHF = Ultra High Frequency (860 MHZ, 960 MHz) Essais de lecture d'une carte RFID.
04/10/2013 : Lecture d'une carte NFC
Première lecture d'une carte monéo, grâce à l'antenne HF.
Commande "hf mf chk *1 ? t" pour tenter l'acces aux blocs de la carte en utilisant des clefs de base. Si le secteur X utilise la clef Y, la commande : "hf mf nested X 1 A Y d" permet de cracker l'ensemble des clés de la carte, et de les enregistrer dans un fichier "dumpkeys.bin". La commande "hf mf dump" permet ensuite de lire l'ensemble des blocs de la carte, et les enregistre dans le fichier "dumpdata.bin".
Les données lues peuvent être observées facilement avec le logiciel HxD. Si on veut comparer deux relevés, le logiciel HexCmp sera plus pratique.
Vous pouvez voir sur la Figure 1 les données présentes sur la carte Monéo utilisée :
Les données sont écrites sous forme hexadécimale sur la carte, et sont traduites par le logiciel. Certaines données sont compréhensible, comme le nom ou le numéro d'étudiant, mais la plupart des données sont cryptées.
17/10/2013 : Avancée des recherches et relevés de données d'une carte
Découverte de la commande "hf mf wrbl" permettant d'écrire un bloc de données sur une carte, et de la commande "hf mf restore" permettant de restaurer les données sur une carte à l'aide d'un ancien relevé.
Pendant le mois d'octobre, nous avons effectué de nombreux relevés d'une carte Monéo étant utilisée régulièrement pour le paiement de repas.
Nous avons pu effectuer de nombreuses comparaisons comme la suivante, en effectuant un relevé avant et un relevé après le paiement d'un repas de 3.15€.
Les symboles surlignés sont ceux qui sont modifiés, on remarque que peu de symboles sont modifiés lors de ce prélèvement.
Comme représenté sur la Figure 3, une dizaine de relevés différents nous a permis de repérer les symboles qui ne sont jamais modifiés, ceux qui le sont parfois (encadrés en vert) et ceux qui le sont toujours (encadrés en rouge).
6/11/2013 : Réécriture d'une carte NFC
Recherches sur l'organisation des données sur une carte. Le fichier Fichier:MF1ICS50FunctSpec.pdf nous a aidé dans cette recherche. Nous avons compris que chacune de nos cartes est constituée de 16 secteurs de données. Chaque secteur est constitué de 4 blocs, chaque bloc étant lui constitué de 16 paires d'octets. Sur nos relevés, chaque ligne constitue un bloc. Le dernier bloc de chaque secteur gère les autorisations d'accès à ce secteur. Il peut être représenté sous la forme suivante: AA AA AA AA AA AA KK KK KK XX BB BB BB BB BB BB ou les 12 premiers octets constituent la clé A, les 6 suivants les conditions d'accès et les 12 derniers la clé B. L'accès à chaque secteur est donc contrôlé par deux clefs, et les conditions d'accès qui définissent si un bloc peut être lu, s'il peut être écrit, et avec quelle clé. L'interprétation des 6 octets de conditions d'accès peut être faite grâce au logiciel MiFaRe Acces Conditions téléchargeable ici: http://www.sendspace.com/file/o3frc9 Sur une carte, tous les blocs dont l'adresse se termine par 3,7,B ou F sont donc réservés aux droits d'accès. Il est donc nécessaire de porter une attention particulière à la modification de ces blocs, car en fonction des autorisations attribuées un secteur peut être interdit en lecture, et dans ce cas il ne sera plus du tout utilisable, et ni modifiable.
D'autre part il est important de noter que les 12 premiers octets de chaque carte représentent l'identifiant de la carte, (4E 46 7E 16 60 88 sur la carte utilisée ici) et qu'ils ne sont pas modifiables (mis à part pour certaines cartes NFC chinoise destinées à ce genre d'opération).
Après avoir compris tout cela nous avons pu copier les données de la carte Monéo sur une autre carte NFC, exactement à l'identique, mis à part pour l'identifiant de la carte. Cependant, lors d'un essai de paiement avec cette autre carte, il y a eu une erreur, la carte n'étant pas reconnue du fait de son identifiant.
26/11/2013 : Espionnage d'échanges RFID
Après avoir chercher pendant plusieurs heures à utiliser la commande "hf mf sniff", qui ne s'est pas révélée utile finalement, nous avons trouvé comment "écouter" les données échangées entre une carte et un lecteur, à l'aide de la commande "hf 14a snoop".
Pour ce faire on a utilisé les commandes :
-"hf 14a snoop" pour sniffer et enregistrer l'échange'
-"hf 14a list" pour avoir accès à l'enregistrement
proxmark3> hf 14a snoop
- db# cancelled by button
- db# maxDataLen=3, Uart.state=0, Uart.byteCnt=1
- db# Uart.byteCntMax=20, traceLen=12d, Uart.output[0]
proxmark3> hf 14a list recorded activity:
ETU :rssi: who bytes + 0: 0: TAG 02 + 152797: 0: TAG 00! + 289126: 0: TAG 02 + 147123: 0: TAG 01 + 147462: 0: TAG 05! + 147290: 0: TAG 02 + 441954: 0: TAG 02 + 441954: 0: TAG 02 + 531882: 0: TAG 04 00 + 746: 0: TAG 4e 46 7e 16 60 + 2048: 0: TAG 08 b6 dd + 120402: 0: TAG 02 + 21846: 0: TAG 04 00 + 744: 0: TAG 4e 46 7e 16 60 + 2052: 0: TAG 08 b6 dd + 142234: 0: TAG 04 00 + 746: 0: TAG 4e 46 7e 16 60 + 2048: 0: TAG 08 b6 dd + 142220: : 26 + 4752: : 26 + 142579: : 26 + 4751: : 26 + 142578: : 26 + 4750: : 26 + 142576: : 26 + 4752: : 26 + 142579: : 26 + 4751: : 26
ATQA+UID+SAK = 0004 4e467e16 08: On a donc retrouvé l'UID de la carte NFC qui vaut 4e467e16
L'ETU : elementary time unit (ETU) est la durée nominale des bits utilisés dans la trame
Le "rssi" est l'intensité du signal, il reste à 0. Nous avons contacté des développeurs de Proxmark qui nous ont confirmé que c'était le même cas pour eux et qu'il ne fallait pas en tenir compte.
Les échanges au début de l'enregistrement ne signifient rien et ils ne sont pas à prendre en compte.
Dans ce cas, l'antenne de la Proxmark était placée à moins de 5 cms de l'échange, Le but étant de pouvoir faire ce genre d'opération à au moins 1 mètre.
Augmentation de la portée
Expériences préliminaires
Ces expériences ont pour but de comprendre de façon très concrète le fonctionnement de la Proxmark, cela inclus la compréhension du circuit ainsi que de l'antenne.
Mesure de la fréquence de l'antenne Haute Fréquence, dont la valeur est théoriquement 13,56 MHz.
Calcul de la fréquence :
Freq =
Le circuit annoté :
Le FPGA de la proxmark contient tous les algorithmes de crack notament.
Pour faire court, le FPGA transmet directement le signal (que l'antenne devra émettre), via les PIN PWR_OE1 jusque OE4, aux circuits amplificateurs d'émission ( notés circuit amplificateur HF et BF par rapport aux fréquences utilisées, ici) dont voici le schéma :
Le circuit amplificateur en BF se trouve dans la partie haute du schéma, inclue dans le cadre rouge, le circuit amplificateur en HF est inclue dans le cadre bleu
Nous avons simplifier le circuit de l'impédance de sortie de la Proxmark via le raisonnement suivant :
Les 8 tampons d'émission, dont 4 dans le cadres rouge, 1 dans le cadre vert, et 3 dans le cadre bleu, sont représentables par une capacité C0. Nous allons la déterminer en regardant la datasheet dans la page suivante :
Page 3/21 de la datasheet on a dans la dernière ligne du tableau des caractéristiques (cadre rouge), C0 = 8pF
L'impédance à la sortie de la Proxmark3 se simplifie donc de cette façon :
Légende :
Cadre rouge : on a 4 capacités induites par les tampons d'émission, donc 4 * C0 = 4*8 pF = 32 pF et une résistance de 33 Ohms
Cadre bleu : on a 4 capacités induites par les tampons d'émission, donc 3 * C0 = 3*8 pF = 24 pF et une résistance de 33 Ohms
Cadre vert : on a 4 capacités induites par les tampons d'émission, donc 1 * C0 = 1*8 pF = 8 pF et une résistance de 10 K Ohms
A l'aide du logiciel Scilab, nous calculons l'impédance équivalente :
On a donc une impédance de sortie de la Proxmark simplifiée qui vaut :
Zprox = 21 – j * 208
L'impédance réduite est :
Abaque de smith pour déterminer le circuit d'adaptation
(Je n'ai pas de quoi scanner l'abaque actuellement mais il sera disponible sur le twiki d'ici mercredi)
Dimensionnement de l'amplification :
Bilan de liaison global (provisoire, en attente des expériences à venir) : En rouge on retrouve le chemin d'émission
En vert on retrouve le chemin de réception
Après avoir pris contact avec M. Jason Royes, un représentant de Rysc Corp, nous avons appris que la société a conçu une antenne qui est compatible avec la Proxmark3, mais elle n'a pas effectué de relevé des caractéristiques de l'antenne à 13,56 Mhz,
Nous avons donc pris rendez-vous et discuté longuement avec M. Ducourneau, Responsable Plate-Forme Electronique, Electrotechnique, Instrumentation (EEI) de Polytech, afin de discuter des expériences à effectuer pour caractériser l'antenne fournie et dimensionner l'amplificateur.
Suite à cette discussion voici le rapport :
I/ Expérience prévue à une antenne :
=> Mesure de l'intensité traversant l'antenne
=> Mesure du coefficient de réflection S(1,1) à l'analyseur de réseau vectoriel avant amplification Mesure du S(1,1) après amplification Cette étape est nécessaire car à la fréquence où l'on travaille (13,56 Mhz), aucune antenne n'est adaptée pour le projet. Car le but est de dissimuler le système et donc l'antenne ne pourra pas dépasser 50 centimètres. Donc il faut partir du principe que quelque soit l'antenne, elle ne sera pas adaptée. L'idée est de mesurer son coefficient de réflecton à 13,56 Mhz pour étudier si l'antenne conçue ne rejette pas la plus grande partie du signal.
Si ce n'est pas le cas, il va falloir réfléchir à une antenne patch dont le symbole est plus directif et de plus grande longueur.
II/ Expérience prévue avec 2 antennes (de même modèle) :
=> Mesure du gain : Cette mesure nous permettra de calculer la puissance P1 à la sortie de l'antenne, afin de compléter notre bilan de liaison
=> Mesure des pertes de 0 à 1,5 m, avec un pas de 0,10 m., cela nous permettra de quantifier la perte dans l'air.
Point important :
Pour les expériences nous devrons commander en Janvier : => 2 câbles USB/ MQ172 avec possibilité d'enlever la gaine en plastique, dans le but de pouvoir séparer les 2 fils à l'intérieur, et de mesurer les constantes, (car c'est impossible avec les 2 fils l'un à côté de l'autre) => 2 câbles : USB connecteur tulipe / SMA coaxial (ils serviront à relier les antennes à l'analyseur de réseau)
(On a seulement besoin des embouts, car on peut les customiser si nécessaire)
Concernant l'amplificateur, d'après M. Flament, si nous prenons un transistor 2n22 22 , il faudra prendre le modèle de couleur gris (en forme de cylindre), il va jusqua 800mA avec dissipateur,
Grâce à leurs matières ils sont plus performants en HF pour notre cas.
Voici un schéma récapitulatif de notre chemin d'émission
Documentation
Analyse des données :
[CEPS Technical Specification]
Circuit Proxmark3
/!\ TWIKI EN COURS DE MISE A JOUR /!\