Download - Sécurité JAVA et JAAS
![Page 1: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/1.jpg)
Sécurité JAVA et JAAS
Fabien Sanglard – Yang Cao
![Page 2: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/2.jpg)
Plan
Les différents aspects de la sécurité JAVA. Évolution de la sécurité depuis JAVA 1.0 La protection de l’utilisateur. La protection du système (JAAS).
Authentification Autorisation Étude détaillé Démo
![Page 3: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/3.jpg)
La sécurité JAVA.
Aspect fondamentale, dès la première version.– Principe de Sand-Box.
Évolution => Granularité très fine:– Définition de stratégies de sécurité.
![Page 4: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/4.jpg)
La sécurité JAVA.
Nouveaux dans JDK 1.4 :
– JCE 1.2 (Java Cryptography Extension).– JSSE (Java Secure Socket Extension).– JAAS (Java Authentification & Autorisation Service).
![Page 5: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/5.jpg)
Évolution de la sécurité JAVA
JAVA 1.0 (1995)– But : Protéger l’utilisateur du système.– Concernait principalement les applets.
Apparition du principe « SandBox » .– Un code non approuvé est limité
Pas d’accès aux systèmes de fichiers. Pas d’accès réseaux.
![Page 6: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/6.jpg)
Évolution de la sécurité JAVA
La SandBox 1.0
![Page 7: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/7.jpg)
Évolution de la sécurité JAVA
JAVA 1.1 (1996)– Raffinement du modèle de SandBox.
Possibilité de «signer» une applet. Le code approuvé possède alors les même droits qu’un
code local.
– Problème : Violation du principe du « moindre privilège ».
![Page 8: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/8.jpg)
Évolution de la sécurité JAVA
![Page 9: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/9.jpg)
Évolution de la sécurité JAVA
JAVA 1.2 (1997)
– Évolution majeur en terme de sécurité– Possibilité de définir une politique de sécurité par
l’intermédiaire des fichiers « policy ».
![Page 10: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/10.jpg)
Évolution de la sécurité JAVA
![Page 11: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/11.jpg)
La protection de l’utilisateur
![Page 12: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/12.jpg)
La protection de l’utilisateur
Quelques exemples de tout cela :- Une applet critique exécutée localement
fonctionne sans problème.
C:\> java WriteFileApplet
![Page 13: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/13.jpg)
La protection de l’utilisateur
Quelques exemples de tout cela :– Une applet critique exécutée localement
fonctionne sans problème. – Si on ajoute un « Security Manager », rien ne va
plus.
C:\>java -Djava.security.manager WriteFileApplet
![Page 14: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/14.jpg)
La protection de l’utilisateur
Quelques exemples de tout cela :
- Un outil permettant d’écrire facilement des fichiers « policy » : Policytool.exe
![Page 15: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/15.jpg)
La protection de l’utilisateur
Quelques exemples de tout cela :– Avec un fichier de configuration, le
SecurityManager ne pose plus de problème.
grant { permission java.io.FilePermission "<<ALL FILES>>", "write";};
java -Djava.security.manager -Djava.security.policy=all.policy WriteFileApplet
![Page 16: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/16.jpg)
La protection de l’utilisateur
Quelques exemples de tout cela :
– Un dernier exemple avec un browser.– Il est plus difficile de spécifier le fichier « policy » à
utiliser…..
![Page 17: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/17.jpg)
Java Authentification & Autorisation
But : – Protéger le système de l’utilisateur.
Comment :– Créer un objet partagé par l’authentification et l’autorisation.– Étendre le modèle de sécurité standard ( security policy) pour
gérer cet objet.
AuthentificationAuthentification
AutorisationAutorisationSubjectSubject Interactions
![Page 18: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/18.jpg)
Java Authentification & Autorisation
Comment ça marche ?
1. Authentification1. On « branche » des modules de connexion à une entité.2. Si l’utilisateur « passe » tout ces modules, il acquière alors une identité
virtuel.
2. Autorisation1. Il peut alors tenter d’exécuter des actions « critiques ».2. Ces actions sont soumises au système de restrictions d’accès.
![Page 19: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/19.jpg)
JAAS : L’authentification
Les classe importantes pour l’identification:
– Subject: Représente un individu ou une organisation avec plusieurs identités de principale.
L’authentification consiste à authentifier un sujet, tandis que les décisions en matières d’autorisation sont prises en fonction d’un sujet authentifié.
– Logincontext: Fournit une API de base, permettant aux sujets de se connecter/déconnecter du
système.– LoginModule:
Définit l’interface que les fournisseurs de services d’authentifications qui supportent JAAS doivent implémenter.
– Configuration: Encapsule l’entité utilisée pour configurer une application avec des connexion
particulièrs.
![Page 20: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/20.jpg)
JAAS : L’authentification
Les classe importantes pour l’identification:
– CallbackHandler: Définit l’interface à implémenter par les applications qui souhaitent
autoriser le service d’authentification à leur passer des informations.– Callback:
Définit une interface de marqueurs implémentée par les objets qui sont passés à une implémentation CallbackHandler. L’objet Callback contient les données à passer à l’application.
– PrivilegedAction: Les actions critiques y sont stockées
![Page 21: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/21.jpg)
JAAS : L’authentification (chronologie)
new LoginContext( "Nom de configuration", MyCallbackHandler);
LoginContextLoginContext
ConfigurationConfiguration
Configuration.jaas (liste des modules
![Page 22: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/22.jpg)
JAAS : L’authentification (chronologie)
LoginContextLoginContext
ConfigurationConfiguration
Configuration.jaas (liste des modules)
LoginModule 1LoginModule 1
LoginModule 2LoginModule 2
![Page 23: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/23.jpg)
JAAS : L’authentification (chronologie)
LoginContextLoginContext
ConfigurationConfiguration
Configuration.jaas (liste des modules)
LoginModule 1LoginModule 1
LoginModule 2LoginModule 2
Login( )
USERCallBackHandlerCallBackHandler
Login( )
Login( )
![Page 24: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/24.jpg)
JAAS : L’authentification (chronologie)
LoginContextLoginContext
LoginModule 1LoginModule 1
LoginModule 2LoginModule 2
Login( )
USERCallBackHandlerCallBackHandler
SubjectSubject
Droits.policy
![Page 25: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/25.jpg)
JAAS : L’authentification (chronologie)
LoginContextLoginContext
LoginModule 1LoginModule 1
LoginModule 2LoginModule 2
Login( )
USERCallBackHandlerCallBackHandler
SubjectSubject DoAsPrivileged( ) PrivilegedActionPrivilegedAction
![Page 26: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/26.jpg)
Focus sur les CallbackHandler
Le but de l’authentification est de créer un objet « Subject ».
Plusieurs attributs doivent être remplies:– Principals: Noms du sujet– publicCredentials: informations publics ( publicPassword)– privateCredentials: informations privées ( privtePassword)
Pour communiquer, les objects utilisent des Callback. Ces Callback sont gérés par les CallbackHandler.
![Page 27: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/27.jpg)
Focus sur les CallbackHandler
- Le dialogue est délégué :
LoginContextLoginContext
LoginModuleLoginModule
CallbackHandlerCallbackHandler
USER
USER
CallBack[]CallBack[]
![Page 28: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/28.jpg)
Focus sur les CallbackHandler
Les callback sont utilisés pour compléter le « Subject ».
LoginContextLoginContext
LoginModuleLoginModule
CallbackHandlerCallbackHandler
CallBack[]CallBack[]
SubjectSubject GetSubject()
![Page 29: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/29.jpg)
Focus sur les Callback
Les differents types de Callbacks :
– Language Callback– Name Callback– Password Callback– TextInput Callback– TextOutput Callback– Choice Callback– Confirmation Callback
![Page 30: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/30.jpg)
JAAS : L’authentification
Le fichier de configuration des modules de connexion:
configuration.jaas
Nom de configuration {
JndiLoginModule Requisite
Krb5LoginModule Sufficient
NTLoginModule Optional
UnixLoginModule Optional
SampleLoginModule Required debug=true;
};
Autre type d’analyse{AnalyseRetineModule Required
};
![Page 31: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/31.jpg)
JAAS : L’authentification
Les mots clés du fichier .jaas :
– Required : non bloquant– Requisite : bloquant– Sufficient : bloquant– Optional : non bloquant
![Page 32: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/32.jpg)
JAAS : L’authentification
Exemple :
Module Criterion Pass/Fail
SampleLoginModule Required OK
NTLoginModule Sufficient !OK
SmartCard Requisite OK
Kerberos Optional !OK
Overallauthentication
OK
![Page 33: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/33.jpg)
JAAS : L’authentification
Exemple :
Module Criterion Pass/Fail
SampleLoginModule Required !OK
NTLoginModule Sufficient OK
SmartCard Requisite
Kerberos Optional
Overallauthentication
OK
![Page 34: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/34.jpg)
JAAS : L’authentification
Comment définir l’emplacement du fichier .jaas ?
– Ligne de commande : Java –Djava.security.auth.login.config=<location>
– Modification du fichier java.security : Login.config.url.1=<location>
![Page 35: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/35.jpg)
JAAS : L’ autorisation
Une fois l’utilisateur reconnu...
– JAAS étend le modèle de sécurité JAVA2.– On définit donc une politique de sécurité pour un
utilisateur spécifique ou pour un domaine.
![Page 36: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/36.jpg)
JAAS : L’ autorisation
Pour cela, on utilise des fichiers .policy :
Exemple :
grant Principal Administrateur "root" { permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "c:\\foo.txt", "write,read";};
grant Principal Etudiant {permission java.io.FilePermission "c:\\foo.txt", "read";};
![Page 37: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/37.jpg)
JAAS : L’ autorisation
Une fois identifié, le «Subject » utilise des « PrivilegedAction ».
– On lance le traitement avec la méthode static suivante :
Static Subject.doAsPrivileged(SujetCourant s, PrivilegeAction x);
![Page 38: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/38.jpg)
JAAS : L’ autorisation
Exemple :
public class SampleAction implements PrivilegedAction {
public Object run() {
try{ FileWriter writer = new FileWriter(new File("c:/foo.txt"));
writer.write("blabla"); }catch (IOException ioe){}
return null; }}
![Page 39: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/39.jpg)
JAAS : L’ autorisation
Comment définir la source du fichier .policy ?
– Ligne de commande : Java –Djava.security.policy=<location>
– Modification du fichier java.security : auth.policy.url1=<location>
![Page 40: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/40.jpg)
JAAS: la démo (enfin)…
![Page 41: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/41.jpg)
JAAS : Mise en place
Mise en place d’une authentification JAAS :– Implémenter les interfaces suivants :
CallBackHandler – Handle()
LoginModule– initialize()– login()– commit()– Abort()
![Page 42: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/42.jpg)
JAAS : Mise en place
Mise en place d’une authentification JAAS :– Implémenter les interfaces suivants :
Principal– getName()
PrivilegedAction– run()
![Page 43: Sécurité JAVA et JAAS](https://reader036.vdocuments.net/reader036/viewer/2022062301/56815994550346895dc6da67/html5/thumbnails/43.jpg)
Java Authentification & Autorisation
Où trouver JAAS ?
– API d’extension pour JAVA 1.3– Incorporé à JAVA 1.4– Incorporé aux spécifications J2EE 1.3