43
Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

Embed Size (px)

Citation preview

Page 1: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

Sécurité JAVA et JAAS

Fabien Sanglard – Yang Cao

Page 2: 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

Page 3: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

É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 Fabien Sanglard – Yang Cao

Évolution de la sécurité JAVA

La SandBox 1.0

Page 7: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

É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 Fabien Sanglard – Yang Cao

Évolution de la sécurité JAVA

Page 9: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

É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 Fabien Sanglard – Yang Cao

Évolution de la sécurité JAVA

Page 11: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

La protection de l’utilisateur

Page 12: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

JAAS : L’authentification (chronologie)

new LoginContext( "Nom de configuration", MyCallbackHandler);

LoginContextLoginContext

ConfigurationConfiguration

Configuration.jaas (liste des modules

Page 22: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

JAAS : L’authentification (chronologie)

LoginContextLoginContext

ConfigurationConfiguration

Configuration.jaas (liste des modules)

LoginModule 1LoginModule 1

LoginModule 2LoginModule 2

Page 23: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

JAAS : L’authentification (chronologie)

LoginContextLoginContext

LoginModule 1LoginModule 1

LoginModule 2LoginModule 2

Login( )

USERCallBackHandlerCallBackHandler

SubjectSubject

Droits.policy

Page 25: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

JAAS : L’authentification (chronologie)

LoginContextLoginContext

LoginModule 1LoginModule 1

LoginModule 2LoginModule 2

Login( )

USERCallBackHandlerCallBackHandler

SubjectSubject DoAsPrivileged( ) PrivilegedActionPrivilegedAction

Page 26: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

Focus sur les CallbackHandler

- Le dialogue est délégué :

LoginContextLoginContext

LoginModuleLoginModule

CallbackHandlerCallbackHandler

USER

USER

CallBack[]CallBack[]

Page 28: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

JAAS: la démo (enfin)…

Page 41: Sécurité JAVA et JAAS Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

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 Fabien Sanglard – Yang Cao

Java Authentification & Autorisation

Où trouver JAAS ?

– API d’extension pour JAVA 1.3– Incorporé à JAVA 1.4– Incorporé aux spécifications J2EE 1.3