JAAS

JAVA AUTHENTIFICATION et AUTORISATION SERVICE

 

 

 

 

 

 

 

 

Sommaire

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sommaire

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sommaire

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.