Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation. Eva Rose



Similar documents
Langages Orientés Objet Java

Licence Informatique Année Exceptions

Note concernant votre accord de souscription au service «Trusted Certificate Service» (TCS)

POB-JAVA Documentation

Introduction au BIM. ESEB Seyssinet-Pariset Economie de la construction contact@eseb.fr

Remote Method Invocation

Memory Eye SSTIC Yoann Guillot. Sogeti / ESEC R&D yoann.guillot(at)sogeti.com

Office of the Auditor General / Bureau du vérificateur général FOLLOW-UP TO THE 2010 AUDIT OF COMPRESSED WORK WEEK AGREEMENTS 2012 SUIVI DE LA

«Object-Oriented Multi-Methods in Cecil» Craig Chambers (Cours IFT6310, H08)

Interfaces de programmation pour les composants de la solution LiveCycle ES (juillet 2008)

Audit de sécurité avec Backtrack 5

Introduction. GEAL Bibliothèque Java pour écrire des algorithmes évolutionnaires. Objectifs. Simplicité Evolution et coévolution Parallélisme

Sun Management Center Change Manager Release Notes

Archived Content. Contenu archivé

Sun StorEdge A5000 Installation Guide

Sun Enterprise Optional Power Sequencer Installation Guide

Personnalisez votre intérieur avec les revêtements imprimés ALYOS design

EPREUVE D EXPRESSION ORALE. SAVOIR et SAVOIR-FAIRE

Archived Content. Contenu archivé

Archived Content. Contenu archivé

Archived Content. Contenu archivé

N1 Grid Service Provisioning System 5.0 User s Guide for the Linux Plug-In

Survey on Conference Services provided by the United Nations Office at Geneva

v11 v12 v8 v6 v10 v13

BILL C-665 PROJET DE LOI C-665 C-665 C-665 HOUSE OF COMMONS OF CANADA CHAMBRE DES COMMUNES DU CANADA

Archived Content. Contenu archivé

Sun StorEdge RAID Manager Release Notes

Introduction ToIP/Asterisk Quelques applications Trixbox/FOP Autres distributions Conclusion. Asterisk et la ToIP. Projet tuteuré

Parallel Discrepancy-based Search

Measuring Policing Complexity: A Research Based Agenda

Solaris 10 Documentation README

General Certificate of Education Advanced Level Examination June 2012

Méthodes ensemblistes pour une localisation robuste de robots sous-marins

Évariste Galois and Solvable Permutation Groups

Archived Content. Contenu archivé

Optimizing Solaris Resources Through Load Balancing

Start Here. Installation and Documentation Reference. Sun StorEdgeTM 6120 Array

Thursday, February 7, DOM via PHP

Les Broadcast Receivers...

How To Write A Program In Java (Programming) On A Microsoft Macbook Or Ipad (For Pc) Or Ipa (For Mac) (For Microsoft) (Programmer) (Or Mac) Or Macbook (For

Upgrading the Solaris PC NetLink Software

Veritas Storage Foundation 5.0 Software for SPARC

Liste d'adresses URL

Inspection des engins de transport

AgroMarketDay. Research Application Summary pp: Abstract

How To Become A Foreign Language Teacher

Technical Service Bulletin

TP1 : Correction. Rappels : Stream, Thread et Socket TCP

Sun Management Center 3.6 Version 5 Add-On Software Release Notes

Sun Cluster 2.2 7/00 Data Services Update: Apache Web Server

Office of the Auditor General / Bureau du vérificateur général FOLLOW-UP TO THE 2007 AUDIT OF THE DISPOSAL OF PAVEMENT LINE MARKER EQUIPMENT 2009

Scrubbing Disks Using the Solaris Operating Environment Format Program


ACP-EU Cooperation Programme in Science and Technology (S&T II) / Programme de Coopération ACP-UE pour la Science et la Technologie

Archived Content. Contenu archivé

A Summary of the Canadian Firearm Act (FTA)

Hours: The hours for the class are divided between practicum and in-class activities. The dates and hours are as follows:

SunFDDI 6.0 on the Sun Enterprise Server

DIRECTIVE ON ACCOUNTABILITY IN CONTRACT MANAGEMENT FOR PUBLIC BODIES. An Act respecting contracting by public bodies (chapter C-65.1, a.

Service Level Definitions and Interactions

SIXTH FRAMEWORK PROGRAMME PRIORITY [6

Il est repris ci-dessous sans aucune complétude - quelques éléments de cet article, dont il est fait des citations (texte entre guillemets).

MapReduce Détails Optimisation de la phase Reduce avec le Combiner

PIXEL-PLANES: A VLSI-ORIENTED DESIGN FOR 3-D RASTER GRAPHICS. H. Fuchs and J. Pou1ton. University of North Carolina at Chapel Hill

Reconstruction d un modèle géométrique à partir d un maillage 3D issu d un scanner surfacique

Group Projects M1 - Cubbyhole

Java Dynamic Management Architecture for Intelligent Networks

Instruction de montage de voûte ISOLHIS grande portée PCA 32mm

Altiris Patch Management Solution for Windows 7.6 from Symantec Third-Party Legal Notices

Vérification de bytecode et ses applications

Etudes de cas en OCL avec l outil USE 2

Commutative Replicated Data Types for the Semantic Web. Pascal Molli Kickoff Kolflow Feb 2011

Web - Travaux Pratiques 1

Sun StorEdge Availability Suite Software Point-in-Time Copy Software Maximizing Backup Performance

Comparing JavaServer Pages Technology and Microsoft Active Server Pages

Solaris 9 9/05 Installation Roadmap

Altiris Patch Management Solution for Windows 7.5 SP1 from Symantec Third-Party Legal Notices

Sun StorEdge N8400 Filer Release Notes

Sun Grid Engine Release Notes

Sun StorEdge T3 Dual Storage Array - Part 1

Level 2 French, 2014

MD. ALI KHAN. and THE MINISTER OF CITIZENSHIP AND IMMIGRATION REASONS FOR ORDER AND ORDER

In-Home Caregivers Teleconference with Canadian Bar Association September 17, 2015

International Diversification and Exchange Rates Risk. Summary

Solaris Bandwidth Manager

The Register of the Domain of the State A Revolution in the Registration of Land Rights

State of Maryland Health Insurance Exchange

Sun Management Center 3.5 Update 1b Release Notes

Machine de Soufflage defibre

Service Level Agreement in the Data Center

CSS : petits compléments

ESMA REGISTERS OJ/26/06/2012-PROC/2012/004. Questions/ Answers

CFT ICT review Questions/Answers

Windows et Office XP, pack en 2 volumes : Microsoft Office 2003 KillerTips; Décrasser Windows X

Qu est-ce que le Cloud? Quels sont ses points forts? Pourquoi l'adopter? Hugues De Pra Data Center Lead Cisco Belgium & Luxemburg

Archived Content. Contenu archivé

mvam: mobile technology for remote food security surveys mvam: technologie mobile pour effectuer des enquêtes à distance sur la sécurité alimentaire

Sun Integrated Lights Out Manager Supplement for the Sun Fire X4450 Server

Survey on use of Taser International 21ft cartridges

COLLABORATIVE LCA. Rachel Arnould and Thomas Albisser. Hop-Cube, France

Transcription:

1 Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation Eva Rose Soutenance de Thèse UFR d Informatique Université Paris 7 Denis Diderot Le 27 septembre 2002 Ecole Normale Supérieure de Cachan

2 Cadre Problème Conception Formalisation Réalisation Conclusion Exemples

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 3 Contexte Fournisseur C Fournisseur A Fournisseur B hacked

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 4 Cadre Situation: code binaire Java est chargé par un réseau peu fiable et envoyé vers des systèmes Java imbriqués, restreints en mémoire. Vérification de typage: un composant de base pour la sécurité. Souhaite: effectuer la vérification de typage de code binaire Java directement sur les plate-formes cibles du code.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 5 Vérification standard du typage de bytecode Logiciel Java javac Bytecode JVM vérifié L Internet Bytecode JVM pas fiable vérificateur Bytecode JVM fiable L éxecution

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 6 Modèle de mémoire En générale notre plate-forme ciblée contient la mémoire RAM scratch et RAM flash. Scratch: lire et écrire chaque octet directement. Chère. Taille typique: 1 2KB d octets (Java Card 2001). Flash: lire par octet, mais écrire en block. Généralement bon marché. Taille typique: 64 128KB d octets (Java Card 2001). ROM/EEPROM: lire par octet/écrire une nombre de fois fixé. Obsolète. Vérificateur standard typiquement 50KB mémoire de flash pour le logiciel (binary), 30 100KB mémoire de scratch.

7 Cadre Problème Conception Formalisation Réalisation Conclusion Exemples

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 8 Le problème Effectuer la vérification de typage de code binaire Java sur les systèmes restreint en mémoire.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 9 La sûretée de typage Java class Q {... void somemethod(t x) {... x.dummy();... }...}... somemethod(new S());... Pour que l invocation de x.dummy() réussisse, il faut que le contraint statique : S extends... extends T s applique, formellement. LES METHODES BIEN TYPEES REUSSIRONT L EXECUTION

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 10 Flôt de données dans un language d objets x : A y : int if goto x : B y : B x : C y : B A C int Object

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 11 Un exemple d une vérification standard class B {int dummy() {return 0;}} class A extends B{} class E { void m() { B x = new A(); while (x.dummy()!= 0) x = new B(); } }

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 12 OK <*, E.bot> 0: new A <<< top 7: astore 1 top 8: goto 19 top 11: new B top 18: astore 1 top 19: aload 1 top 20: invokevirtual mref(b,msig(dummy,[]),i) top 23: ifne 11 top 26: return top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 13 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 <<< top 8: goto 19 top 11: new B top 18: astore 1 top 19: aload 1 top 20: invokevirtual mref(b,msig(dummy,[]),i) top 23: ifne 11 top 26: return top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 14 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 <<< top 11: new B top 18: astore 1 top 19: aload 1 top 20: invokevirtual mref(b,msig(dummy,[]),i) top 23: ifne 11 top 26: return top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 15 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 top 11: new B top 18: astore 1 OK <*, E.A> 19: aload 1 <<< top 20: invokevirtual mref(b,msig(dummy,[]),i) top 23: ifne 11 top 26: return top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 16 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 top 11: new B top 18: astore 1 OK <*, E.A> 19: aload 1 OK <A, E.A> 20: invokevirtual mref(b,msig(dummy,[]),i) <<< top 23: ifne 11 top 26: return top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 17 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 top 11: new B top 18: astore 1 OK <*, E.A> 19: aload 1 OK <A, E.A> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.A> 23: ifne 11 <<< top 26: return top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 18 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 OK <*, E.A> 11: new B <<< top 18: astore 1 OK <*, E.A> 19: aload 1 OK <A, E.A> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.A> 23: ifne 11 OK <*, E.A> 26: return <<< top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 19 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 OK <*, E.A> 11: new B <<< top 18: astore 1 OK <*, E.A> 19: aload 1 OK <A, E.A> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.A> 23: ifne 11 OK <*, E.A> 26: return OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 20 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 OK <*, E.A> 11: new B OK <B, E.A> 18: astore 1 <<< OK <*, E.A> 19: aload 1 OK <A, E.A> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.A> 23: ifne 11 OK <*, E.A> 26: return OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 21 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 <*, E.A> 11: new B <B, E.A> 18: astore 1 OK <*, E.B> 19: aload 1 <<< <A, E.A> 20: invokevirtual mref(b,msig(dummy,[]),i) <I, E.A> 23: ifne 11 <*, E.A> 26: return OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 22 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 <*, E.A> 11: new B <B, E.A> 18: astore 1 OK <*, E.B> 19: aload 1 OK <B, E.B> 20: invokevirtual mref(b,msig(dummy,[]),i) <<< <I, E.A> 23: ifne 11 <*, E.A> 26: return OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 23 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 <*, E.A> 11: new B <B, E.A> 18: astore 1 OK <*, E.B> 19: aload 1 OK <B, E.B> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.B> 23: ifne 11 <<< <*, E.A> 26: return OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 24 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 OK <*, E.B> 11: new B <<< <B, E.A> 18: astore 1 OK <*, E.B> 19: aload 1 OK <B, E.B> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.B> 23: ifne 11 OK <*, E.B> 26: return <<< OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 25 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 OK <*, E.B> 11: new B <<< <B, E.A> 18: astore 1 OK <*, E.B> 19: aload 1 OK <B, E.B> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.B> 23: ifne 11 OK <*, E.B> 26: return OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 26 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A> 8: goto 19 OK <*, E.B> 11: new B OK <B, E.B> 18: astore 1 <<< OK <*, E.B> 19: aload 1 OK <B, E.B> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.B> 23: ifne 11 OK <*, E.B> 26: return OK top

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 27 OK <*, E.bot> 0: new A OK <A, E.bot> 7: astore 1 OK <*, E.A > 8: goto +11 OK <*, E.B> 11: new B OK <B, E.B> 18: astore 1 OK <*, E.B> 19: aload 1 OK <B, E.B> 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.B> 23: ifne -12 OK <*, E.B> 26: return OK top

28 Cadre Problème Conception Formalisation Réalisation Conclusion Exemples

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 29 Stratégie L idée: application de certificat pour vérifier la sûretée de typage du code binaire en plusieurs étapes où la dernière est un simple parcour en avant. Ceci inspiré par PCC ( Proof Carrying Code ). Formalisation: pour sécuriser l implantation contre les erreurs de type théorique. (Ceci est surtout important pour les systèmes imbriqués, distribués en grand nombres, qui portent les informations sensibles.) Implantation de prototype: pour illustrer le concept en pratique, et pour supporter un modèle à tester.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 30 Contraints de typage possible dans le code 0. PP. contraint de typage du frame d un saut en avant contraint de typage du frame de l instruction précédente.. contraint de typage d un frame d un saut en arrière

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 31 Vérification du code parcouru en avant Saut en avant. Le contraint de typage est vérifié au but du saut PP. Nous retardons la vérification en enregistrant le contraint ( pending ) pendant le traitement du saut. Saut en arrière. Le contraint de typage est vérifié à la source du saut. En conséquence, 1. il faut que le contraint de typage soit assuré ( saved ) à PP pour être disponible au moment où nous traiterons le saut à sa source, et 2. le contraint de typage peut être insuffisant pour effectuer une vérification.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 32 Vérification du code parcouru en avant L information externe nécessaire pour cette vérification (le certificat): Contraints de typage pour les situations incomplètes (les frame type certificates). Les positions des buts des sauts en arrière (les labels).

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 33 Information nécessaire pour l exemple 0: new LA; 7: astore 1 8: goto +11 <*, E.B> 11: new B 18: astore 1 19: aload 1 20: invokevirtual mref(b,msig(dummy,[]),i) 23: ifne -12 26: return

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 34 Vérification Lightweight du typage de bytecode Logiciel Java javac + certifier Certificat Bytecode JVM vérfié L Internet Certificat Bytecode JVM Pas fiable checker Bytecode JVM fiable L éxecution

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 35 Un exemple d une vérification lightweight class B {int dummy() {return 0;}} class A extends B{} class E { void m() { B x = new A(); while (x.dummy()!= 0) x = new B(); } }

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 36 Sa hiérarchie des types I Object B A

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 37 OK <*, E.bot> 0: new A <<< 7: astore 1 8: goto 19 11: new B 18: astore 1 19: aload 1 20: invokevirtual mref(b,msig(dummy,[]),i) 23: ifne 11 26: return CE = {11},{11 <*, E.bot> P = {} S = {}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 38 OK 0: new A OK <A, E.bot> 7: astore 1 <<< 8: goto 19 11: new B 18: astore 1 19: aload 1 20: invokevirtual mref(b,msig(dummy,[]),i) 23: ifne 11 26: return CE = {11},{11 <*, E.bot> P = {} S = {}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 39 OK 0: new A OK 7: astore 1 OK <*, E.A> 8: goto 19 <<< 11: new B 18: astore 1 19: aload 1 20: invokevirtual mref(b,msig(dummy,[]),i) 23: ifne 11 26: return CE = {11},{11 <*, E.bot> P = {19 <*, E.A>} S = {}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 40 OK 0: new A OK 7: astore 1 OK 8: goto 19 OK <*, E.bot> 11: new B <<< 18: astore 1 19: aload 1 20: invokevirtual mref(b,msig(dummy,[]),i) 23: ifne 11 26: return CE = {11},{11 <*, E.bot>} P = {19 <*, E.A>} S = {11 <*, E.bot>}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 41 OK 0: new A OK 7: astore 1 OK 8: goto 19 OK 11: new B OK <B, E.bot> 18: astore 1 <<< 19: aload 1 20: invokevirtual mref(b,msig(dummy,[]),i) 23: ifne 11 26: return CE = {11},{11 <*, E.bot> P = {19 <*, E.A>} S = {11 <*, E.bot>}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 42 OK 0: new A OK 7: astore 1 OK 8: goto 19 OK 11: new B OK 18: astore 1 OK <*, E.B> 19: aload 1 <<< 20: invokevirtual mref(b,msig(dummy,[]),i) 23: ifne 11 26: return CE = {11},{11 <*, E.bot> P = {19 <*, E.A>} S = {11 <*, E.bot>}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 43 OK 0: new A OK 7: astore 1 OK 8: goto 19 OK 11: new B OK 18: astore 1 OK 19: aload 1 OK <B, E.B> 20: invokevirtual mref(b,msig(dummy,[]),i) <<< 23: ifne 11 26: return CE = {11},{11 <*, E.bot> P = {} S = {11 <*, E.bot>}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 44 OK 0: new A OK 7: astore 1 OK 8: goto 19 OK 11: new B OK 18: astore 1 OK 19: aload 1 OK 20: invokevirtual mref(b,msig(dummy,[]),i) OK <I, E.B> 23: ifne 11 <<< 26: return CE = {11},{11 <*, E.bot> P = {} S = {11 <*, E.bot>}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 45 OK 0: new A OK 7: astore 1 OK 8: goto 19 OK 11: new B OK 18: astore 1 OK 19: aload 1 OK 20: invokevirtual mref(b,msig(dummy,[]),i) OK 23: ifne 11 OK <*, E.B> 26: return <<< CE = {11},{11 <*, E.bot> P = {} S = {11 <*, E.bot>}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 46 OK 0: new A OK 7: astore 1 OK 8: goto 19 OK 11: new B OK 18: astore 1 OK 19: aload 1 OK 20: invokevirtual mref(b,msig(dummy,[]),i) OK 23: ifne 11 OK 26: return OK top CE = {11},{11 <*, E.bot> P = {} S = {11 <*, E.bot>}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 47 Utilisation de mémoire #type descriptors = (MS + ML) (1 + #LS + q) = (1 + 2) (1 + 1 + 1) = 6 où #LS est le nombre total des sauts en arrière, et q est le nombre le plus grand des sauts simultanés en avant.

48 Cadre Problème Conception Formalisation Réalisation Conclusion Exemples

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 49 Le sous-language considéré Nous considérons un sous-ensemble de la machine virtuelle suffissant pour compiler un sous-language non trivial qui notament permet la créeation et manipulation des objets, l appel des méthodes d objets, et l access aux variables d objets. Egalement nous voulons permetre d écrire les programme contenant les boucles, les branchements, ou la récursion, et les esxceptions.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 50 La machine virtuelle considéré Sous ensemble des instructions: iconst 0,iconst 1,aconst null,dup,pop,iadd,isub, istore, astore, iload, aload, iastore, aastore, iaload, aaload, newarray, anewarray, arraylength, checkcast, ldc w, new, getfield, putfield, invokevirtual, ifne, ifle, ifnull, goto, athrow, return, ireturn, areturn Types de base: int. Types de reference: class reference types TypeName, ou one-dimensional arrays of class reference types TypeName[], ou int[].

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 51 L ordre de la sûrtée des types pour l ensemble des instructions considerée Null int[] CH[] Object[] int CH Object []

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 52 Reconstruction d une solution ( lightweight ) 0 PP i. PP 1 PP. P[ PP FT PP i PP ] S[ PP FT PP 1 PP P(PP) FTC(PP) ] PP +j. S(PP) FT PP+j PP.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 53 La construction d un certificat Soit FTA une solution pour l ensemble des contraintes du typage d une méthode. 1. Suppose qu il y a un saut de PP à PP dans le code. Si PP PP (saut en arrière) alors PP est placé dans le certificat (les labels LS). 2. Suppose qu il y a k saut en avant de PP ( i) à PP dans le code. Si FTA(PP) ( k i=1 P(PP) ) PP ( i) FT PP( 1) PP alors la solution FTA(PP) est placée dans le certificat (frame types FTC).

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 54 Théorème: le vérificateur lightweight s applique d une façon fiable. Nous montreront que pour un contexte de vérification Γ, une méthode M, avec sa solution FTA à l ensemble des contraintes de typages de la méthode, les lemmes suivants sont équivalent: 1. Il existe une solution (frame type assignment) FTA pour M, tel que Γ bv M, FTA est prouvable. 2. Il existe un certificat CE pour M, tel que Γ lbv M, CE est prouvable.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 55 Lemme principal Le lemme (6.2.6) repète la théorème principal par une formulation qui dépend de la semantique de la construction des certificats ( certifier ). (6.2.6a) Γ bv M, FTA! CE : Γ lbc M, FTA, CE (6.2.6b) Γ lbv M, CE! FTA : Γ lbc M, FTA, CE

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 56 Les quatre parties de la démonstration Le cas (BV) (LBC) montre formellement l existence d un algorithme pour un pré-vérificateur (la première étape d une vérification du typage). Le cas (LBC) (BV) montre formellement que cet algorithme est correct par rapport à la vérification standard. Le cas (LBV) (LBC) montre formellement qu une solution FTA pour l ensemble des contraintes de typages d une méthode peut être reconstruit de la part d un certificat CE de la méthode. Le cas (LBC) (LBV) montre formellement que à partir d un pré-vérificateur nous pouvons construire un algorithme de vérification du typage de code, uniquement basé sur un certificat CE, de la méthode.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 57 Première expansion de l abre sémantique. (4.2.7a) CH FTA(0) FT 0 Ω 0, C, /0 tsafe PPS Γ bv M, FTA (6.2.4a) certify CH FTA(0) = FT 0 Ω 0, C, /0, PCE 0 Γ lbc M, FTA, CE PPS, PCE où PCE 0 = P 0, FTC 0, /0, PCE = P 0, CE... (6.2.4b) certify CH FTA(0) FT 0 Ω 0, C, /0, PCE 0 Γ lbc M, FTA, CE PPS, PCE où PCE 0 = P 0, FTC 0 FTA 0, /0, PCE = P 0, CE...

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 58 Vérification standard d une séquence d instructions La règle simple (4.2.8 a): (dernière instruction) Ω PP, I tsafe PP, Ω PP, I, PPS tsafe PPS où PPS = PPS {PP} La règle composée (4.2.8 b): Ω PP : I 1 tsafe PP, FT PP PP CH FTA(PP ) FT PP PP Ω PP, I 2 CS, PPS tsafe PPS Ω PP, I 1 I 2 CS, PPS tsafe PPS où Ω = Γ,, FTA Γ =, CH PPS = PPS {PP}

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 59 Certification d une séquence La règle simple (6.2.9a): (dernière instruction) Ω PP, I, PCT certify PP,, PCT 0 Ω PP, I, PPS, PCE certify PPS, PCE où PCE = P, CE CE =, LS PCT = P, LS PCT 0 = P {PP }, LS Condition finale PPS = PPS {PP} en commun avec (4.2.8a.i) PCE = P 0, CE

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 60 Certification d une séquence La règle composée (6.2.9b): CH FTA(PP ) = (FT PP PP P(PP )) Ω PP : I 1, PCT certify PP, FT PP PP, PCT Ω PP, I 2 CS, PPS, PCE certify PPS, PCE Ω PP, I 1 I 2 CS, PPS, PCE certify PPS, PCE La règle composée (6.2.9 c): CH FTA(PP ) (FT PP PP P(PP )) Ω PP : I 1, PCT certify PP, FT PP, PCT Ω PP, I 2 CS, PPS, PCE certify PPS, PCE Ω PP, I 1 I 2 CS, PPS, PCE certify PPS, PCE PP

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 61 Les conditions sémantiques Ω = Γ,, FTA Γ =, CH PPS = PPS {PP} PCE = P, CE en commun avec (4.2.8b.i) en commun avec (4.2.8b.ii) en commun avec (4.2.8b.iii) P = P {PP } PCT = P, LS PCT = P, LS CE = LS, FTC CE = LS, FTC (6.2.9b) ou CE = LS, FTC {PP FTA(PP )} (6.2.9c) PCE = P, CE PCE = P 0, CE

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 62 Lemme 1 Ω PP : I 1 tsafe PP, FT PP PP Inv1(PP) = Ω PP : I 1, PCT certify PP, FT PP PP, PCT Inv1(PP ) Invariant : (Inv1(PP)) les labels LS sont définies par les règles de certification d une instruction, LS = {PP FT PP PP : (PP PP PP) (FTA(PP ) FT PP PP )} le P est définie par les règles de certification d une instruction, P = {PP FT PP PP P(PP ) FT PP PP : (PP PP < PP )} Démonstration. Par verification de tous les cas des règles (voir tableau).

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 63 Certification des instructions, mise à jour. Règle Saut de PP Labels Pending contraintes ( ) ( ) RègleExcp RègleExcp RègleExcp (6.3.8a), (6.3.9a) PP PP LS {PP } FTA(PP ) FT PP PP (6.3.8b), (6.3.9b) PP > PP P {PP FT PP PP } RègleExcp: FTA(PP ) FT PP PP Règle Saut de PP Labels Pending contraintes ( ) (6.4.5a), (6.4.6a) PP PP LS {PP } FTA(PP PP ) FTPP (6.4.5b), (6.4.6b) PP > PP P {PP FT PP PP } FTA(PP ) FT où (*) est (6.3.2 a), (6.3.3 a), (6.3.11 a), (6.3.11 b), ou (6.3.11 c) ; (**) est (6.3.4a), (6.3.5 a), (6.3.6 a), (6.3.7 b), (6.3.10 a), (6.3.10 b), ou (6.3.10 c) ; (***) est (6.4.6a), (6.4.6b), (6.4.6c), (6.4.6d), (6.4.6e). PP PP

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 64 Lemme 2 CH FTA(PP ) FT PP PP Inv1(PP ) = CH FTA(PP ) (FT PP PP P(PP )) Démonstration. Remarqes que PP, FTA, et CH sont définis par les mêmes conditions, partagés avec (bv). L invariant Inv1(PP ) implique que P(PP ) est bien défini comme un contrainte de typage en PP, i.e., CH FTA(PP ) P(PP ). En supposant que CH FTA(PP ) FT PP PP nous avons CH FTA(PP ) (FT PP PP P(PP )).

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 65 Hypothèse Ω PP, I 2 CS, PPS tsafe PPS Inv1(PP ) Inv2(PP) = Ω PP, I 2 CS, PPS, PCE certify PPS, PCE Inv2(PP ) Invariant: (Inv2(PP)) Les frame type certificates FTC, sont définies par les règles de séquence. FTC = {PP FTA(PP ) PP PP FTA(PP ) (FT PP 1 PP P(PP ))} Le P est définie par les règles de séquence. P = {PP PP PP }

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 66 Démonstration Nous montrerons, par récurrence dans la longeur de la code, que implique que Ω PP, I 1 I 2 CS, PPS, PPS Inv1+2(PP) Ω PP, I 1 I 2 CS, PPS, PCE certify PPS, PCE Inv1+2(PP ) en utilisant les lemmes.

67 Cadre Problème Conception Formalisation Réalisation Conclusion Exemples

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 68 Prototype Réalisé en Java: 40k de source donnant 26k en bytecode. Utilise Byte Code Engineering Library de Markus Dahm (l interface prends 33k de source donnant 20k en bytecode). Utilisation de la mémoire. CE FT actuel Scratch Flash Commentaires (MS + ML) S #LS (MS + ML) peut réutiliser CE P #P (MS + ML) peut réutiliser CE

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 69 L éxecution avec le prototype du Lightweight METHOD m : CERTIFICATE ce =({11}, {11:<*, LE;.bot>}, 1) VERIFICATION fta = - <*, LE;.bot> 0: new LA; - <LA;, LE;.bot> 7: astore 1 - <*, LE;.LA;> 8: goto +11 - <*, LE;.bot> 11: new LB: - <B, LE;.bot> 18: astore 1 - <*, LE;.LB;> 19: aload 1 - <LB;, LE;.LB;> 20: invokevirtual methodref(lb;, methsig(dummy, []), I) - <I, LE;.LB;> 23: ifne -12 - <*, LE;.bot> 26: return - top VERIFICATION OF m OK.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 70 Le KVM de Sun Un cértificat élaboré permet de parcourir le code en avant. Simulation par LBV. Si un certificat CE contient tout constraint de typage aux buts des sauts, S et P ne sont plus necessaires, étant donné que les contraintes de typage sont vérifiés immédiate avec le certificat. Utilisation de la mémoire. Scratch Flash Commentaires CE proportionel aux nombres de sauts S P n existe plus n existe plus FT actuel

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 71 Le on-card verificateur de Leroy Des prè-conditions sur le code permets de le parcourir en avant: Une transformation du code avant vérification, permet d introduire des invariants de typage tel que ST soit vide à tout les but de sauts. En plus, chaque location dans le tableau des variables loceaux est présumé d être typé, ce qui restreint l utilisation, mais fait que tout comparaisons entre LT disparaissent. Simulation par LBV. Avec les mêmes contraintes sur le code come pour le on-card vérificateur, le certificat CE revient à des valeurs ɛ, LS. Les structures S et P reviennent a des valeurs ɛ, LT, ce qui en effets peu être optimisé a une type de frame actuel, et quels points de programme qui sont des buts de sauts.

72 Cadre Problème Conception Formalisation Réalisation Conclusion Exemples

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 73 Conclusion Nous avons obtenu une application industrielle importante: la off-device pre-verifier, la in-device verifier et le certificat StackMap de KVM, une formalisation constructive de la technique pour une sous-ensemble importante de la JVM, une démonstration que la technique du lightweight soit fiable par rapport à la vérificateur standard, la synthèse formelle de KVM, la on-card vérificateur Java et la technique de la vérification lightweight, une réalisation d un prototype de lightweight écrit en Java, qui utilise de mémoire donnée: #type descriptors = (MS + ML) (1 + #LS + #P)

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 74 Travaux relatés Vérificateur pour KVM: Liang 1999. On-card vérificateur: Leroy 2001. Preuve mécanisé de LBV: Klein and Nipkow 2000. Autre: Barthe et al. 2000. Type safety : Drossopoulou et al. 1999, Oheimb 1998, Goldberg et al. 2000, Ancona et al. 2001. jsr: Freund 1998, Stata et Abadi 1998. Initialisation: Freund Mitchell 1998. Class loading : Jensen et al. 1997. General: Hartel et Moreau 2001, Leroy 2001.

75 Cadre Problème Conception Formalisation Réalisation Conclusion Exemples

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 76 Arrays class A {} class Aarray { void m() { A x = new A(); A[] array = new A[10]; Object obj; array[0] = x; ((Object[]) array)[0] = x; x = array[0]; } }

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 77 LIGHTWEIGHT BYTECODE VERIFICATION of Aarray : 15: iconst 0 - <[LA;.I, LAarray;.LA;.[LA;.bot> CLASS HIERARCHY ch = { Ljava/lang/Object; <: bot 16: aload 1, Ljava/lang/Throwable; <: Ljava/lang/Object; - <[LA;.I.LA;, LAarray;.LA;.[LA;.bot>, Ljava/lang/Exception; <: Ljava/lang/Throwable; 17: aastore, LAarray; <: Ljava/lang/Object; - <*, LAarray;.LA;.[LA;.bot>, LA; <: Ljava/lang/Object; 18: aload 2 } - <[LA;, LAarray;.LA;.[LA;.bot> 19: checkcast [Ljava/lang/Object; METHOD m : - <[LA;, LAarray;.LA;.[LA;.bot> CERTIFICATE ce =({}, 22: iconst 0 {}, - <[LA;.I, LAarray;.LA;.[LA;.bot> 0) 23: aload 1 VERIFICATION fta = - <[LA;.I.LA;, LAarray;.LA;.[LA;.bot> - <*, LAarray;.bot.bot.bot> 24: aastore 0: new LA; - <*, LAarray;.LA;.[LA;.bot> - <LA;, LAarray;.bot.bot.bot> 25: aload 2 7: astore 1 - <[LA;, LAarray;.LA;.[LA;.bot> - <*, LAarray;.LA;.bot.bot> 26: iconst 0 8: iconst 0 - <[LA;.I, LAarray;.LA;.[LA;.bot> - <I, LAarray;.LA;.bot.bot> 27: aaload 10: anewarray LA; - <LA;, LAarray;.LA;.[LA;.bot> - <[LA;, LAarray;.LA;.bot.bot> 28: astore 1 13: astore 2 - <*, LAarray;.LA;.[LA;.bot> - <*, LAarray;.LA;.[LA;.bot> 29: return 14: aload 2 - top - <[LA;, LAarray;.LA;.[LA;.bot> VERIFICATION OF m OK.

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 78 Exceptions class A { void ma() {} } class B extends A { void mb() {} } class C extends A {} class X extends Exception {} class Xx { void x() throws X { throw new X(); } void m() { A a = new A(); try { x(); B b = new B(); B b2 = b; x(); } catch (X x) { A c = a; c.ma(); } } }

Eva Rose Vérification de Code d Octet de la Machine Virtuelle Java Formalisation & Implantation 79 LIGHTWEIGHT BYTECODE VERIFICATION of Xx : 20: aload 2 - <LB;, LXx;.LA;.LB;.bot> CLASS HIERARCHY ch = { Ljava/lang/Object; <: bot 21: astore 3, Ljava/lang/Throwable; <: Ljava/lang/Object; - <*, LXx;.LA;.LB;.LB;>, Ljava/lang/Exception; <: Ljava/lang/Throwable; 22: aload 0, LA; <: Ljava/lang/Object; - <LXx;, LXx;.LA;.LB;.LB;>, LB; <: LA; 23: invokevirtual methodref(lxx;, methsig(x, []), V), LC; <: LA; - <*, LXx;.LA;.LB;.LB;>, LX; <: Ljava/lang/Exception; 26: goto +10, LXx; <: Ljava/lang/Object; - <LX;, LXx;.LA;.bot.bot> } 29: astore 2 - <*, LXx;.LA;.LX;.bot> METHOD m : 30: aload 1 CERTIFICATE ce =({}, - <LA;, LXx;.LA;.LX;.bot> {}, 31: astore 3 2) - <*, LXx;.LA;.LX;.LA;> VERIFICATION fta = 32: aload 3 - <*, LXx;.bot.bot.bot> - <LA;, LXx;.LA;.LX;.LA;> 0: new LA; 33: invokevirtual methodref(la;, methsig(ma, []), V) - <LA;, LXx;.bot.bot.bot> - <*, LXx;.LA;.Ljava/lang/Object;.LA;> 7: astore 1 36: return - <*, LXx;.LA;.bot.bot> - top 8: aload 0 VERIFICATION OF m OK. - <LXx;, LXx;.LA;.bot.bot> 9: invokevirtual methodref(lxx;, methsig(x, []), V) - <*, LXx;.LA;.bot.bot> 12: new LB; - <LB;, LXx;.LA;.bot.bot> 19: astore 2 - <*, LXx;.LA;.LB;.bot>