Compromission d'une application bancaire JavaCard par attaque logicielle

Documents pareils
Compromission d une application bancaire JavaCard par attaque logicielle

La carte à puce. Jean-Philippe Babau

Projet de Veille Technologique

La technologie Java Card TM

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Évaluation de l injection de code malicieux dans une Java Card

Télécom Nancy Année

Généralités sur le Langage Java et éléments syntaxiques.

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INF4420: Éléments de Sécurité Informatique

Tp 1 correction. Structures de données (IF2)

Chapitre 2. Classes et objets

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Compte-rendu de projet de Système de gestion de base de données

CARTES A PUCE. Pascal Urien - Cours cartes à puce /06/10 Page 1

Cryptographie. Master de cryptographie Architectures PKI. 23 mars Université Rennes 1

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

(VM(t i ),Q(t i+j ),VM(t i+j ))

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Protocole industriels de sécurité. S. Natkin Décembre 2000

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

Initiation à JAVA et à la programmation objet.

Une introduction à Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

GlobalScape Secure FTP Server Buffer Overflow

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Programmation impérative

Le poids et la taille des fichiers

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Bases de programmation. Cours 5. Structurer les données

Votre Réseau est-il prêt?

Manuel d'installation

Vérification formelle de la plate-forme Java Card

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Evaluation, Certification Axes de R&D en protection

Introduction au pricing d option en finance

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Cours 1: Java et les objets

Partie 7 : Gestion de la mémoire

Annexe : La Programmation Informatique


Sécurité de l'information

Gestion hybride de la mémoire dynamique dans les systèmes Java temps-réel

Cours 14 Les fichiers

Introduction à la Programmation Parallèle: MPI

SYSTÈME DE GESTION DE FICHIERS

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Haute performance pour serveurs Web embarqués

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

as Architecture des Systèmes d Information

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Chapitre 7. Sécurité des réseaux. Services, attaques et mécanismes cryptographiques. Hdhili M.H. Cours Administration et sécurité des réseaux

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

JaCarTA : un framework d exploit Java Card


CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Introduction. Adresses

Propagation sur réseau statique et dynamique

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction a l'algorithmique des objets partages. Robert Cori. Antoine Petit. Lifac, ENS Cachan, Cachan Cedex. Resume

Club Utilisateurs 2 ème Réunion, 8 Octobre 2014 International RFID Congress, Marseille. Diffusion Restreinte

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Cégep de Saint Laurent Direction des communications et Direction des ressources technologiques. Projet WebCSL : Guide de rédaction web

Conventions d écriture et outils de mise au point

Architecture de l ordinateur

NOTIONS DE RESEAUX INFORMATIQUES

Nombre de marches Nombre de facons de les monter

Stratégie e-commerce : Génération de trafic & fidélisation : les coulisses d un site ecommerce

MB Led. Benjamin Bonny Cédric Le Ninivin Guillaume Normand

Java DataBaseConnectivity

Génération de scripts automatiques pour la sécurité des cartes bancaires nouvelle génération (EMV)

Protocoles cryptographiques

Réalisation d'un seeder BitTorrent en CPC Stage de TRE sous la direction de J. Chroboczek et G. Kerneis

Licence Sciences, Technologies, Santé Mention Informatique Codage de l'information

Rapport de certification ANSSI-CSPN-2010/07. KeePass Version 2.10 Portable

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

UDP/TCP - Protocoles transport

Virtualisation logicielle De la machine réelle à la machine virtuelle abstraite

Analyse des protections et mécanismes de chiffrement fournis par BitLocker

Résolution d équations non linéaires

Le Passeport Biométrique. Benoit LEGER CISSP ISO LD

RENDEZ VOS CLEFS OU L AUTHENTIFICATION FORTE SANS SUPPORT PHYSIQUE

TP 2 : Chiffrement par blocs

Sécurité de RDP. 1 Introduction. Aurélien Bordes, Arnaud Ebalard et Raphaël Rigo prenom.nom@ssi.gouv.fr

Représentation des Nombres

Cours Langage C/C++ Programmation modulaire

La Technologie Carte à Puce EAP TLS v2.0

L exclusion mutuelle distribuée

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Transcription:

Compromission d'une application bancaire JavaCard par attaque logicielle J. Lancia SERMA Technologies, CESTI Symposium sur la sécurité des technologies de l'information et des communications, 2012 1 / 39 Compromission d'une application bancaire JavaCard

Plan 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 2 / 39 Compromission d'une application bancaire JavaCard

Outline Expertise sécuritaire Java Card Mécanismes de sécurité 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 3 / 39 Compromission d'une application bancaire JavaCard

Présentation du produit attaqué Expertise sécuritaire Java Card Mécanismes de sécurité Plateforme Java Card 2.2.2 Machine virtuelle à faible empreinte mémoire dédiée aux cartes à puces Applications codées avec un sous-ensembe de Java Applet bancaire embarquée Protège les biens sécuritaires : PIN, clés, algorithmes cryptographiques Cible de notre expertise Plateforme ouverte Possibilité de charger des applets en phase opérationelle Ouvre la voie aux attaques logiques institution-log 4 / 39 Compromission d'une application bancaire JavaCard

Présentation du produit attaqué Expertise sécuritaire Java Card Mécanismes de sécurité Plateforme Java Card 2.2.2 Machine virtuelle à faible empreinte mémoire dédiée aux cartes à puces Applications codées avec un sous-ensembe de Java Applet bancaire embarquée Protège les biens sécuritaires : PIN, clés, algorithmes cryptographiques Cible de notre expertise Plateforme ouverte Possibilité de charger des applets en phase opérationelle Ouvre la voie aux attaques logiques institution-log 4 / 39 Compromission d'une application bancaire JavaCard

Présentation du produit attaqué Expertise sécuritaire Java Card Mécanismes de sécurité Plateforme Java Card 2.2.2 Machine virtuelle à faible empreinte mémoire dédiée aux cartes à puces Applications codées avec un sous-ensembe de Java Applet bancaire embarquée Protège les biens sécuritaires : PIN, clés, algorithmes cryptographiques Cible de notre expertise Plateforme ouverte Possibilité de charger des applets en phase opérationelle Ouvre la voie aux attaques logiques institution-log 4 / 39 Compromission d'une application bancaire JavaCard

Règles du jeu Expertise sécuritaire Java Card Mécanismes de sécurité Contraintes Temps contraint : 15 jours Nombre d'échantillons contraint : 20 échantillons Atouts Clés de chargement d'applets disponibles Code disponible (applet et plateforme)...... vraiment nécessaire? 5 / 39 Compromission d'une application bancaire JavaCard

Règles du jeu Expertise sécuritaire Java Card Mécanismes de sécurité Contraintes Temps contraint : 15 jours Nombre d'échantillons contraint : 20 échantillons Atouts Clés de chargement d'applets disponibles Code disponible (applet et plateforme)...... vraiment nécessaire? 5 / 39 Compromission d'une application bancaire JavaCard

Outline Expertise sécuritaire Java Card Mécanismes de sécurité 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 6 / 39 Compromission d'une application bancaire JavaCard

Sécurité des plateformes Java Card Expertise sécuritaire Java Card Mécanismes de sécurité Sécurité du code Vérication statique de bytecode Vérications dynamiques ( ex. cast) Vérication de bytecode La vérication de bytecode est faite ocard. Il est possible de modier le bytecode entre la vérication et le chargement. 7 / 39 Compromission d'une application bancaire JavaCard

Sécurité des plateformes Java Card Expertise sécuritaire Java Card Mécanismes de sécurité Sécurité du code Vérication statique de bytecode Vérications dynamiques ( ex. cast) Vérication de bytecode La vérication de bytecode est faite ocard. Il est possible de modier le bytecode entre la vérication et le chargement. 7 / 39 Compromission d'une application bancaire JavaCard

Sécurité des plateformes Java Card Expertise sécuritaire Java Card Mécanismes de sécurité Partage d'objets entre applets Notion de propriété d'instance Tous les partages entre applets sont contôlés par le rewall Même quand tout se passe mal Un attaquant obtient une référence sur une instance d'une autre applet Le rewall bloque l'accès 8 / 39 Compromission d'une application bancaire JavaCard

Sécurité des plateformes Java Card Expertise sécuritaire Java Card Mécanismes de sécurité Partage d'objets entre applets Notion de propriété d'instance Tous les partages entre applets sont contôlés par le rewall Même quand tout se passe mal Un attaquant obtient une référence sur une instance d'une autre applet Le rewall bloque l'accès 8 / 39 Compromission d'une application bancaire JavaCard

Sécurité additionnelle du produit Expertise sécuritaire Java Card Mécanismes de sécurité Pile typée Représentation interne diérente pour les références et les types natifs Méta-données sur les objets Informations supplémentaires gérées par la machine virtuelle Permet des vérications supplémentaires pendant l'exécution Nombre de champs, classe de l'objet 9 / 39 Compromission d'une application bancaire JavaCard

Sécurité additionnelle du produit Expertise sécuritaire Java Card Mécanismes de sécurité Pile typée Représentation interne diérente pour les références et les types natifs Méta-données sur les objets Informations supplémentaires gérées par la machine virtuelle Permet des vérications supplémentaires pendant l'exécution Nombre de champs, classe de l'objet 9 / 39 Compromission d'une application bancaire JavaCard

Sécurité additionnelle du produit Expertise sécuritaire Java Card Mécanismes de sécurité Chirement par applet Les données sensibles (clés, PIN...) sont stockées chirées La clé de chirement est diérente pour chaque applet Même quand tout se passe mal Un attaquant lit toute la mémoire d'une autre applet Les données sensibles restent protégées Que va-t-on bien pouvoir faire? 10 / 39 Compromission d'une application bancaire JavaCard

Sécurité additionnelle du produit Expertise sécuritaire Java Card Mécanismes de sécurité Chirement par applet Les données sensibles (clés, PIN...) sont stockées chirées La clé de chirement est diérente pour chaque applet Même quand tout se passe mal Un attaquant lit toute la mémoire d'une autre applet Les données sensibles restent protégées Que va-t-on bien pouvoir faire? 10 / 39 Compromission d'une application bancaire JavaCard

Outline La faille de la cuirasse De Charybde en Scylla 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 11 / 39 Compromission d'une application bancaire JavaCard

Confusion de type La faille de la cuirasse De Charybde en Scylla Principe Convertion illégale entre objets de types incompatibles 12 / 39 Compromission d'une application bancaire JavaCard

Accéder à un objet comme un short La faille de la cuirasse De Charybde en Scylla Forger des références vers les objets d'autres applets Lire la représentation interne des objets Impossible à cause de la pile typée 13 / 39 Compromission d'une application bancaire JavaCard

La faille de la cuirasse De Charybde en Scylla Accéder à un objet comme un objet d'un autre type Lire au delà des limites de l'objet Impossible à cause des meta-données 14 / 39 Compromission d'une application bancaire JavaCard

La faille de la cuirasse De Charybde en Scylla Accéder à un tableau de shorts comme un tableau de bytes Les bytes sont sur 1 octet, les shorts sont sur 2 octets Lire au delà des limites du tableau Pas détecté par la VM Tous les tableaux en Java sont de la classe Objet Les types natifs ne sont pas distingués dans les méta données 15 / 39 Compromission d'une application bancaire JavaCard

Outline La faille de la cuirasse De Charybde en Scylla 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 16 / 39 Compromission d'une application bancaire JavaCard

Allocation indirecte La faille de la cuirasse De Charybde en Scylla Allocation de deux tableaux de bytes successifs Confusion de type sur le premier tableau Accès illégal à l'en-tête du 2 tableau Modication de la taille dans l'en-tête du 2 tableau Accès illégal à 32 kb maximum en lecture/écriture institution-log 17 / 39 Compromission d'une application bancaire JavaCard

Allocation indirecte La faille de la cuirasse De Charybde en Scylla Allocation de deux tableaux de bytes successifs Confusion de type sur le premier tableau Accès illégal à l'en-tête du 2 tableau Modication de la taille dans l'en-tête du 2 tableau Accès illégal à 32 kb maximum en lecture/écriture institution-log 17 / 39 Compromission d'une application bancaire JavaCard

Accès mémoire illégal La faille de la cuirasse De Charybde en Scylla Lecture L'AID de l'application bancaire est présent dans les données Analyse en rétro-conception des octets lus Les données sensibles sont chirées par applet Pas accessibles par lecture du tableau Ecriture Modication du code de l'application bancaire 18 / 39 Compromission d'une application bancaire JavaCard

Outline 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 19 / 39 Compromission d'une application bancaire JavaCard

Présentation de l'attaque PIN Donnée critique de l'application bancaire Permet d'authentier le porteur de la carte Objectif Modier le code de la carte pour qu'elle accepte un PIN incorrect 20 / 39 Compromission d'une application bancaire JavaCard

Présentation de l'attaque PIN Donnée critique de l'application bancaire Permet d'authentier le porteur de la carte Objectif Modier le code de la carte pour qu'elle accepte un PIN incorrect 20 / 39 Compromission d'une application bancaire JavaCard

Retro conception du code de VERIFY Bytecode L3 : s l o a d 4 ; s l o o k u p s w i t c h L6 2 90 L5 165 L4 ; L4 : g e t f i e l d _ a _ t h i s 0 ; i n v o k e v i r t u a l 1 8 ; r e t u r n ; L5 : s s p u s h 2 5 5 3 6 ; g e t f i e l d _ a _ t h i s 0 ; i n v o k e v i r t u a l 1 9 ; s o r ; i n v o k e s t a t i c 2 0 ; L6 : s s p u s h 8531; i n v o k e s t a t i c 2 0 ; r e t u r n ; Java Card r e s u l t=ownerpin. c h e c k ( pin, o f f s e t, SIZE ) ;... s w i t c h ( r e s u l t ) { c a s e TRUE : resetptc ( ) ; r e t u r n ; c a s e FALSE : U s e r E x c e p t i o n. t h r o w I t ( ( s h o r t ) (0 x63c0 ( PTC [ 0 ] ) ) ) ; d e f a u l t : b r e a k ; } I S O E x c e p t i o n. t h r o w I t ( T e r m i n a t e ) ; 21 / 39 Compromission d'une application bancaire JavaCard

Modication du code de VERIFY Traitement du résultat de la vérication de PIN slookupswitch L6 2 90 L5 165 L4; Code original 90 L5 = Cas défavorable Si la variable vaut 0x5A, jump à L5 165 L4 = Cas favorable Si la variable vaut 0xA5, jump à L4 Code modié 90 L4 = Cas FAVORABLE 165 L4 = Cas favorable institution-log 22 / 39 Compromission d'une application bancaire JavaCard

Modication du code de VERIFY Traitement du résultat de la vérication de PIN slookupswitch L6 2 90 L5 165 L4; Code original 90 L5 = Cas défavorable Si la variable vaut 0x5A, jump à L5 165 L4 = Cas favorable Si la variable vaut 0xA5, jump à L4 Code modié 90 L4 = Cas FAVORABLE 165 L4 = Cas favorable institution-log 22 / 39 Compromission d'une application bancaire JavaCard

Code de VERIFY après l'attaque r e s u l t=ownerpin. c h e c k ( pin, o f f s e t, SIZE ) ; s w i t c h ( r e s u l t ) { c a s e TRUE : c a s e FALSE : resetptc ( ) ; r e t u r n ; d e f a u l t : b r e a k ; } I S O E x c e p t i o n. t h r o w I t ( T e r m i n a t e ) ; Sortie de la commande VERIFY Quel que soit le code PIN présenté : La carte émet une réponse positive Le compteur d'essais est remis à 0 institution-log 23 / 39 Compromission d'une application bancaire JavaCard

Outline 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 24 / 39 Compromission d'une application bancaire JavaCard

Présentation de l'attaque clés Kmac Kenc Objectif Données critiques de l'application bancaire Permet d'authentier la banque Modication du PIN, mise à zero des compteurs de transaction Validation des transactions Modier le code de la carte pour accéder aux clés Plan d'attaque Déterminer les identiants de champs correspondant aux clés Modication d'une portion de code qui renvoie des données pour renvoyer les clés institution-log 25 / 39 Compromission d'une application bancaire JavaCard

Présentation de l'attaque clés Kmac Kenc Objectif Données critiques de l'application bancaire Permet d'authentier la banque Modication du PIN, mise à zero des compteurs de transaction Validation des transactions Modier le code de la carte pour accéder aux clés Plan d'attaque Déterminer les identiants de champs correspondant aux clés Modication d'une portion de code qui renvoie des données pour renvoyer les clés institution-log 25 / 39 Compromission d'une application bancaire JavaCard

Présentation de l'attaque clés Kmac Kenc Objectif Données critiques de l'application bancaire Permet d'authentier la banque Modication du PIN, mise à zero des compteurs de transaction Validation des transactions Modier le code de la carte pour accéder aux clés Plan d'attaque Déterminer les identiants de champs correspondant aux clés Modication d'une portion de code qui renvoie des données pour renvoyer les clés institution-log 25 / 39 Compromission d'une application bancaire JavaCard

Où sont mes clés? Quand tout semble aller de travers, l'application exécute le code suivant : g e t f i e l d _ a _ t h i s 2 ; i n v o k e i n t e r f a c e 1 13 0 ; g e t f i e l d _ a _ t h i s 3 ; i n v o k e i n t e r f a c e 1 13 0 ; g e t f i e l d _ a _ t h i s 4 ; i n v o k e i n t e r f a c e 1 13 0 ; On en déduit qu'il s'agit du code d'eacement des clés : SMI_K. c l e a r K e y ( ) ; SMC_K. c l e a r K e y ( ) ; AC_K. c l e a r K e y ( ) ; Les identiants des clés sont 2, 3, 4 institution-log 26 / 39 Compromission d'une application bancaire JavaCard

Où sont mes clés? Quand tout semble aller de travers, l'application exécute le code suivant : g e t f i e l d _ a _ t h i s 2 ; i n v o k e i n t e r f a c e 1 13 0 ; g e t f i e l d _ a _ t h i s 3 ; i n v o k e i n t e r f a c e 1 13 0 ; g e t f i e l d _ a _ t h i s 4 ; i n v o k e i n t e r f a c e 1 13 0 ; On en déduit qu'il s'agit du code d'eacement des clés : SMI_K. c l e a r K e y ( ) ; SMC_K. c l e a r K e y ( ) ; AC_K. c l e a r K e y ( ) ; Les identiants des clés sont 2, 3, 4 institution-log 26 / 39 Compromission d'une application bancaire JavaCard

Où sont mes clés? Quand tout semble aller de travers, l'application exécute le code suivant : g e t f i e l d _ a _ t h i s 2 ; i n v o k e i n t e r f a c e 1 13 0 ; g e t f i e l d _ a _ t h i s 3 ; i n v o k e i n t e r f a c e 1 13 0 ; g e t f i e l d _ a _ t h i s 4 ; i n v o k e i n t e r f a c e 1 13 0 ; On en déduit qu'il s'agit du code d'eacement des clés : SMI_K. c l e a r K e y ( ) ; SMC_K. c l e a r K e y ( ) ; AC_K. c l e a r K e y ( ) ; Les identiants des clés sont 2, 3, 4 institution-log 26 / 39 Compromission d'une application bancaire JavaCard

Extraction des clés méthode getkey de la classe DESKey byte getkey ( byte [] keydata, short ko ) méthode generatedata de la classe RandomData void generatedata ( byte [] buer, short oset, short length ) Similarités : remplissent un tableau de bytes passés en argument acceptent un oset Diérence : generatedata a un argument de longueur institution-log 27 / 39 Compromission d'une application bancaire JavaCard

Retro conception du code de GET CHALLENGE Génération d'aléa dans la méthode GET CHALLENGE random.generatedata(tmpbuer,(short)0,size); Bytecode g e t f i e l d _ a _ t h i s 1 ; g e t f i e l d _ a _ t h i s 7 ; sconst_0 ; sload_2 ; i n v o k e v i r t u a l 2 2 ; c h a r g e random c h a r g e t m p b u f f e r c h a r g e ( s h o r t ) 0 c h a r g e s i z e i n v o c a t i o n de g e n e r a t e D a t a 28 / 39 Compromission d'une application bancaire JavaCard

Modication du code de GET CHALLENGE Lecture de la clé Bytecode byte getkey ( byte [] keydata, short ko ) > g e t f i e l d _ a _ t h i s 2 ; g e t f i e l d _ a _ t h i s 7 ; sconst_0 ; > nop ; > i n v o k e i n t e r f a c e 4 ; c h a r g e SMI_K à l a p l a c e de random c h a r g e t m p b u f f e r c h a r g e ( s h o r t ) 0 ne c h a r g e pas s i z e i n v o c a t i o n de getkey 29 / 39 Compromission d'une application bancaire JavaCard

Code de GET CHALLENGE après l'attaque Code Java Card SMI_K. getkey ( t m p b u f f e r, ( s h o r t ) 0) ; U t i l. arraycopynonatomic ( t m p b u f f e r, ( s h o r t ) 0, a p d u B u f f e r, ( s h o r t ) 0, s i z e ) ; apdu. s e t O u t g o i n g L e n g t h ( s i z e ) ; apdu. s e n d B y t e s ( ( s h o r t ) 0, s i z e ) ; Sortie de la commande GET CHALLENGE L'application bancaire renvoie les 8 premiers octets de la clé de protection en intégrité Kmac Les 8 octets suivants peuvent être obtenus en modiant l'oset 30 / 39 Compromission d'une application bancaire JavaCard

Rappel Chirement par applet Les données sensibles (clés, PIN...) sont stockées chirées La clé de chirement est diérente pour chaque applet Même quand tout se passe mal Un attaquant lit toute la mémoire d'une autre applet Les données sensibles restent protégées 31 / 39 Compromission d'une application bancaire JavaCard

Rappel Chirement par applet Les données sensibles (clés, PIN...) sont stockées chirées La clé de chirement est diérente pour chaque applet Et pourtant C'est l'applet compromise qui lit ses clés...... et nous les donne! 31 / 39 Compromission d'une application bancaire JavaCard

Réalisation d'un YES Card 32 / 39 Compromission d'une application bancaire JavaCard

33 / 39 Compromission d'une application bancaire JavaCard

Outline Résumé Contre-mesures 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 34 / 39 Compromission d'une application bancaire JavaCard

Bref j'ai craqué une carte à puces Résumé Contre-mesures Un produit bien sécurisé Sécurité de Java Card Sécurité additionnelle du produit Attaque par confusion de type Accès en lecture/écriture au code de l'applet Compromission de l'applet bancaire PIN clés cryptographiques et potentiellement toutes les données de l'application institution-log 35 / 39 Compromission d'une application bancaire JavaCard

Outline Résumé Contre-mesures 1 Expertise sécuritaire Java Card Mécanismes de sécurité 2 La faille de la cuirasse De Charybde en Scylla 3 4 5 Résumé Contre-mesures institution-log 36 / 39 Compromission d'une application bancaire JavaCard

Réalisme de l'attaque Résumé Contre-mesures Code malicieux Le code de l'applet d'attaque ne passe pas le bytecode verier Impossible à embarquer dans un applet légitime Chargement de l'applet Il faut disposer des clés de chargement de la carte Ces clés sont distribuées de manière sécurisée 37 / 39 Compromission d'une application bancaire JavaCard

Contre-mesures Résumé Contre-mesures Contre-mesures possibles Etendre les méta-données aux types natifs Utilisation de la segmentation mémoire matérielle Contre-mesure mise en place Recommendations sécuritaires dans les guides d'utilisation Vérier systématiquement le code des applets N'autoriser le chargement d'applets qu'aux entités de conance 38 / 39 Compromission d'une application bancaire JavaCard

Résumé Contre-mesures Des questions? 39 / 39 Compromission d'une application bancaire JavaCard