Espionner une transaction Monéo

La carte Monéo

La carte Monéo est un porte monnaie électronique. La spécificité d’un porte monnaie électronique est que l’argent n’est pas présent directement sur la carte.

Pour la Monéo, il est nécessaire de présenter votre carte bancaire. Une transaction est effectuée de la même manière que si vous retiriez de l’argent en liquide. Cet argent est alors inscrit sur la carte Monéo. Monéo propose un service de chargement en ligne. Nous allons en profiter pour observer la manière dont fonctionne le chargement d’une telle carte.

L’espion de carte à puce

L’espion fonctionne à partir d’un microprocesseur Microchip PIC32MX512L. Pour plus de détails sur le développement :

Le protocole ISO7816 a été implémenté afin de pouvoir obtenir des traces qui ressemblent à ceci :

T=1:

ATR : 3BE800008131FE454A434F505632343194
Term (S-block):
00C101 FC 3C
Card (S-block):
00E101 FC 1C
Term (I-block):
00000C 00A4040007A0000000041010 0F
Card (I-block):
000025 6F218407A0000000041010A516500A4F56455253494D504C45BF0C07636172647370799000 C3
Term (I-block):
004005 00C0000041 C4

T=0:

ATR : 3B 66 00 00 90 D1 02 01 20 B1 
Term (CLA INS P1 P2 P3):
00 A4 04 0C 06 
Card (Ack):
A4 
Term (UDC):
A00000006900
Card (SW): 
9000
Term (CLA INS P1 P2 P3):
00 B2 01 BC 16
Card (ACK UDR SW): 
B2 9250003840106021502D15091207010250455552011C 9000

Le chargement Monéo

A l’aide de l’espion, nous observons un chargement de Monéo de dix euros effectué sur internet.

Celui ci se décompose en deux parties, la première partie est une lecture des informations de la carte, numéro de PAN, solde etc…

Ensuite un série de commandes est exécutée de cla E0 et d’instructions 30.
La classe E0 nous indique alors qu’il s’agit d’une carte supportant jusqu’à 16 canaux logiques (16 pointeurs de fichier) et que la commande inclus du Secure Messaging.

Edition après le commentaire de SV :

Une petite remarque en passant: CLA = E0 signifie surtout que le bit de poids fort est à 1 donc l’instruction (et la classe) sont propriétaires. La norme ISO/IEC 7816 ne s’applique donc pas pour interpréter l’octet CLA (en particulier les 16 canaux).

Autrement dit, le chargement est protégé par un calcul de MAC. Le mac faisant 8 octets de long, on peut vraisemblablement penser à du 3-DES.

Term (CLA INS P1 P2 P3):
E0 30 00 00 1C 
Card (ACK):
30 
Term (UDC):
00000000001000000000000000007001070600018820121121192244
Card (SW)
6139 
Term (CLA INS P1 P2 P3):
00 C0 00 00 39 
Card (ACK UDR SW):
C0 010005010010000021108888866666001000315D110004010010000100000030000000000000000000000000000000000DCE86FF2230D6A91B 9000
Term (CLA INS P1 P2 P3):
E0 30 80 00 35
Card (ACK):
30 
Term (UDC):
10000501001000250001700107060000000000018820121121192244010000003000000000000000000000000DAE7D69BE5F4394EA 
Card (UDR):
610D 
Term (CLA INS P1 P2 P3):
00 C0 00 00 0D 
Card (ACK UDR SW):
C0 11000501001000003110000000 9000

Conclusion

On retrouve dans la dernière UDC la date de la transaction ainsi que le montant. La sécurité du mécanisme repose la génération des macs par le serveur. Ceci est un système sécurisé à condition que les algorithmes cryptographiques soient correctement implémentés.

2 réflexions au sujet de « Espionner une transaction Monéo »

  1. Une petite remarque en passant: CLA = E0 signifie surtout que le bit de poids fort est à 1 donc l’instruction (et la classe) sont propriétaires. La norme ISO/IEC 7816 ne s’applique donc pas pour interpréter l’octet CLA (en particulier les 16 canaux).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.