Espionner une transaction avec carte à puce

La suite de l’article d’introduction sur la réalisation d’un espion pour carte à puce.
Afin de rendre les choses plus explicites on commence par un petit schéma :

Diagramme en boite de l'espion
Diagramme de l’espion de carte à puce

Le micro-contrôleur va lire les niveaux logiques qui circulent sur les entrées/sorties de la carte à puce. Pour cela il est nécessaire d’utiliser une rallonge. La construction de cette rallonge est décrite dans l’article précèdent :

Plus tard, une interface de lecture, pour les humains, sera développée avec un écran LCD. Au cous du développement, nous aurons besoin de réaliser des transactions. Cette article va traiter de la mise en place de l’environnement de test et de la lecture des données d’une carte bancaire.
Notez que nous utilisons une carte bancaire mais que ceci aurait pu marcher avec n’importe quelle autre carte à puce.

Lecteur de carte à puce

Afin de dialoguer avec la carte à puce, nous utiliserons un lecteur de carte à puce de type PC/SC. Ces lecteurs sont des lecteurs pour PC qui se connectent en USB. Il existe des librairies pour faciliter l’utilisation de ces lecteurs en Java. J’ai acheté le mien sur le site de Monéo : Boutique Moneo

une fois branché, il est nécessaire d’installer les drivers du lecteur. Pour ma Debian cela donne ça :

$:sudo apt-get install libpcsclite1
$:sudo apt-get install libacsccid1
$:sudo apt-get install pcsc-tools

Pour vérifier que l’installation s’est bien déroulée, on insère une carte dans notre lecteur et on le lance dans un terminal :

$pcsc_scan
PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau 
Compiled with PC/SC lite version: 1.7.4
Using reader plug'n play mechanism
Scanning present readers...
0: ACS ACR 38U-CCID 00 00
 
Mon Jun 11 20:03:00 2012
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card inserted, 
  ATR: 3F 65 25 08 66 04 6C 90 00
 
ATR: 3F 65 25 08 66 04 6C 90 00
+ TS = 3F --> Inverse Convention
+ T0 = 65, Y(1): 0110, K: 5 (historical bytes)
  TB(1) = 25 --> Programming Param P: 5 Volts, I: 1 milliamperes
  TC(1) = 08 --> Extra guard time: 8
+ Historical bytes: 66 04 6C 90 00
  Category indicator byte: 66 (proprietary format)
 
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3F 65 25 08 66 04 6C 90 00
3F 65 25 .. .. 04 6C 90 .0
	Carte Bancaire (Frenc

Si vous recevez une réponse du type, alors le driver pcsc est correctement installé.

Analyse de la réponse

L’ATR (Answer to reset) provient de la carte et nous indique quel protocole doit être utilisé aussi bien en terme de durée d’un caractère que de signification d’un niveau logique. Nous y reviendrons plus en détails lorsqu’il s’agira de programmer notre espion puisqu’il devra se caler sur le rythme de la transaction.

Dans le prochain article nous parlerons de l’échantillonnage à proprement parlé et nous montrerons comment se synchroniser avec les données de la carte.
Si vous souhaitez reproduire les échanges de l’article http://oversimple.fr/que-trouve-t-on-dans-une-carte-bancaire/ vous pouvez utiliser le programme gscriptor présent dans le paquetage pcsc-tool que vous venez de télécharger.

It’s oversimple, isn’t it?

Que trouve-t-on dans une carte bancaire?

Que peut on lire sur une carte bancaire?
En réalité, pas grand chose, en tout cas pas grand chose de clair. Nous allons retrouver les informations tel que le PAN présent sur la devanture,  votre nom ainsi que la date d’expiration. Concrètement, voici un log commenté d’une transaction avec carte bancaire. Le log a été obtenu en réalisant une transaction avec un lecteur PCSC et en utilisant l’outil :.

Je déconseille fortement d’utiliser votre carte bancaire pour faire ce test. Tout d’abord, nous ne savons pas si les données sont stockées avec cet outil. De plus ceci est totalement illégal. Avant d’utiliser ceci, nous avons supprimé les données sensibles de la carte.

On commence par sélectionner l’application bancaire présente sur la carte à notre disposition

00 A4 04 00 07 A0000000041010

Et la réponse commentée :

6F File Control Information (FCI) Template
 	84 Dedicated File (DF) Name
 	 	A0000000041010
 	A5 File Control Information (FCI) Proprietary Template
 	 	50 Application Label
 	 	 	O V E R S I M A P P
 	 	9F12 Application Preferred Name
 	 	 	O V E R S I M A P P
 	 	87 Application Priority Indicator
 	 	 	02
 	 	5F2D Language Preference
 	 	 	f r e n
 	 	9F11 Issuer Code Table Index
 	 	 	01
 	 	BF0C File Control Information (FCI) Issuer Discretionary Data
 	 	 	DF60 Unknown tag
 	 	 	 	0B28
 	 	 	9F4D Log Entry
 	 	 	 	0B28
90 00 : Successful

On demande ensuite le Get Processing Option. Cette commande initialise la transaction bancaire.
C’est à ce moment que les compteurs de transactions de la cartes sont incrémentés.

Terminal : 80 A8 00 00 02 8300

La carte répond

77 Response Message Template Format 2
 	82 Application Interchange Profile (AIP)
 	 	3800
 	94 Application File Locator (AFL)
 	 	08010201 10010300 18010201
90 00 : Successful

L’AIP décrit les paramètres de sécurité de la carte. Il sont décrit dans l’EMV Book 3.
L’AFL liste l’ensemble des enregistrement que l’on a le droit de lire dans la carte.

Lecture des records :

Terminal : 00 B2 01 0C 17

70 EMV Proprietary Template
 	57 Track 2 Equivalent Data
 	 	1122334455667788D15031111111111111111F
90 00 : Successful

Le track 2 equivalent data est une copie des données de la piste magnétique.
On a ici le PAN : 1122334455667788 et la date d’expiration 1503 (mars 2015).

Terminal : 00 B2 02 0C 17

70 EMV Proprietary Template
 	5F20 Cardholder Name
 	 	O V E R S I M P L E . F R
 	9F1F Track 1 Discretionary Data
 	 	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
90 00 : Successful

Terminal : 00 B2 01 14 96

On retrouve à l’intérieur la clé publique de la banque signée par l’autorité de certification.
Dans le cas de notre carte, il s’agit de Mastercard.

Terminal : 00 B2 02 14 56

70 EMV Proprietary Template
 	8F Certification Authority Public Key Index
 	 	01
 	92 Issuer Public Key Remainder
 	 	94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 	9F32 Issuer Public Key Exponent
 	 	03
 	9F47 Integrated Circuit Card (ICC) Public Key Exponent
 	 	03
 	9F48 Integrated Circuit Card (ICC) Public Key Remainder
 	 	BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
 	9F49 Dynamic Data Authentication Data Object List (DDOL)
 	 	9F3704
90 00 : Successful

On retrouve là encore des clés de signatures. Cependant on remarque aussi la présence
du tag 9F49 qui désigne les donnés que requiert la carte pour générer une signature RSA.
La carte demande dans cet exemple un nombre aléatoire de 4 octets.

Terminal : 00 B2 03 14 97

Ce record contient la clé publique de la carte signée par la banque.

Terminal : 00 B2 01 1C 58

70 EMV Proprietary Template
 	5F25 Application Effective Date
 	 	130301
 	5F24 Application Expiration Date
 	 	150330
 	5A Application Primary Account Number (PAN)
 	 	1122334455667788
 	5F34 Application Primary Account Number (PAN) Sequence Number
 	 	00
 	9F07 Application Usage Control
 	 	FF00
 	8E Cardholder Verification Method (CVM) List
 	 	000000000000000042514403010302031E031F03
 	9F0D Issuer Action Code – Default
 	 	B840FD8000
 	9F0E Issuer Action Code – Denial
 	 	0010000000
 	9F0F Issuer Action Code – Online
 	 	B860FD9800
 	5F28 Issuer Country Code
 	 	0250
 	9F4A Static Data Authentication Tag List
 	 	82
90 00 : Successful

La CVM list décrit la manière dont peut être authentifiée le porteur de la carte.
(Code pin, signature etc…)
Les action codes décrivent la politique de sécurité de la carte. Ainsi, c’est en fonction
de ces codes qu’elle choisit de refuser une transaction, d’aller en ligne demander à
sa banque ou bien de l’accepter directement sans aller en ligne.
Les cartes d’étudiants vont généralement systématiques interroger la banque alors que
les cartes plus haut de gamme se valident les transactions en offline.

Terminal : 00 B2 02 1C

70 EMV Proprietary Template
 	8C Card Risk Management Data Object List 1 (CDOL1)
 	 	9F02069F03069F1A0295055F2A029A039C019F37049F35019F45029F4C089F3403
 	8D Card Risk Management Data Object List 2 (CDOL2)
 	 	910A8A0295059F37049F4C08
 	9F08 Application Version Number
 	 	0002
90 00 : Successful

Le record qui va nous permettre de terminer la transaction. Dans celui se trouve
les donnés que la carte requiert pour générer le cryptogramme qui valide la
transaction.

70 EMV Proprietary Template
 	8C Card Risk Management Data Object List 1 (CDOL1)
 	 	9F02069F03069F1A0295055F2A029A039C019F37049F35019F45029F4C089F3403
 	8D Card Risk Management Data Object List 2 (CDOL2)
 	 	910A8A0295059F37049F4C08
 	9F08 Application Version Number
 	 	0002
90 00 : Successful

Dans le premier generate application cryptograme la carte demande 43 octets de donnés. Nous
les remplierons avec des zéros. Dans la réalité on y retrouve la date, le montant, etc…

80 AE 40 00 2B 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Nous indiquons que nous souhaitons approuver la transaction directement. La carte devrait répondre
qu’elle refuse la transaction car le code pin n’a pas était validé. Ceci n’est pas forcément vrai.
En effet, la carte peut répondre qu’elle accepte la transaction. La preuve ci dessous :

77 Response Message Template Format 2
 	9F27 Cryptogram Information Data
 	 	40
 	9F36 Application Transaction Counter (ATC)
 	 	0042
 	9F26 Application Cryptogram
 	 	1122334455667788
 	9F10 Issuer Application Data
 	 	4F56455253494D504C452E46520000000000
90 00 : Successful

Le cryptogram Information Data (CID) indique 40,  ce qui signifie que la carte a approuvé la
transaction. Bien entendu ceci ne marche que parce que nous avons judicieusement choisi
de mettre un montant égal à 0;
Il est inutile de penser que la sécurité des carte bancaires
est à remettre en question. Il est toujours bien plus facile de braquer le sac à main
d’une personne âgée que de pirater des cartes bancaires.