Modélisations en B - Politiques de déclassification
Information
Vous trouverez sur cette page des informations sur la modélisation en B des principes de déclassifications mis en avant dans mes articles.
Modèle de dépendances entre les machines
Comme indiqué dans le mémoire, afin de valider nos travaux sur la modélisation de propriétés associées à la notion de déclassification, nous avons formalisé nos travaux en B. Les dépendances entre les différents composants du projet, présentés dans l'article Modeling and Controlling Downgrading Operations in Information Systems, sont présentées dans le schéma suivant. Le schéma présente les dépendances pour le modèle Bell & La Padula mais ceux des modèles DAC et RBAC sont proches (seule la machine BLPPolicy est remplacée par respectivement DACPolicy et RBACPolicy).
Machines Principales
Comme indiqué dans le mémoire, ce projet a pour but d'illustrer la définition d'une politique de déclassification. L'interface finale principale est donc celle spécifiée dans Environment.mch. Cependant, le modèle sous-jacent lié à la politique de sécurité est également important afin de mettre en évidence les propriétés de sécurité considérées ou exprimables dans le modèle. Les deux interfaces seront donc présentées dans ce rapport.
Politique de sécurité
La politique de sécurité est définie dans la machine Policy.
Tout d'abord, elle repose sur les machines sous-jacantes Metadata et Model :
- Model définit les labels utilisés
- Metadata étend Model et définit les métadonnées considérées dans le système
Afin de pouvoir exprimer des politiques de sécurité concrètes et les tester avec le projet Prob, la machine Policy a été étendue (et non raffinée) comme suit :
- BLPPolicy exprime la politique de sécurité Bell & Lapadula
- DACPolicy exprime la politique de sécurité DAC
- RBACPolicy permet d'exprimer une politique de sécurité RBAC
Politique de déclassification
La politique de déclassification est gérée en surcouche de la politique de sécurité. Elle étend donc celle-ci pour définir les critères associées à l'évolution de prédicats précédemment supposés statique (principe de tranquillité), lorsque l'on considère les modèles de contrôle d'accès standard. Plus exactement, elle définit la politique de sécurité associée à ces opérations de déclassification.La politique de déclassification est gérée en surcouche de la politique de sécurité. Elle étend donc celle-ci pour définir les critères associées à l'évolution de prédicats précédemment supposés statique (principe de tranquillité), lorsque l'on considère les modèles de contrôle d'accès standard. Plus exactement, elle définit la politique de sécurité associée à ces opérations de déclassification.
Interface finale
La dernière machine « principale » est Environment.mch, laquelle est l'interface à utiliser dans le simulateur ProB en tant que point d'entrée. Elle instancie donc les différentes variables (SETS) et proposent (définies ou étend) les méthodes nécessaires à l'utilisation du système.
/* Environment
* Author: julien
* Creation date: jeu. juil. 30 2009
*/
MACHINE
Downgrading_event
SETS
USERS={alice,bob,carol,eve,mallory,nestor};
ROLES={role_alice,role_bob,role_carol,role_eve,role_mallory, role_nestor};
LEVELS={SD_LEVEL, TSD_LEVEL, CD_LEVEL, UNCLASSIF_LEVEL};
OBJECTS={object1,object2,object3,object4,object5};
CONTEXTS;
PROCESS
SEES
Constants
PROPERTIES
SD_LEVEL:LEVELS & TSD_LEVEL:LEVELS & CD_LEVEL:LEVELS & SD_LEVEL /= TSD_LEVEL
& CD_LEVEL /= TSD_LEVEL & SD_LEVEL/= CD_LEVEL
VARIABLES
user_observe,object_observe,role_observe,result
CONCRETE_VARIABLES
users, objects, roles
INCLUDES down.Downgrading(USERS, OBJECTS, CONTEXTS, LEVELS, ROLES,PROCESS)
...
OPERATIONS
/* *************************
environment
************************* */
createUser = PRE not(USERS - users = {})
THEN ... END;
createObject(owners) = PRE not(OBJECTS - objects = {}) & owners : POW1(users)
THEN ... END;
createRole = PRE not(ROLES - roles = {})
THEN ... END;
/* *************************
admin operations
************************* */
setEmpower(user, role) = PRE
role: roles & user : users & role /:down.pol.empower(user)
THEN ... END;
setInf_levelEnv(lvl1,lvl2) = PRE
lvl1:LEVELS & lvl2:LEVELS
THEN ... END;
setRoleLevelEnv(role, level,rig) = PRE
role: roles & level : LEVELS & rig: RIGHTS
THEN ... END;
setAccessEnv(issuer, role, object, rig) = PRE
issuer: users & rig : RIGHTS & role: roles & object : objects
THEN ... END;
set_trust(obj,userReq,userDest,action, boo) = PRE
obj: objects & userReq:users & userDest:users & action:RIGHTS & boo:BOOL
THEN ... END ;
setTrustedPath(path) = PRE
path: down.pol.execution_path
THEN ... END;
/* *************************
test
************************* */
isAccessEnv(user, object, rig) = PRE
user: users & rig : RIGHTS & object : objects
THEN ... END;
/* *************************
declassification
************************* */
downgrade_automatic(user1,obj,user2) =
PRE
user1 : users & user2 : users & obj : objects
/* user2 should be an active user, which means (global req.) at least one role empowered in */
& card(down.pol.empower(user2)) > 0
THEN ... END;
downgrade_trust(issuer,obj,user2) =
PRE
issuer : users & user2 : users & obj : objects
/* user2 should be an active user, which means (global req.) at least one role empowered in */
& card(down.pol.empower(user2)) > 0
THEN ... END;
END
Réflexion sur les résultats
La première réflexion sur cette modélisation repose sur la modélisation elle-même et les notions associées. En effet, à partir de ce modèle, nous avons pu mettre en évidence les différentes propriétés nécessaire à la bonne spécification d'une politique de déclassification. Ces notions sont présentées dans le mémoire, chapitre 3, section 3.5 :
- contrôle d'accès
- contrôle d'intégrité et contrôles de flux associés
- contrôle de la cohérence (consistency) suite à l'évolution de classifications
Deuxièmement, nous avons à partir de ce modèle présenté une abstraction des éléments de configurations de la politique de sécurité (Policy.mch, Metadata.mch) et de la politique de déclassification (Downgrading.mch) :
- gestion de la politique de sécurité : invariants, Empower, Sub_role
- contrôle de la politique pour l'intégrité : trust_meta et trust_meta_issuer
- contrôle de la politique de déclassification : événements, prédicat trust (ou is_permitted, dans le mémoire)
Troisièmement, bien que l'évaluation de la politique de sécurité via l'outil ProB fut impossible (boucle infinie due probablement au nombre important de possibilités sur les opérations, après plusieurs actions), nous avons également construit un logiciel pouvant gérer la configuration des différents paramètres du système et donc montrer la possiblité d'en concevoir un.
État des preuves
Petite légende :
- Les machines en noir sont validées à 100 %
- Les machines en orange ne sont pas validés mais sont jugées comme non cruciales (par exemple les implémentations)
- Les machines en rouge ne sont pas validés et sont jugées comme cruciales
- Les machines en vert ne sont pas validés mais sont supposées comme telles car les preuves non prouvées sont considérées comme vraies
Modèle Bell & La Padula (98 %)
Component TC POG nPO nUN %Pr B0C
BLPPolicy OK OK 18 6 66 -
Remaining proof status (Afficher/ Cacher)
- updateKnowledgePolicy#PO2: considered as true (18/01/2010)
- setEmpowerPolicy#PO1: considered as true (18/01/2010)
- setEmpowerPolicy#PO2: considered as true (18/01/2010)
- setAccess#PO1: considered as true (18/01/2010)
- setInf_level#PO1: considered as true (18/01/2010)
- polsetRoleLevel#PO1: considered as true (18/01/2010)
BLPPolicy_event OK OK 8 0 100 - BLPPolicy_i OK OK 1016 7 99 - Constants OK OK 0 0 - - Downgrading OK OK 5 0 100 - Downgrading_event OK OK 28 0 100 - Downgrading_i OK OK 34 5 85 - Metadatas OK OK 37 0 100 - Metadatas_event OK OK 0 0 - - Metadatas_i OK OK 117 1 99 - Model OK OK 25 0 100 - Model_event OK OK 0 0 - - Model_i OK OK 160 1 99 - Policy OK OK 31 11 64 -Remaining proof status (Afficher/ Cacher)
- addUser#PO3: considered as true (15/01/2010)
- addUser#PO4: considered as true (15/01/2010)
- addRole#PO2: considered as true (15/01/2010)
- addObject#PO4: considered as true (15/01/2010)
- addObject#PO5: considered as true (15/01/2010)
- updateKnowledge#PO3: considered as true (15/01/2010)
- updateKnowledge#PO4: considered as true (15/01/2010)
- setEmpower#PO3: considered as true (15/01/2010)
- setEmpower#PO4: considered as true (15/01/2010)
- setAccess#PO1: considered as true (15/01/2010)
- setAccess#PO2: considered as true (15/01/2010)
Policy_event OK OK 0 0 - -
Policy_i OK OK 643 2 99 -
Set OK OK 4 0 100 -
Set_seq OK OK 1 0 100 -
Set_seq_pow OK OK 2 0 100 -
tuples OK OK 1 0 100 -
tuples_time OK OK 1 0 100 -
Modèle DAC (97 %)
Component TC POG nPO nUN %Pr B0C
Constants OK OK 0 0 - -
DACPolicy OK OK 12 6 50 -
Remaining proof status (Afficher/ Cacher)
- UpdateKnowledgePolicy#PO2: considered as true (18/01/2010)
- addUserPolicy#PO3: considered as true (18/01/2010)
- addRolePolicy#PO3: considered as true (18/01/2010)
- setEmpowerPolicy#PO1: considered as true (18/01/2010)
- setEmpowerPolicy#PO2: considered as true (18/01/2010)
- setAccess#PO1: considered as true (18/01/2010)
DACPolicy_i OK OK 33 2 93 - Downgrading OK OK 3 0 100 - Downgrading_event OK OK 24 0 100 - Downgrading_i OK OK 31 5 83 - Metadatas OK OK 37 0 100 - Metadatas_event OK OK 0 0 - - Metadatas_i OK OK 117 1 99 - Model OK OK 25 0 100 - Model_event OK OK 0 0 - - Model_i OK OK 160 1 99 - Policy OK OK 31 11 64 -Remaining proof status: see Bell & La Padula
Policy_event OK OK 0 0 - -
Policy_i OK OK 643 2 99 -
Set OK OK 4 0 100 -
Set_seq OK OK 1 0 100 -
Set_seq_pow OK OK 2 0 100 -
tuples OK OK 1 0 100 -
tuples_time OK OK 1 0 100 -
Modèle RBAC (97 %)
Component TC POG nPO nUN %Pr B0C Constants OK OK 0 0 - - Downgrading OK OK 3 0 100 - Downgrading_event OK OK 24 0 100 - Downgrading_i OK OK 29 5 82 - Metadatas OK OK 37 0 100 - Metadatas_event OK OK 0 0 - - Metadatas_i OK OK 117 1 99 - Model OK OK 25 0 100 - Model_event OK OK 0 0 - - Model_i OK OK 160 1 99 - Policy OK OK 31 11 64 -Remaining proof status: see Bell & La Padula
Policy_event OK OK 0 0 - - Policy_i OK OK 643 2 99 - RBACPolicy OK OK 26 5 80 -Remaining proof status (Afficher/ Cacher)
- UpdateKnowledgePolicy#PO1: considered as true (19/01/2010)
- addRolePolicy#PO7: considered as true (19/01/2010)
- setEmpowerPolicy#PO2: considered as true (19/01/2010)
- setEmpowerPolicy#PO3: unknown: considered as true (19/01/2010)
- setAccess#PO1: considered as true (19/01/2010)
RBACPolicy_i OK OK 102 2 98 -
Set OK OK 4 0 100 -
Set_seq OK OK 1 0 100 -
Set_seq_pow OK OK 2 0 100 -
tuples OK OK 1 0 100 -
tuples_time OK OK 1 0 100 -


Accueil
