[FR] MANAGE D8/SELECTA CREDIT ON RFID CARD

Hacker mai 06, 2017

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 !

Attention !

Cet article n'est pas lĂ  pour vous apprendre Ă  comment hacker un badge NFC mais plutĂŽt de dĂ©montrer les faiblesses, c'est en quelque sorte mon retour d'expĂ©rience sur le sujet. Vous pouvez toujours tester ça de votre cĂŽtĂ© mais n'oubliez pas que vous ĂȘtes responsable de ce que vous faites, Ă  vos risque et pĂ©rils !

Information !

Ces 6 derniers mois, vous avez Ă©tĂ© plusieurs Ă  me demander les dumps de ces cartes et malheureusement chose que je refuse volontairement de faire. Le but de cet article est rĂ©ellement de montrer les faiblesses du NFC, mes mĂ©thodes d'analyses, et ma conclusion personnel mais en aucun cas Ă  vous fournir un dump prĂȘt Ă  utiliser sur vos cartes pour les machines D8/Selecta.

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.OrangePiZero + ACR122

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 :nfc-list
Et avec la carte posée :nfc-list + carte

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 :mfoc dump1
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 :md5 dumps

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é :view with file
De cette maniĂšre non plus :view with less
Par contre on retrouve ce issi5650, j'ai donc fais quelques recherches sur le net. Bof rien trouvé de spécial... Et avec binwalk ?view with 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 ! view with xxd
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 :vimdiff
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 :python hex 5dc
Pour retrouver l'inverse, presque mĂȘme mĂ©thode, ici 4e2 fait 12€50 :python hex 4e2
J'espÚre que vous avez compris le principe. Dans mon cas voici ce que j'ai retrouvé :python tests and vimdiff
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 :cp and vimview binaryconvert xxdchangesrevert xxdsave binary
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 :nfc-mfclassic help
C'est parti pour l'injection (c'est rapide puisqu'on a déjà les clés) !nfc-mfclassic inject

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 !

Enjoy!
XORHAK

Mots clés

đŸŒ± DJΞRFY 🚀

Linux Admin N3. Like #Apple, #Linux, #Kubernetes & #Docker, #TraefikAmbassador, #Hacking, #CTF, #Proxmark, #RFID ¯\_(ツ)_/¯

Super ! Vous vous ĂȘtes inscrit avec succĂšs.
Super ! Effectuez le paiement pour obtenir l'accĂšs complet.
Bon retour parmi nous ! Vous vous ĂȘtes connectĂ© avec succĂšs.
Parfait ! Votre compte est entiÚrement activé, vous avez désormais accÚs à tout le contenu.