Participants : Marc Eluard,
Thomas Jensen.
Mots clés : téléchargement,
vérification, analyse, sécurité, sûreté, chargement
dynamique, visibilité, typage, Java .
Résumé :
Dans le cadre de l'action VIP du
GIE Dyade, nous avons proposé une
formalisation de la sémantique de certains aspects du
langage Java et Java Card. Nous nous sommes focalisés en ce
qui concerne Java sur les règles de visibilité (des classes
et de leurs membres) et leur évolution lors du chargement
dynamique de classes et en ce qui concerne Java Card sur le
pare-feu et les objets partageables qui servent à sécuriser
la communication entre applettes installées sur une carte à
puce multi-applicative.
Nous participons à l'action VIP du
GIE Bull-Inria Dyade. Le thème de cette
collaboration est la formalisation de certains aspects de la
sémantique de Java et la preuve de propriétés de sécurité de
programmes (cf. module 6.2.3).
L'étude des problèmes de sécurité (au sens de confidentialité
et d'intégrité notamment) dans le contexte du langage Java
représente un défi de première importance pour plusieurs
raisons :
- La sûreté (au sens du typage) et la sécurité sont
présentées comme des arguments pour la promotion d'un
langage qui a vocation à être utilisé dans des contextes
mettant en jeu des coopérations entre des codes issus de
sites différents.
- Le langage inclut des caractéristiques complexes (comme
le chargement dynamique ou des règles de visibilité
inhabituelles) qui justifient le besoin de définition
formelle. Une telle définition permettrait de clarifier
certains aspects du langage et servirait de base à un
raisonnement rigoureux sur des propriétés cruciales comme
la sûreté du typage ou la garantie de politiques de
sécurité.
- Le développement de Java Card, la version de Java
dédiée aux cartes à puces, augmente encore l'importance des
défis cités plus haut et permet de les aborder dans un
cadre restreint, permettant l'application de techniques
(analyse, preuve) plus sophistiquées.
Nous nous sommes attaqués à cette formalisation en nous
focalisant sur les règles de visibilité (des classes et de
leurs membres) et leur évolution lors du chargement dynamique
de classes. Il s'agit en effet de caractéristiques
particulières de Java qui ont un impact direct sur la
sécurité et dont les définitions informelles ne sont pas
exemptes d'ambiguïtés ou d'insuffisances. Cette formalisation
en terme de systèmes d'inférence nous a permis de décrire de
manière rigoureuse l'origine d'une erreur de sécurité qui
avait été découverte empiriquement par des chercheurs
d'ATT.
Nous avons ensuite étudié comment décrire formellement le
pare-feu de Java Card. La spécification du langage Java Card
comprend la description d'un pare-feu entre les applettes
installées sur une carte. Ce pare-feu garantit par défaut une
séparation totale entre différentes applettes mais il peut
être contourné en s'appuyant sur la notion d'objets partagées qui permettent d'échanger
des objets entre applettes. Afin d'analyser les conséquences
en matière de sécurité d'un partage des objets il est
nécessaire de mettre la description informelle de la
spécification Java Card sous une forme qui permet d'effectuer
des vérifications formelles. Nous avons décrit une sémantique
opérationnelle du pare-feu Java Card et nous étudions
actuellement comment extraire de cette sémantique des
analyses statiques permettant de construire des modèles
abstraits afin d'y appliquer nos techniques (décrites en
module 6.2.3
de vérification de propriétés de sécurité.