Vérification formelle de la plate-forme Java Card



Documents pareils
Vérification formelle de la plate-forme Java Card

La technologie Java Card TM

Traduction des Langages : Le Compilateur Micro Java

Vulgarisation Java EE Java EE, c est quoi?

Projet de Veille Technologique

Formula Negator, Outil de négation de formule.

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

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

Chapitre VI- La validation de la composition.

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Évaluation et implémentation des langages

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Conception des systèmes répartis

Cours 1 : La compilation

La JVM. La machine virtuelle Java. La JVM. La JVM

Classes et Objets en Ocaml.

La carte à puce. Jean-Philippe Babau

Programmation. fonctionnelle, impérative, logique et orientée objet

Automatisation de l administration système

Automatic generation of vulnerability tests for the Java Card byte code verifier

Objets et Programmation. origine des langages orientés-objet

Introduction aux Machines Virtuelles avec VMKit

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Mécanismes pour la migration de processus

Théorie de la Programmation

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

Algorithmique des Systèmes Répartis Protocoles de Communications

Compilation (INF 564)

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

Machines virtuelles Cours 1 : Introduction

Programmer en JAVA. par Tama

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Programmation Web. Madalina Croitoru IUT Montpellier

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

Programmation Bas Niveau

Analyse de sécurité de logiciels système par typage statique

Alfstore workflow framework Spécification technique

MEMOIRE. Présenté à. L École Nationale d Ingénieurs de Sfax. en vue de l obtention du MASTERE

Cours de Programmation 2

SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

Le Collège de France crée une chaire pérenne d Informatique, Algorithmes, machines et langages, et nomme le Pr Gérard BERRY titulaire

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

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

IFT2255 : Génie logiciel

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

TP 1. Prise en main du langage Python

Proposition de stage

OCL - Object Constraint Language

Gestion mémoire et Représentation intermédiaire

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

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

Calculabilité Cours 3 : Problèmes non-calculables.

TP1 : Initiation à Java et Eclipse

UE 8 Systèmes d information de gestion Le programme

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

Introduction à Java. Philippe Genoud.

Programmation Orientée Objet

as Architecture des Systèmes d Information

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Rapport de certification

Programmation en Java IUT GEII (MC-II1) 1

modèles génériques applicables à la synthèse de contrôleurs discrets pour l Internet des Objets

Master Informatique Aix-Marseille Université

Projet Active Object

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

La dernière base de données de Teradata franchit le cap du big data grâce à sa technologie avancée

Une introduction à Java

Sélection du contrôleur

Threads. Threads. USTL routier 1

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

Groupe Eyrolles, 2004, ISBN :

Dispositif sur budget fédéral

Cours A7 : Temps Réel

RTDS G3. Emmanuel Gaudin

Remote Method Invocation (RMI)

Christophe Pagezy Directeur Général Mob:

PROGRAMME DETAILLE. Parcours en première année en apprentissage. Travail personnel CC + ET réseaux

Cours Composant 2. Qualité logicielle et spécications algébriques

Semestre 1. Objectifs Approfondissement de l environnement Java et de son interface de programmation d applications : réseaux, et processus.

REQUEA. v PD 20 mars Mouvements d arrivée / départ de personnels Description produit

Proposition de sujet de thèse CIFRE EUROCOPTER / LGI2P

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

Module BD et sites WEB

Chapitre 2 : Abstraction et Virtualisation

Java DataBaseConnectivity

Java c est quoi? Java pourquoi?

NFP111 Systèmes et Applications Réparties

BUSINESS INTELLIGENCE. Une vision cockpit : utilité et apport pour l'entreprise

Java et les bases de données

Brique BDL Gestion de Projet Logiciel

Rappels d architecture

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Des réels aux flottants : préservation automatique de preuves de stabilité de Lyapunov

Offre Référentiel d échange

Génie Logiciel avec Ada. 4 février 2013

Transcription:

Vérification formelle de la plate-forme Java Card Thèse de doctorat Guillaume Dufay INRIA Sophia Antipolis

Cartes à puce intelligentes Java Card : Environnement de programmation dédié. Dernières générations de cartes à puce pourvues d un microprocesseur et d un système d exploitation. Stockent et gèrent de l information Communiquent Contiennent plusieurs applications Partagent de l information Information manipulée sensible ou confidentielle. vendredi 5 décembre p.1/32

Architecture Java Card Java source Class file Cap file package fr.inri import javacar public class no public Object Java compiler 011100011 101011010 011111001 110110111 100100110 Class File Converter Cap File Builder 011100011 101011010 011111001 110110111 100100110 Chargement Liaison Vérification de bytecode Applet 011100011 101011010 011111001 110110111 100100110 Applet 011100011 101011010 011111001 110110111 100100110 Applet 011100011 101011010 011111001 110110111 100100110 Extensions spécifiques pour l Industrie APIs Machine Virtuelle (JCVM) Environnement d Exécution (JCRE) vendredi 5 décembre p.2/32

Problématique Assurer la sécurité de la plate-forme. Formaliser la plate-forme pour raisonner sur celle-ci Méthodologie pour vérifier des propriétés statiques de la plate-forme Automatisation pour faciliter l application de la méthodologie vendredi 5 décembre p.3/32

Méthodes formelles Exigées pour garantir la sécurité de systèmes complexes. Langage de spécification suffisamment expressif Système logique et techniques de démonstration Génération de code exécutable et certifié Utilisation de l outil COQ. vendredi 5 décembre p.4/32

Méthodologie Vérification d une propriété statique P. Machine P -défensive proche des spécifications P vérifié à l exécution Machine P -offensive proche de l implémentation suppose P déjà vérifié Machine P -abstraite vérifie P uniquement vendredi 5 décembre p.5/32

Méthodologie Vérification d une propriété statique P. Machine P -défensive Abstractions Machine P -offensive Machine P -abstraite Analyse statique P -BCV vendredi 5 décembre p.5/32

Méthodologie Application à la sûreté du typage. Machine T ype-défensive manipule : valeurs typées types : vérifiés à l exécution Machine T ype-offensive manipule : valeurs non typées correction typage assuré par BCV Machine T ype-abstraite manipule : types comme valeurs vendredi 5 décembre p.5/32

Plan Introduction Formalisation de la JCVM Programmes Mémoire Instructions Abstractions Vérification de bytecode Conclusion vendredi 5 décembre p.6/32

Réalisations Formalisation en COQ de la JCVM et du JCRE. Intégralité des instructions (sémantique opérationnelle à petit pas) Environnement d exécution (sauf méthodes natives) Spécifications fonctionnelles et exécutables Comparable aux machines virtuelles de référence. vendredi 5 décembre p.7/32

Programmes Représentation des programmes après la phase de liaison (réalisée par le JCVM Tools). Record jcprogram : Set := { }. classes methods : (list Class); : (list Method); interfaces : (list Interface); sheap_type : (list type) vendredi 5 décembre p.8/32

Programmes Représentation des programmes après la phase de liaison (réalisée par le JCVM Tools). Record Method : Set := { }. signature bytecode : ((list type)*type); : (list Instruction); handler_list : (list handler_type); is_static... : bool; vendredi 5 décembre p.8/32

Valeurs Valeurs typées et vérification des types à l exécution. Inductive valu_prim : Set := vbyte : Z valu_prim vshort : Z valu_prim vint : Z valu_prim vboolean : Z valu_prim vreturnaddress : bytecode_idx valu_prim. vendredi 5 décembre p.9/32

États Représentation du contenu de la mémoire. Record frame : Set := { opstack : (list valu); locvars : (list (option valu)); p_count : bytecode_idx; owner : package;... }. vendredi 5 décembre p.10/32

États Représentation du contenu de la mémoire. Record state : Set := { stack : (list frame); heap : (list obj); sheap : (list valu); }. vendredi 5 décembre p.10/32

Exemple d Instruction Definition IF_COND := [b:bytecode_idx][st:state] vendredi 5 décembre p.11/32

Exemple d Instruction Definition IF_COND := [b:bytecode_idx][st:state] Cases (stack st) of nil (AbortCode state_error st) (cons f lf) Cases (head (opstack f)) of None (AbortCode opstack_error st) (Some v) vendredi 5 décembre p.11/32

Exemple d Instruction Definition IF_COND := [b:bytecode_idx][st:state] Cases (stack st) of nil (AbortCode state_error st) (cons f lf) Cases (head (opstack f)) of None (AbortCode opstack_error st) (Some v) Cases v of (vprim (vshort vx)) _ (AbortCode type_error st) vendredi 5 décembre p.11/32

Exemple d Instruction Definition IF_COND := [b:bytecode_idx][st:state] Cases (stack st) of nil (AbortCode state_error st) (cons f lf) Cases (head (opstack f)) of None (AbortCode opstack_error st) (Some v) Cases v of (vprim (vshort vx)) Cases (compare vx 0 ) of true (update_pc b... st) false (update_pc (S (p_count f))... st) end _ (AbortCode type_error st) end end end. vendredi 5 décembre p.11/32

Plan Introduction Formalisation de la JCVM Abstractions JCVM offensive JCVM abstraite Génération automatique Vérification de bytecode Conclusion vendredi 5 décembre p.12/32

JCVM offensive Manipule des valeurs non typées. Definition valu := Z. Reste de la mémoire inchangé. vendredi 5 décembre p.13/32

Exemple d instruction Definition IF_COND := [b:bytecode_idx][st:state] Cases (stack st) of nil (AbortCode state_error st) (cons f lf) Cases (head (opstack f)) of None (AbortCode opstack_error st) (Some v) (* Cases v of *) (* (vprim (vshort vx)) *) Cases (compare v 0 ) of true (update_pc b... st) false (update_pc (S (p_count f))... st) end (* _ (AbortCode type_error st) *) (* end *) end end. vendredi 5 décembre p.14/32

Validation croisée Assurer la correction de l abstraction réalisée. Fonction d abstraction α do dstate α do ostate dexec oexec dstate α do ostate Le diagramme commute si la VM défensive ne lève pas d erreurs de typage. vendredi 5 décembre p.15/32

JCVM abstraite Manipule pour valeurs des types. Inductive valu_prim : Set := vbyte : (* Z *) valu_prim vshort : (* Z *) valu_prim vint : (* Z *) valu_prim vboolean : (* Z *) valu_prim vreturnaddress : bytecode_idx valu_prim. vendredi 5 décembre p.16/32

Mémoire Modèle de mémoire simplifié Definition state := frame. Pas de gestion des exceptions Possible apparition de non-déterminisme vendredi 5 décembre p.17/32

Exemple d instruction Definition IF_COND := [b:bytecode_idx][st:state] (* Cases (stack st) of nil (AbortCode state_error st) (cons f lf) *) Cases (head (opstack st)) of None (AbortCode opstack_error st) (Some v) Cases v of (vprim vshort) (* Cases (compare vx 0 ) of *) true (update_pc b... st) false (update_pc (S (p_count f))... st) (* end *) _ (AbortCode type_error st) end end (* end *). vendredi 5 décembre p.18/32

Exemple d instruction Definition IF_COND := [b:bytecode_idx][st:state] (* Cases (stack st) of nil (AbortCode state_error st) (cons f lf) *) Cases (head (opstack st)) of None (cons (AbortCode opstack_error st) (nil?)) (Some v) Cases v of (vprim vshort) (* Cases (compare vx 0 ) of *) (cons (update_pc b... st) (cons (update_pc (S (p_count f))... st) (nil?))) (* end *) _ (cons (AbortCode type_error st) (nil?)) end end (* end *). vendredi 5 décembre p.18/32

Validation croisée Fonction d abstraction α da dstate dexec dstate α da astate aexec α da astate Le diagramme commute si l exécution reste dans le même contexte et ne lève pas d exceptions. vendredi 5 décembre p.19/32

Jakarta Outil pour la génération automatique d abstractions et de preuves de correction. Format de spécification spécifique (avec passerelles) Moteur d abstraction par traduction syntaxique Outil de génération d énoncés de lemmes et de preuves Langage de script pour diriger l abstraction Abstractions réalisées par des scripts d environ 50 lignes pour la VM offensive et 200 lignes pour la VM abstraite. vendredi 5 décembre p.20/32

Plan Introduction Formalisation de la JCVM Abstractions Vérification de bytecode Principes Implémentation Instanciation Conclusion vendredi 5 décembre p.21/32

Principes Analyse de flot de données du code d un programme. Utilisation des valeurs avec des types corrects Pile d opérande ayant la taille attendue Initialisation des registres et objets avant utilisation Bonne formation du programme Assurer un comportement correct lors de l exécution. vendredi 5 décembre p.22/32

Réalisation Analyse basée sur l algorithme de KILDALL. Historique des états pour chacun des points de programme Existence d une fonction d unification sur les états Recherche d un point fixe sur la relation d exécution de la machine virtuelle abstraite Vérification méthode par méthode Différents types d analyses possibles (monovariante, polyvariante,...). vendredi 5 décembre p.23/32

Exemple de vérification PC instruction 1 re passe 0: jsr 10 (),[ ; ] 1: iconst_0 2: istore_0 3: jsr 10 4: iload_0 10: astore_1 11: ret 1 États : (Pile d opérande), [Variables locales] vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 0: jsr 10 (),[ ; ] 1: iconst_0 2: istore_0 3: jsr 10 4: iload_0 10: astore_1 (RA 0),[ ; ] 11: ret 1 États : (Pile d opérande), [Variables locales] vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 0: jsr 10 (),[ ; ] 1: iconst_0 2: istore_0 3: jsr 10 4: iload_0 10: astore_1 (RA 0),[ ; ] 11: ret 1 (),[ ;RA 0] États : (Pile d opérande), [Variables locales] vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 3: jsr 10 4: iload_0 10: astore_1 (RA 0),[ ; ] 11: ret 1 (),[ ;RA 0] États : (Pile d opérande), [Variables locales] vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 (int),[ ;RA 0] 3: jsr 10 4: iload_0 10: astore_1 (RA 0),[ ; ] 11: ret 1 (),[ ;RA 0] États : (Pile d opérande), [Variables locales] vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 (int),[ ;RA 0] 3: jsr 10 (), [int;ra 0] 4: iload_0 10: astore_1 (RA 0),[ ; ] 11: ret 1 (),[ ;RA 0] États : (Pile d opérande), [Variables locales] vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 2 e passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 (int),[ ;RA 0] 3: jsr 10 (), [int;ra 0] 4: iload_0 10: astore_1 (RA 0),[ ; ] (RA 3),[int;RA 0] 11: ret 1 (),[ ;RA 0] Choix du type de vérification vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 2 e passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 (int),[ ;RA 0] 3: jsr 10 (), [int;ra 0] 4: iload_0 10: astore_1 (RA 0),[ ; ] (RA 3),[int;RA 0] 11: ret 1 (),[ ;RA 0] Échec de la vérification monovariante vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 2 e passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 (int),[ ;RA 0] 3: jsr 10 (), [int;ra 0] 4: iload_0 10: astore_1 (RA 0),[ ; ] (RA 3),[int;RA 0] 11: ret 1 (),[ ;RA 0] Vérification polyvariante vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 2 e passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 (int),[ ;RA 0] 3: jsr 10 (), [int;ra 0] 4: iload_0 10: astore_1 (RA 0),[ ; ] (RA 3),[int;RA 0] 11: ret 1 (),[ ;RA 0] (),[int;ra 3] Vérification polyvariante vendredi 5 décembre p.24/32

Exemple de vérification PC instruction 1 re passe 2 e passe 0: jsr 10 (),[ ; ] 1: iconst_0 (),[ ;RA 0] 2: istore_0 (int),[ ;RA 0] 3: jsr 10 (), [int;ra 0] 4: iload_0 (),[int;ra 3] 10: astore_1 (RA 0),[ ; ] (RA 3),[int;RA 0] 11: ret 1 (),[ ;RA 0] (),[int;ra 3] Vérification polyvariante vendredi 5 décembre p.24/32

Implémentation Réalisée en COQ sous forme de modules. Module Type BCV. Parameter state : Set. Parameter exec : (relation state). Parameter err : (predicate state). Parameter check : (predicate state). Axiom (decidable check). Axiom a:state.(check a) (reaches err exec a). End BCV. vendredi 5 décembre p.25/32

Implémentation Réalisée en COQ sous forme de modules. Module Type Abstract_VM. Parameter state : Set. Parameter err : (predicate state). Parameter loc : Set. Parameter locs : (list loc). Parameter succs : loc state (list loc). Parameter exec : loc state state. End Abstract_VM. vendredi 5 décembre p.25/32

Implémentation Paramétrée par le type de vérification souhaité. Module Type Polyvariant_Struct. Declare Module avm : Abstract_VM. Parameter max_length_set : nat. Parameter err_st : state. Axiom (err err_st). Axiom l:loc.(monotone < state End Polyvariant_Struct. (exec l)). Module PVS2SMS [pvs:polyvariant_struct] <: Stackmap_Struct. Module BCV_aexec [sms:stackmap_struct] <: BCV. vendredi 5 décembre p.25/32

Compositionnalité Invariant de l exécution défensive établissant une liaison avec l exécution abstraite méthode par méthode. instructions intra-procédurales : résultats de validation croisée appels de méthodes : types des arguments compatibles avec la signature de la méthode retour de méthodes : type de retour compatible avec la signature de la méthode lancement d exceptions : état attendu à l entrée d un gestionnaire vendredi 5 décembre p.26/32

Résultats Utilisateur VM Défensive Analyse Polyvariante Fonctions d abstraction Jakarta VM Abstraite Analyse Monovariante Analyse Hybride BCV pour VM Défensive Preuves de correction invocation Validation croisée Théorèmes obtenus : s:dstate. (check s) (reaches err dexec s). s:dstate. (check s) (α do (dexec s))=(oexec (α do s)). vendredi 5 décembre p.27/32

Plan Introduction Formalisation de la JCVM Abstractions Vérification de bytecode Conclusion vendredi 5 décembre p.28/32

Réalisations Machine virtuelle Java Card complète, avec son environnement d exécution Méthodologie adaptée à la vérification de propriétés sur la plate-forme Appliquée à la vérification du typage Automatisation des tâches Modèle générique et paramétré de BCV vendredi 5 décembre p.29/32

Intérêts de l étude Utilisation des méthodes formelles (Critères Communs) Enjeux économiques liés à la sécurité du système Langage de programmation réaliste Originalité de l approche vendredi 5 décembre p.30/32

Travaux connexes Java en ACL 2 Projet Bali : Java light en Isabelle/HOL Gemplus : BCV embarquable pour Java Card en Atelier B Axalto et Trusted Logic : Plate-forme Java Card en Coq Secsafe : Sémantique opérationnelle de Carmel pour PVS JBook : Java en ASM-Gofer vendredi 5 décembre p.31/32

Perspectives Application de la méthodologie à d autres propriétés Initialisation des objets Non-interférence Disponibilité des ressources Vérificateurs de bytecode optimisés Vérificateurs de bytecode embarqués Passage à Java, C,.Net vendredi 5 décembre p.32/32

Merci de votre Attention

? vendredi 5 décembre p.34/32

?! vendredi 5 décembre p.34/32