Politique de sécurité dans FoCaLiZe
Politique de sécurité dans FoCaLiZe
MEMOIRE
Présenté pour l’obtention du diplôme de Magister
En : Informatique
Spécialité : Ingénierie de logiciels et Génie des Procédés.
Thème
FORMALISATION ET IMPLANTATION
D’UNE POLITIQUE DE SECURITE DANS LE
SYSTÈME FoCaLiZe
Remerciements
Je remercie tous les membres du jury pour avoir accepté d’examiner ma thèse.
Merci à toute ma famille pour leur soutien indéfectible, à mon ami et collègue BOUBEZARI
Abderrahim et à toutes les personnes qui ont participé de près ou de loin à la réalisation de
cette thèse.
2
Résumé
Résumé
Tout système informatique doit avoir une politique de sécurité gérant les différents contrôles
et assurant la confidentialité, l’intégrité et la disponibilité de l’information. La mise en place
d’une politique de sécurité se base sur la formalisation mathématique et logique de ses règles.
Pour cela, nous disposons de l’atelier FoCaLiZe, un environnement de programmation
certifiée basé sur la notion de preuve formelle. Dans ce document, nous proposons une
démarche de formalisation et d’implantation de la politique de sécurité Clark-Wilson dans le
système FoCaLiZe. Notre démarche permet de spécifier les contraintes et règles de sécurité
de cette politique en propriétés et théorèmes FoCaLiZe, et de prouver la sureté de l’évolution
du système modélisé, et ce en utilisant l’outil de preuve automatique Zenon associé à
FoCaLiZe.
Mots-clés :
Politique de sécurité, Clark-Wilson, méthodes formelles, preuve, Coq, Zenon, FoCaLiZe
3
Sommaire
Sommaire
Introduction .............................................................................................................................. 5
Bibliographie........................................................................................................................... 93
4
Introduction
Introduction
Tout système informatique doit avoir une politique de sécurité adjacente décrivant les
règles de sécurité qui doivent être respectées lors de sa mise en place.
Une politique de sécurité est l’élaboration d’un ensemble de règles d’accès en
lecture et/ou écriture aux données. Ces règles doivent déterminer quelles sont les
données à sécuriser, de quelle façon elles seront protégés et comment les gérer. Les
politiques de sécurité se divisent entre deux grandes catégories : de la confidentialité
de données (HRU [HRU76], BLP [BLP73]) qui protègent les données contre toute
violation et lecture non autorisée, et de l’intégrité de données (Biba [Bib77], Clark-
Wilson [CW87]) qui interdisent toute modification malveillante ou accidentelle des
données.
La mise en place des politiques de sécurité demande une grande discipline, depuis
les spécifications formelles réalisées, jusqu’aux preuves des propriétés et des
théorèmes qui doivent être réalisées. Pour atteindre ces buts, les équipes du LIP6,
de l’INRIA et du CNAM ont développé et utilisé un atelier d’aide au développement
de “bibliothèques certifiées”, appelé “FoCaLiZe” [FOC06]. Cet atelier permet de
spécifier, programmer et prouver que ces programmes sont corrects vis-à-vis des
spécifications du système en question.
Notre objectif est d’utiliser le système FoCaLiZe pour formaliser et implanter une
politique de sécurité. Pour cela, nous avons adopté une démarche pour montrer
comment, avec cet atelier nous vérifions les propriétés correspondant aux différentes
règles de la politique de sécurité et comment nous appliquons des preuves formelles
sur la sûreté, la cohérence et la validité de notre formalisation.
Cette démarche passe d’abord par la traduction des différentes règles de la politique
de sécurité choisie (Clark-Wilson) dans le système FoCaLiZe, puis par l’utilisation
des techniques de vérification de preuve formelle offertes par le système. Pour cela,
nous modélisons l’ensemble des entités (passives et actives) du système par une
hiérarchie d’espèces où toute règle de sécurité sera transcrite en une propriété ou un
théorème à prouver dans les espèces dérivées. Ce processus de preuve se base
essentiellement sur les outils d’aide à la preuve de FoCaLiZe, Zenon [DOL04] et
COQ [COQ97].
-5-
Introduction
Après avoir obtenu un cadre générique constitué d’une hiérarchie d’espèces, elles
seront instanciées par des collections pour implanter un exemple réel. Nous avons
montré comment le système modélisé peut passer d’un état à un autre en exécutant
des ‘’requêtes’’ émises par des ‘’sujets’’ sur des ‘’objets’’, et en calculant les
‘’décisions’’ correspondant aux paramètres de sécurité.
-6-
Chapitre I Le système FoCaLiZe
Chapitre I
Le système FoCaLiZe
Introduction
L’intérêt principal de la programmation certifiée [BOU00] est de donner des
preuves mathématiques sur la consistance, la sûreté et la cohérence d’un système
informatique. Pour cela, on doit disposer d’un environnement de spécification,
programmation et de preuve que ces programmes sont corrects vis-à-vis les
spécifications du système en question. Pour atteindre ce but, les équipes du
laboratoire LIP6, de l’INRIA et du CNAM ont développé un atelier d’aide au
développement de “bibliothèques certifiées”. Cet atelier porte le nom “FoCaLiZe”
[FCLr09].
L’atelier FoCaLiZe est un système qui permet à la fois d’écrire des programmes
et de prouver certaines propriétés qu’ils vérifient. Il s’appuie sur le langage OCaml
[REM02] (un environnement de programmation fonctionnelle) pour la partie
calculatoire et sur Coq [COQ97], [Coq10] (un environnement pour développer des
preuves formelles) pour la partie certification.
L’objectif principal de l’atelier FoCaLiZe est de concevoir un environnement de
développement intégré logiquement permettant de prouver les propriétés et les
théorèmes introduits par le programmeur pour obtenir des implantations correctes et
cohérentes.
Le développement de l’atelier FoCaLiZe a été initié en 1998 par T.Hardin et
R.Rioobo avec S.Boulmé sous le nom de projet FOC (Formel OCaml et Coq)
[FOC03], [RIO03], [PRE03] pour réaliser d’une manière incrémentale un environnement
de calcul formel certifié en partant d’une spécification abstraite jusqu'à d’une
implantation concrète formellement vérifiée, dans cette version les preuves des
différentes propriétés et théorèmes étaient ‘prédestinées’ spécifiquement au Coq. La
version suivante porte le nom FOCAL [FOC06] où un prouveur automatique appelé
Zenon [DOL04], [BDD07], [DOL10], a été introduit et qui utilise une spécification de
première ordre en entré et retourne une preuve formelle complète en sortie
directement vérifiable en COQ. La dernière version du compilateur, appelé FoCaLiZe
[FCLr09], a été distribuée et est disponible à l'adresse http://focalize.inria.fr/. Dans
-7-
Chapitre I Le système FoCaLiZe
cette version, des améliorations syntaxiques et sémantiques ont été introduites afin
d’alimenter la bibliothèque par des nouvelles structures ‘réutilisables’ comme la
notion des ensembles finis avec la preuve de toutes les propriétés et théorèmes
définis.
Dans ce chapitre, nous allons présenter les principaux concepts du langage
FoCaLiZe, en utilisant plusieurs exemples de développement concret.
I. Concepts de Focalize
Les deux principaux constructeurs de l’environnement FoCaLiZe sont l’espèce et la
collection. Les espèces sont utilisées au niveau conception (spécification), et les
collections servent à implémenter des espèces complétées.
Plus précisément, un développement FoCaLiZe est une hiérarchie d’espèces qui
sont soumis à une succession de raffinements (principalement héritage et
paramétrage) pour aboutir à des espèces complétement définies.
Une espèce regroupe un ensemble de méthodes de trois types (type support,
méthodes calculatoires et méthodes logiques) :
- le type support donne la représentation des entités manipulées par l’espèce ;
- des déclarations de fonctions, ou signatures, dont on ne connait que le type et
qui seront définies plus tard. Ces déclarations peuvent être utilisées dans la
définition d’autres méthodes ;
- des définitions de fonctions, correspondant à l’implémentation d’opérations sur
les entités de l’espèce ;
- des propriétés exprimant des conditions que les entités de l’espèce doivent
satisfaire. Comme dans le cas des signatures, c’est une méthode déclarée
qu’il faudra ensuite compléter par une preuve ;
- des théorèmes qui correspondent à des propriétés munies de leurs preuves.
On remarque donc que les méthodes peuvent être soit déclarées (signatures et
propriétés) soit définies (fonctions et preuves).
-8-
Chapitre I Le système FoCaLiZe
Cette instruction définit une abréviation pour remplacer toutes les occurrences
de type (int* int* int* int* int) par le nom date choisi par le programmeur, et ce
dans un souci de lisibilité et de facilité d’écriture. Il faut l’introduite au niveau
top-level de la spécification (en dehors des espèces) pour pouvoir utiliser le
type date dans la spécification des espèces ultérieurement.
2- Types énumérés : Cette définition de type permet de rassembler une liste bien
déterminée de valeurs différentes pour bâtir de nouveaux types. Par exemple,
nous pouvons définir la notion de couleur, en se basant sur les trois valeurs
rouge, vert et jaune :
type couleur = | Rouge | Vert | Jaune ;;
-9-
Chapitre I Le système FoCaLiZe
representation = int*int ;
- 10 -
Chapitre I Le système FoCaLiZe
Dans cet exemple, l’espèce Point permet de spécifier les points du plan dans un
repère orthogonal.
La représentation (int*int) de l’espèce Point définit la structure de données des
instances de l’espèce, elle permet de représenter des paires d’entiers modélisant
l’abscisse (le composant gauche) et l’ordonnée (le composant droit) d’un point.
Dans les autres méthodes, qui seront décrites dans la suite, on remarquera
l’utilisation du mot clé ‘Self’ pour faire référence au type support.
Signature
La déclaration d’une fonction, introduite par le mot clé signature est un énoncé de
son nom, le type de ses paramètres (s’ils existent) et du type du résultat. C’est une
fonction qui doit encore être définie et implantée lors du raffinement des espèces.
signature distance : Self -> Self -> float ;
La signature distance représente donc une fonction, qui à deux points (paires de int),
associe un réel. Self représente le type support de l’espèce courante Point.
- 11 -
Chapitre I Le système FoCaLiZe
Fonctions
Une définition de fonction, introduite par le mot clé let, fournit l’implémentation d’une
fonction. Elle peut être nouvellement définie ou être une implémentation d’une
signature précédemment donnée. Dans le cas d’une redéfinition d’une méthode, la
dernière définition donnée sera prise en compte et donc toutes les définitions
précédentes seront supprimées.
Le corps de la fonction peut utiliser d’autres méthodes (définies ou déclarées).
L’intérêt principal de ce type de définition est d’énoncer un algorithme.
let egale (a : Self, b : Self) : bool =
if ((x(a) = x(b)) && (y(a) = y(b)) then true else false;
Dans cet exemple, nous avons défini la fonction ‘egale’ en donnant son type et son
corps. Elle est paramétrée par deux éléments de type ‘Self’ et retourne un résultat de
type booléen vérifiant la superposition des deux points en paramètre, la valeur de
l’égalité entre deux points quelconques dépend de l’égalité de leurs ordonnées et de
leurs abscisses.
Donc la fonction définie ‘egale’ permet de décider de l’égalité entre deux points de
notre espèce Point. On remarque à ce niveau que les méthodes ‘x’ et ‘y’ ne sont pas
encore définies.
Propriétés
Une propriété est une formule du premier ordre, introduite par le mot clé property. A
ce niveau la preuve n’est pas encore fournie, c’est une déclaration qui devra être
complétée ultérieurement.
species Point =
…
signature appartient_axe_x : Self -> bool ;
property appartient_axe_x_spec : all p : Self ,
appartient_axe_x (p) <-> (y(p) = 0 ) ;
…
end;;
- 12 -
Chapitre I Le système FoCaLiZe
Théorème
Un théorème est introduit par le mot clé theorem suivi par un énoncé et une preuve
formelle que cet énoncé est vérifié dans le contexte de l’espèce. La preuve sera
traitée par FoCaLiZe et ultimement vérifiée par Coq.
species Point =
…
theorem egale_reflexive : all x : Self, egale (x , x)
proof = by definition of egale ;
…
End ;;
I.6- Dépendances
Les méthodes d’une espèce peuvent se référencer entre elles. Lorsqu’une
méthode m1 contient un appel à une méthode m2 de l’espèce courante (ou d’une
autre espèce), on dira que m1 dépend de m2. Dans le développement FoCaLiZe, la
vérification des dépendances est obligatoire (automatiquement réalisée par le
système pendant la compilation FoCaLiZe) pour assurer la cohérence et l’absence
de cycles.
On distingue deux types de dépendances :
- 13 -
Chapitre I Le système FoCaLiZe
I.7- Héritage
Les espèces peuvent ne pas être isolées les unes par rapport aux autres, mais
regroupées dans une hiérarchie, pouvant avoir plusieurs racines, et qui exprime le
fait qu’une structure mathématique est le plus souvent définie à partir de structures
préexistantes, en l’enrichissant de nouvelles opérations et/ou propriétés. Ce
mécanisme s’apparente ainsi à l’héritage des langages orientés objet. Avec ce
mécanisme d’héritage, on pourra définir à n’importe quel moment une nouvelle
espèce à partir d’une ou plusieurs autres espèces (héritage multiple). Dans ce cas,
on pourra utiliser directement les méthodes et propriétés déclarées et/ou définies
sans les redéclarer et/ou redéfinir. Le mécanisme d’héritage permet de redéfinir des
méthodes à condition de conserver leurs typages. De même on peut modifier la
preuve d’un théorème, dont on conserve l’énoncé.
Les nœuds de plus haut niveau de la hiérarchie correspondent à l’étape de
spécification du modèle tandis que les niveaux inferieurs correspondent à l’étape de
l’implémentation. Avec ce mécanisme, on se rapproche étape par étape et d’une
manière progressive de l’implémentation complète.
La notion d’héritage dans le système FoCaLiZe a deux objectifs principaux à savoir :
- La définition des nouvelles espèces plus complexes avec des nouvelles
fonctionnalités à définir au fur et à mesure tout en gardant celles qui ont été
définies au niveau de ses parents avec la possibilité d’en redéfinir certaines.
- Avec ce mécanisme d’héritage, on se rapproche de plus en plus vers un
modèle ne contenant que des espèces complètes où toutes les fonctions sont
définies et toutes les propriétés sont prouvées.
- 14 -
Chapitre I Le système FoCaLiZe
La contrainte la plus importante que le développeur FoCaLiZe doit respecter est que
le type des méthodes héritées ne doit pas être modifié pendant l’opération de
redéfinition, « cette exigence est le prix à payer pour s’assurer de la cohérence du
modèle FoCaLiZe et donc du logiciel développé» [Phil 11].
Soit l’espèce Point_concret suivante :
Exemple 2 :
species Point_concret =
inherit Point ;
let new_point( a:int , b:int) = (a , b) ; (* constructeur *)
let x(p) = fst(p) ;
let y(p) = snd(p) ;
let deplace (p : Self , a:int , b:int) = ( x(p) + a , y(p) + b ) ;
let affiche_point ( p : Self) = " X = " ^ string_of_int(x(p)) ^ " Y = " ^
string_of_int(y(p)) ;
let egale ( p1 , p2 ) = ( x(p1) = x(p2) ) && ( y(p1) = y(p2) ) ;
…
end ;;
Comme le système FoCaLiZe permet l’héritage multiple, une méthode peut être
définie plusieurs fois dans des parents différents, dans ce cas l’espèce en question
hérite de la méthode de l’espèce parente la plus à droite dans la clause ‘inherit’
pendant la définition de l’espèce.
- 15 -
Chapitre I Le système FoCaLiZe
Espèce complète
Une espèce est dite compète si toutes ses méthodes sont définies, en d’autres
termes :
- la représentation est concrète
- toutes les déclarations sont définies
- chaque propriété est prouvée
Interface
Chaque espèce est associée à une interface dont toutes les méthodes ne sont que
déclarées. Elle permet de disposer de toutes les fonctions et propriétés de l’espèce, sans se
préoccuper des détails d’implémentation. Elle est donc obtenue en :
- rendant la représentation abstraite
- conservant les signatures et propriétés
- transformant les fonctions en signatures, et les théorèmes en propriétés.
Bien qu’une interface ait le même nom que l’espèce sous-jacente, il ne peut y avoir de
confusion dans la mesure où une interface n’est utilisée que pour déclarer un paramètre de
collection.
Collection
Une collection joue le rôle dual d’une interface, il s’agit d’une instance d’une espèce
complète.
Une collection est construite à partir d’une espèce complète par abstraction de sa
représentation. Les entités d’une collection ne peuvent être directement manipulées
ou créées (type non accessible), elles ne peuvent être manipulées que par les
méthodes des espèces implémentées.
Notons aussi, que contrairement aux interfaces, on peut créer plusieurs collections
pour la même espèce. On impose cependant deux restrictions aux collections :
- On ne peut pas hériter d’une collection. Celle-ci représentant une structure
mathématique particulière, elle ne peut en effet pas être raffinée.
- Une collection est vue à travers l’interface sous-jacente. On peut appeler des
méthodes de la collection, mais on n’en connaît pas la définition.
collection Point_concret_collection =
implements Point_concret; end ;;
- 16 -
Chapitre I Le système FoCaLiZe
I.9- Paramétrage
Le mécanisme de paramétrisation permet de construire de nouvelles espèces à partir
d’espèces existantes. On distingue deux types de paramétrage, le paramétrage par
collection et le paramétrage par entité :
Exemple 3 :
species Cercle (P is Point ) =
representation = (P * float) ;
signature centre : Self -> P ;
signature rayon : Self -> float ;
…
End ;;
Le paramètre de collection P est introduit par son nom suivi un nom d’interface Point
(portant le même nom que l’espèce correspondante).
Dans cet exemple, le paramètre P nous permet de construire la signature de la
méthode centre, qui à tout argument de l’espèce cercle retourne le point
correspondant à son centre.
De même, la fonction rayon de signature permet de récupérer son rayon.
- 17 -
Chapitre I Le système FoCaLiZe
différentes. Dans ce cas on aura besoin non seulement de sa valeur mais aussi sa
représentation et des méthodes et opérations agissant sur le type de ce paramètre.
Un tel paramètre est un paramètre appelé entité, le paramètre sera instancié par une
entité de collection, collection qui doit également être déclarée en tant que paramètre
de collection dans l'espèce.
Exemple 4 :
species Point_projete (P is Point, p1 in P)=
inherit Point ;
signature projeter : Self -> Self ;
…
end;;
Avec cet exemple, nous avons défini l’espèce des points projetés ‘Point_projete’
dotée de la fonction ‘projeter’ de type 'Self -> Self’ qui projette un point par rapport
l’ ‘’entité’’ en paramètre et retourne un autre point.
Après avoir présenté les différentes briques de base de l’atelier FoCaLiZe, et après
la mise en place des différents exemples accompagnant ces briques, nous traçons le
schéma suivant pour illustrer les notions d’héritage, paramétrage et encapsulation
(création de collections) entre les espèces présentées :
- 18 -
Chapitre I Le système FoCaLiZe
species Point=
representation = (int*int);
…
…
end;;
… end;;
end ;;
collection Point_concret_collection =
implements Point_concret ;
end ;;
- 19 -
Chapitre I Le système FoCaLiZe
- 20 -
Chapitre I Le système FoCaLiZe
Arbre
File.fcl Compilation de syntaxe abstraite
focalizec
Héritage, dépendances
Hiérarchie FoCaLiZe
bien typée
Exécu-
File.zv Génération de codes File.ml Compilation table
ocamlc
Compilation
zvtov
- 21 -
Chapitre I Le système FoCaLiZe
COQ
Développé par le projet LogiCal à INRIA et au LRI (université d’Orsay), il est basé sur
la théorie des types (types dépendants et types inductifs). COQ est un système
d’aide à la preuve, c’est une extension du noyau purement fonctionnel d’OCAML. Il
était donc assez naturel de le choisir comme langage cible pour la partie spécification
et certification de FoCaLiZe. C’est à COQ que revient la tâche de vérifier les preuves
fournies dans un code source FoCaLiZe.
Un script Coq est la transcription du modèle défini en FoCaLiZe. Il est accompagné
de l’ensemble des propriétés énoncées munies de suggestions de preuves, ces
preuves doivent être vérifiées par Coq pour être certifiées correctes.
Exemple
Démontrons avec Coq la propriété suivante [FCLt09]:
property finite :
all f : ( Self -> basics # bool ),
f(nil) ->
(all l : Self , f(l) -> all v : Val , f( cons (v, l))) ->
all l : Self , f(l) ;
Cette propriété est définie dans le tutorial du FoCaLiZe-0.6.0, plus exactement dans
l’espèce 'FiniteList’ des listes finies. Elle exprime le principe de la démonstration
par récurrence. La démonstration avec Coq est comme suit :
proof of finite =
coq proof definition of nil , cons
{* Proof .
intros .
unfold abst_cons , abst_nil , cons , nil in *.
induction l.
trivial .
apply H0; apply IHl.
Qed. *} ;
- 22 -
Chapitre I Le système FoCaLiZe
Le mot clé ‘coq proof’ indique que la démonstration sera attachée directement au
Coq sans aucune assistance par Zenon.
Pour avoir plus d’explications sur cet exemple et même sur les notions des listes et
listes finies et leurs propriétés, le tutorial de FoCaLiZe0.6.0 est disponible sur le site
Web de INRIA (http://focalize.inria.fr/documentation/focalize-0.6.0_tutorial.pdf)
Zenon
La production de preuve en Coq s’avère difficile. Il faut d’une part maitriser l’outil, et il
faut ensuite construire la preuve ‘à la main’.
L’introduction de l’outil Zenon a permis de simplifier la tâche du programmeur, en
générant automatiquement les scripts de preuve, qui seront ensuite vérifiés par Coq.
Une preuve Zenon est exprimée en FoCaLiZe Proof Langage, sous forme d’une suite
d’indications des preuves, semblables aux mécanismes dans Coq, qui sont de trois
types :
1. by hypothesis : utilisation d’une hypothèse
2. by property : utilisation d’une propriété déjà prouvée
3. by step : utilisation d’un niveau de preuve précédent
Exemple :
- 23 -
Chapitre I Le système FoCaLiZe
Conclusion
- 24 -
Chapitre II La Sécurité informatique
Chapitre II
La Sécurité informatique
Introduction
La sécurité est une problématique majeure en informatique, il devient aujourd’hui
très important de pouvoir contrôler la circulation de l’information dans un système
d’information. Tout en garantissant l’accès aux utilisateurs autorisés, il faut protéger
les ressources contre toute révélation, modification ou destruction tant accidentelle
que malintentionnée. D’une manière générale, la sécurité informatique assure que
les ressources matérielles et logicielles ne sont utilisées que dans le cadre prévu.
Sécuriser un système informatique consiste donc à mettre en place l’ensemble des
moyens techniques, organisationnels, juridiques et humains nécessaires pour
conserver, rétablir, et garantir la sécurité de l’information.
La sécurité informatique se base généralement sur les concepts suivants :
actives du système.
Afin d’atteindre ces objectifs de sécurité, il est nécessaire de mettre en place une
politique de sécurité applicable à l’ensemble des entités (passives et actives) du
système.
- 25 -
Chapitre II La Sécurité informatique
I. Politiques de sécurité
Une politique de sécurité est un ensemble de règles de gestion, protection et
diffusion de l’information pour assurer la sécurité d’un système. Des modèles de
sécurité proposent une représentation formelle de ces politiques, permettant les
preuves sur la sécurité d’une application.
Il existe dans la littérature plusieurs types de politique de sécurité selon le domaine
d’application (militaire, gouvernemental, commercial et industriels …etc) à
savoir [LUD07]:
Politiques basées confidentialité :
Politique de contrôle d’accès à l’information :
- High water mark (marée haute), Weissman, 1969
- Matrice d’accès, Harrizon, Ruzzo et Ullman (HRU), 1973 ->1976
- Multi-niveaux (ou militaire), Bell et LaPadula (BLP), 1975
- Muraille de Chine, Brewer et Nash, 1989
Politique de contrôle du flux d’information :
- Denning, 1976
Politique de non-interférence :
- Goguen et Meseguer, 1982
Politiques basées intégrité :
- Biba, 1977
- Clark et Wilson, 1989
Politique basée disponibilité :
- Ressource allocation, Millen, 1992
Dans les politiques de sécurité de contrôle d’accès, il est donc primordial de définir :
- D’une part l’ensemble des entités passives (objets) manipulables
du système et l’ensemble des entités actives (sujets) qui changent le
système d’un état à un autre tout en manipulant les objets.
- D’autre part de quelle façon les sujets accèdent aux objets. Dans
ce contexte on cite les deux types de politiques de sécurité
suivantes [HAD05] :
o Les politiques discrétionnaires (DAC : Discretionary
Access Control) Ces politiques accordent au sujet propriétaire
- 26 -
Chapitre II La Sécurité informatique
Dans ce qui suit nous allons présenter succinctement deux politiques de sécurité de
la confidentialité de données (HRU et BLP) et deux autres de l’intégrité de données
(Biba et Clark-Wilson).
- 27 -
Chapitre II La Sécurité informatique
La politique de sécurité HRU est une extension de la politique Lampson avec l’ajout
de la notion de ‘commandes’ qui peuvent être appliquées sur la matrice d’accès. Les
seules opérations ‘élémentaires’ possibles sont les suivantes [ABO03]:
Enter a into M(s, o): l’ajout d’un droit d’accès ‘a’ au sujet ‘s’ sur l’objet ‘o’.
Delete a from M(s, o) : la suppression d’un droit d’accès ‘a’ du sujet ‘s’ sur l’objet ‘o’.
Create subject s: la création d’un nouveau sujet ‘s’.
Destroy subject s : la suppression du sujet ‘s’.
Create object o : la création d’un nouveau objet ‘o’.
Destroy object o: la suppression de l’objet ‘o’.
Le tableau suivant [SD01] décrit les différentes opérations élémentaires avec leurs
conditions d’application et les nouveaux états du système résultants après exécution:
- 28 -
Chapitre II La Sécurité informatique
Une Commande d’exécution d’une de ces opérations change le système d’un état à
un autre tout en passant par la vérification des droits. Une commande HRU est de la
forme suivante, avec la partie conditionnelle qui est facultative :
- 29 -
Chapitre II La Sécurité informatique
command c(x1,…,xk)
if a1 in M [s1,o1] and a2 in M [s2,o2] .. an in M[sm,om]
then op1; op2;..opk;
end
Telle que :
c : est le nom de la commande ;
xi : les paramètres de la commande ;
ai : les droits d’accès.
opj : les opérations élémentaires.
Nous donnons un exemple de commande HRU dans laquelle le sujet ‘Bob’ veut
donner le droit de lecture d’un objet ‘Dictionnaire’ à un autre sujet ‘Jaume’, la seule
condition qui doit être satisfaite est que le sujet ‘Bob’ doit être le propriétaire de
l’objet ‘Dictionnaire’, formellement on écrit :
command DONNER-Lecture (Bob, Jaume, Dictionnaire)
if own in M [Bob, Dictionnaire]
then enter read into M [Jaume, Dictionnaire]
end
Cette politique de sécurité est très simple à mettre en œuvre, elle définit bien, d’une
façon formelle, la notion d’accès des sujets aux objets.
D’autre part, remarquons dans cette politique de sécurité, que tous les objets ont le
même niveau de sécurité (pas de différence entre les objets), de même pour les
sujets (pas de niveaux hiérarchiques). Par contre la notion de l’intégrité de
l’information n’été pas traitée. Et Finalement cette politique de sécurité de type DAC
ne permet pas d’exprimer les interdictions et les obligations [ABO03].
Formellement, une classe d’accès est associée à chaque sujet et objet, et l’ensemble
des classes est muni d’une relation de dominance (ordre partiel ≥) qui lui confère une
structure de treillis [DEN 76].
- 31 -
Chapitre II La Sécurité informatique
- B= { b = (s, o, a)} l’ensemble des accès courants ‘a’ que le sujet ‘s’
possède actuellement sur l’objet ‘o’,
- et la fonction f :S ∪O→C de classification qui, à un sujet ou à un objet
retourne son niveau de sécurité.
L’ensemble des états du système est défini par les triplets E= {e = (B, M, f)}.
Les deux propriétés suivantes ont été définies afin de formaliser, respectivement, les
deux restrictions ‘No read up’ et ‘No write down’ :
- Propriété simple : ∀s ∈ S , o ∈ O : ( s, o, lire) ∈ B ⇒ f ( s ) ≥ f (o).
- Propriété étoile : ∀s ∈ S , o ∈ O : ( s, o, écrire) ∈ B ⇒ f (o) ≥ f ( s ).
Une autre propriété (discrétionnaire) définie, consiste à garantir que tout accès
courant doit être un élément de la matrice M : ∀( si, oj , a ) ∈ B ⇒ a ∈ M [i, j ].
Un état du système est dit ‘sûr’ si et seulement si les propriétés précédentes sont
satisfaites.
Ces propriétés permettent d’énoncer le Théorème Basique de la Sécurité (BST),
garantissant la sécurité d’un système.
« Les propriétés simple, étoile et discrétionnaire sont vérifiées pour tout triplet de B »
La politique de Bell et Lapadula renforce, d’une façon formelle, la notion d’accès des
sujets aux objets par la notion de niveau de sécurité (confidentialité) de chaque entité
(renforcement de la politique HRU).
de quelle façon ces sujets doivent être déterminés [LAN81]. Le contrôle de ses ‘sujets
de confiance’ reste, aussi, un point très important à discuter.
John Mclean [MCL90] a critiqué le théorème basique de sécurité défini par Bell et
Lapadula. Il a démontré, en utilisant le système de calcul formel Z, que ce théorème
ne garantit pas la sécurité du système du fait qu’il n’impose aucune restriction sur
l’ensemble des transitions. Mclean a proposé une extension de la politique de Bell et
Lapadula en contrôlant l’ensemble des transitions.
Un autre point concernant cette politique de sécurité est que Bell et Lapadula n’ont
pas proposé d’axiomes gérants les objets multi-niveaux. La hiérarchisation des
objets a été introduite dans [BLP74] mais elle reste toujours très restrictive [LAN81].
- 33 -
Chapitre II La Sécurité informatique
Grace à ces deux règles, Biba a empêché la remontée des informations vers des
objets ou des sujets de plus haut niveau. Par contre ces deux règles sont très
restrictives, aussi Biba a proposé une alternative plus flexible pour préserver
l’intégrité [HAD05] tout en modifiant le niveau d’intégrité des sujets et objets après
exécution d’une opération de lecture ou écriture:
- Low water mark pour les sujets : ce principe sert à renforcer le ‘No write up’ avec
une dégradation du niveau d’intégrité d’un sujet s tout en lui donnant la possibilité de
lecture des objets o de niveau plus bas que le sien. Le nouveau niveau du sujet est
ramené au minimum de f(s) et f(o).
- Low water mark pour les objets : ce principe sert à renforcer le ‘No read down’ avec
une dégradation du niveau d’intégrité d’un objet o tout en donnant à un sujet s de
niveau inférieur la possibilité d’écriture dans cet objet. Le nouveau niveau de l’objet
ramené au minimum de f(s) et f(o).
Cette politique a été conçue par David D.Clark et David R.Wilson en 1987
[CW87] pour spécifier et analyser les politiques de sécurité d’intégrité de données et
surtout dans le domaine commercial. Elle est basée essentiellement sur les points
suivants :
- La certification de toute action entreprise dans le système ;
- La traçabilité et journalisation de tout évènement déclenché dans le système ;
- La séparation des pouvoirs entre tous les sujets du système.
Par rapport aux politiques précédemment présentées, les objets ne sont pas
caractérisés par leurs niveaux de sécurité mais par l’ensemble des actions (de
- 34 -
Chapitre II La Sécurité informatique
confiance) qui peuvent manipuler ces objets, et les sujets sont caractérisés par
l’ensemble des actions qu’ils peuvent exécuter.
- 35 -
Chapitre II La Sécurité informatique
Les règles de la politique de sécurité sont de deux types, des règles de certification
afin d’assurer les principes de transformation correcte et de séparation des fonctions,
et des règles de mise en œuvre spécifiant au système les contrôles à effectuer.
- 36 -
Chapitre II La Sécurité informatique
- 37 -
Chapitre II La Sécurité informatique
- 38 -
Chapitre II La Sécurité informatique
- 39 -
Chapitre II La Sécurité informatique
Conclusion
Pour sécuriser un système informatique il faut mettre en œuvre une politique de
sécurité décrivant toutes les règles de gestion de contrôle toutes les propriétés qui
doivent être satisfaites pour que système soit saint, cohérant et sûr. Les politiques de
sécurité se devisent, selon le mode d’accès, entre deux grandes catégories : DAC
pour les modèle discrétionnaires et MAC pour les modèle obligatoires.
Ainsi, les politiques multi-niveaux affectent aux objets et aux sujets des niveaux non-
modifiables par les sujets du système, et donc qui limitent leur pouvoir de gérer les
accès aux données qu’ils possèdent.
En termes d’objectif, les politiques de sécurité se devisent entre deux familles : les
politiques de sécurité qui s’intéressent à la confidentialité des données pour protéger
ces dernières contre toute violation, et des politiques de sécurité d’intégrité de
données qui s’intéressent à la protection des ces dernières contre toutes modification
malveillante ou accidentelle. Les politiques présentées, de HRU et Bell-LaPadula
visant à assurer la confidentialité, tandis que celles de Biba et Clark-Wilson assurent
l’intégrité.
La politique de sécurité de Bell et Lapadula renforce la politique HRU avec
l’introduction de la notion des niveaux de sécurité pour chaque entité (active ou
passive) dans le système, une formalisation mathématique et logique de cette
politique de sécurité a été proposée et une implantation dans le système FoCal a été
réalisée.
- 40 -
Chapitre II La Sécurité informatique
Nous présenterons dans le chapitre suivant, une étude plus détaillée de la politique
de Clark-Wilson, ainsi qu’une formalisation dans l’atelier FoCaLiZe. Ce choix est
motivé pour les raisons suivantes :
Il est à noter que la politique de sécurité du Bell et lapadula (qui est une
politique de confidentialité de données) a été bien formalisée et implantée
dans l’atelier FoCaL. On a préféré de choisir une politique basée intégrité de
données, qui est celle de Clark et Wilson.
Cette politique de sécurité est plus apte et plus adaptable aux domaines
commerciaux par rapport à celles citées avant.
- 41 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
Chapitre III
Introduction
La politique de sécurité de Clark-Wilson met en jeu des ’’agents’’ (utilisateurs,
programmes,…) susceptibles d’exécuter certaines ’’tâches’’ (création, suppression,
modification, …) sur certaines ’’ressources’’ (fichiers, données,…) tout en assurant
les contraintes d’intégrité mises sur ces dernières.
Pour la formalisation de cette politique de sécurité dans l’environnement FoCaLiZe,
nous avons défini un ensemble d’espèces qui pourrait être par la suite implanté selon
les modèles envisagés. Quelques espèces définies ici héritent des espèces
prédéfinies de la librairie FoCaLiZe (présentées en annexe ‘A’).
Dans ce chapitre nous allons proposer une formalisation de la politique de sécurité
de Clark-Wilson et décrire l’ensemble des espèces de notre modèle générique, leurs
comportements essentiels, propriétés, méthodes et quelques théorèmes les plus
importants avec leurs preuves.
Pour cela, la démarche suivante a été suivie :
1- L’ensemble des entités passives et actives (agents, tâches et ressources) du
système seront modélisées par des espèces FoCaLiZe.
2- L’assemblage de ces entités dans une nouvelle espèce modélisant la
structure générale du système.
3- Toutes les relations et interactions entre ces entités seront modélisées par
d’autres espèces.
4- Toute demande d’exécution d’une tâche émise par un agent est une ‘requête’
qui sera modélisée par une nouvelle espèce, ces requêtes seront lancées par
une fonction ‘transition’ définie dans l’espèce du ‘système’ puis les réponses
sont modélisées par l’espèce des ‘décisions’ qui changent le système d’un
‘état’ à un autre tout en préservant quelques conditions et contraintes émises
sur la cohérence des états du système.
5- Des propriétés et théorèmes seront définis et prouvés pour modéliser
l’ensemble des règles de sécurité définies par Clark et Wilson.
- 42 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
I. Modèle générique
Dans cette section, nous allons spécifier un cadre générique de notre politique de
sécurité choisie. L’ensemble des espèces créées dans notre démarche s’organise
comme suit :
I.1. Paramètres
L’espèce utilisée la plus basique dont vont hériter de nombreuses espèces,
est Setoid. C’est un ensemble non vide d’éléments, muni d’une relation
d’équivalence « transitive, réflexive, symétrique » égale. Nous utilisons aussi
l’espèce S_setoid qui hérite de l’espèce Setoid.
species Setoid = inherit Basic_object;
...
end ;;
species S_Setoid = inherit Setoid;
representation = int * string ;
...
end ;;
- 43 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
modélisé les tâches par l’espèce Taches et les ressources par l’espèce Ressources.
Chaque entité de ces espèces peut être nulle ou non. Pour cela la fonction agent_nul
(resp. Ressource_nul, tache_nul) a été définie.
L’espèce Agents est spécifiée comme suit :
- 44 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
L’espèce S_set_of, qui hérite des deux espèces Liste et Set_of, représente la notion
des ensembles finis, et sera détaillée dans l’annexe ‘A’.
Un agent pourra exécuter de différentes tâches, le système demande à ce dernier de
s’identifier en saisissant son nom (qui est un string).
La fonction agent_de_ce_nom_exist de type booléen vérifie si cet agent existe ou
non dans l’ensemble des agents (actuel). S’il existe, la fonction agent_de_nom
retourne l’agent du nom saisi. Sinon, elle retourne agent_nul. Les deux espèces
ensembles_taches et ensembles_ressources ont été définies de la même façon.
Le système demande après identification, la tâche et la ressource que cet
agent veut manipuler. Pour cela, nous avons défini les fonctions
tache_de_ce_nom_exist, tache_de_nom, ressource_de_ce_nom_exist et
ressource_de_nom. La fonction tache_de_nom (resp. ressource_de_nom) retourne
la tâche (resp. la ressource) du nom saisi si elle existe, sinon elle retourne le résultat
tache_nul (resp. ressource_nul).
- 45 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
I.3. Rôles
Nous avons défini l’ensemble des couples rôles= {(tâche, ressource)} tel que
si le couple (ta1, rs1) est un élément de l'ensemble rôles, alors l'exécution de la
tâche ta1 sur la ressource rs1 est un rôle qui peut être manipulé par un agent bien
défini. L'espèce Roles a été définie pour modéliser la notion des rôles. A ce stade, la
notion du rôle nul (composé de la tâche nulle et de la ressource nulle) été introduite.
De la même façon que la section précédente, nous avons défini l’espèce
ensembles_roles pour modéliser des ensembles de rôles. Cette espèce est définie
pour vérifier si un rôle demandé par un agent appartient à l’ensemble courant des
rôles du système.
L'espèce Roles à été définie comme suit:
species Roles (Tache is Taches, Ressource is Ressources) =
inherit Setoid ;
representation = (Tache* Ressource);
L’exécution des différents rôles doit suivre un certain ordre (pour simplifier le
travail, on a opté pour un ordre linéaire où il n’y a pas de parallélisme). Pour cela, on
a créé l’espèce des rôles triés Roles_tries tout en donnant un certain ordre aux rôles
- 46 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
Le dernier paramètre du type support int est défini afin de fixer l’ordre d’exécution de
chaque rôle. La fonction est_suivant est définie pour savoir si un rôle x2 est bien le
suivant du rôle x1 ou non.
I.4. Contrôles
Nous avons défini également, l’ensemble des couples contrôles= {(role,
agent)} où si le couple (r1, ag1) est un élément de l'ensemble contrôles alors l'agent
ag1 est le contrôleur du rôle r1 (séparation des pouvoirs).
Ce contrôleur n'a pas la permission d'exécuter ce rôle mais le contrôler. Cependant,
il peut désigner un autre agent pour l'exécution du rôle. Les espèces Controles et
Ensembles_controles ont été définies pour modéliser la notion du contrôle. Ces deux
espèces ont été définies en FoCALiZe comme suit:
species Controles (Agent is Agents, Tache is Taches, Ressource is
Ressources, Role is Roles(Tache, Ressource)) = inherit Setoid ;
representation= Role * Agent;
- 47 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 48 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
I.6. Systèmes
Un système est composé de l’ensemble des paramètres présentés
précédemment (avec les différentes relations et interactions qui peuvent exister entre
eux à n’importe quel moment), mais aussi d’autres paramètres que nous allons
définir dans ce qui suit:
- 49 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
I.6.a. Etats
Un état contient toutes les informations relatives à l'ensemble des entités du
système. Le système peut être changé d'un état à un autre. Ce changement d'états
se fait par des requêtes lancées par les agents du système. Un changement d'état
peut créer, supprimer ou manipuler des objets. Ces objets sont de type ressource.
I.6.b. Objets
Chaque objet dans le système est soit soumis à contraintes, objet_contraint
qu'on doit protéger, ou non soumis à contraintes objet_non_contraint. Pendant la
création d’un objet (la saisie de ses paramètres), il n’est soumis à contraintes que
pendant son utilisation avec obligation de respecter les contraintes d’intégrité, c'est-
à-dire que la création des objets est totalement libre. Un objet peut avoir n’importe
quelle valeur. Si cette valeur respecte les contraintes d’intégrité mises sur l’objet, ce
dernier sera changé en objet_contraint et toute manipulation doit être contrôlée et
vérifiée. A cet effet, l’espèce des objets Objets a été définie.
Nous avons défini l'espèce des objets comme suit:
species Objets (Ressource is Ressources) = inherit Setoid ;
representation=((string* int)* Ressource)* (int* int);
- 50 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
On fait appel à la fonction ivp_o des objets pour tester si tous les éléments
d’un Ensembles_objets respectent bien leurs contraintes d’intégrité, pour cela nous
avons défini la fonction ivp_eo.
La fonction objet_de_ce_nom_exist a été définie afin de vérifier si un objet
d’un nom donné appartient à l’ensemble courant des objets du système. Dans ce
cas, la fonction objet_de_nom retourne l’objet du nom saisi, sinon objet_nul sera
retourné.
La fonction ajoute_objet a été définie afin de pouvoir rajouter un nouvel objet
dans l’ensemble courant des objets du système. Avant l’ajout, le système vérifie si
ce nouvel objet respecte ses contraintes d’intégrité sinon l’opération sera rejetée.
Comme l’objectif principal de notre travail est de préserver l’intégrité de nos
objets, nous avons donné aux utilisateurs du système, la possibilité de modifier la
valeur d’un objet quelconque tout en exécutant la fonction modifier_objet qui a été
définie dans cette espèce.
- 51 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
I.6.c. Droits
Pour définir quel agent possède quel(s) rôle(s), nous avons défini l'ensemble
"droits" suivant: droits= {(agent, rôle)} où si le couple (ag1, r1) est un élément de
l'ensemble "droits" alors l'agent "ag1" a la permission d'exécuter le rôle "r1" (dans
certaines conditions).
Nous avons défini dans le système FoCaLiZe la notion de droit par l'espèce
Droits et l'ensemble des droits par l'espèce Ensembles_droits comme suit :
species Droits (...) = inherit Setoid ;
(* pas de rôle avec deux agents différents qui ont le droit de le manipuler *)
let ensemble_droits_coherent (ed : Self)=
let rec aux (l)=
match l with
| basics#[] -> true
| x :: q ->
let rec aux2 (ll)=
match ll with
| basics#[] -> true
| y :: p -> if not_b( Droit!role_de_droit(x) =
Droit!role_de_droit(y)) then aux2(p) else false
in aux2(q)
in aux (ed);
- 52 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 53 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
son modèle et de l’ensemble de ses droits. Etant donné que c’est la première espèce
composée par l’assemblage des deux ensembles DROITS et CÔNTROLES, nous
devons vérifier, pendant la création d’un nouvel état, qu’aucun rôle n’est contrôlé par
un agent qui a le droit de l’exécuter.
Nous avons créé le type énuméré type_etat :
type type_etat =
| Tetat_init
| Tetat_non_init
;;
Dans cette espèce, la fonction historiser a été définie, elle sera appelée dès que le
système reçoit un événement quelconque. Avec cette fonction, le système
sauvegarde toutes les traces de changement ou de tentative de changement d’état
dans un fichier journal log.txt.
I.6.d. Requêtes
Une requête est une demande d’exécution d’une tâche émise par l’utilisateur.
Elle peut être administrative ou non administrative :
1- Requêtes administratives
C’est une demande d’ajout d’un rôle à un agent ou de suppression d’un rôle d’un
agent. Dans ce type de requête, l’utilisateur qui l'a lancé doit être le contrôleur du rôle
demandé et aussi l’agent concerné ne l’est pas, d’où la modification de l'ensemble
des droits et par conséquent modification du comportement administratif du système.
2- Requêtes non administratives
L’utilisateur qui l'a lancé ne doit pas être le contrôleur du rôle demandé, ou bien, il
doit être son agent responsable (qui a le droit de l’exécuter), ainsi il n’y aura pas de
modification du comportement administratif du système. Dans ce type de requête,
nous préconisons deux cas de figure :
a- Demande d’exécution d’un rôle : Dans ce type de requête, nous devons respecter
- 54 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 55 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
...
let requete_est_sur_objet (rq : Self) : bool=
if (and_b (not_b( Objet!equal(!objet_concerne(rq), Objet!objet_nul)),
Ressource!equal(!ressource_concernee(rq), Ressource!ressource_nul))) then
true else false;
...
let requete_est_sur_ressource (rq in Self) : bool= ...
let requete_ni_sur_objet_ni_sur_ressource (rq : Self) : bool= ...
let requete_sur_objet_et_sur_ressource (rq : Self) : bool= ...
...
let ressource_generale_de_requete (rq : Self) : Ressource=
if (!requete_est_sur_objet(rq)) then
Objet!ressource_de_objet(!objet_concerne(rq)) else
if (!requete_est_sur_ressource(rq)) then !ressource_concernee(rq) else
Ressource!element;
...
let est_exec (r : Self) : bool = if (!type_de_requete(r)= #Trequete_exec)
then true else false;
let est_del (r : Self) : bool = ...
let est_add (r : Self) : bool = ...
let est_modif_objet (r : Self) : bool = ...
let est_ajout_objet (r : Self) : bool = if and_b(!type_de_requete(r)=
#Trequete_exec, !tache_demandee(r)= Tache!element) then true else false;
...
end;;
I.6.e. Décision
C’est la réponse d’une requête. Quand un agent demande l'exécution d'une
requête sur un état, le système vérifie les paramètres de sécurité et les droits
d’accès et génère l’une des décisions suivantes :
- Oui : s’il existe une règle autorisant l’exécution de la tâche demandée par l'agent
demandant.
- Non : sinon.
Nous avons défini l’espèce Decisions afin de modéliser la notion de décision dans le
système FoCaLiZe, elle est définie de la manière suivante :
species Decisions (...)= inherit Setoid;
- 56 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 57 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 58 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
est ‘’non’’.
Etant donné un framework F = (Agents, Taches, Ressources), un modèle ‘’M’’
pour ‘’F’’, un ensemble ‘’E’’ des états, un ensemble ‘’R’’ des requêtes, un ensemble
‘’D’’ des décisions, une fonction de transition ‘’T’’ et un état initial ‘’e0’’, alors un
système est défini comme suit: Ş = (F, M, E, R, D, T, e0)
(* la fonction Transition *)
let transition (st : Self) : Etat=
if Requete!est_exec (!requete_de(st))
then(*1.0*)
if Objet!equal(Requete!objet_concerne(!requete_de(st)),
Objet!element)
then(*1.1*)
if
Ressource!equal(Requete!ressource_concernee(!requete_de(st)),
Ressource!element)
then (*1.2*)
!etat_de(st)(*dec_1*)
else (*1.2*)
if ...
else (*1.0*)
if Requete!est_del(!requete_de(st))
...
- 59 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
...
theorem transition_sure:
all st1 st2 : Etat, all rq : Requete,
transition (!create(rq, st1)) = st2 ->
omega (st1) ->
omega (st2)
proof = ...
...
end;;
Le schéma général (figure 3.6) des paramétrages entre espèces permet de mieux
percevoir les liens entre les différentes espèces de notre système.
De même, avec la commande depgraph, nous avons pu créer pour chaque espèce
un graphe illustrant son comportement (composition). On a choisi l’espèce des états
comme illustration (figure 3.7).
- 60 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 61 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
Figure 3.7 : Graphe de dépendance de l’espèce ‘Etats’, créé par la commande ‘depgraphe’
- 62 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 64 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 65 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
1- Decision= 01 :
Type de requête= Exec, Objet concerné= nul et Ressource concernée= nul
Une requête doit s’exécuter soit sur une ressource (dans le cas de création d’un
nouvel objet) soit sur un objet (dans les autres cas). Donc, l’un des deux
paramètres doit être nul mais pas les deux en même temps.
Dans ce cas de décision (decision=01), le système trouve que les deux
paramètres sont nuls. Donc la décision est automatiquement ‘non’, l’état reste
donc le même et la requête sera rejetée :
=> Decision=’non’
2- Decision= 02 :
Type de requete= Exec, Objet concerné≠ nul et Ressource concernée≠ nul
Les deux paramètres ne sont pas nuls :
=> Decision=’non’
3- Decision= 03 :
Type de requête= Exec, Objet concerné= nul, Ressource concernée≠ nul et le
couple (agent_demandant, role_concerné) appartient à l’ensemble CONTROLES,
c'est-à-dire l’agent demandant est un contrôleur du rôle concerné, donc il n’a plus
le droit de l’exécuter :
=> Decision=’non’
4- Decision= 04 :
Type de requête= Exec, Objet concerné= nul, Ressource concernée≠ nul, le
couple (agent_demandant, role_concerné) n’appartient plus à l’ensemble
CONTROLES et il n’appartient non plus à l’ensemble DROITS. C'est-à-dire,
l’agent demandant n’a pas le droit d’exécuter le rôle concerné :
=> Decision=’non’
- 66 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
5- Decision= 06 :
Type de requête= Exec, Objet concerné= nul, Ressource concernée≠ nul, le
couple (agent_demandant, role_concerné) n’appartient plus à l’ensemble
CONTROLES, il appartient à l’ensemble DROITS et le rôle concerné n’est plus le
rôle suivant du dernier rôle qui a créé l’état actuel :
=> Decision=’non’
6- Decision= 05 :
Type de requête= Exec, Objet concerné= nul, Ressource concernée≠ nul, le
couple (agent_demandant, role_concerné) n’appartient plus à l’ensemble
CONTROLES mais à l’ensemble DROITS et le rôle concerné est le suivant du
dernier rôle qui a créé l’état actuel :
=> Decision=’oui’
7- Decision= 07 :
Type de requête= Exec, Objet concerné≠ nul, Ressource concernée= nul et
IVP(objet concerné) = false
=> Decision=’non’
8- Decision= 08 :
Type de requête= Exec, Objet concerné≠ nul, Ressource concernée= nul,
IVP(objet concerné) = true et le couple (agent_demandant, role_concerné)
appartient à l’ensemble CONTROLES, c'est-à-dire l’agent demandant est un
contrôleur du rôle concerné, donc il n’a plus le droit de l’exécuter :
=> Decision=’non’
9- Decision= 09 :
Type de requête= Exec, Objet concerné≠ nul, Ressource concernée= nul,
IVP(objet concerné) = true, le couple (agent_demandant, role_concerné)
appartient à l’ensemble CONTROLES et n’appartient plus à l’ensemble DROITS,
c'est-à-dire l’agent demandant n’a pas le droit d’exécuter le rôle concerné :
=> Decision=’non’
10- Decision= 11 :
- 67 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
11- Decision= 10 :
Type de requête= Exec, Objet concerné≠ nul, Ressource concernée= nul,
IVP(objet concerné) = true, le couple (agent_demandant, role_concerné)
appartient à l’ensemble CONTROLES, il appartient également à l’ensemble
DROITS et le rôle concerné est le rôle suivant du dernier rôle qui a créé l’état
actuel :
=> Decision=’oui’
12- Decision= 12 :
Type de requête= del ou add et agent concerné=nul:
=> Decision=’non’
13- Decision= 13 :
Type de requête= del ou add, agent concerné≠nul et objet concerné≠nul
=> Decision=’non’
14- Decision= 14 :
Type de requête = del ou add, agent concerné ≠ nul, objet concerné=nul et
ressource concernée = nul
=> Decision=’non’
15- Decision= 15 :
Type de requête= del ou add, agent concerné≠nul, objet concerné=nul, ressource
concernée≠nul et le couple (agent_demandant, role_concerné) n’appartient plus
à l’ensemble CONTROLES, c'est-à-dire l’agent demandant n’est pas le contrôleur
du rôle concerné :
=> Decision=’non’
- 68 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
16- Decision= 16 :
Type de requête= del ou add, agent concerné≠nul, objet concerné=nul, ressource
concernée≠nul, le couple (agent_demandant, role_concerné) appartient à
l’ensemble CONTROLES et appartient à l’ensemble DROITS (un utilisateur n’a
pas le droit d’être agent et contrôleur d’un rôle donné en même temps, il n’a pas
le droit de modifier ses rôles, mais c’est son responsable « le contrôleur du rôle
qu’il possède » qui a ce droit):
=> Decision=’non’
17- Decision= 17 :
Type de requête= del, agent concerné≠nul, objet concerné=nul, ressource
concernée≠nul, le couple (agent_demandant, role_concerné) appartient à
l’ensemble CONTROLES, il n’appartient plus à l’ensemble DROITS et le couple
(agent_concerné, role_concerné) n’appartient plus à l’ensemble DROITS (on ne
peut supprimer un rôle à un agent qui ne le possède pas !!):
=> Decision=’non’
18- Decision= 18 :
Type de requête= del, agent concerné≠nul, objet concerné=nul, ressource
concernée≠nul, le couple (agent_demandant, role_concerné) appartient à
l’ensemble CONTROLES, il n’appartient plus à l’ensemble DROITS et le couple
(agent_concerné, role_concerné) appartient à l’ensemble DROITS:
=> Decision=’oui’
19- Decision= 19 :
Type de requête= add, agent concerné≠nul, objet concerné=nul, ressource
concernée≠nul, le couple (agent_demandant, role_concerné) appartient à
l’ensemble CONTROLES, n’appartient plus à l’ensemble DROITS et le couple
(agent_concerné, role_concerné) appartient à l’ensemble DROITS (on ne peut
ajouter un rôle à un agent qui le possède déjà !!):
=> Decision=’non’
20- Decision= 20 :
- 69 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
21- Decision= 21 :
Type de requête≠ exec, Type de requête≠ del, Type de requête≠ add et Type de
requête≠ modif_objet (type de requête inconnu):
=> Decision=’non’
22- Decision= 22 :
Type de requête≠ modif_objet et objet concerné=nul:
=> Decision=’non’
23- Decision= 23 :
Type de requête≠ modif_objet, objet concerné≠nul et le dernier rôle qui a créé
l’état actuel est différent du rôle1=(création, objet_concerné) (la modification d’un
objet doit venir directement après sa création):
=> Decision=’non’
24- Decision= 24 :
Type de requête≠ modif_objet, objet concerné≠nul, le dernier rôle qui a créé l’état
actuel est égal au role1 et le couple (agent_demandant, role1) n’appartient plus à
l’ensemble DROITS, c'est-à-dire, l’agent demandant n’est pas le créateur de
l’objet concerné, il n’a pas le droit de modifier la valeur d’un objet d’un autre
agent, ne pourra modifier que ses objets :
=> Decision=’non’
25- Decision= 25 :
Type de requête≠ modif_objet, objet concerné≠nul, le dernier rôle qui a créé l’état
actuel est égal au role1 et le couple (agent_demandant, role1) appartient à
l’ensemble DROITS:
=> Decision=’oui’.
- 70 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 71 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
property e1_egal_e2_objets
<3>2 prove Ensemble_objets!eo_coherent(Etat!objets_de_etat(e1))
by hypothesis H2
property e1_coh_eo_coh
<3>f qed
by step <3>1, <3>2
property eo1_egal_eo2__eo1_coh
<2>f qed
by step <2>1, <2>2, <2>3
definition of omega
<1>f conclude;
…
end ;
Pour prouver que l’état ‘e2‘ est cohérent (ou omega (e2)) nous avons suivi la
démarche suivante :
- Il faut prouver que son modèle, son ensemble de droits et ensemble d’objets
sont cohérents.
- Les trois étapes <2>1, <2>2 et <2>3 sont définies pour chaque preuve.
- Pour que le modèle de l’état e2 soit cohérent, on a prouvé qu’il est égal à celui
de l’état e1 par la propriété (prouvée) ‘e1_egal_e2_modeles’ et l’hypothèse
H1, pour cela, la sous étape <3>1 a été définie. On a prouvé que le modèle de
l’état e1 est cohérent par l’hypothèse H2 et la propriété (prouvée)
‘e1_coh_model_coh’, pour cela, la sous étape <3>2 a été définie. Avec les
deux sous étapes <3>1 et <3>2 et la propriété (prouvée)
‘mdl1_egal_mdl2__mdl1_coh’, nous arrivons au terme de la preuve que le
modèle de l’état e2 est cohérent.
- La même démarche a été suivie pour prouver que l’ensemble de droits et
l’ensemble d’objets sont cohérents.
- Avec ces trois étapes et la définition de propriété ‘omega’ nous avons prouvé
que l’état e2 est cohérent.
- 72 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 73 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
- 74 -
Chapitre III Formalisation de Clark-Wilson dans FoCaLiZe
Conclusion
La haute puissance de spécification du système FoCaLiZe, nous a permis de
créer l’ensemble des espèces avec leurs comportements (Méthodes, Propriétés,
Théorèmes et Preuves). Le théorème le plus important dans cette étude est celui de
la sûreté du système. Il s’agit de prouver la cohérence de son comportement qui
respecte les exigences émises par Clark et Wilson (les neufs règles citées dans le
deuxième chapitre) après chaque changement d’état suite à une exécution d’une
requête administrative ou non administrative.
Cette politique de sécurité s’intéresse beaucoup plus à l’assurance de
l’intégrité des données. Nous avons pu prouver formellement que notre démarche
avec le système FoCaLiZe assure cette propriété pour tout état accéssible par le
système.
Nous avons proposé une architecture détaillée, fidèle et cohérente avec toutes
les méthodes, propriétés et théorèmes pour modéliser notre politique de sécurité
choisie dans le système FoCaLiZe. Il faut noter cependant qu’à titre temporaire nous
avons supposé la complétude de l’organigramme de calcul du numéro de décision.
Nous disposons, maintenant, d’un cadre générique que nous allons instancier sur
une étude de cas concrétisant un exemple réel, il s’agit du processus d’achat de
matériel. Nous allons donc décrire le comportement de l’ensemble des collections et
entités correspondante aux éléments (actifs et passifs) du système.
- 75 -
Chapitre IV
Étude de cas
Chapitre IV
Étude de cas
Introduction
Dans ce chapitre, nous allons mettre en pratique la formalisation présentée
dans le chapitre précédent sur un exemple concret. Nous avons choisi une
procédure d’achat de matériel entre deux entreprises, cliente et vendeuse. Tout
d’abord nous allons expliquer le scénario de la procédure. Ensuite, nous allons
détailler les étapes de création des collections et entités correspondant aux éléments
du système modélisé. Enfin, nous illustrerons notre travail en distinguant deux cas
possibles de requêtes, l’une valide et l’autre non valide.
I. Scénario
Nous allons suivre la procédure étape par étape tout en respectant le scénario
suivant :
- L’agent des moyens généraux de l’entreprise cliente crée un bon de commande,
en envoie une copie à son magasinier et une autre au fournisseur.
- Le fournisseur livre le matériel au magasinier de l’entreprise cliente. Ce dernier le
réceptionne, vérifie la conformité (en termes de quantité) avec son bon de
commande, et signe un bon de livraison à envoyer au service comptabilité de son
entreprise.
- Le fournisseur envoie une facture à la comptabilité de l’entreprise cliente où elle est
comparée au bon de commande (quantité), et un chèque est établi au fournisseur.
- 76 -
Chapitre IV
Étude de cas
II. Démarche
Pour concrétiser cet exemple, nous allons suivre la démarche suivante:
1. Déterminer l’ensemble du personnel de notre scénario, ainsi que
l’ensemble des ressources et tâches avec une codification proposée pour
chaque entité.
2. Implémenter et concrétiser toutes les espèces par des collections.
3. Pour chaque collection, créer l’ensemble des entités réelles correspondant
aux éléments de l’étape 1, pour faire des calculs effectifs et réels sur notre
exemple, à savoir :
a. L’ensemble des personnels qui vont agir dans le scénario
précédant : le Directeur Général de l’entreprise cliente (dag_a), son
chef de service des moyens généraux de l’entreprise cliente
(chef_serv_moy_gen_a)… ;
b. L’ensemble des ressources manipulables par ce personnel : bon de
commande, matériel, chèque …, et l’ensemble des objets
concrétisant ces ressources (objet_nul, stock1, …). La cohérence
de cet ensemble d’objets est assurée par la fonction ajoute_objet
(définie dans l’espèce Ensembles_finis et redéfinie dans l’espèce
Ensembles_objets de telle sorte qu’elle interdise l’introduction d’un
objet qui ne vérifie pas ses contraintes d’intégrité).
c. L’ensemble des tâches à exécuter dans ce scénario : création,
annulation, comparaison… ;
d. L’ensemble des relations et interdépendances effectives entre ces
entités comme :
Les rôles (rl1=<creation, bcmd >, …),
Les rôles triés (<rl1, 1>, …),
Les droits d’exécution (<chef_serv_moy_gen_a, rl1 >, …),
Les contrôles (<rl1, dag_a >, …).
L’ensemble des droits est cohérent, cette propriété étant assurée par la
fonction ajoute_droit de l’espèce Ensembles_droits, de même pour l’ensemble
des contrôles.
4. Créer l’état initial du système (qui doit être cohérent : son ensemble
d’objets est cohérent ainsi que son ensemble des droits et contrôles).
- 77 -
Chapitre IV
Étude de cas
- 78 -
Chapitre IV
Étude de cas
III.b-Ressources
L’ensemble des ressources de notre exemple est comme suit :
Ressource Codification
La ressource nulle ressource_nulle
Le bon de commande bcmd
Le matériel materiel
Le bon de livraison bliv
La facture fact
Le chèque cheq
Le stock stock
III.c-Tâches
L’ensemble des tâches de notre exemple est comme suit :
Tâche Codification
La tâche nulle tache_nulle
La création creation
L’annulation annulation
L’envoie envoie
La réception reception
La comparaison avec le bon de commande comparaison_bcmd
La comparaison avec le hèque comparaison_cheq
III.d- Rôles
L’ensemble des rôles de notre exemple est comme suit :
Rôles Codification
Création d’un bon de commande (creation, bcmd)
Création du materiel (creation, materiel)
Création d’un bon de livraison (creation, bliv)
Création d’une facture (creation, fact)
Création d’un cheque (creation, cheq)
- 79 -
Chapitre IV
Étude de cas
- 80 -
Chapitre IV
Étude de cas
Nous remarquons que les deux rôles (Annulation d’un bon de commande, Création
du matériel) ont le même numéro d’ordre car ils viennent tous les deux après le rôle
numéro 4 qui est (Comparaison du bon de commande avec le stock), nous avons
alors deux possibilités (comparaison positive ou négative), et chaque réponse
conduit à un chemin (ce qui signifie l’exécution de l’un de ces deux rôles). Même
remarque pour les rôles de numéro 9, 13 et 17.
III.f- Objets
L’ensemble initial des objets est (objet_nul, stock1).
III.g- Contrôles
L’ensemble des contrôles est comme suit :
- le directeur de l’administration générale de l’entreprise cliente
contrôle les rôles suivant :
- (creation, bcmd)
- (annulation, bcmd)
- (reception, materiel)
- (reception, bliv)
- (reception, fact)
- (creation, cheq)
et il pourra à n’importe quel moment modifier les responsables des rôles.
- le chef de service des moyens généraux de l’entreprise cliente
contrôle les rôles suivant :
- (envoie, bcmd)
- (comparaison_bcmd, materiel)
- (comparaison_bcmd, bliv)
- (comparaison_bcmd, fact)
- 81 -
Chapitre IV
Étude de cas
- (reception, cheq)
- (annulation, cheq)
III.h- Droits
L’ensemble des droits est comme suit :
- le chef de service des moyens généraux de l’entreprise cliente a le
droit d’exécuter les rôles suivant :
- (creation, bcmd)
- (annulation, bcmd)
- (reception, materiel)
- (reception, bliv)
- (reception, fact)
- 82 -
Chapitre IV
Étude de cas
Ses entités sont été créées, dans le système FoCaLiZe, de la manière suivante :
let agent_nul= C_agents!create(0, "agent_nul");;
let dag_a= C_agents!create(1, "dag_a");;
let chef_serv_moy_gen_a= C_agents!create(2, "chef_serv_moy_gen_a");;
let chef_serv_compt_a= C_agents!create(3, "chef_serv_compt_a");;
let mag_a= C_agents!create(4, "mag_a");;
let comptable_a= C_agents!create(5, "comptable_a");;
let dg_f= C_agents!create(6, "dg_f");;
let fournisseur= C_agents!create(7, "fournisseur");;
let mag_f= C_agents!create(8, "mag_f");;
let agent_systeme= C_agents!create(9, "agent_systeme");;
let e_agent_vide=c_ens_agents!vide;; (l’ensemble des agents, est initialement
vide).
let e_agents =
C_ens_agents!ajoute_element(#agent_nul,
C_ens_agents!ajoute_element(#agent_systeme,
C_ens_agents!ajoute_element(#mag_f,
C_ens_agents!ajoute_element(#fournisseur,
C_ens_agents!ajoute_element(#dg_f,
C_ens_agents!ajoute_element(#comptable_a,
C_ens_agents!ajoute_element(#mag_a,
C_ens_agents!ajoute_element(#chef_serv_compt_a,
C_ens_agents!ajoute_element(#chef_serv_moy_gen_a,
C_ens_agents!ajoute_element(#dag_a, #e_agent_vide))))))))))));;
Pour pouvoir rajouter des agents à l’ensemble des agents du système, nous avons
utilisé la fonction ajoute_element, définie dans l’espèce ensembles_finis, et que nous
avons redéfinie dans l’espèce ensembles_agents de sorte qu’elle interdise
l’introduction d’un agent qui existe déjà. Cette fonction est paramétrée par deux
éléments : l’agent à rajouter et l’ensemble dans lequel nous voulons le rajouter.
- 83 -
Chapitre IV
Étude de cas
2- Nous avons procédé de la même façon pour créer les collections : C_taches,
C_ens_taches, C_ressources, C_ens_ressources, C_frameworks, C_roles,
C_ens_roles, C_roles_tries, C_ens_roles_tries, C_controles, C_ens_controles,
C_droits, C_ens_droits, C_objets, C_ens_objets ainsi que leurs entités citées
précédemment.
- 84 -
Chapitre IV
Étude de cas
7- Pour la création d’un nouvel état à partir de l’exécution de la requête req0 sur
l’état etat0, nous déclenchons la fonction transition définie dans l’espèce Systeme.
Pour cela, la collection C_systeme a été créée :
collection C_systeme implements Systeme(
C_agents, C_ens_agents, C_taches, C_ens_taches, C_ressources,
C_ens_ressources, C_frameworks, C_roles, C_ens_roles, C_roles_tries,
C_ens_roles_tries, C_controles, C_ens_controles, C_modeles, C_droits,
C_ens_droits, C_objets, C_ens_objets, C_etats, C_requetes,
C_decisions);;
- 85 -
Chapitre IV
Étude de cas
Le résultat suivant s’affiche: vous êtes dans le cas 5, le nouvel état a été
créé.
- Pour afficher l’ensemble des objets de ce nouvel état, nous exécutons la ligne de
code suivante :
C_ens_objets!afficher_liste(C_etats!objets_de_etat(#etat1));;
- 86 -
Chapitre IV
Étude de cas
La décision d1’ correspondante à l’exécution de la requête req1’ sur l’état etat1 est
calculée:
let d1’= C_decisions!create(#req1’, #etat1);;
Pour afficher le résultat de cette exécution, nous lançons la ligne de code suivante :
basics#print_string(C_decisions!val_de_decision(#d1’));;
Nous rappelons qu’à chaque fois qu’un événement se déclenche dans le système, il
sera enregistré dans le fichier log.txt.
Comme les rôles sont ordonnés, les requêtes non administratives doivent être
exécutées l’une après l’autre. Par contre, les requêtes administratives peuvent être
exécutées sur demande, à n’importe quel moment. Pour cela, et pour simplifier
l’exemple, nous n’aborderons que l’exécution des requêtes non administratives.
- 87 -
Chapitre IV
Étude de cas
Figure 4.1 : états, requêtes, décisions et transitons de la procédure d’achat de matériel selon la politique Clark-Wilson
- 88 -
Chapitre IV Étude de cas
2.a- D=2 : si les droits d’accès et paramètres de sécurité sont vérifiés mais la
comparaison est négative, l’état suivant sera créé :
E4 = < type_etat=’Tnon_init’, modele, objets= {objet_nul, stock1, bcmd1},
ensemble_droits, dernier_rôle= (Comparaison_bcmd, stock)>
et la requête r4 d’annulation de bon de commande avec retour vers l’état initial E0
sera exécutée.
- 89 -
Chapitre IV Étude de cas
Conclusion
La démarche proposée dans ce chapitre nous a permis d’appliquer notre
spécification FoCaLiZe de la politique de sécurité Clark-Wilson sur un exemple
concret de procédure d'achat de matériel.
Avec cette implantation, nous avons expliqué comment le système contrôle
toutes les opérations que ses agents veulent exécuter. Nous avons vu que les
opérations permises peuvent être exécutées, alors que celles ne sont pas permises
ne doivent jamais être exécutées, jusqu'à ce qu’elles respectent les conditions
d’exécution.
Le scénario de la procédure d’achat de matériel a été détaillé, l’ensemble des
collections a été créé ainsi que l’ensemble des entités correspondant à notre
exemple. Des requêtes administratives et non administratives ont été exécutées sur
les différents états du système. Si les conditions d’exécution et paramètres d’accès
sont vérifiés, la décision générée est automatiquement ‘oui’ sinon elle a la valeur
‘non’.
Rappelons pour terminer que la généricité de notre modèle, permet son
utilisation sur d’autres exemples de différents domaines.
- 90 -
Conclusion générale
Conclusion générale
L’atelier FoCaLiZe est un outil très puissant, qui nous a permis de formaliser et
d’implanter la politique de sécurité de Clark-Wilson. Avec cet atelier FoCaLiZe, nous
avons pu dans un premier temps spécifier cette politique de sécurité, qui était définie
en langage naturel. Ensuite, nous avons introduit plusieurs propriétés et théorèmes
de sûreté, dont les démonstrations ont été générées par l’outil de preuve
automatique ’’Zenon’’ dont dispose l’atelier FoCaLiZe. On rappelle que ces preuves
sont ensuite soumises à vérification en utilisant ’’Coq’’.
Il est à noter que notre travail s’est révélé plus long et complexe que prévu pour les
raison suivantes, dont il faudra tenir compte pour son évolution :
- Le nombre important des espèces et collections que nous avons créés pour
pouvoir spécifier et implanter cette politique de sécurité.
- Le nombre important de paramètres de sécurité et leurs combinaisons pour
parcourir tous les cas possibles d’exécution des différentes requêtes.
- Les quatre types de requêtes (exécution d’un rôle, modification d’un objet,
ajout d’un rôle à un agent et suppression d’un rôle à un agent) et les vingt cinq
possibilités de décisions qui peuvent être générées.
- La définition de la fonction de transition qui change le système d’un état à un
autre, avec le parcours de tous les cas possibles d’exécution ou de rejet des
requêtes, et avec la préservation de la cohérence du système.
- La preuve du théorème ’’Transistion_sûre’’ a nécessité la définition d’autres
théorèmes avec leurs preuves.
Après avoir combiné les différentes conditions d’exécution des requêtes, nous avons
tracé un organigramme de calcul de la décision. Nous nous somme basé pour la
- 91 -
Conclusion générale
Nous avons conçu notre système de tel sorte qu’il soit flexible et extensible. Il sera
donc aisé d’y introduire des éléments supplémentaires comme : un agent
administrateur possédant des droits spécifiques, d’autres tâches comme l’ajout et la
suppression de nouveaux agents, la modification de l’ensemble de contrôles …
- 92 -
Bibliographie
Bibliographie
[ABO03] A. ABOU EL KALAM. Modèles et politiques de sécurité pour les domaines
de la santé et des affaires sociales. Laboratoire d’Analyse et d’Architecture
des Systèmes du Centre National de la Recherche Scientifique. décembre
2003
.
[BDD07] David Delahaye Richard Bonichon and Damien Doligez. Zenon : An
extensible automated theorem prover producing checkable proofs. Logic for
Programming, Artificial Intelligence, and Reasoning, 14th International
Conference, LPAR 2007, Vol 4790, 2007.
[COQ97] The COQ development team. The Coq Proof Assistant Reference Manuel
V6.1, rapport INRIA N° 0203, 1997.
[COQ10] Coq. The Coq Proof Assistant, Tutorial and reference manual. INRIA –LIP–
LRI–LIX–PPS, 2010. Distribution available at: http://coq.inria.fr/.
[CW87] D.D. Clark and D.R. Wilson, A Comparison of Commercial and Military
Computer Security Policies, IEEE, 1987.
- 93 -
Bibliographie
[FOC03] FOC development team. A brief FoC tutorial, Version 0.0, July 01 2003.
[GHJ03] E. Gureghian, Th. Hardin, M. Jaume. A full formalisation of the Bell and La
Padula security model. SPI-LIP6, University Paris 6, France. 2003.
[LAN81] Carl E. Landwehr, Formal Models for Computer Security, ACM Computing
Surveys, 13(3): 247-278, 1981.
[REM02] Didier Rémy. Using, Understanding, and Unraveling the OCaml Language. In
Gilles Barthe, editor, Applied Semantics. Advanced Lectures. LNCS 2395.
Springer Verlag, 2002.
- 94 -
Bibliographie
Knowledge.
- 95 -