Gestion des crédits sur une carte D8/SELECTA
Vous n'êtes pas sans savoir que la technologie évolue (rapidement même), notamment sur les machines à cafés/boissons qui de plus en plus intègre un système de paiement par badge (ou une carte, voyez la même chose) NFC, enfin pas réellement puisqu'il faut d'avance le créditer. Par curiosité, j'ai mis mon nez dedans !
C'est quoi le NFC ?
Je vais pas ré-inventer la roue, la lecture de cet article sur Wikipédia fera parfaitement l'affaire.
Pourquoi faire ça ?
Pourquoi exploiter la carte gérant les crédits ? Simplement par curiosité et par objectif technique, rien de plus. C'est bête mais j'aime comprendre le fonctionnement et l'exploitation des choses :)
Quel matériel faut-il ?
On s'attaque à quelque chose de physique/hardware/matériel, forcement il faudra s'acquérir d'un peu de matériel. Fort heureusement il n'y a pas grand chose et le prix total ne sera pas d'une grande somme (- de 100€). Pour ma part, j'ai utilisé :
- Un OrangePiZero sous Linux (Debian)
- Un lecteur NFC, ACR122
Si vous commandez le ACR122 sur le net, faites attentions aux frais de douane. Sinon vous pouvez toujours vous rabattre sur le RC522 (beaucoup moins chère) mais plus chiant à installer pour les drivers.
Quel logiciel faut-il ?
Avoir du matériel sans les softs/drivers, ça sert pas à grand chose. J'ai utilisé :
- Les drivers pour le lecteur NFC ACR122 (par ici)
- Le soft mfoc pour faire du brute force sur les clés (on verra après les détails)
- Le soft nfc-mifare pour faire l'injection (on verra ça aussi après)
- Le soft xxd (qui sera très utile)
- Le soft binwalk (qui s'avère pas très nécessaire)
Comme beaucoup de monde qui se lance dans l'aventure, il y a forcement des petits soucis sur des dépendances, par exemple avec libusb et/ou libnfc qui peuvent éventuellement rendre parano. C'est d'ailleurs pourquoi j'ai utilisé l'OrangePiZero car j'ai presque pas eu de problème, du moins pas sur les librairies mais sur d'autres petites bricoles (réglés en ~15min).
Au final pour avoir un truc prêt à l'usage, il faut avoir ça :
Et avec la carte posée :
Exploitation du badge !
Etape 1 - Le dump
La première étape est bien évidemment de lire la carte, mieux encore, d'en faire un dump pour l'exploiter plus facilement. Pour ça j'ai utilisé mfoc bien célèbre dans la matière :
J'ai eu le temps de prendre plusieurs cafés, le brute force est en action à ce stade. Bon généralement c'est assez rapide, faut compter 10-15 min...
Etape 2 - Le dump (encore)
Maintenant que j'avais réussi mon premier dump, il fallait trouver une méthode pour le lire, chose que j'explique dans la partie suivante, vous comprendrez mieux après...
La différence, c'est que le second dump devait être différent d'un certain point de vue, avec des crédits en moins (ou en plus, au choix). Par exemple en prenant un café (fonctionne pas si vous avez des cafés gratuits évidemment) ou une bière.
Second dump ! On check la différence rapidement :
Etape 3 - L'analyse
Maintenant que les dumps sont fait, faut encore arriver à les lires, plus compliqué ! Bon j'ai d'abord regardé le type de fichier et tenté de voir ce qu'on pouvais y trouver :
Bon c'est pas gagné :
De cette manière non plus :
Par contre on retrouve ce issi5650, j'ai donc fais quelques recherches sur le net. Bof rien trouvé de spécial... Et avec binwalk ?
Finalement (après quelques heures/jours) j'ai trouvé quelques pistes avec xxd, qui va s'avérer très utile par la suite !
A ce moment, je me suis dit, va falloir mettre les mains dans le cambouis (hexa)... Bon à l'arrache, j'ai chercher à savoir quels blocs étaient modifiés, j'ai fais assez simple :
Après plusieurs heures/jours de recherches là aussi, j'ai finalement réussi à comprendre un peu la chose. Le montant de la carte est inscrit en dur... Bon vous serez d'accord d'avoir la même réaction que moi, beurk...
C'est le l'hexa, donc le montant n'est pas directement visible (sauf si vous êtes fort mais c'est pas mon cas ici), bref, c'est partie pour quelques conversions... Par exemple 15€00 fait 5dc en hexa :
Pour retrouver l'inverse, presque même méthode, ici 4e2 fait 12€50 :
J'espère que vous avez compris le principe. Dans mon cas voici ce que j'ai retrouvé :
Vous comprendrez rapidement que :
- Le dump n°1 contient un montant de 02€80 (hex: 0x118)
- Le dump n°2 contient un montant de 00€30 (hex: 0x01e)
Bingo ! C'est exacte ! J'ai également constaté d'autres blocs modifiés en fonction des cafés mais j'ai pas étudié cette partie, peut-être que je le ferais un jour...
Je vous rajoute aussi un petit schéma concernant l'emplacement des secteurs/blocs :
Etape 4 - Les modifications
J'utilise directement vim pour y faire les modifications (oui à l'arrache). L'avantage d'y passer la commande xxd :
- :% ! xxd (pour convertir le bin en hexa)
- :% ! xxd -r (pour revenir en arrière avec les modifications)
J'ai donc testé en créditant la carte avec 15€00, donc 1500 en int, et 5dc en hexa. Les étapes :
N'oubliez pas de sauvegarde le fichier seulement une fois que vous êtes revenu à son point d'origine, sinon vous risquez d'avoir quelques surprises comme moi. M'enfin c'est pas dramatique non plus.
Etape 5 - L'injection
Maintenant que j'ai mon fichier modifié, il faut encore le renvoyer sur la carte. Volontairement je passe sur tous les petits détails mais la syntaxe est la suivante (pour ma part) :
nfc-mfclassic w B dump_modified.bin dump1.bin
Si vous souhaitez mieux comprendre pourquoi cette syntaxe, vous avez l'aide :
C'est parti pour l'injection (c'est rapide puisqu'on a déjà les clés) !
Etape 6 - Les tests
Maintenant que la carte est modifiée, il faut la tester ! Rien de mieux qu'en situation réel non ? J'ai pas pris de photo pour des raisons privés.
Que faut-il en conclure ?
On va pas se mentir, c'est pas propre de gérer les crédits de cette manière, d'autant plus que la machine n'est pas connecté au réseau, donc aucune manière de contrôler ça... Je pense qu'il y a du travail à faire sur cette partie, peut être pas via un câble mais en wifi il y a matière à réfléchir sur la chose (puis avec un OrangePi/Raspberry, c'est assez simple de faire une passerelle).
Un autre point aussi très important, n'abusez pas du système pour vous payer des choses à gogo ! Vous serez rapidement pris la main dans le sac ! N'oubliez pas que votre carte possède un ID et que vous pouvez être tracé avec celui-ci, volontairement j'en parle pas pour éviter ça :)
Tout cela a été étudié pour la technique, rien d'autre !