Et si on parlait de NFC ? Apple ne s’intéresse pas trop à cette technologie, mais comme j’ai eu l’occasion pour mon travail d’aller voir des applications concrètes, j’ai profité de mon temps libre pour (enfin) installer mon récepteur NFC en USB. Je l’ai installé sur un Raspberry Pi et j’ai essayé de lire quelques trucs en NFC qui « trainaient » à la maison. Petit résumé.
Le NFC, c’est quoi ? Une technologie sans contact, avec une portée très courte (quelques centimètres), utilisée dans énormément d’appareils. Sous le nom générique NFC (ou RFID, c’est assez proche), on trouve différentes technologies, un Pass Navigo (pour les parisiens), un passeport ou un Nanoztag n’utilisent par exemple pas les mêmes technologies. Magie des récepteurs, on peut tout de même lire le contenu de pas mal de types de tags avec un seul lecteur.
Une puce NFC, c’est quelques ko de données (dans le meilleur des cas), une interface pas très rapide (100 kilobits/s environ) et une portée très faible, environ 3 cm en temps normal, un peu plus avec des montages adaptés. On utilise des puces NFC pour différents usages : comme déclencheur (cas du Nabaztag), pour stocker des données (le passeport), comme moyen de paiement (les cartes Visa) ou moyen de validation (le Pass Navigo).
Vous avez sûrement chez vous pleins de choses qui utilisent des technologies de type NFC. Dans mon cas, j’avais pas mal de trucs liés au Nabaztag et au Karotz, un passeport récent, un badge récupéré lors d’un salon et des Pass Navigo.
Si le sujet vous intéresse, Canard PC Hardware a un dossier très complet sur le sujet.
Un peu de pratique
Ceci n’est pas un dossier théorique (il y a Tom’s Hardware pour ça), mais bien un truc un peu pratique. J’ai utilisé mon fidèle Raspberry Pi et un lecteur USB acheté il y a un moment, un SCL3711 de chez Identive. Ce n’est pas franchement le meilleur lecteur du monde, les pilotes sont assez mauvais et l’installation souvent laborieuse, mais il était dans mon fourbi et à l’avantage de fonctionner en USB sans devoir jouer avec des fils.
Avant de continuer, un petit point sur la compatibilité : je n’ai pas pu lire mon Pass Navigo ni les différentes puces liées au Nabaztag (Nanoztag récents ou vieux, Ztamps, etc.). Je pense que ça vient du lecteur, sans en être totalement certain. Avec un lecteur à base de PN532, ça passe peut-être.
L’installation
Premièrement, on va avoir besoin de pas mal de trucs liés à Python, le langage souvent utilisé pour les outils NFC. PCSC n’est pas réellement nécessaire avec le SCL3711.
sudo apt-get install python-imaging-tk python-serial python-crypto python-pyscard pcscd pcsc-tools
Ensuite, on va installer libnfc. Les premières lignes ne sont pas nécessaires dans tous les cas, c’est souvent déjà installé.
apt-get install git autoconf libtool gcc libusb-dev
apt-get install dpkg-dev debhelper dh-autoreconf
git clone https://code.google.com/p/libnfc/
cd libnfc
dpkg-buildpackage -b -uc -us
cd ..
dpkg -i *deb
Si vous avez un SCL3711 (comme moi), attention : le système charge par défaut un pilote qui pose problème. Il faut donc empêcher le chargement.
sudo nano /etc/modprobe.d/blacklist-libnfc.conf
Et ajouter les deux lignes dans le fichier.
blacklist pn533
blacklist nfc
Enfin, il faut redémarrer.
Maintenant, on va installer quelques outils, avec RFIDIOt.
git clone https://github.com/AdamLaurie/RFIDIOt
cd RFIDIOt
sudo python ./setup.py install
Là, c’est prêt, on va tester un peu.
Premier test, un badge reçu lors d’un salon, qui contient (a priori au départ, mais j’ai vérifié) des informations. Pour la petite histoire, après ce salon, j’ai reçu des mails professionnels sur mon adresse personnelle et j’ai toujours soupçonné que le badge contenait donc mon adresse personnelle, une erreur de ma part.
Pour vérifier que le badge est reconnu, il suffit de la commande suivante.
nfc-poll
Qui donne donc le résultat suivant :
ISO/IEC 14443A (106 kbps) target:
ATQA (SENS_RES): 00 04
UID (NFCID1): d2 de 75 4e
SAK (SEL_RES): 08
Maintenant, on va essayer de lire. RFIDIOt contient quelques scripts de lecture, et readmifaresimple.py
a fonctionné sur ce tag (je n’avais aucune idée du type de tag).
Il suffit de lancer le programme en utilisant l’argument -f 1
, qui oblige RFIDIOt à utiliser libnfc au lieu des pilotes PCSC. Le 1 indique simplement le premier lecteur, si on en a plusieurs.
readmifaresimple.py -f 1
Sur mon badge, on a donc le contenu brut, avec notamment mon nom (normal), un code imprimé sur la carte, ma société mais aussi — soupçon confirmé — mon adresse mail personnel.
Un passeport
Plus amusant, on peut lire le contenu d’un passeport récent assez facilement. En théorie, il faut un numéro inscrit dans le passeport pour accéder aux données, en pratique, si on a le numéro, la date d’expiration et la date de naissance de la personne, on peut parfaitement reconstruire les données. Au pire, s’il manque une donnée, ça peut éventuellement se faire en brute force.
Il faut simplement entrer la ligne qui est en-dessous de la page principale du passeport. Typiquement, elle contient le numéro, le pays, la date de naissance et la date d’expiration.
mrpkey.py -f 1 "EJxxxxxx<9BELxxxxxxxMxxxxxxx<<<<<<<<<<<<<<06"
Le programme va lire le passeport, ce qui prend quelques (longues) secondes, et afficher les données. On a donc les certificats, les données inscrites sur le passeport et une copie en JPEG2000 de la photo présente dans le passeport (en 400 x 514 dans mon cas). Il y a aussi des données comme les empreintes digitales, mais la lecture est bloquée. En théorie, on peut même cloner les données sur une carte avec ce programme (dérivé de RFIDIOt) mais mon lecteur ne fonctionne pas avec.
Maintenant, ne devenons pas paranoïaques : il faut une bonne vingtaine de secondes pour lire le passeport, certaines données sont protégées, et la portée du lecteur est faible, même avec une antenne adaptée. De plus, il faut connaître certaines données du passeport pour accéder aux données, ce qui enlève en partie de l'intérêt à la chose. D'un point de vue éducatif, ça reste assez intéressant tout de même.
Je n'ai pas (encore ?) de carte de crédit NFC, mais si j'ai l'occasion d'en avoir une, je vous en reparlerais.
Je précise par ailleurs que les logiciels utilisés sont disponibles depuis quelques années et que le couple Raspberry Pi + lecteur NFC basique ne dépasse pas les 100 €...
Hey ! Ma carte bancaire est NFC, veux-tu que je te l’envoie le temps de quelques tests ?
^^
On peut lire les infos écrites dessus et toutes les dernières transactions ;)
Ma copine va en avoir une, moi je veux pas
Blague à part, je n’ai pas eu trop le choix de mon côté.
Par contre je pense avoir trouvé un moyen d’empêcher la fraude, en tout cas la plus basique (le clonage de la partie NFC de la carte) :
À la première utilisation sans contact, il faut quand-même taper son code secret. Donc il devrait suffire que je ne m’en serve JAMAIS.
Même si quelqu’un copiait les infos NFC de ma carte en me croisant dans le métro ou dans la rue (voir Canard PC Hardware n° 16), il ne pourrait pas s’en servir car au moment de payer ça lui demanderait mon code secret.
Par contre il a toujours accès à ces fameuses dernières transactions et autres informations, avec lesquelles il y a peut-être moyen de faire de sales choses (les idées ne me viennent pas mais je n’ai pas l’esprit délinquant).
Pour la petite histoire, je n’ai pas eu tout de suite ce réflexe de ne jamais m’en servir : j’étais contre mais je voulais essayer. C’est juste que j’ai essayé deux fois, dans deux magasins différents, et ça n’a jamais marché. Au lieu de me demander mon code secret, le terminal me renvoyait une erreur et annulait la transaction. Tant mieux pour moi.
Y a pas besoin de taper le code, parce que le risque c’est pas réellement de cloner la partie NFC, c’est de cloner les informations sur une carte à bande magnétique et de payer dans un pays (ou un site) qui utilise pas le code PIN et le code de sécurité (genre aux US)
TOUTES les informations contenues dans la piste magnétique / nécessaire au payement par piste magnétique uniquement, sont disponibles par NCF ? Si oui c’est très très con !
C’est disponible par NFC et c’est écrit sur la carte, tu sais. Une photo de ta carte fournit les mêmes informations.
D’où la présence, en tout cas en Europe, de la puce, bien plus sécurisée.
:) les carte bancaire NFC ou RFID son là pour volontairement générer une défaillance de sécurité . en claire c’est la phase fun !
la phase 1 , le fun ! c’est cool plus besoin de code (on oublie la bande magnétique…)
la phase 2, ce n’est pas si sécure que cela finalement! on augmente un peu la protection
la phase 3, vraiment pas suffisement sécurité ! bon on a une idée on vous plante un RFID dans la main qui permet de valider la carte!
et voila :) comment on force une population a porter des puces RFID .
phase 4, on supprimer la carte on vou implante directement la RFID bancaire
phase 5, on implante les bébé a leur naissance
phase 6, vous allez en prison si ou enlever la puce ou la désactiver sous 48h. elle devien officielement obligatoire .
phase 7, vous ne verez jamais plus les banques du méme oeil :p
phase 8, ferme là et travail ou créve …
phase 9, les puce doivent se changer tout les 3 a 5 ans . elle peuvent contenir des suche viral pour nous vaciné .
phase 10, mort de plus de 6 milliard d’étre humain par infection viral controler! et voila la plus grosse entourloupe de l’humanité :) une fin du monde bien programmer.