Java Authentification et Autorisation
Service
Najla Farah
UJF/ISTG/RICM3http://www-istg.ujf-grenoble.fr/ Année Universitaire 2001-2002
22/04/23JAAS
2
JAAS ?
Standard dans JDK 2.1
Authentification:• Pour vérifier l ’identité de celui qui exécute le code.
Autorisation:• Pour contrôler l ’accès à l ’exécution.
22/04/23JAAS
3
JAAS ?
QUI?
CodeSignature
22/04/23JAAS
4
Sommaire
Sécurité dans JAVA.
Sécurité avec JAAS.
Exemple sur JAAS.
22/04/23JAAS
5
Cycle de vie du code java
1. Chargement dubytecode
2. Vérification dubytecode
3. Exécution duBytecode
4. Ramasse-miette
0. Référence à unbloc de code
22/04/23JAAS
6
Sécurité dans Java.
Applic
Exécution
Compilateur
Langage
22/04/23JAAS
7
Sécurité du langage.
La sécurité au niveau du langage:
• Syntaxe et sémantique strictes.• Encapsulation des données.• Spécification du langage.• Gestion des types.• Vérificateur de bytecode.
22/04/23JAAS
8
Sécurité du compilateur.
La sécurité au niveau compilateur:
• Contrôle d ’accès.• Valeur initiale des variables.• Accès des registres.• Passage des paramètres.
22/04/23JAAS
9
Sécurité à l ’exécution.
La sécurité à l ’exécution:
• Le chargeur de classes: • Exactitude des références.
• Ramasse miettes:• Gestion structurée de la mémoire.
• Gestionnaire de sécurité:• Élaboration des restrictions.
22/04/23JAAS
10
Sécurité des applications.
La sécurité des applications:
• Apple:• Classe chargée par le navigateur Web.
• Signature des applet.
22/04/23JAAS
11
Sécurité JDK 1.1
JVM
Gestionnaire de sécurité
Code local
Je fais ce que je veux!
Bac-à sable
Coincé!
Code distant
autres« trusted »
Ressources Système
22/04/23JAAS
12
Sécurité JDK 1.2
JVM
Gestionnaire de sécurité
Bac-à sable
Code local ou distant (signé ou pas)
ClassLoaderRègles de sécurité
Pas de notion de code à confiance implicite
Chaqueprogramme a des permissionsdifférentes
Ressources Système
22/04/23JAAS
13
Domaines de protection.
Domaine système
App-1 App-3 App-n
App-2
I/O réseau I/O fich. awt Imprimante
22/04/23JAAS
14
Permissions.
d.classc.classb.classa.class
Domaine deProtection A
Permissions
Domaine deProtection B
Permissions
Classes en coursd ’exécution
Politique de sécurité
22/04/23JAAS
15
Contrôleur d ’accès
Base de règlespour le site
Base de règles par utilisateuret par installation Autorité de certification
22/04/23JAAS
16
Signature du code
Signature
Chiffre
Objet d ’origine
Résumé
22/04/23JAAS
17
Authentification
Identités?Java VM
Mot de passe
Références
Clé de chiffrement
Mesuresbiométriques
22/04/23JAAS
18
Les concepts(1).
Principal:• entité à laquelle sont accordées des permissions.
Code Source:• identifie un code par URL,une signature.
ProtectionDomain:• ensembles de classes provenant d ’une même code
source et ayant les mêmes permissions. SecurityPolicy:
• un fichier de configuration qui contient:• Une entrée « Keystore »:base de données des clés.• Une entrée « grant »:spécification des permissions d ’une source
de code
22/04/23JAAS
19
Les concepts(2)
SecurityClassLoader et ClassLoader:• interroge la politique de sécurité pour déterminer les
permissions.• Charge le code dans JVM en lui associant les
permissions. SecurityManager:
• implémente le système de sécurité. AccessController:
• gère les permissions. AccessControlContext:
• représente les permissions qu’une méthode exerce si elle est appelée par un thread.
22/04/23JAAS
20
SecurityPolicy JAVA
Spécification des permissions d ’une source de code
grant CodeBase « file:c:/java/code/sample.jar »{
permission java.io.FilePermission « c:\\user\\testuser\\-,« read »
};
grant CodeBase « http://www.sun.com/sample.jar »,
Signedby « bob »{
Permisson java.lang.RuntimePermission « createClassLoader »;
Permisson java.net.SocketPermision « * », « connect,accept,resolve »;
};
22/04/23JAAS
21
Sommaire
Sécurité dans JAVA.
Sécurité avec JAAS.
Exemple sur JAAS.
22/04/23JAAS
22
JAAS
JAAS augmente la granularité de la sécurité en se basant sur l’authentification de l ’exécuteur du code.
JAAS augmente les privilèges de cet utilisateur authentifié en lui accordant les autorisations adéquates.
22/04/23JAAS
23
Architecture de JAAS
Applications
API
Java 2- Principal- Access Controller- Access Controller Context- Policy-Protection Domain
JAAS- Subject- Login Context- Login Module- Policy
22/04/23JAAS
24
Authentification
Création du login:• LoginContext ctx = new LoginContext(« SimpleLogin »);
Authentification du sujet:• ctx.login();
Association du login au sujet si authentification réussie:• Subject subj = ctx.getSubject();
22/04/23JAAS
25
Autorisation
Si authentification réussie Jaas autorise l ’accès au sujet authentifié :• Subject.doAs(subj,new PrivilegedAction()){}
22/04/23JAAS
26
SecurityPolicy JAAS
La politique de sécurité est lié à un rôle d ’un sujet:
Grant Principal sample.SamplePrincipale »testuser »{
permission java.io.FilePermission « c:\\user\\testuser\\-, « read »
};
CodeBase « file:c:/java/code/sample.jar »,
Signedby « charles »{
permission java.io.FilePermission « c:\\user\\testuser\\-, « read »
};
22/04/23JAAS
27
Implémentation de JAVA
- Dans chaque objet il y a une SecutityPolice:Policy.getPolicy()
- La ClassLoader associe les permissions à chaque classe:
Policy.getPolicy().getPermissions(codesource)
- Le SecutityManager gère les permissions:cl.getprotectionDomain().getPermissions().implies(requestedPermission)
22/04/23JAAS
28
Implémentation de JAAS
- Dans chaque objet il y a une SecutityPolice: javax.security.auth.Policy.getPolicy();
- Avec la méthode doAs:- on associe les permissions au sujet:
Policy.getPolicy().getPermissions(subj,codesource);
- on associe le sujet à AccessControlContext: javax.security.auth.SubjectDomainCombiner.combine();
22/04/23JAAS
29
Applications
Applications
Login Context API
Login Module SPI
Smart CardKerberos Biometric
Configuration
22/04/23JAAS
30
Sommaire
Sécurité dans JAVA.
Sécurité avec JAAS.
Exemple sur JAAS: SmartCard
22/04/23JAAS
31
SmartCard
Portable Sécurisée Personnelle
22/04/23JAAS
32
login module
Avec « login » LoginContext appelle ces méthodes qui sont implémentées dans loginModule:
1-Void initialize(…)2- booléen login()3- booléen commit()4-booléen abort()5-booléen logout()
22/04/23JAAS
33
void initialize(…)
Donne une référence :• Sur le sujet qui sera attaché à un principal en cas de
succès d ’authentification.• Sur CallBackHandler • Options sur la configuration.
22/04/23JAAS
34
booléen login()
Assure l ’authentification du sujet.
Retourne:• true si l ’authentification réussie.• False si le module n ’arrive pas à authentifier.
22/04/23JAAS
35
booléen commit()
Cette méthode est appelée si le sujet a été authentifiée par tous les modules.
Elle ajoute le sujet au Principal.
22/04/23JAAS
36
booléen abort()
Cette méthode est appelée si un module n ’arrive pas à s ’authentifier.
Elle nettoie le module et revient à l ’état initial.
22/04/23JAAS
37
booléen logout()
Elle supprime le sujet du Principal.
22/04/23JAAS
38
JAAS configuration
Le fichier de configuration:
SimpleLogin{
SimpleLoginModule required debug=true;
};
LoginContext ctx = new LoginContext(« SimpleLogin»);
ctx.login();
22/04/23JAAS
39
AUTHENTIFICATION
Login Module
Clé publique
Signature
Nom ?
Rnd ?
Credential ?
Nom
Signature
Credential
22/04/23JAAS
40
CONCLUSION
Règles de sécurité flexibles Contrôle d ’accès précis Sécurité transparente Permissions, ClassLoader sécurisé, contrôleur
d ’accès pour les développeurs Sécurité pour les applications locales. Sécurité en fonction de l ’utilisateur.
22/04/23JAAS
41
JAAS
Questions ?? Réponses !!
Sources : - http://www.ossir.org/ftp/supports- http:// java.sun.com/security- http://www.gemplus.fr/developers- Gilles Gravier