Comment nous avons perdu 230 euros chez CJ Affiliate (Conversant)

[accueil]  [menu]  [marions-nous !]  [chercher]


2012-05-07 00:00

Faites parler votre carte bancaire de technologie EMV !


Des tickets de carte bancaire égarés, des doutes ou même une contestation à propos d'un relevé de compte, des soupçons d'utilisation abusive ? Appelez donc à la rescousse ce petit logiciel d'investigation, qui peut aller lire bien des choses intéressantes dans la puce de votre carte bancaire de « nouvelle génération » ! Sans même avoir à composer son code confidentiel... Pour s'en servir (sous Windows), il ne faut qu'un lecteur certifié PC/SC, guère plus coûteux qu'une souris et désormais presque aussi facile à installer.




Un historique de plus en plus complet
Bien que certaines banques en aient nié l'existence au tout début des cartes bancaires à puce (alors même qu'il pouvait conduire à la « saturation » prématurée de leur mémoire !), un mécanisme d'enregistrement des dernières transactions effectuées y a toujours été incorporé. Différents modèles de lecteurs de poche ont même été commercialisés pour en prendre connaissance, dont beaucoup ne fonctionnent déjà plus avec les cartes récemment émises.



Et la technique évolue encore : au lieu des dix ou vingt dernières opérations, on arrive maintenant à en consulter plus d'une centaine en ne déployant que fort peu de moyens.
Peut-être disposez vous déjà d'un lecteur de cartes à puce PC/SC sur votre PC, qu'il vous ait été offert par un opérateur de transport en commun ou que vous l'ayez acheté, par exemple pour utiliser votre porte-monnaie Moneo en ligne. Dans le cas contraire, il est grand temps de vous équiper !
En remettant au goût du jour le bon vieux langage Basic, il est possible de faire des choses étonnantes avec ce genre de lecteur, bien souvent en n'écrivant que quelques dizaines de lignes de code source : percer les secrets de la carte Vitale, des cartes SIM des téléphones portables, des passes de transport en commun, des cartes à puce « sans contact », et naturellement des cartes bancaires.
La puce d'une carte EMV contient différentes données informatiques, dont la plupart servent à authentifier les transactions à l'aide de mécanismes cryptographiques de plus en plus élaborés, et dont il est possible de prendre librement connaissance à l'aide d'outils surtout destinés aux professionnels. Plutôt complexes, ceux-ci ne lisent généralement pas les enregistrements retraçant la vie quotidienne de la carte, ce qui serait pourtant bien utile pour son porteur. Qu'à cela ne tienne, nous avons décidé de combler cette lacune, quitte à nous montrer quelque peu indiscrets...

Un logiciel open source
A force de parcourir les centaines de pages des spécifications EMV, librement consultables par toute personne intéressée, nous avons fini par localiser la plupart des données intéressantes à extraire pour suivre l'utilisation (normale ou non !) qui est faite de la carte. Résultat, un petit programme ZCBasic se présentant sous la forme d'un simple fichier exécutable (LISTEMV.EXE), ne nécessitant aucune installation sous Windows 95 ou supérieur. Son code source (LISTEMV.BAS) pourra être librement inspecté pour vérifier qu'il ne comporte aucun « piège », et surtout qu'il ne dispose d'aucune possibilité d'altérer quoi que ce soit dans la mémoire de la carte, s'inspirant en cela de la meilleure tradition des logiciels d'expertise utilisés par la police scientifique. Les connaisseurs remarqueront ainsi que la commande GET PROCESSING OPTIONS n'est carrément pas implémentée.

#Include CARDUTIL.DEF
#Include COMMERR.DEF
Declare Command &H00 &HA4 SEL(S$,Disable Le)
Declare Command &H80 &HCA GETD(Lc=0,P$)
Declare Command &H00 &HB2 RREC(Lc=0,P$)
ComPort=101
CLS:Print "LISTEMV (c)2011 Patrick GUEULLE":Print
Call WaitForCard
ResetCard:Call CheckSW1SW2
S$=Chr$(&HA0)+Chr$(0)+Chr$(0)+Chr$(0)+Chr$(&H42)+Chr$(&H10)+Chr$(&H10)
Call SEL(P1P2=&H0400,S$)
Call GETD(P1P2=&H9F17,P$,Le=4):Call CheckSW1SW2
Print "Presentations de PIN possibles : ",
M=ASC(MID$(P$,4,1))
M$=HEX$(M)
PRINT ValH(M$);" ";
PRINT
Call GETD(P1P2=&H9F36,P$,Le=5):Call CheckSW1SW2
Print "Compteur de transactions (ATC) : ",
M=ASC(MID$(P$,4,1))
M$=HEX$(M)
N=ASC(MID$(P$,5,1))
N$=HEX$(N)
PRINT ValH(N$)+256*ValH(M$);" ";
PRINT
Call GETD(P1P2=&H9F13,P$,Le=5):Call CheckSW1SW2
Print "Derniere transaction en ligne : ",
M=ASC(MID$(P$,4,1))
M$=HEX$(M)
N=ASC(MID$(P$,5,1))
N$=HEX$(N)
PRINT ValH(N$)+256*ValH(M$);" ";
PRINT:PRINT
Print "----- Dernieres transactions enregistrees -----"
Print "(barre d'espace pour avancer, Esc pour quitter)"
PRINT
L=0:P=1
Call RREC(P1=P,P2=&H5C,P$,Le=L):L=SW2
suite:
Call RREC(P1=P,P2=&H5C,P$,Le=L)
If SW1SW2<>&H9000 Then Goto vide
Print P;":";Tab(8);
FOR F=1 TO Len(P$)
M=ASC(MID$(P$,F,1))
M$=HEX$(M):IF Len(M$)=1 Then M$="0"+M$
PRINT M$;" ";
NEXT F
PRINT
attente:
Z$=Inkey$
If Z$="" Then Goto attente
If Z$=Chr$(27) Then Goto vide
P=P+1:Goto suite
vide:
PRINT
Call WaitForNoCard

Ceux de nos lecteurs qui voudraient y apporter leurs propres modifications devront le recompiler à l'aide d'un outil de développement entièrement gratuit, le kit BasicCard, à découvrir absolument si vous vous sentez une âme de développeur d'applications pour cartes à puce.
Il faut dire, en effet, que notre logiciel est uniquement destiné aux cartes bancaires françaises les plus courantes (SFI = 11), et sélectionne d'autorité l'application A0 00 00 00 42 10 10. Nullement confidentiel, cet identifiant que l'on peut lire en clair sur certains tickets de distributeurs de billets, pourrait ainsi être remplacé par celui de n'importe quelle autre application EMV supportée par une carte internationale (Visa, Mastercard, etc.). Au cas où la carte insérée dans le lecteur se révèlerait incompatible (étrangère, pas assez récente, non bancaire...), un message d'erreur s'afficherait et les choses en resteraient là, sans dommage d'aucune sorte.

Au peigne fin !
Avant même de tenter de lire l'historique des transactions, le logiciel vérifie (en 9F 17) combien de tentatives de présentation du code confidentiel sont encore autorisées. Bien que l'on n'ait aucunement besoin de le composer pour lire ce que l'on veut dans la carte (y compris des informations très personnelles !), s'assurer que trois présentations sont toujours possibles permet de confirmer aisément qu'il n'y a pas eu de tentatives suspectes depuis la dernière transaction réussie.

LISTEMV (c)2011 Patrick GUEULLE

Presentations de PIN possibles : 3
Compteur de transactions (ATC) : 175
Derniere transaction en ligne : 166

Deux autres compteurs sont ensuite lus :
- ATC (9F 36, Application Transaction Counter) révèle combien de fois, depuis l'émission de la carte, une transaction a été initiée, qu'elle se soit terminée ou non avec succès. Ce nombre est donc au moins égal, et le plus souvent supérieur, à celui des transactions enregistrées dans l'historique. Sinon, « il y a un truc » !
- Le second (9F 13) reste figé à la valeur qui était celle d'ATC la dernière fois que le terminal de paiement (ou le distributeur de billets) a exigé une authentification en ligne. Sa surveillance régulière permet de se faire une idée des critères (montants ou fréquence des paiements) qui sont imposés par la banque pour prendre cette précaution, et donc dans une certaine mesure, de la confiance dont jouit le porteur de la carte. A noter que certaines cartes peuvent fonctionner en « autorisation systématique », et que la plupart des distributeurs de billets ou automates de distribution de carburant procèdent d'office à une authentification en ligne. Même chose pour le très innovant système de paiement en ligne PayKnox.
Dans l'exemple (vécu) reproduit ci-dessus, 9 transactions (175 moins 166) ont donc déjà été effectuées en authentification hors ligne, depuis la dernière vérification à distance.
Une description codée de la dernière transaction enregistrée s'affiche ensuite, les précédentes pouvant être appelées une par une en appuyant sur la barre d'espace du clavier (un défilement automatique se produisant si on la maintient enfoncée). A tout moment, il est possible de quitter proprement le programme en pressant la touche d'échappement (Esc).

----- Dernieres transactions enregistrees -----
(barre d'espace pour avancer, Esc pour quitter)

1 : 00 00 00 00 07 64 40 02 50 09 78 11 04 30 00
2 : 00 00 00 00 08 31 40 02 50 09 78 11 04 30 00
3 : 00 00 00 00 30 38 40 02 50 09 78 11 04 26 00
4 : 00 00 00 00 50 00 40 02 50 09 78 11 04 23 01
5 : 00 00 00 00 20 04 40 02 50 09 78 11 04 23 00

En principe, la structure de ces enregistrements est décrite dans un objet baptisé Log format (9F 4F), mais ce dernier étant loin de figurer dans toutes les cartes, nous avons considéré celle-ci comme implicite. Dans l'état actuel des choses, elle ne semble d'ailleurs guère différer d'une banque à l'autre (à part un éventuel préfixe composé du tag 70 et de la longueur des données qui suivent, soit ici 0Fh).

00 00 00 00 07 64 40 02 50 09 78 11 04 30 00

Six octets contiennent le montant de la transaction (ou parfois de l'autorisation), exprimé en centimes, lequel pourrait donc être assez conséquent. Ici, il n'est que de 7,64 €, la devise (euro) étant précisée par le code 0978 et le pays (France) par le code 0250.
L'octet 40 montre que le bon code confidentiel a été présenté, tandis qu'un code faux serait signalé par une valeur 00, de même qu'une transaction abandonnée suite à un échec d'autorisation en ligne. Nous avons naturellement essayé, et cela se confirme !
La date de la transaction (ici le 30 avril 2011) est exprimée en format AA MM JJ, et le dernier octet indique sa nature : 00 correspond ainsi à un paiement (debit) dans un terminal, tandis que l'on trouverait 01 pour un retrait d'espèces (cash) effectué dans un distributeur de billets, ou pour une opération assimilée.

00 00 00 00 00 01 40 02 50 09 78 10 04 28 01

L'exemple ci-dessus, lui aussi vécu, correspond ainsi au rechargement d'un centime d'euro, par carte bancaire, dans un porte-monnaie Moneo le 28 avril 2010. Un montant « interdit », donc, suite à l'une de ces petites plaisanteries informatiques dont nous avons le secret, mais dont il ne faut évidemment pas abuser sous peine de contrarier les banques, qui paient au passage une commission de 15 centimes ! Bien que nous ne l'ayons jamais encore constaté, il n'est pas exclu que ces champs puissent apparaître dans un ordre différent, ou qu'il y en ait un jour davantage. Autrement dit, ouvrons l'oeil ! Notons ainsi que pour le moment, rien n'indique le lieu exact de la transaction, contrairement à ce que nous avons découvert dans les enregistrements de l'application Moneo, mais cela pourrait venir...
Sachez, enfin, qu'une transaction réalisée sans mise à contribution de la puce (achat par téléphone, péage autoroutier, etc.) n'apparaîtrait évidemment pas dans son historique interne. Elle serait par conséquent relativement facile à répudier auprès de la banque à condition de n'avoir donné lieu ni à la composition du code confidentiel, ni à une signature. Encore faudrait-il ne le faire que dans les limites des dispositions contractuelles et de l'honnêteté la plus élémentaire !
Patrick Gueulle

Tous les ouvrages de l'auteur





Vous aimez cette page ? Partagez-en le lien !

Facebook
Twitter
Google+
LinkedIn
Reddit


[homepage] [RSS] [archives]
[contact & legal & cookies] [since 1997]