Un Survol des M´ethodes Formelles pour Java

publicité
Laboratoire Bordelais de
Recherche en Informatique
Réunion PROGSI : Sécurité Java Card
TM
Équipe : Systèmes et
Objets Distribués
Un Survol
des
Méthodes Formelles
pour
TM
Java Card
Davy Rouillard
[email protected]
Damien Sauveron
[email protected]
http://dept-info.labri.u-bordeaux.fr/~sauveron
21 novembre 2002
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Plan
L’architecture Java Card : vue générale des aspects ciblés.
Projets “orientés plate-forme” : prouver des propriétés liées au
langage et la JCVM (typage, gestion mémoire, BCV).
Projets “orientés applications” : prouver qu’un programme
particulier satisfait des propriétés données (invariants sur les
données, séquencement des transactions).
Davy Rouillard
Damien Sauveron
Page 2
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
L’architecture Java Card
Station de travail
(hors carte)
Carte
Niveau Applicatif Java Card
Applet A
(Paquetage 1)
Applet B
(Paquetage 1)
Firewall
Applet C
(Paquetage 2)
Installateur
Fichier(s)
exp
Fichier
exp
Fichier(s)
class
Fichier
CAP
Niveau Applicatif
Java Card
APIs spécifiques à l’industrie (OP, ...)
APIs Java Card
Classes systèmes
Communication
I/O
Niveau JCVM
Gestion des
Transactions
Gestion des
Applets et divers
Interpréteur
Convertisseur
Niveau JCVM
JCRE
Bibliothèque native nécessaire à Java Card
Niveau Applicatif
Natif
Bibliothèque native
Programme d’installation
Composants systèmes
CAD
Communication
I/O
Gestion de la
mémoire
Divers
Processeur
Niveau Hardware
Hardware & OS natif
Davy Rouillard
Damien Sauveron
Page 3
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Projets “orientés plate-forme”
☞ Le projet CertiCartes (Inria Sophia-Antipolis : G. Barthe, G. Dufay, B.
Serpette...)
• Formalisation du langage de bytecode en C oq.
☞ Le projet Bali (Münich : G. Klein, T.Nipkow,...)
• Formalisation du langage JavaCard en I sabelle.
Ces projets sont inclus dans VerifiCard.
(Université de Nijmegen, INRIA, Universités de Münich et Kaiserslautern, Swedish
Institute of Computer Science, SchlumbergerSema.)
Davy Rouillard
Damien Sauveron
Page 4
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Bali et CertiCartes s’appuient sur un assistant de preuve (logique d’ordre
supérieur).
☞ Définition de types et de constantes : type primitif, accès, classe,
methode, programme ...
☞ Preuve de lemmes.
☞ Des techniques pour prouver plus facilement des propriétés : règles de
réécritures, règles de raisonnement.
Davy Rouillard
Damien Sauveron
Page 5
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Le projet Certicard
Contient une formalisation de la plate-forme au niveau bytecode.
☞ formalisation d’un programme (format CAP).
☞ formalisation de la machine virtuelle embarquée.
☞ formalisation des instructions et leur sémantique (opérationnelle).
Davy Rouillard
Damien Sauveron
Page 6
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Formalisation d’un programme
Record
:
jcprogram
Set
:= {
classes
: ( list
Class );
methods
: ( list
Method );
interfaces
:
Interface )
( list
}.
Record
:
Interface
Set
:= {
statusshareable
:
bool ;
super_int
: ( list
Int_id
:
cap_interf_idx );
cap_interf_idx
}.
Record
Method
:
Set
:= {
signature
: ( signature_type ∗type );
local
:
bytecode
: ( list
statusstatic
:
handler_list
: ( list
method_id
:
cap_method_idx ;
owner
:
cap_class_idx
nat ;
Instruction );
bool ;
handler_type );
}.
Davy Rouillard
Damien Sauveron
Page 7
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Formalisation de la JCVM
Definition
Inductive
jcvm_state
obj
:
:=
static_heap ∗heap∗stack .
S e t :=
Instance
:
t y p e _ i n s t a n c e −> o b j
Array
:
t y p e _ a r r a y −> o b j .
:= ( list
Definition
heap
Definition
static_heap
Definition
stack
obj ).
:= ( list
:= ( list
|
valu ).
frame ).
Davy Rouillard
Damien Sauveron
Page 8
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Formalisation des instructions
j c v m _ s t a t e ∗ o p e r a n d s −> r e t u r n e d _ s t a t e
Inductive returned_state : Set :=
j c v m _ s t a t e −>r e t u r n e d _ s t a t e |
Normal
:
Abnormal
: x c p t −>j c v m _ s t a t e −>r e t u r n e d _ s t a t e .
Definition NOP : = [ state : jcvm_state ]
Cases state of
( sh , ( hp , ( ( c o n s h l f ) a s s ))) = >
( update_frame ( update_pc ( S ( p_count h ) ) h ) state ) |
_ => ( AbortCode state_error state )
end .
Davy Rouillard
Damien Sauveron
Page 9
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Application de Certicard
Description et vérification d’un vérificateur de bytecode (BCV).
A démontrer : A tout point du programme, les variables locales et les
opérandes de pile sont correctement typées pour l’instruction à exécuter.
Ce qui est prouvé :
☞ Le BCV termine.
☞ Si la vérification de bytecodes est un succès → AbortCode ne sera pas
appelée.
Davy Rouillard
Damien Sauveron
Page 10
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Application de Bali
package
public
java_lang
interface
public
Base
{
HasFoo
foo ( Base
z );
}
public
class
Base
static
boolean
public
HasFoo
public
Base
return
implements
arr [] =
new
HasFoo
{
public
boolean [2];
vee ;
foo ( Base
Ext
extends
public
int
vee ;
public
Ext
foo ( Base
z) {
(( Ext ) z ). vee
z;
return
Base {
z) {
= 1;
null ;
}
}
}
class
}
BaseCl :: class
"BaseCl == (|access=Public,
cfields=[(arr, (|access=Public,static=True ,type=PrimT Boolean.[]|)),
(vee, (|access=Public,static=False,type=Iface HasFoo
|))],
methods=[Base_foo],
init=Expr(arr_viewed_from Base Base
:=New (PrimT Boolean)[Lit (Intg 2)]),
super=Object,
superIfs=[HasFoo]|)"
Davy Rouillard
Damien Sauveron
Page 11
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Exemples de propriétés
package
public
java_lang
interface
public
Base
{
HasFoo
foo ( Base
z );
}
public
class
Base
static
boolean
public
HasFoo
public
Base
return
implements
arr [] =
new
HasFoo
{
public
boolean [2];
vee ;
foo ( Base
class
Ext
extends
public
int
vee ;
public
Ext
foo ( Base
z) {
(( Ext ) z ). vee
z;
return
Base {
z) {
= 1;
null ;
}
}
}
}
1. “La seule interface est HasFoo”
2. “foo est déclarée dans Ext”
3. “Ext foo surcharge Base foo”
Davy Rouillard
Damien Sauveron
Page 12
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
A quoi cela peut-il donc servir ?
☞ Évaluation de plate-forme : prouver la correction de certains aspects
(BCV, firewall, transaction) en établissant une abstraction avec la
formalisation de référence.
⇒ complexe à mettre en oeuvre sans outil (projet Jakarta)
☞ Évaluation d’application :
• un compilateur .cap → jcprogram est fourni par le projet Jakarta.
• des outils de traduction spécification → théories I sabelle/C oq
⇒ reste à identifier les propriétés à vérifier et le niveau le plus
approprié :
solde ≥ 0 ; min ≤ val ≤ max ; vérification de type énuméré.
Davy Rouillard
Damien Sauveron
Page 13
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Projets orientés “applications”
☞ Extended Static Checker ESC/Java (Compaq System Research Center)
vérifie à la compilation les assertions ESC/Java ou JML
☞ JML : Java Modeling Language (Université de l’Iowa)
☞ compilateur LOOP (Université de Nijmegen) traduit le code annoté en
JML −→ PVS ou Isabelle).
☞ projet Bandera
• un langage de spécification des propriétés (logique temporelle)
• des outils pour extraire un modèle à état fini à partir des
programmes.
• un langage d’abstraction et un moteur d’abstraction.
☞ JavaPathFinder.
Davy Rouillard
Damien Sauveron
Page 14
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
JML : Java Modeling Language
☞ Développé par l’université de l’état de l’Iowa.
☞ Il permet d’exprimer des assertions à inclure dans le code Java en
spécifiant, par exemple :
• les pré-conditions et post-conditions,
• les invariants,
• etc.
☞ Se rapproche de Eiffel (vérification à l’exécution pour le debug) et de
l’approche “Design by Contract”.
☞ Super ensemble de ESC/Java.
Utilisation = annotation du source Java ou Java Card précédée de //@ ou
entourée par /*@ et @*/ directement dans le .java ou dans un fichier .jml
Davy Rouillard
Damien Sauveron
Page 15
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
JML : Java Modeling Language
Préconditions et Postconditions en JML
/∗@ n o r m a l b e h a v i o r
@
@
r e q u i r e s : < p r e c o n d i t i o n >;
e n s u r e s : < p o s t c o n d i t i o n >;
@∗/
Exitence des quantificateurs
☞ universels (\forall)
☞ existentiels (\exist)
Davy Rouillard
Damien Sauveron
Page 16
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
JML : Java Modeling Language
Traitement des exceptions
/∗@ b e h a v i o r
@
r e q u i r e s : < p r e c o n d i t i o n >;
@
ensures :
<p o s t c o n d i t i o n >;
@
s i g n a l s : ( E x c e p t i o n 1 ) < c o n d i t i o n 1 >;
.
.
.
s i g n a l s : ( E x c e p t i o n n ) < c o n d i t i o n n >;
@∗/
normal_behavior = behavior avec
signals: (java.lang.Exception) false;
Davy Rouillard
Damien Sauveron
Page 17
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
JML : Java Modeling Language
invariant et modifiable
Pour la classe APDU (Application Protocol Data Unit), voici un invariant
/∗@ i n v a r i a n t : b u f f e r ! = n u l l
@
&& b u f f e r . l e n g t h == APDU.BUFFERSIZE;
@∗/
modifiable:x spécifie qu’une méthode peut changer seulement le champ x.
Davy Rouillard
Damien Sauveron
Page 18
Laboratoire Bordelais de
Recherche en Informatique
JML : Java Modeling Language
Équipe : Systèmes et
Objets Distribués
modifiable
p u b l i c s t a t i c n a t i v e b y t e a r r a y C o m p a r e ( b y t e [ ] src ,
short srcOff ,
byte [ ] dest , short destOff ,
short length )
throws ArrayIndexOutOfBoundsException ,
NullPointerException ;
/∗@ n o r m a l b e h a v i o r
@
@
r e q u i r e s : s r c ! = n u l l && d e s t ! = n u l l &&
@
s r c O f f >= 0 && d e s t O f f >= 0 && l e n g t h >= 0 &&
@
s r c O f f + l e n g t h <= s r c . l e n g t h &&
@
d e s t O f f + l e n g t h <= d e s t . l e n g t h ;
@
@
modifiable : \ nothing ;
@
@
ensures : true
@∗/
Davy Rouillard
Damien Sauveron
Page 19
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
JML : Java Modeling Language
modifiable
p u b l i c s t a t i c n a t i v e s h o r t a r r a y C o p y ( b y t e [ ] src ,
short srcOff ,
byte [ ] dest , short destOff ,
short length )
throws ArrayIndexOutOfBoundsException ,
NullPointerException , TransactionException ;
/∗@ b e h a v i o r
@
@
r e q u i r e s : s r c ! = n u l l && d e s t ! = n u l l &&
@
s r c O f f >= 0 && d e s t O f f >= 0 && l e n g t h >= 0 &&
@
s r c O f f + l e n g t h <= s r c . l e n g t h &&
@
d e s t O f f + l e n g t h <= d e s t . l e n g t h ;
@
@
m o d i f i a b l e : d e s t [ d e s t O f f . . d e s t O f f+l e n g t h − 1 ];
@
@
ensures : true ;
@
@
s i g n a l s : ( TransactionException ) true ;
@∗/
Davy Rouillard
Damien Sauveron
Page 20
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
JML : Java Modeling Language
Exemple
receiveBytes
1
setIncomingAndReceive
2
sendBytes
3
setOutgoingLength
4
setOutgoing
setOutgoingNoChaining
5
sendBytes
setOutgoingLength
setOutgoingAndSend
//@ p u b l i c model i n t APDU state ;
//@ p u b l i c i n v a r i a n t : 1 <= APDU state &&
//@ p u b l i c model i n t Lr ;
Davy Rouillard
Damien Sauveron
6
7
APDU state <= 7;
Page 21
Laboratoire Bordelais de
Recherche en Informatique
JML : Java Modeling Language
Équipe : Systèmes et
Objets Distribués
Exemple
public short setIncomingAndReceive ( ) throws APDUException ;
/∗@ p u b l i c b e h a v i o r
@
@
requires :
APDU state == 1;
@
@
modifiable :
APDU state , b u f f e r [ 5 . . 5 + \ r e s u l t − 1 ];
@
@
@
ensures :
APDU state == 2 &&
( ∗ data r e c e i v e d in b u f f e r [5..5+ \ r e s u l t −1] ∗);
@
@
s i g n a l s : ( APDUException ) t r u e ;
@∗/
Davy Rouillard
Damien Sauveron
Page 22
Laboratoire Bordelais de
Recherche en Informatique
JML : Java Modeling Language
Équipe : Systèmes et
Objets Distribués
Exemple
public short receiveBytes ( short bOff ) throws APDUException ;
/∗@ p u b l i c b e h a v i o r
@
@
requires :
@
APDU state == 2 && 0 <= b O f f &&
b O f f+g e t I n B l o c k S i z e () <= BUFFERSIZE;
@
@
modifiable :
APDU state , b u f f e r [ b O f f . . b O f f+\ r e s u l t − 1];
@
@
ensures :
APDU state == 2 &&
@
0 <= \ r e s u l t &&
@
b O f f+\ r e s u l t <= BUFFERSIZE &&
@
( ∗ d a t a r e c e i v e d i n b u f f e r [ b O f f . . b O f f+\ r e s u l t − 1 ] ∗ ) ;
@
@
s i g n a l s : ( APDUException ) t r u e ;
@∗/
Davy Rouillard
Damien Sauveron
Page 23
Laboratoire Bordelais de
Recherche en Informatique
JML : Java Modeling Language
Équipe : Systèmes et
Objets Distribués
Exemple
public short setOutgoing ( ) throws APDUException ;
/∗@ p u b l i c b e h a v i o r
@
@
requires :
APDU state = = 1 | |
APDU state == 2;
@
@
modifiable :
APDU state ;
@
@
ensures :
APDU state == 3;
@
@
s i g n a l s : ( APDUException ) t r u e ;
@∗/
Davy Rouillard
Damien Sauveron
Page 24
Laboratoire Bordelais de
Recherche en Informatique
JML : Java Modeling Language
Équipe : Systèmes et
Objets Distribués
Exemple
public void setOutgoingLength ( short len ) throws APDUException ;
/∗@ p u b l i c b e h a v i o r
@
@
requires :
( APDU state == 3 && 0 <= l e n && l e n <= 256)
| | ( APDU state == 5 &&
@
0 <= l e n && l e n <= g e t O u t B l o c k S i z e () −2);
@
@
@
modifiable :
APDU state ,
Lr ;
@
@
@
ensures :
APDU state == \ o l d ( APDU state)+1 &&
Lr == l e n ;
@
@
s i g n a l s : ( APDUException ) t r u e ;
@∗/
Davy Rouillard
Damien Sauveron
Page 25
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
JML : Java Modeling Language
Résultats sur l’ADPU
☞ A permis de redécouvrir des idées de design de la classe qui avaient
disparues dans les spécifications informelles.
☞ A permis de lever des problèmes dans l’implémentation de référence.
☞ A permis de rendre plus compréhensible les spécifications informelles.
Davy Rouillard
Damien Sauveron
Page 26
Laboratoire Bordelais de
Recherche en Informatique
Équipe : Systèmes et
Objets Distribués
Annexe
Record
frame
(∗
:
Set
operand
:= {
stack
: ( list
opstack
(∗
local
variables
location
of
:
method_loc
(∗
context
:
whether
analyzed
(∗
program
p_count
the
∗)
Package ;
is
being
analyzed
∗)
bool ;
counter
:
∗)
cap_method_idx ;
method
:
valu );
method
information
context_ref
(∗
the
valu );
∗)
: ( list
locvars
(∗
∗)
∗)
bytecode_idx
}.
Davy Rouillard
Damien Sauveron
Page 27
Téléchargement