Dr. Lilia SFAXI	

Sécurité des 
Systèmes Répartis	

Partie III : 	

CIF et DCIF	

	

Doctorants ETIC, Ecole Polytechnique deTunisie 2014
Modèle de Représentation des 
Systèmes Répartis	

	

Besoin d’un modèle de représentation des systèmes
répartis qui soit : 	

Flexible	

Modulaire	

Configurable à la compilation et à l’exécution 	

Offre une séparation nette entre l’architecture et le
comportement de l’application
	

	

 2
SYSTÈMES À BASE DE COMPOSANTS	

CIF et DCIF	

3
CBSE : Ingénierie Logicielle
à Base de Composants 	

CBSE (Component-based Software Engineering)	

Représentation du système sous forme d’interconnexion
de composants	

Favorise la séparation des préoccupations (separation of
concerns)	

Composant :	

Unité de composition 	

Assemblé avec d’autres composants	

Peut être déployée indépendamment des autres	

4
Composant	

D’après [Broy98] : Les composants sont des entités
qui doivent :	

	

Encapsuler les données 	

Être implantables dans la plupart des langages de
programmation	

Être hiérarchiquement entrelacés	

Avoir des interfaces clairement définies	

Pouvoir être incorporés dans des canevas (frameworks)	

	

	

 5
Composant	

Composé de :	

Attributs : Interfaces de configuration	

Ports : Principalement 2 types:	

Ports Serveurs : Reçoivent des requêtes d’autres composants	

Ports Clients : Émettent des messages vers d’autres composants	

Liaisons : Permettent de relier les différents composants	

	

6	

C1	

C3	

C2
C_parent	

Composant	

Un composant peut être hiérarchique	

	

7	

C	

C1	

C3	

C2
CBSE	

Représentation orientée composants	

Séparation de l’architecture du système et de son
implémentation 	

Architecture : Utilisation du Langage de Description
d’Architecture (ADL)	

Implémentation : Utilisation d’un langage impératif
(Java par exemple)	

	

8
CBSE :Avantages	

•  Couplage faible	

Composants intégrés sans besoin de savoir que font les autres	

•  Flexibilité	

Composant peuvent être facilement remplacés par d’autres	

•  Composition	

•  Hétérogénéité	

Possible de combiner plusieurs langages d’implémentation, et
mécanismes de communication	

9
Exemples de Modèles à base de Composants
Fractal 	

Définition du terme « Fractale »	

« Forme géométrique de forme irrégulière ou fragmentée qui
peut être découpée en parties, chacune d’elles étant
approximativement une copie de taille réduite du tout »
Mandelbrot 1982	

	

10
Exemples de Modèles à base de Composants
Fractal 	

Réalisé par INRIA et l’unité RD de France Telecom
en Juin 2002	

Modèle à base de composants modulaire et
extensible pour la construction de systèmes
répartis hautement adaptables et reconfigurables	

Terminologie	

Composant	

Interface	

Liaison	

11
Exemples de Modèles à base de Composants
Fractal : Composant 	

Entité de conception (compile-time) et d’exécution(run-time)	

Modèle de type et d’instance	

Encapsulation de données et comportement	

Composé de : 	

Contenu : ensemble fini de sous-composants	

Membrane : contrôleur contenant l’ensemble des interfaces et
permettant de gérer les sous-composants	

Modèle hiérarchique	

Composant composite	

Composant primitif	

12
Exemples de Modèles à base de Composants
Fractal : Interface	

Point d’accès à un composant	

Interne vs Externe	

Interface interne : accessible à partir des sous-composants	

Interface externe : accessible à partir de l’extérieur du composant	

Métier vs Contrôle	

Interface métier: fonctionnalité fournie ou requise du composant	

Interface de contrôle : aspect non-fonctionnel, permettant la
configuration ou l’introspection du composant	

Interfaces de contrôle prédéfinies dans Fractal	

Client vs Serveur	

Interface client : services requis	

Interface serveur : services fournis	

	

13
Exemples de Modèles à base de Composants
Fractal : Liaison (Binding)	

Chemin de communication entre composants 	

Explicite les dépendances entre composants	

Manipulable à l’exécution : reconfiguration dynamique	

2 types : 	

Primitive 	

Entre interface client et interface serveur	

Une interface client peut être liée au plus à une interface serveur	

Une interface serveur peut être liée à une ou plusieurs interfaces
client	

Composite	

Ensemble de liaisons primitives et de composants de communication	

	

 14
Exemples de Modèles à base de Composants
Fractal : Exemple	

15	

Client	

 Serveur	

CCBCLC
BC AC
m m s
s
LifecycleController
Démarrage/arrêt du
composant	

BindingController	

Gestion des liaisons
entre les composants	

ContentController	

Contrôle du contenu
d’un composite	

AttributeController	

Contrôle des attributs
du composant	

Interface
serveur	

Interface
client	

Binding
Exemples de Modèles à base de Composants
Fractal : Exemple d’ADL	

16
Exemples de Modèles à base de Composants
SCA : Service Component Architecture	

Produit d’un effort conjugué entre plusieurs
entreprises (IBM, Oracle, Sun…)	

Standard OASIS	

Ensemble de spécifications	

Permet de simplifier la création, implémentation et
déploiement de services dans l’architecture SOA
en faisant abstraction des détails de
communication sous-jacente	

17
Exemples de Modèles à base de Composants
SCA : Service Component Architecture	

Entité principale : Composant	

Instance d’une implémentation configurée	

Offre des services à d’autres composants	

Requiert des références à partir d’autres composants	

Définit des propriétés	

Communique avec les autres composants via des liaisons, de différents types :	

	

Web service binding	

	

JMS binding	

	

EJB Session Bean binding	

	

“SCA Binding” (liaison par défaut)	

Propose plusieurs implémentations, dont:	

Tuscany : implémentation de référence de SCA	

Frascati 	

18
Exemples de Modèles à base de Composants
SCA : Politiques	

Dans SCA, les politiques représentent les aspects non
fonctionnels de l’application	

Recueil de données (logging)	

Supervision (monitoring)	

Sécurité	

Définies dans le fichier definitions.xml	

Représentés sous forme de :	

Intentions (Intents) : besoins abstraits des composants, services et
références 	

Paramètres de politiques (Policy Sets) : caractéristiques énoncées
dans les intents en appliquent des politiques particulières à un
composant ou à une liaison d’un service ou d’une référence, tout
en spécifiant les détails techniques. 	

	

 19
Exemples de Modèles à base de Composants
SCA : Exemple	

20	

Propriété	

Service	

Référence	

Liaison
Exemples de Modèles à base de Composants
SCA : Exemple d’ADL	

21
Besoins : Non-Interférence dans les Systèmes
Répartis	

Besoin d’une solution qui :	

Configure la politique de sécurité à un haut niveau d’abstraction 	

Applique le CFI à un niveau de granularité fin	

Ne requiert pas d’expertise particulière en langages typés sécurité	

Offre la possibilité de relaxer la propriété de non-interférence 	

Sépare les contraintes fonctionnelles des contraintes de sécurité 	

Propose une solution pour les modules patrimoniaux 	

Soit applicable aux systèmes répartis réels	

	

Soit applicable dynamiquement, peu de surcoût en terme de
performances 	

	

22	

CIF : Component Information Flow 	

DCIF : Distributed Component Information Flow
CIF : COMPONENT INFORMATION FLOW	

CIF et DCIF	

23
CIF	

Intergiciel (Middleware) pour la construction de systèmes répartis non-
interférents 	

Offre un modèle et un ensemble d’outils	

S’applique aux systèmes répartis à base de composants	

Applications Réparties	

Sys. Exp.	

 Sys. Exp.	

 Sys. Exp.	

Noyau	

 Noyau	

 Noyau	

Réseau	

OUTILS CIF
CIF
Configuration de Sécurité	

Étiquettes de sécurité au niveau des : 	

Ports	

Attributs	

Capacités (capabilities) : Besoins de rétrogradation	

25	

C2	

C1	

M
P1
P2
{S1 ; I1}
{S2 ; I2}
{Sm ; Im} C
CIF
Configuration de Sécurité	

Exemple ADL SCA
composite name = C
component name = C1
reference name = P1 target = C2/P2 
interface.java interface = pack.PItf/
/reference
property name=M Hello World! /property
implementation.java class=pack.C1Impl/
/component
component name = C2
service name = P2
interface.java interface = pack.PItf/
/reference
implementation.java class=pack.C2Impl/
/component
/composite
Exemple Policy
policy targetComposite= C
component name = C1
port name= P1 label= {S1;I1}/
attribute name= M label= {Sm;Im}/
capabilities
capability cap1 /capability
/capabilities
/component
component name = C2
port name= P2 label= {S2;I2}/
/component
/policy
	

26	

C2	

C1	

M
P1
P2
{S1 ; I1}
{S2 ; I2}
{Sm ; Im} C
CIF
Non-Interférence	

La propriété de non-interférence doit être vérifiée à
deux niveaux :	

Entre les composants (Inter-Component Verification)	

À l'intérieur de chaque composant (Intra-Component
Verification)	

27	

C2	

C1	

M
P1
P2
{S1 ; I1}
{S2 ; I2}
{Sm ; Im} C
CIF
Sécurité Intra-Composant	

Propagation de l’étiquette de sécurité dans l’implémentation de chaque
composant	

Distinction entre deux types d’étiquettes : 	

Etiquettes immuables : Etiquettes des ports et attributs, attribuées dans le fichier
Policy	

Etiquettes générées : Etiquettes intermédiaires déterminées par le compilateur 	

⇒ Le flux d’information entre les entités Java doit être non-interférent 	

	

28	

Exemple Implémentation	

package security;
class C1 implements StartItf{
String {Sm;Im} message;
SendItf {S;I} p;
public void start() {
String{Sint;Iint} messageSent = Hello  + message;
p.send(messageSent);
}
}
C1	

M {Sm ; Im}	

P {S ; I}	

Start { }
CIF
Sécurité Inter-Composant	

Sémantiquement, si l (C1.P1) = {S1 ; I1} et l (C2.P2) = {S2 ;I2} 	

Confidentialité	

C1 : Je veux que le message envoyé à travers P1 garde au moins le niveau de
confidentialité S1	

C2 : Je garantis la protection du message reçu à travers P2 si son niveau de
confidentialité est S2	

Intégrité	

C1 : Je garantis que le niveau d’intégrité du message envoyé à travers P1 est au
moins I1	

C2 : Je veux que le message reçu par P2 ait au moins l’intégrité I2 	

	

29	

C2	

C1	

P1 {S1 ; I1}	

P2 {S2 ; I2}	

M {Sm ; Im}	

 C
CIF
Sécurité Inter-Composant	

La vérification inter-composant assure que : 	

1.  Le flux d’information entre les composants est non-
interférent 	

Pour chaque liaison, vérifier que : 	

l (portClient) ⊆ l (portServeur) 	

2.  Les données envoyées sont préservées 	

Insertion de composants cryptographiques entre les
composants fonctionnels 	

	

30	

C2	

C1	

C	

P1 {S1 ; I1}	

P2 {S2 ; I2}	

M {Sm ; Im}
CIF
CIFTools	

Ensemble d’outils 	

Vérification des contraintes de sécurité à la compilation 	

Génération du code de sécurité 	

Applications conçues avec un modèle orienté composant qui respecte les
conditions suivantes : 	

Utilisation d’un ADL pour la représentation de l’architecture	

Utilisation d’un langage orienté objet pour la description du comportement 	

Prototypes appliqués à : 	

Modèle Orienté Composants : SCA et Fractal 	

Modèle d’Etiquettes : DLM et modèle à base de Jetons 	

Langages utilisés 	

ADL : XML 	

Implémentation : Java 6 	

	

31
CIF
CIFTools : Étapes d'Exécution	

32
CIF
Générateur CIForm	

CIF Intermediate Format	

API en Java décrivant : 	

	

L’architecture du système 	

	

Les contraintes de sécurité	

Construit à partir des fichiers ADL et Policy avec un
analyseur DOM (Java Xerces)	

Facilement extensible pour : 	

D’autres modèles orientés composants 	

D’autres modèles d’étiquettes 	

33
CIF
Générateur CIForm	

34
CIF
CIFIntra	

35	

	

Utilisation du compilateur Polyglot [Nystrom03]	

1.  Extraction d’un AST à partir du code de chaque composant 	

2.  Parcours de l’AST grâce à des classesVisiteur	

3.  Affectation des étiquettes immuables aux attributs et méthodes Java 	

4.  Calcul des étiquettes générées pour les éléments intermédiaires 	

Dans le cas d’une interférence, appel au composant Contrôleur	

Quand le composant est jugé non-interférent, son code annoté est
généré
CIF
CIFIntra	

36
CIF
CIFIntra : Polyglot	

37	

Polyglot : 	

Compilateur extensible	

Réalisé pour créer des extensions à Java	

Basé sur le principe de visiteurs et de passes	

Initialement : 	

Input : code implémenté avec une extension à Java (ex. JIF)	

Output : Code Java équivalent	

CIF exploite Polyglot pour aller dans l’autre sens	

Input : Code métier en Java	

Output : Code Java annoté (JIF-like)
CIF
CIFIntra :Visiteurs (1/3)	

38	

	

Visiteurs	

Classes qui parcourent l’AST (Arbre de Syntaxe Abstraite) pour
réaliser les traitements voulus	

Chaque visiteur effectue une opération particulière pour
vérifier le flux de données	

Attribution d'étiquettes aux variables locales et méthodes non
annotées	

Fonctionnement	

Si le code est non-interférent è Génération du code Java annoté	

Si une interférence est trouvée, un module contrôleur est appelé	

Si l’interférence est non voulue, une exception est lancée
CIF
CIFIntra :Visiteurs (2/3)	

39	

SecureTranslator	

StoreLabelled	

FieldsVisitor	

MethodVisitor	

LabelMethodWith	

HighestReturnVisitor	

BlockVisitor	

SecureTranslator: 	

•  Responsable de la génération du code
annoté final	

•  Parse le code initial et lance les autres
visiteurs successivement	

StoreLabelledFieldsVisitor: 	

Pour chaque attribut de la classe visitée, lui
associer le label correspondant dans l’ADL,
s’il existe	

MethodVisitor / BlockVisitor: 	

Parcourt l’implémentation de chaque
méthode/Bloc	

LabelMethodWithHighestReturnVisitor: 	

Attribue un label aux méthodes non
annotées dans l’ADL
CIF
CIFIntra :Visiteurs (3/3)	

40	

StoreHighAndLow
LabelVisitor	

SecureTranslator	

StoreLabelled	

FieldsVisitor	

MethodVisitor	

LabelMethodWith	

HighestReturnVisitor	

BlockVisitor	

VerifyLocalVisitor	

VerifyHigherThan
StoredVisitor	

VerifyLowerThan	

StoredVisitor	

StoreHighAndLowLabelVisitor	

Pour une expression donnée, sauvegarde
les labels de plus haut et de plus bas
niveau de sécurité	

VerifyLocalVisitor	

Vérifie si une affectation à une variable
locale est autorisée ou pas	

VerifyHigherThanStoredLabelVisitor	

Pour une étiquette donnée, vérifie que
toutes les étiquettes d’une expression
donnée sont plus élevées qu'elle	

VerifyLowerThanStoredLabelVisitor	

Pour une étiquette donnée, vérifie que
toutes les étiquettes d’une expression
donnée sont moins élevées qu'elle
Exemple Policy
policy targetComposite= C
component name = C1
port name= P label= {}/
port name= start label= {}/
attribute name= M label= {a;}/
capabilities
capability a- /capability
capability b+ /capability
/capabilities
/component
/policy
	

CIF
CIFIntra : Exemple	

41	

Exemple Implémentation	

package pack;
class C1Impl implements StartItf{
String M;
SendItf P;
public void start() {
String messageSent = Hello  + message;
P.send(messageSent);
}
}
C1	

M {a ; }	

P { }	

start { }	

Exemple ADL SCA
composite name = C
component name = C1
service name=start
interface.java interface = pack.StartItf/
/service
reference name = P
interface.java interface = pack.PItf/
/reference
property name=M Alice /property
implementation.java class=pack.C1Impl/
/component
/composite
Exemple Policy
policy targetComposite= C
component name = C1
port name= P label= {}/
port name= start label= {}/
attribute name= M label= {a;}/
capabilities
capability a- /capability
capability b+ /capability
/capabilities
/component
/policy
	

CIF
CIFIntra : Exemple	

42	

C1	

M {a ; }	

P { }	

start { }	

Exemple ADL SCA
composite name = C
component name = C1
service name=start
interface.java interface = pack.StartItf/
/service
reference name = P
interface.java interface = pack.PItf/
/reference
property name=M Alice /property
implementation.java class=pack.C1Impl/
/component
/composite
Elément	

 Type ADL	

 Type Java	

 Label	

start	

 Service	

 Méthode	

 {}	

P	

 Reference	

 Attribut	

 {}	

M	

 Property	

 Attribut	

 {a;}
Exemple Policy
policy targetComposite= C
component name = C1
port name= P label= {}/
port name= start label= {}/
attribute name= M label= {a;}/
capabilities
capability a- /capability
capability b+ /capability
/capabilities
/component
/policy
	

CIF
CIFIntra : Exemple	

43	

C1	

M {a ; }	

P { }	

start { }	

Elément	

 Type ADL	

 Type Java	

 Label	

start	

 Service	

 Méthode	

 {}	

P	

 Reference	

 Attribut	

 {}	

M	

 Property	

 Attribut	

 {a;}	

Exemple Implémentation	

package pack;
class C1Impl implements StartItf{
String {a;} M;
SendItf {} P;
public void{} start() {
String messageSent = Hello  + message;
P.send(messageSent);
}
}
Exemple Policy
policy targetComposite= C
component name = C1
port name= P label= {}/
port name= start label= {}/
attribute name= M label= {a;}/
capabilities
capability a- /capability
capability b+ /capability
/capabilities
/component
/policy
	

CIF
CIFIntra : Exemple	

44	

C1	

M {a ; }	

P { }	

start { }	

Elément	

 Type ADL	

 Type Java	

 Label	

start	

 Service	

 Méthode	

 {}	

P	

 Reference	

 Attribut	

 {}	

M	

 Property	

 Attribut	

 {a;}	

Exemple Implémentation	

package pack;
class C1Impl implements StartItf{
String {a;} M;
SendItf {} P;
public void{} start() {
String messageSent = Hello  + M;
P.send(messageSent);
}
}
Exemple Policy
policy targetComposite= C
component name = C1
port name= P label= {}/
port name= start label= {}/
attribute name= M label= {a;}/
capabilities
capability a- /capability
capability b+ /capability
/capabilities
/component
/policy
	

CIF
CIFIntra : Exemple	

45	

C1	

M {a ; }	

P { }	

start { }	

Elément	

 Type ADL	

 Type Java	

 Label	

start	

 Service	

 Méthode	

 {}	

P	

 Reference	

 Attribut	

 {}	

M	

 Property	

 Attribut	

 {a;}	

Exemple Implémentation	

package pack;
class C1Impl implements StartItf{
String {a;} M;
SendItf {} P;
public void{} start() {
String{a;} messageSent = Hello  + M;
P.send(messageSent);
}
} Interférence!
CIF
CIFIntra : Contrôleur	

	

Module dans CIFIntra	

Permet de vérifier si la rétrogradation des niveaux de
sécurité d'un élément est autorisée ou pas, en cas
d'interférence	

Il permet de :	

Vérifier s'il peut résoudre l'interférence à son niveau (sans
faire appel à l'utilisateur) grâce aux capacités du composant	

Sinon, signaler l'interférence à l'utilisateur, qui aura la
possibilité de l'autoriser ou pas	

	

 46
Exemple Policy
policy targetComposite= C
component name = C1
port name= P label= {}/
port name= start label= {}/
attribute name= M label= {a;}/
capabilities
capability a- /capability
capability b+ /capability
/capabilities
/component
/policy
	

CIF
CIFIntra : Exemple	

47	

C1	

M {a ; }	

P { }	

start { }	

Elément	

 Type ADL	

 Type Java	

 Label	

start	

 Service	

 Méthode	

 {}	

P	

 Reference	

 Attribut	

 {}	

M	

 Property	

 Attribut	

 {a;}	

Exemple Implémentation	

package pack;
class C1Impl implements StartItf{
String {a;} M;
SendItf {} P;
public void{} start() {
String{a;} messageSent = Hello  + M;
P.send(messageSent);
}
} Interférence!
CIF
CIFIntra : Liaisons Internes	

Cas des composants patrimoniaux (Legacy Components)	

Comment vérifier la non-interférence intra-composant, si on ne dispose pas du
code du composant?	

Chaque composant patrimonial doit être accompagné d'un IBA (Internal
Bindings Artifact)	

Représente les liaisons internes d'un composant, sans divulguer son code	

Liaison interne : 	

Relation entre les entrées et sorties du composant	

Une entrée et une sortie d'un composant sont liées ssi il existe un flux d'information
entre elles	

Le composant est non-interférent ssi pour chaque entrée e et sortie s liées : 	

l (e) ⊆ l (s)	

	

48
CIF
CIFIntra : Liaisons Internes	

49
CIF
CIFInter	

50	

Vérification du flux d’information entre les
composants	

Si aucune liaison ne présente d’interférence, les
générateurs fonctionnels : 	

	

1.  Insèrent des composants cryptographiques dans
l’instance CIForm 	

2.  Génèrent le nouvel ADL fonctionnel	

3.  Génèrent le code des composants cryptographiques
CIF
CIFInter	

51
DCIF : DYNAMIC COMPONENT
INFORMATION FLOW	

CIF et DCIF	

52
DCIF	

Dynamic Component Information Flow	

Canevas orienté composants pour la construction de
systèmes distribués sécurisés à la compilation et à
l’exécution	

Définit deux types de composants : 	

Des composants fonctionnels 	

Des composants de gestion 	

	

53
DCIF
Architecture	

54
DCIF
Architecture	

Global Manager 	

Composite	

Responsable de la gestion des composants fonctionnels	

Factory	

Gère les mises à jour de l'architecture du système	

Un composant Factory Global et un composant Factory pour chaque domaine	

Security Manager	

Dispatche les informations entre les composants de sécurité, selon leur type	

Key Manager	

Gestionnaire de clefs cryptographiques	

IFC Manager	

Gestionnaire des flux d'information du système	

CryptoManager	

Gestion des opérations de crypto pour chaque noeud	

	

55
DCIF
Architecture : IFC Manager	

56
DCIF
Architecture : IFC Manager	

	

Policy Manager 	

Orchestre les communications dans le IFCM	

Stocke les certificats IBA et les instances CIForm 	

Policy Extractor 	

Extrait les informations à partir des fichiers Policy 	

Label Manager 	

Stocke les étiquettes du système 	

Controller 	

Prend les décisions de rétrogradation 	

Intra-ComponentVerifier 	

Vérification dynamique intra-composant 	

	

 57
DCIF
Reconfiguration Dynamique	

	

	

Ajout d’un composant 	

Création d’un CM pour son nœud	

Policy Extractor extrait les étiquettes du fichier Policy, et les stocke dans le Label Manager	

Le Intra-component Verifier vérifie le code de ce composant, ou son certificat IBA 	

Suppression d’un composant 	

La clef du composant est supprimée du Key Manager	

Les étiquettes de ce composant sont supprimées du Label Manager 	

L’instance CIForm est mise à jour 	

Remplacement d’un composant 	

Suppression + ajout d’un composant 	

Migration d’un composant 	

Suppression d’un composant d’un domaine + son ajout dans un autre domaine 	

	

58
Références	

[Broy98] : M. Broy, A. Deimel, et al. What characterizes a (software) component ?”
Software- Concepts  Tools, 19(1) :49–56, June 1998.	

[Nystrom03] : N. Nystrom, M.R. Clarkson, and A.C. Myers. “Polyglot : An extensible
compiler framework for Java”. In Proceedings of the 12th International Conference
on Compiler Construction, pages 138–152. Springer-Verlag,April 2003. 	

	

	

59

Partie3 cif et dcif

  • 1.
    Dr. Lilia SFAXI Sécuritédes Systèmes Répartis Partie III : CIF et DCIF Doctorants ETIC, Ecole Polytechnique deTunisie 2014
  • 2.
    Modèle de Représentationdes Systèmes Répartis Besoin d’un modèle de représentation des systèmes répartis qui soit : Flexible Modulaire Configurable à la compilation et à l’exécution Offre une séparation nette entre l’architecture et le comportement de l’application 2
  • 3.
    SYSTÈMES À BASEDE COMPOSANTS CIF et DCIF 3
  • 4.
    CBSE : IngénierieLogicielle à Base de Composants CBSE (Component-based Software Engineering) Représentation du système sous forme d’interconnexion de composants Favorise la séparation des préoccupations (separation of concerns) Composant : Unité de composition Assemblé avec d’autres composants Peut être déployée indépendamment des autres 4
  • 5.
    Composant D’après [Broy98] :Les composants sont des entités qui doivent : Encapsuler les données Être implantables dans la plupart des langages de programmation Être hiérarchiquement entrelacés Avoir des interfaces clairement définies Pouvoir être incorporés dans des canevas (frameworks) 5
  • 6.
    Composant Composé de : Attributs: Interfaces de configuration Ports : Principalement 2 types: Ports Serveurs : Reçoivent des requêtes d’autres composants Ports Clients : Émettent des messages vers d’autres composants Liaisons : Permettent de relier les différents composants 6 C1 C3 C2
  • 7.
    C_parent Composant Un composant peutêtre hiérarchique 7 C C1 C3 C2
  • 8.
    CBSE Représentation orientée composants Séparationde l’architecture du système et de son implémentation Architecture : Utilisation du Langage de Description d’Architecture (ADL) Implémentation : Utilisation d’un langage impératif (Java par exemple) 8
  • 9.
    CBSE :Avantages •  Couplagefaible Composants intégrés sans besoin de savoir que font les autres •  Flexibilité Composant peuvent être facilement remplacés par d’autres •  Composition •  Hétérogénéité Possible de combiner plusieurs langages d’implémentation, et mécanismes de communication 9
  • 10.
    Exemples de Modèlesà base de Composants Fractal Définition du terme « Fractale » « Forme géométrique de forme irrégulière ou fragmentée qui peut être découpée en parties, chacune d’elles étant approximativement une copie de taille réduite du tout » Mandelbrot 1982 10
  • 11.
    Exemples de Modèlesà base de Composants Fractal Réalisé par INRIA et l’unité RD de France Telecom en Juin 2002 Modèle à base de composants modulaire et extensible pour la construction de systèmes répartis hautement adaptables et reconfigurables Terminologie Composant Interface Liaison 11
  • 12.
    Exemples de Modèlesà base de Composants Fractal : Composant Entité de conception (compile-time) et d’exécution(run-time) Modèle de type et d’instance Encapsulation de données et comportement Composé de : Contenu : ensemble fini de sous-composants Membrane : contrôleur contenant l’ensemble des interfaces et permettant de gérer les sous-composants Modèle hiérarchique Composant composite Composant primitif 12
  • 13.
    Exemples de Modèlesà base de Composants Fractal : Interface Point d’accès à un composant Interne vs Externe Interface interne : accessible à partir des sous-composants Interface externe : accessible à partir de l’extérieur du composant Métier vs Contrôle Interface métier: fonctionnalité fournie ou requise du composant Interface de contrôle : aspect non-fonctionnel, permettant la configuration ou l’introspection du composant Interfaces de contrôle prédéfinies dans Fractal Client vs Serveur Interface client : services requis Interface serveur : services fournis 13
  • 14.
    Exemples de Modèlesà base de Composants Fractal : Liaison (Binding) Chemin de communication entre composants Explicite les dépendances entre composants Manipulable à l’exécution : reconfiguration dynamique 2 types : Primitive Entre interface client et interface serveur Une interface client peut être liée au plus à une interface serveur Une interface serveur peut être liée à une ou plusieurs interfaces client Composite Ensemble de liaisons primitives et de composants de communication 14
  • 15.
    Exemples de Modèlesà base de Composants Fractal : Exemple 15 Client Serveur CCBCLC BC AC m m s s LifecycleController Démarrage/arrêt du composant BindingController Gestion des liaisons entre les composants ContentController Contrôle du contenu d’un composite AttributeController Contrôle des attributs du composant Interface serveur Interface client Binding
  • 16.
    Exemples de Modèlesà base de Composants Fractal : Exemple d’ADL 16
  • 17.
    Exemples de Modèlesà base de Composants SCA : Service Component Architecture Produit d’un effort conjugué entre plusieurs entreprises (IBM, Oracle, Sun…) Standard OASIS Ensemble de spécifications Permet de simplifier la création, implémentation et déploiement de services dans l’architecture SOA en faisant abstraction des détails de communication sous-jacente 17
  • 18.
    Exemples de Modèlesà base de Composants SCA : Service Component Architecture Entité principale : Composant Instance d’une implémentation configurée Offre des services à d’autres composants Requiert des références à partir d’autres composants Définit des propriétés Communique avec les autres composants via des liaisons, de différents types : Web service binding JMS binding EJB Session Bean binding “SCA Binding” (liaison par défaut) Propose plusieurs implémentations, dont: Tuscany : implémentation de référence de SCA Frascati 18
  • 19.
    Exemples de Modèlesà base de Composants SCA : Politiques Dans SCA, les politiques représentent les aspects non fonctionnels de l’application Recueil de données (logging) Supervision (monitoring) Sécurité Définies dans le fichier definitions.xml Représentés sous forme de : Intentions (Intents) : besoins abstraits des composants, services et références Paramètres de politiques (Policy Sets) : caractéristiques énoncées dans les intents en appliquent des politiques particulières à un composant ou à une liaison d’un service ou d’une référence, tout en spécifiant les détails techniques. 19
  • 20.
    Exemples de Modèlesà base de Composants SCA : Exemple 20 Propriété Service Référence Liaison
  • 21.
    Exemples de Modèlesà base de Composants SCA : Exemple d’ADL 21
  • 22.
    Besoins : Non-Interférencedans les Systèmes Répartis Besoin d’une solution qui : Configure la politique de sécurité à un haut niveau d’abstraction Applique le CFI à un niveau de granularité fin Ne requiert pas d’expertise particulière en langages typés sécurité Offre la possibilité de relaxer la propriété de non-interférence Sépare les contraintes fonctionnelles des contraintes de sécurité Propose une solution pour les modules patrimoniaux Soit applicable aux systèmes répartis réels Soit applicable dynamiquement, peu de surcoût en terme de performances 22 CIF : Component Information Flow DCIF : Distributed Component Information Flow
  • 23.
    CIF : COMPONENTINFORMATION FLOW CIF et DCIF 23
  • 24.
    CIF Intergiciel (Middleware) pourla construction de systèmes répartis non- interférents Offre un modèle et un ensemble d’outils S’applique aux systèmes répartis à base de composants Applications Réparties Sys. Exp. Sys. Exp. Sys. Exp. Noyau Noyau Noyau Réseau OUTILS CIF
  • 25.
    CIF Configuration de Sécurité Étiquettesde sécurité au niveau des : Ports Attributs Capacités (capabilities) : Besoins de rétrogradation 25 C2 C1 M P1 P2 {S1 ; I1} {S2 ; I2} {Sm ; Im} C
  • 26.
    CIF Configuration de Sécurité ExempleADL SCA composite name = C component name = C1 reference name = P1 target = C2/P2 interface.java interface = pack.PItf/ /reference property name=M Hello World! /property implementation.java class=pack.C1Impl/ /component component name = C2 service name = P2 interface.java interface = pack.PItf/ /reference implementation.java class=pack.C2Impl/ /component /composite Exemple Policy policy targetComposite= C component name = C1 port name= P1 label= {S1;I1}/ attribute name= M label= {Sm;Im}/ capabilities capability cap1 /capability /capabilities /component component name = C2 port name= P2 label= {S2;I2}/ /component /policy 26 C2 C1 M P1 P2 {S1 ; I1} {S2 ; I2} {Sm ; Im} C
  • 27.
    CIF Non-Interférence La propriété denon-interférence doit être vérifiée à deux niveaux : Entre les composants (Inter-Component Verification) À l'intérieur de chaque composant (Intra-Component Verification) 27 C2 C1 M P1 P2 {S1 ; I1} {S2 ; I2} {Sm ; Im} C
  • 28.
    CIF Sécurité Intra-Composant Propagation del’étiquette de sécurité dans l’implémentation de chaque composant Distinction entre deux types d’étiquettes : Etiquettes immuables : Etiquettes des ports et attributs, attribuées dans le fichier Policy Etiquettes générées : Etiquettes intermédiaires déterminées par le compilateur ⇒ Le flux d’information entre les entités Java doit être non-interférent 28 Exemple Implémentation package security; class C1 implements StartItf{ String {Sm;Im} message; SendItf {S;I} p; public void start() { String{Sint;Iint} messageSent = Hello + message; p.send(messageSent); } } C1 M {Sm ; Im} P {S ; I} Start { }
  • 29.
    CIF Sécurité Inter-Composant Sémantiquement, sil (C1.P1) = {S1 ; I1} et l (C2.P2) = {S2 ;I2} Confidentialité C1 : Je veux que le message envoyé à travers P1 garde au moins le niveau de confidentialité S1 C2 : Je garantis la protection du message reçu à travers P2 si son niveau de confidentialité est S2 Intégrité C1 : Je garantis que le niveau d’intégrité du message envoyé à travers P1 est au moins I1 C2 : Je veux que le message reçu par P2 ait au moins l’intégrité I2 29 C2 C1 P1 {S1 ; I1} P2 {S2 ; I2} M {Sm ; Im} C
  • 30.
    CIF Sécurité Inter-Composant La vérificationinter-composant assure que : 1.  Le flux d’information entre les composants est non- interférent Pour chaque liaison, vérifier que : l (portClient) ⊆ l (portServeur) 2.  Les données envoyées sont préservées Insertion de composants cryptographiques entre les composants fonctionnels 30 C2 C1 C P1 {S1 ; I1} P2 {S2 ; I2} M {Sm ; Im}
  • 31.
    CIF CIFTools Ensemble d’outils Vérificationdes contraintes de sécurité à la compilation Génération du code de sécurité Applications conçues avec un modèle orienté composant qui respecte les conditions suivantes : Utilisation d’un ADL pour la représentation de l’architecture Utilisation d’un langage orienté objet pour la description du comportement Prototypes appliqués à : Modèle Orienté Composants : SCA et Fractal Modèle d’Etiquettes : DLM et modèle à base de Jetons Langages utilisés ADL : XML Implémentation : Java 6 31
  • 32.
    CIF CIFTools : Étapesd'Exécution 32
  • 33.
    CIF Générateur CIForm CIF IntermediateFormat API en Java décrivant : L’architecture du système Les contraintes de sécurité Construit à partir des fichiers ADL et Policy avec un analyseur DOM (Java Xerces) Facilement extensible pour : D’autres modèles orientés composants D’autres modèles d’étiquettes 33
  • 34.
  • 35.
    CIF CIFIntra 35 Utilisation du compilateurPolyglot [Nystrom03] 1.  Extraction d’un AST à partir du code de chaque composant 2.  Parcours de l’AST grâce à des classesVisiteur 3.  Affectation des étiquettes immuables aux attributs et méthodes Java 4.  Calcul des étiquettes générées pour les éléments intermédiaires Dans le cas d’une interférence, appel au composant Contrôleur Quand le composant est jugé non-interférent, son code annoté est généré
  • 36.
  • 37.
    CIF CIFIntra : Polyglot 37 Polyglot: Compilateur extensible Réalisé pour créer des extensions à Java Basé sur le principe de visiteurs et de passes Initialement : Input : code implémenté avec une extension à Java (ex. JIF) Output : Code Java équivalent CIF exploite Polyglot pour aller dans l’autre sens Input : Code métier en Java Output : Code Java annoté (JIF-like)
  • 38.
    CIF CIFIntra :Visiteurs (1/3) 38 Visiteurs Classesqui parcourent l’AST (Arbre de Syntaxe Abstraite) pour réaliser les traitements voulus Chaque visiteur effectue une opération particulière pour vérifier le flux de données Attribution d'étiquettes aux variables locales et méthodes non annotées Fonctionnement Si le code est non-interférent è Génération du code Java annoté Si une interférence est trouvée, un module contrôleur est appelé Si l’interférence est non voulue, une exception est lancée
  • 39.
    CIF CIFIntra :Visiteurs (2/3) 39 SecureTranslator StoreLabelled FieldsVisitor MethodVisitor LabelMethodWith HighestReturnVisitor BlockVisitor SecureTranslator: •  Responsable de la génération du code annoté final •  Parse le code initial et lance les autres visiteurs successivement StoreLabelledFieldsVisitor: Pour chaque attribut de la classe visitée, lui associer le label correspondant dans l’ADL, s’il existe MethodVisitor / BlockVisitor: Parcourt l’implémentation de chaque méthode/Bloc LabelMethodWithHighestReturnVisitor: Attribue un label aux méthodes non annotées dans l’ADL
  • 40.
    CIF CIFIntra :Visiteurs (3/3) 40 StoreHighAndLow LabelVisitor SecureTranslator StoreLabelled FieldsVisitor MethodVisitor LabelMethodWith HighestReturnVisitor BlockVisitor VerifyLocalVisitor VerifyHigherThan StoredVisitor VerifyLowerThan StoredVisitor StoreHighAndLowLabelVisitor Pourune expression donnée, sauvegarde les labels de plus haut et de plus bas niveau de sécurité VerifyLocalVisitor Vérifie si une affectation à une variable locale est autorisée ou pas VerifyHigherThanStoredLabelVisitor Pour une étiquette donnée, vérifie que toutes les étiquettes d’une expression donnée sont plus élevées qu'elle VerifyLowerThanStoredLabelVisitor Pour une étiquette donnée, vérifie que toutes les étiquettes d’une expression donnée sont moins élevées qu'elle
  • 41.
    Exemple Policy policy targetComposite=C component name = C1 port name= P label= {}/ port name= start label= {}/ attribute name= M label= {a;}/ capabilities capability a- /capability capability b+ /capability /capabilities /component /policy CIF CIFIntra : Exemple 41 Exemple Implémentation package pack; class C1Impl implements StartItf{ String M; SendItf P; public void start() { String messageSent = Hello + message; P.send(messageSent); } } C1 M {a ; } P { } start { } Exemple ADL SCA composite name = C component name = C1 service name=start interface.java interface = pack.StartItf/ /service reference name = P interface.java interface = pack.PItf/ /reference property name=M Alice /property implementation.java class=pack.C1Impl/ /component /composite
  • 42.
    Exemple Policy policy targetComposite=C component name = C1 port name= P label= {}/ port name= start label= {}/ attribute name= M label= {a;}/ capabilities capability a- /capability capability b+ /capability /capabilities /component /policy CIF CIFIntra : Exemple 42 C1 M {a ; } P { } start { } Exemple ADL SCA composite name = C component name = C1 service name=start interface.java interface = pack.StartItf/ /service reference name = P interface.java interface = pack.PItf/ /reference property name=M Alice /property implementation.java class=pack.C1Impl/ /component /composite Elément Type ADL Type Java Label start Service Méthode {} P Reference Attribut {} M Property Attribut {a;}
  • 43.
    Exemple Policy policy targetComposite=C component name = C1 port name= P label= {}/ port name= start label= {}/ attribute name= M label= {a;}/ capabilities capability a- /capability capability b+ /capability /capabilities /component /policy CIF CIFIntra : Exemple 43 C1 M {a ; } P { } start { } Elément Type ADL Type Java Label start Service Méthode {} P Reference Attribut {} M Property Attribut {a;} Exemple Implémentation package pack; class C1Impl implements StartItf{ String {a;} M; SendItf {} P; public void{} start() { String messageSent = Hello + message; P.send(messageSent); } }
  • 44.
    Exemple Policy policy targetComposite=C component name = C1 port name= P label= {}/ port name= start label= {}/ attribute name= M label= {a;}/ capabilities capability a- /capability capability b+ /capability /capabilities /component /policy CIF CIFIntra : Exemple 44 C1 M {a ; } P { } start { } Elément Type ADL Type Java Label start Service Méthode {} P Reference Attribut {} M Property Attribut {a;} Exemple Implémentation package pack; class C1Impl implements StartItf{ String {a;} M; SendItf {} P; public void{} start() { String messageSent = Hello + M; P.send(messageSent); } }
  • 45.
    Exemple Policy policy targetComposite=C component name = C1 port name= P label= {}/ port name= start label= {}/ attribute name= M label= {a;}/ capabilities capability a- /capability capability b+ /capability /capabilities /component /policy CIF CIFIntra : Exemple 45 C1 M {a ; } P { } start { } Elément Type ADL Type Java Label start Service Méthode {} P Reference Attribut {} M Property Attribut {a;} Exemple Implémentation package pack; class C1Impl implements StartItf{ String {a;} M; SendItf {} P; public void{} start() { String{a;} messageSent = Hello + M; P.send(messageSent); } } Interférence!
  • 46.
    CIF CIFIntra : Contrôleur Moduledans CIFIntra Permet de vérifier si la rétrogradation des niveaux de sécurité d'un élément est autorisée ou pas, en cas d'interférence Il permet de : Vérifier s'il peut résoudre l'interférence à son niveau (sans faire appel à l'utilisateur) grâce aux capacités du composant Sinon, signaler l'interférence à l'utilisateur, qui aura la possibilité de l'autoriser ou pas 46
  • 47.
    Exemple Policy policy targetComposite=C component name = C1 port name= P label= {}/ port name= start label= {}/ attribute name= M label= {a;}/ capabilities capability a- /capability capability b+ /capability /capabilities /component /policy CIF CIFIntra : Exemple 47 C1 M {a ; } P { } start { } Elément Type ADL Type Java Label start Service Méthode {} P Reference Attribut {} M Property Attribut {a;} Exemple Implémentation package pack; class C1Impl implements StartItf{ String {a;} M; SendItf {} P; public void{} start() { String{a;} messageSent = Hello + M; P.send(messageSent); } } Interférence!
  • 48.
    CIF CIFIntra : LiaisonsInternes Cas des composants patrimoniaux (Legacy Components) Comment vérifier la non-interférence intra-composant, si on ne dispose pas du code du composant? Chaque composant patrimonial doit être accompagné d'un IBA (Internal Bindings Artifact) Représente les liaisons internes d'un composant, sans divulguer son code Liaison interne : Relation entre les entrées et sorties du composant Une entrée et une sortie d'un composant sont liées ssi il existe un flux d'information entre elles Le composant est non-interférent ssi pour chaque entrée e et sortie s liées : l (e) ⊆ l (s) 48
  • 49.
  • 50.
    CIF CIFInter 50 Vérification du fluxd’information entre les composants Si aucune liaison ne présente d’interférence, les générateurs fonctionnels : 1.  Insèrent des composants cryptographiques dans l’instance CIForm 2.  Génèrent le nouvel ADL fonctionnel 3.  Génèrent le code des composants cryptographiques
  • 51.
  • 52.
    DCIF : DYNAMICCOMPONENT INFORMATION FLOW CIF et DCIF 52
  • 53.
    DCIF Dynamic Component InformationFlow Canevas orienté composants pour la construction de systèmes distribués sécurisés à la compilation et à l’exécution Définit deux types de composants : Des composants fonctionnels Des composants de gestion 53
  • 54.
  • 55.
    DCIF Architecture Global Manager Composite Responsablede la gestion des composants fonctionnels Factory Gère les mises à jour de l'architecture du système Un composant Factory Global et un composant Factory pour chaque domaine Security Manager Dispatche les informations entre les composants de sécurité, selon leur type Key Manager Gestionnaire de clefs cryptographiques IFC Manager Gestionnaire des flux d'information du système CryptoManager Gestion des opérations de crypto pour chaque noeud 55
  • 56.
  • 57.
    DCIF Architecture : IFCManager Policy Manager Orchestre les communications dans le IFCM Stocke les certificats IBA et les instances CIForm Policy Extractor Extrait les informations à partir des fichiers Policy Label Manager Stocke les étiquettes du système Controller Prend les décisions de rétrogradation Intra-ComponentVerifier Vérification dynamique intra-composant 57
  • 58.
    DCIF Reconfiguration Dynamique Ajout d’uncomposant Création d’un CM pour son nœud Policy Extractor extrait les étiquettes du fichier Policy, et les stocke dans le Label Manager Le Intra-component Verifier vérifie le code de ce composant, ou son certificat IBA Suppression d’un composant La clef du composant est supprimée du Key Manager Les étiquettes de ce composant sont supprimées du Label Manager L’instance CIForm est mise à jour Remplacement d’un composant Suppression + ajout d’un composant Migration d’un composant Suppression d’un composant d’un domaine + son ajout dans un autre domaine 58
  • 59.
    Références [Broy98] : M.Broy, A. Deimel, et al. What characterizes a (software) component ?” Software- Concepts Tools, 19(1) :49–56, June 1998. [Nystrom03] : N. Nystrom, M.R. Clarkson, and A.C. Myers. “Polyglot : An extensible compiler framework for Java”. In Proceedings of the 12th International Conference on Compiler Construction, pages 138–152. Springer-Verlag,April 2003. 59