Attaques par carte bancaire sans contact



Publié par: cuamckuu

La rĂ©cupĂ©ration du contenu de la carte et le travail avec les Ă©quipes EMV peuvent ĂȘtre intĂ©ressants non seulement Ă  des fins de recherche. Il existe plusieurs types d'attaques contre les cartes bancaires sans contact, dont la mise en Ɠuvre sera discutĂ©e sous la coupe.

Présentation


Cette annĂ©e, j'ai obtenu un stage Ă  Summer of Hack 2019 chez Digital Security et j'ai travaillĂ© sur le sujet de la recherche sur les cartes EMV sans contact. Au cours du stage, il s'est avĂ©rĂ© prĂ©fĂ©rable d'apprendre le fonctionnement des cartes bancaires et de crĂ©er un nouvel utilitaire pour travailler avec les cartes sans contact. Une dĂ©monstration du mode de lecture des donnĂ©es peut ĂȘtre trouvĂ©e ici .

Types d'attaques


La carte et le terminal communiquent en utilisant la norme EMV (Europay + MasterCard + VISA), qui a Ă©tĂ© dĂ©veloppĂ©e pour augmenter la sĂ©curitĂ© des paiements. À cet Ă©gard, il n'y a pas beaucoup de vecteurs d'attaque sur les cartes sans contact. L'article se concentrera sur les points suivants:

  • Lier la carte de quelqu'un d'autre dans la boutique en ligne
  • Étape auxiliaire en ingĂ©nierie sociale
  • DoS sans contact qui transforme une carte en brique

De telles attaques sont possibles lors de l'interaction avec la carte selon la norme EMV. De nombreuses cartes vous permettent de lire facilement les informations privĂ©es de l'utilisateur, en particulier PAN, la date d'expiration et le nom du titulaire. Les donnĂ©es lues sont suffisantes pour mapper la carte dans certains magasins en ligne, par exemple Amazon. Et les donnĂ©es privĂ©es reçues peuvent ĂȘtre utilisĂ©es pour un phishing plus personnalisĂ© ou lors de l'envoi de spam.

De la mĂȘme maniĂšre, une attaque DoS est implĂ©mentĂ©e. L'appel des commandes EMV nĂ©cessaires vous permet de faire dĂ©border le compteur de transactions interne ou de simuler une entrĂ©e de code PIN incorrecte, ce qui entraĂźne un blocage de la carte.

Pourquoi réinventer la roue?


Avant de commencer le développement, il a été décidé d'étudier les solutions existantes. En particulier, ils ont examiné: RFIDIOt / ChAP.py , Jaccal , nfcmillionaire , Conference PoC , script "Ruby" , applications / bibliothÚques Android .

La plupart des programmes examinés tentent de simuler le fonctionnement d'un terminal de point de vente et utilisent des dictionnaires avec des identifiants de cartes prises en charge.Par conséquent, ces solutions ne fonctionnent souvent qu'avec Visa et MasterCard.

Un autre problÚme est la lecture d'une petite partie des données au lieu de vider un vidage complet. Presque tous les programmes essaient d'analyser autant d'EMV que possible à la volée et font des erreurs d'analyse.

Si l'un des problÚmes est absent ou moins prononcé, alors nous parlons probablement d'une application / bibliothÚque pour Android, et vous aurez besoin d'un téléphone avec un lecteur NFC, ce que tout le monde n'a pas.

Les problĂšmes dĂ©crits peuvent ĂȘtre rĂ©solus, pour cela, il est nĂ©cessaire:

  • DĂ©tecter le type de carte dynamiquement, au lieu d'utiliser des dictionnaires
  • Ajoutez plusieurs modes de fonctionnement pour une lecture complĂšte des fichiers
  • N'essayez pas de dĂ©monter la norme EMV Ă  la volĂ©e
  • Utilisez un lecteur pas cher PN532 (~ 5 $)

Récupération des données de la carte


Il existe déjà des articles sur Habré décrivant en détail le processus d'interaction entre la carte et le terminal ( un , deux , trois ), je vais donc essayer de ne pas me répéter et de me concentrer sur la partie pratique.

Pour communiquer avec la carte, nous utiliserons le lecteur PN532 en raison du prix agréable et de la bibliothÚque libnfc. Passez aux affaires en toute transparence. Les données sur la carte sont organisées comme suit:
Environnement -> Applications -> Fichiers -> Enregistrements.

Le but de la lecture est d'obtenir des données de tous les enregistrements, pour cela vous devez passer par une chaßne complÚte, et le choix de l'environnement et de l'application ne se produit qu'une seule fois au début de la communication.
Le mĂȘme processus en termes de commandes EMV:

  • SELECT PPSE // SĂ©lectionnez un environnement sans contact
  • CHOISIR UNE APPLICATION // SĂ©lectionnez une application par AID
  • LIRE ENREGISTREMENT // SpĂ©cifiez le fichier et le numĂ©ro d'enregistrement

Prenons l'exemple de la formation d'une des Ă©quipes. La premiĂšre commande pour sĂ©lectionner un environnement sans contact est toujours la mĂȘme et ressemble Ă  ceci:

byte_t const command[] = { 0x40, 0x01, // Pn532 InDataExchange 0x00, 0xA4, // SELECT ppse 0x04, 0x00, // P1:By name, P2:_ 0x0e, // Lc: Data length 0x32, 0x50, 0x41, 0x59, 0x2e, 0x53, 0x59, // Data string: 0x53, 0x2e, 0x44, 0x44, 0x46, 0x30, 0x31, // 2PAY.SYS.DDF01 (PPSE) 0x00 // Le }; 

Exemple de réponse: 6F 23 84 0E 32 50 41 59 2E 53 59 53 2E 44 44 46 30 31 A5 11 BF 0C 0E 61 0C 4F 07 A0 00 00 00 03 10 10 87 01 01 90 00

Pour appeler la commande suivante, nous devons analyser la réponse de la commande précédente.



Nous sommes intĂ©ressĂ©s par l'identifiant d'application AID. Nous le mĂ©morisons et formons une nouvelle requĂȘte SELECT, mais cette fois, nous transmettons l'AID reçu Ă  la commande SELECT, et non Ă  PPSE, comme dans la premiĂšre commande.

Exemple: 00 A4 04 00 07 A0 00 00 00 03 10 10 00

Comme mentionné précédemment, il est important d'obtenir l'AID de maniÚre dynamique, plutÎt que d'utiliser un dictionnaire préparé, votre application est susceptible de pouvoir lire différents types de cartes, par exemple les cartes MIR.

Une fois l'application sélectionnée, nous pouvons lire les enregistrements nécessaires en utilisant la commande READ RECORD et en transmettant le numéro de fichier et le numéro d'enregistrement comme paramÚtres.

Un exemple de formation d'Ă©quipe: (vous trouverez plus d'informations Ă  ce sujet dans la norme. EMV Book1. 11.2 LIRE LE DOSSIER)

  byte_t const sfi_param = (sfi << 3) | (1 << 2); byte_t const command[] = { 0x40, 0x01, // Pn532 InDataExchange 0x00, 0xB2, // READ RECORD record_number, sfi_param, // P1:record_number and P2:SFI 0x00 // Le }; 

Exemple d'appel: 00 B2 02 14 00

Notez qu'aucun octet complet n'est alloué au numéro de fichier, respectivement, il peut y avoir 31 (2 ^ 5 - 1) fichiers au total et 255 entrées. Les fichiers du 1er au 10 sont alloués pour le stockage des données internes et les autres sont alloués pour le stockage journal des transactions si la carte prend en charge la journalisation.

Maintenant, en utilisant deux boucles imbriquĂ©es, nous pouvons obtenir les donnĂ©es de tous les enregistrements de carte en appelant la commande READ RECORD pour chaque paire. Le processus de recherche peut ĂȘtre considĂ©rablement accĂ©lĂ©rĂ© si vous faites attention au mot d'Ă©tat renvoyĂ© par la carte (les deux derniers octets de la rĂ©ponse). L'Ă©tat peut nous indiquer que le fichier n'existe pas (SW = 0x6A82) ou qu'il n'y a pas d'autres entrĂ©es dans ce fichier (SW = 0x6A83).

En pratique, il s'est avéré judicieux de ne considérer que le cas d'un fichier inexistant, car il existe parfois des cartes qui utilisent incorrectement le code d'état pour les entrées manquantes. AprÚs avoir lu les données, vous pouvez les envoyer à l'un des analyseurs en ligne, j'ai aimé celui-ci .

Fragment de données extraites des enregistrements cartographiques:



Les donnĂ©es lues sont suffisantes pour cartographier la carte dans certaines boutiques en ligne (principalement Ă  l'Ă©tranger), et les informations obtenues peuvent ĂȘtre utilisĂ©es pour une attaque plus personnalisĂ©e en utilisant l'ingĂ©nierie sociale.

Nous organisons le DoS sans contact


Nous passons au type d'attaque suivant. Il existe au moins 2 méthodes d'implémentation pour DoS-a.

Chemin lent


Pour implémenter la méthode lente (l'attaque prendra environ 4 minutes), il est nécessaire de trop remplir le compteur de transactions de carte interne (ATC). Pour ce faire, appelez:

  • SELECT PPSE // SĂ©lectionnez un environnement sans contact
  • CHOISIR UNE APPLICATION // SĂ©lectionnez une application
  • GET DATA // DĂ©couvrez combien il reste avant le dĂ©bordement de l'ATC (Facultatif)
  • OBTENIR DES OPTIONS DE TRAITEMENT // DĂ©marrer la transaction
  • ...
  • OBTENIR DES OPTIONS DE TRAITEMENT // RĂ©pĂ©ter les transactions jusqu'au dĂ©bordement

Examinez les étapes plus en détail. Le choix de l'environnement et de l'application sans contact est similaire à l'élément avec extraction de données, la seule différence est que cette fois, nous devons traiter la réponse de la commande SELECT APPLICATION.



Nous nous intéressons au champ PDOL, car il sera nécessaire pour l'appel suivant de la commande GET PROCESSING OPTIONS, ce qui augmentera le compteur de transactions pour chaque appel.
Dans PDOL, la carte nous demande des informations sur le terminal et le paiement.

Dans l'exemple ci-dessus, la carte nous demande:

  • 9F66 04 // Qualificatif de transaction de terminal (4 octets)
  • 9F02 06 // Montant (6 octets)
  • 9F37 04 // Nombre imprĂ©visible (4 octets)
  • 5F2A 02 // Code de devise de transaction (2 octets)

Puisque nous implémentons DoS, pas un vrai paiement, nous ne pouvons pas nous soucier de l'exactitude des valeurs et utiliser simplement les valeurs pré-préparées que la carte acceptera. En savoir plus sur les valeurs requises dans la norme. (Livre EMV 3. Annexe A Dictionnaire des éléments de données).

Pour la commodité d'une utilisation pratique, je cite le tableau:
Tag (hex)La descriptionValeur valide (hex)
9F59Informations sur la transaction du terminalC8 80 00
9F5AType de transaction de terminal00
9F58Indicateur de type de commerçant01
9F66Qualifications de transaction de terminal79 00 40 80
9F02Montant (autorisé)00 00 00 10 00 00
9F03Montant (autre)00 00 00 00 00 00 00
9F1ACode du pays du terminal01 24
5F2ACode de devise de transaction01 24
95Résultats de la vérification du terminal00 00 00 00 00
9ADate de transaction19 01 01
9CType de transaction00
9F37Nombre imprévisible82 3D DE 7A

AprĂšs avoir formĂ© les donnĂ©es demandĂ©es par la carte, nous sommes prĂȘts Ă  appeler le GPO.

Exemple: 80 A8 00 00 12 83 10 79 00 40 80 00 00 00 10 00 00 82 3D DE 7A 01 24 00

RĂ©ponse: 77 4F 82 02 20 00 94 0C 10 02 03 00 18 01 01 00 10 04 04 00 57 13 42 76 55 00 66 83 25 13 D2 00 52 01 14 89 36 20 00 00 1F 5F 20 02 20 2F 9F 10 07 06 01 11 03 80 20 00 9F 6C 02 30 00 9F 26 08 33 33 89 D5 70 A3 DF 37 9F 27 01 00 9F 36 02 02 48 90 00

Répétez l'appel GPO 65 536 fois et la carte est bloquée. Vous pouvez réduire le nombre d'appels requis en lisant d'abord la valeur ATC actuelle à l'aide de GET DATA.

Moyen rapide


Le moyen rapide est beaucoup plus pratique (et plus dangereux), car il faudra environ 2 secondes pour verrouiller la carte, de sorte qu'une analyse dĂ©taillĂ©e des dĂ©tails de mise en Ɠuvre restera dans les coulisses.

La mĂ©thode est similaire Ă  la prĂ©cĂ©dente, mais cette fois il faudra baisser le compteur des tentatives de saisie du code PIN, au lieu d'augmenter le compteur de transactions. La valeur PIN de Try Counter peut Ă©galement ĂȘtre obtenue via GET DATA, mais dans ce cas il n'y aura pas d'augmentation significative de la vitesse.

Opérations requises:

  • SELECT PPSE // SĂ©lectionnez un environnement sans contact
  • CHOISIR UNE APPLICATION // SĂ©lectionnez une application
  • OBTENIR DES DONNÉES // DĂ©couvrez combien de tentatives de saisie d'un code PIN
  • OBTENIR DES OPTIONS DE TRAITEMENT // DĂ©marrer la transaction
  • VERIFY // Et entrez le mauvais code PIN
  • ...
  • VERIFY // Jusqu'Ă  ce que la carte soit bloquĂ©e

Résumé


Pendant le stage, il a été possible de créer un nouvel outil pour travailler avec des cartes bancaires sans contact et résoudre plusieurs problÚmes qui sont présents dans les solutions existantes, et l'utilisation d'un lecteur bon marché réduit considérablement le coût d'un kit de recherche et peut aider à attirer de nouvelles personnes pour rechercher la sécurité des cartes bancaires sans contact. Le code source du programme est disponible sur Github .

Source: https://habr.com/ru/post/fr468937/


All Articles