La
sécurité :
Dans
un monde d’applications réparties en perpétuelle évolution, la sécurité
devient une contrainte forte liée à l’exigence de distribution.
La
sécurité en informatique doit être assurer à différents niveaux :
·
La protection
des ordinateurs contre l’invasion par des virus ou des chevaux de
Troie.
·
L’identification
et l’authentification pour permettre de garantir l’identité des
personnes participant à des transactions sur le réseau.
·
L’autorisation
qui permet d’accorder des droits d’accès différents selon le profil
des personnes qui en font la demande et selon la nature des informations
manipulées.
·
L’intégrité
des données pour s’assurer que les documents n’ont pas été altérés
ou falsifiés pendant leur transfert sur le réseau.
·
La confidentialité
pour protéger contre les oreilles indiscrètes et pour garantir le
secret des informations échangées.
·
L’audit
pour maintenir une surveillance des actions malveillantes effectuées
par d’éventuels intrus.
Java
apporte des réponses adaptées à la plupart de ces aspects, d’abord
avec le modèle de bac à sable, puis avec la souplesse des domaines
de protection, ensuite avec l’intégration des outils cryptographiques
et enfin avec l’authentification et l’autorisation donnée à un utilisateur
pour l’exécution du code.
La
sécurité en java :
La
sécurité dans Java est implantée
à différents niveaux :
-Le
langage : C’est un langage fortement typé.
-La
vérification des instructions élémentaires :Le navigateur se
charge de faire subir une série de tests à tout code téléchargé.
-Le
chargeur de classes : une classe est chargée dans un espace
de noms privé associé à l’origine de la classe.
-la
protection de l’accès aux ressources locales : si le code est
arrivé jusque là, c’est qu ‘il présente déjà un bon niveau
de sécurité.
La
première barrière introduite par java est celle de la protection
des machines clientes contre des attaques potentielles effectuées
illégalement par du code de provenance externe, tout simplement
en contraignant ce code à ne s’exécuter que dans les limites rigides
de protection d’un bac à sable (sandbox).
En
java, le contrôle est basé sur les notions de domaines de protection
et de politique de sécurité, et il est réalisé par le contrôleur
d’accès.
·
Un domaine
de protection regroupe un ensemble de classes présentant des propriétés
communes sur le plan de l’origine, de l’authentification, et des
permissions accordées.
·
La notion
de permission permet de spécifier l’accès à une ressource.
·
La politique
de sécurité en vigueur dans une machine virtuelle Java donnée établit
clairement la correspondance entre les domaines de protection et
les permissions qui leur sont octroyées.
·
Le contrôleur
d’accès prend les décisions de contrôle d’accès en fonction de la
politique de sécurité.
Dans
le cadre des applications distribuées, la cryptographie constitue
un outil essentiel, car elle permet d’assurer l’authentification,
la garantie d’intégrité, et la confidentialité nécessaire lors des
échanges d’informations sur un réseau public de transport de données.
L’architecture
de cryptographie Java permet l’utilisation de différents services
cryptographiques, tout en bénéficiant d’une indépendance à la fois
des algorithmes utilisés et des implémentations fournies pour ces
algorithmes.
Dans
la plate-forme java la sécurité est gérée au niveau de la classe.
Chaque classe est chargée si et seulement si son byte code est vérifié.
L’origine de la classe est identifiée et si elle est signée, la
signature sera authentifiée.
L’étape
suivante consiste à associer à cette classe un ensemble de permissions
déterminé à partir de la police de sécurité.
Quand
il y a une demande pour l’exécution de la classe, le contrôleur
d’accès vérifie si les permissions autorisées à cette classe sont
conformes à la demande, si c’est
conforme la classe est exécutée sinon une exception est lancée.
La
sécurité avec JAAS :
La
sécurité dans java était basée sur le code essentiellement ;
les permissions étaient accordées en fonction de l’origine et la
signature du code.
La
principale raison était de protéger les ressources locales contre
les attaques hostiles d’un code mobile venant de l’extérieur. Une
fois que les permissions sont accordées pour le code n’importe quel
utilisateur pouvait l’exécuter. Et dans le monde de l’Internet le code peut
être exécuter par plusieurs utilisateurs ayant différentes fonctions.
Pour
pallier cette faille Java introduit le module JAAS qui donne à une
même classe différents droits d’accès en fonction du profil de l’utilisateur.
Pour
qu’un utilisateur puisse exécuter le code d’une classe, il doit
s’identifier et prouver à la machine virtuelle son authentification
à travers le login module.
Ce
module peut être différent d’une application à une autre.
La
machine virtuelle Java utilise
un fichier de configuration pour vérifier l’identité de l’utilisateur
dans un contexte donné.
Dans
cette phase l’utilisateur sera représenté par un objet de la classe
Subject et il peut jouer plusieurs rôles rassemblés dans la classe
Principal.
Une
fois l’authentification terminée, les droits d’accès sont accordés
pour les actions autorisées et configurées dans la police de sécurité
à cet utilisateur en fonction de son rôle et ceci se fait en associant
un utilisateur à un contexte de sécurité.
Avec
ce module Java contrôle l’accès à ses ressources en fonction du
code et aussi en fonction de l’utilisateur qui exécute ce code.
Les
différentes étapes de l’authentification :
1.
L’application
instancie un LoginContext.
2.
Le LoginContext
consulte un fichier de configuration pour charger tous les LoginModules
configurés pour cette application.
3.
L’application
appelle la méthode login de LoginContext
4.
La méthode
login appelle tous les LoginModule ; chaque LoginModule authentifie
un sujet et lui associe un ou plusieurs rôles.
5.
Le LoginContext
renvoie l’état de l’authentification à l’application.
6.
Si l’authentification
réussie l’application associe le sujet à un login context
Les
différentes étapes de l’autorisation :
1.
Le
sujet doit être authentifié avec les étapes précédentes.
2.
La police
de sécurité doit être configurer en fonction des rôles des sujets
et des actions permises sur l’application.
3.
Le sujet
authentifié est associé à un controle d’accès context.
4.
L’autorisation
est accordée en fonction des permissions données dans la police
de sécurité et ceci en vérifiant la provenance du code, l’auteur
du code et aussi l’exécuteur du code.
5.
Le sujet
peut exécuter une action privilègée avec la méthode doAs.
Applications :
Jaas
est désormais intégré dans java 2 1.4 ; il est formé de 25
classes réparties dans 4 packages.
Jaas
sera très utile dans beaucoup d’applications réparties tel
que:
- RMI, en
le sécurisant de certaines attaques hostiles du réseau,
- JINI, en
sécurisant son environnement,
- Dans le
commerce électronique en sécurisant toutes les transactions,
- Dans les
protocoles de réseaux (Kerberos et IPv6).
La
carte à puce est un exemple concret qui utilise le module Jaas pour
identifier le sujet en utilisant le LoginModule.
|