Sécurité JAVA et JAAS

publicité
Sécurité JAVA et JAAS
Fabien Sanglard – Yang Cao
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
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é.
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).
É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.
Évolution de la sécurité JAVA
La SandBox 1.0
É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 ».
Évolution de la sécurité JAVA
É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 ».
Évolution de la sécurité JAVA
La protection de l’utilisateur
La protection de l’utilisateur

Quelques exemples de tout cela :
-
Une applet critique exécutée localement
fonctionne sans problème.
C:\> java WriteFileApplet
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
La protection de l’utilisateur

Quelques exemples de tout cela :
- Un outil permettant d’écrire facilement des fichiers
« policy » : Policytool.exe
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
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…..
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.
Authentification
Subject
Autorisation
Interactions
Java Authentification & Autorisation

Comment ça marche ?
1.
Authentification
1.
2.
2.
On « branche » des modules de connexion à une entité.
Si l’utilisateur « passe » tout ces modules, il acquière alors une identité
virtuel.
Autorisation
1.
2.
Il peut alors tenter d’exécuter des actions « critiques ».
Ces actions sont soumises au système de restrictions d’accès.
JAAS : L’authentification

Les classe importantes pour l’identification:
–
Subject:

–
Logincontext:

–
Fournit une API de base, permettant aux sujets de se connecter/déconnecter du
système.
LoginModule:

–
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é.
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.
JAAS : L’authentification

Les classe importantes pour l’identification:
–
CallbackHandler:

–
Callback:

–
Définit l’interface à implémenter par les applications qui souhaitent
autoriser le service d’authentification à leur passer des informations.
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
JAAS : L’authentification (chronologie)
LoginContext
Configuration
Configuration.jaas
(liste des modules
new LoginContext( "Nom de configuration", MyCallbackHandler);
JAAS : L’authentification (chronologie)
LoginContext
Configuration
Configuration.jaas
(liste des modules)
LoginModule 1
LoginModule 2
JAAS : L’authentification (chronologie)
LoginContext
Configuration
Configuration.jaas
(liste des modules)
Login( )
Login( )
LoginModule 1
CallBackHandler
Login( )
LoginModule 2
USER
JAAS : L’authentification (chronologie)
LoginContext
Login( )
LoginModule 1
CallBackHandler
LoginModule 2
Subject
Droits.policy
USER
JAAS : L’authentification (chronologie)
LoginContext
Login( )
LoginModule 1
CallBackHandler
LoginModule 2
Subject
DoAsPrivileged( ) PrivilegedAction
USER
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.
Focus sur les CallbackHandler
- Le dialogue est délégué :
LoginContext
CallBack[]
LoginModule
CallbackHandler
USE
R
Focus sur les CallbackHandler

Les callback sont utilisés pour compléter le
« Subject ».
LoginContext
Subject
LoginModule
CallbackHandler
CallBack[]
GetSubject()
Focus sur les Callback

Les differents types de Callbacks :
–
–
–
–
–
–
–
Language Callback
Name Callback
Password Callback
TextInput Callback
TextOutput Callback
Choice Callback
Confirmation Callback
JAAS : L’authentification

Le fichier de configuration des modules de connexion:
configuration.jaas
Nom de configuration {
JndiLoginModule
Krb5LoginModule
NTLoginModule
UnixLoginModule
SampleLoginModule
};
Autre type d’analyse{
AnalyseRetineModule
};
Requisite
Sufficient
Optional
Optional
Required debug=true;
Required
JAAS : L’authentification

Les mots clés du fichier .jaas :
–
–
–
–
Required :
Requisite :
Sufficient :
Optional :
non bloquant
bloquant
bloquant
non bloquant
JAAS : L’authentification

Exemple :
Module
Criterion
Pass/Fail
SampleLoginModule
Required
OK
NTLoginModule
Sufficient
!OK
SmartCard
Requisite
OK
Kerberos
Optional
!OK
Overall
authentication
OK
JAAS : L’authentification

Exemple :
Module
Criterion
Pass/Fail
SampleLoginModule
Required
!OK
NTLoginModule
Sufficient
OK
SmartCard
Requisite
Kerberos
Optional
Overall
authentication
OK
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>
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.
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";
};
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);
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;
}
}
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>
JAAS: la démo (enfin)…
JAAS : Mise en place

Mise en place d’une authentification JAAS :
–
Implémenter les interfaces suivants :

CallBackHandler
–

Handle()
LoginModule
–
initialize()
– login()
– commit()
– Abort()
JAAS : Mise en place

Mise en place d’une authentification JAAS :
–
Implémenter les interfaces suivants :

Principal
–

getName()
PrivilegedAction
–
run()
Java Authentification & Autorisation

Où trouver JAAS ?
–
–
–
API d’extension pour JAVA 1.3
Incorporé à JAVA 1.4
Incorporé aux spécifications J2EE 1.3
Téléchargement