Require
Export
ListFunctions.
Implicit Arguments On.
|
When appropriate, each formal term is preceded by its interpretation or designation.
Proofs are ommited, they can be found here. |
|
Definition of security class, and its standard partial order. |
|
Definition
SECLEV := nat.
Parameter
CATEGORY: Set.
|
Record
SecClass : Set := sclass
{level : SECLEV;
categs: (set CATEGORY)}.
|
Definition
eq_sc [a,b:SecClass] : Prop :=
(level a)=(level b)
/\(categs a)=(categs b).
|
Definition
le_sc [a,b:SecClass] : Prop :=
(le (level a) (level b))
/\(Included (categs a) (categs b)).
Hints
Unfold eq_sc le_sc.
|
Security Policy Subjects |
This are global parameters introducing some of the basic sets of the model:
|
Parameter
SUBJECT, GRPNAME: Set.
Parameter
root, secofr: SUBJECT.
|
Axiom
SUBeq_dec : (x,y:SUBJECT){x=y}+{~x=y}.
Axiom
GRPeq_dec : (x,y:GRPNAME){x=y}+{~x=y}.
Hints
Resolve SUBeq_dec GRPeq_dec.
The Filesystem |
|
Parameters OBJNAME, BYTE:Set.
These axioms are needed by functions of |
Axiom
OBJNAMEeq_dec : (x,y:OBJNAME){x=y}+{~x=y}.
Axiom
BYTEeq_dec : (x,y:BYTE){x=y}+{~x=y}.
Hints
Resolve OBJNAMEeq_dec BYTEeq_dec.
|
Inductive
OBJTYPE: Set :=
|File: OBJTYPE
|Directory: OBJTYPE.
Lemma
OBJTYPEeq_dec: (x,y:OBJTYPE){x=y}+{~x=y}.
Intros.
Elim x; Elim y.
Left; Auto.
Right; Intro; Discriminate H.
Right; Intro; Discriminate H.
Left; Auto.
Qed
.
Hints
Resolve OBJTYPEeq_dec.
|
Definition
FILECONT := (list BYTE).
Lemma
FILECONTeq_dec: (x,y:FILECONT){x=y}+{~x=y}.
Unfold FILECONT; Intros; Apply Listeq_dec.
Auto.
Qed
.
Hints
Resolve FILECONTeq_dec.
|
Definition
DIRCONT := (list OBJNAME).
Lemma
DIRCONTeq_dec: (x,y:DIRCONT){x=y}+{~x=y}.
Unfold DIRCONT; Intros; Apply Listeq_dec.
Auto.
Qed
.
Hints
Resolve DIRCONTeq_dec.
|
Definition
OBJECT := OBJNAME*OBJTYPE.
Lemma
OBJeq_dec: (x,y:OBJECT){x=y}+{~x=y}.
Unfold OBJECT.
Intros.
Apply Prodeq_dec; Auto.
Qed
.
|
Parameter
MyDir: OBJNAME -> OBJECT.
Definition
ObjName [o:OBJECT] : OBJNAME := (Fst o).
Definition
ObjType [o:OBJECT] : OBJTYPE := (Snd o).
|
Security Policy Objects |
|
Record
RIGHTS : Set := allowedTo
{read_right : bool;
write_right: bool}.
|
Record
PERMS : Set := rwx
{ownerp: RIGHTS;
groupp: RIGHTS;
otherp: RIGHTS}.
|
Record
AccessCtrlListData : Set := acldata
{owner: SUBJECT;
group: GRPNAME;
UsersReaders: (set SUBJECT);
GroupReaders: (set GRPNAME);
UsersWriters: (set SUBJECT);
GroupWriters: (set GRPNAME);
UsersOwners : (set SUBJECT);
GroupOwners : (set GRPNAME)}.
|
Record
ReadersWriters : Set := mkRW
{ActReaders: (set SUBJECT);
ActWriters: (set SUBJECT)}.
Axiom
RWeq_dec : (x1,x2:ReadersWriters) {x1=x2}+{~x1=x2}.
|
Secure FileSystem |
This record represents the state of the filesystem from the security point of view. Designations for each field:
|
Require
Export
FPF.
Record
SFSstate : Set := mkSFS
{groups : GRPNAME->(set SUBJECT);
primaryGrp : SUBJECT->GRPNAME;
subjectSC : (set SUBJECT*SecClass);
AllGrp : GRPNAME;
RootGrp : GRPNAME;
SecAdmGrp : GRPNAME;
objectSC : (set OBJECT*SecClass);
acl : (set OBJECT*AccessCtrlListData);
secmat : (set OBJECT*ReadersWriters);
files : (set OBJECT*FILECONT);
directories: (set OBJECT*DIRCONT)}.
|
Axiom
SSCeq_dec: (x1,x2:SUBJECT*SecClass) {x1=x2}+{~x1=x2}.
Axiom
OSCeq_dec: (x1,x2:OBJECT*SecClass) {x1=x2}+{~x1=x2}.
Axiom
ACLeq_dec: (x1,x2:OBJECT*AccessCtrlListData){x1=x2}+{~x1=x2}.
Axiom
SECMATeq_dec: (x1,x2:OBJECT*ReadersWriters){x1=x2}+{~x1=x2}.
Axiom
OBJFeq_dec: (x1,x2:OBJECT*FILECONT){x1=x2}+{~x1=x2}.
Axiom
OBJDeq_dec: (x1,x2:OBJECT*DIRCONT){x1=x2}+{~x1=x2}.
Hints
Resolve SSCeq_dec OSCeq_dec ACLeq_dec SECMATeq_dec RWeq_dec.
Shorthands for domains and partial functions defined for each of the state's components |
Definition
domf [f:(set OBJECT*FILECONT)] :=
(DOM OBJeq_dec f).
Definition
ffiles [f:(set OBJECT*FILECONT)] :
OBJECT -> (Exc FILECONT) :=
(PARTFUNC OBJeq_dec f).
Definition
domd [f:(set OBJECT*DIRCONT)] :=
(DOM OBJeq_dec f).
Definition
fdirs [f:(set OBJECT*DIRCONT)] :
OBJECT -> (Exc DIRCONT) :=
(PARTFUNC OBJeq_dec f).
Definition
domacl [f:(set OBJECT*AccessCtrlListData)] :=
(DOM OBJeq_dec f).
Definition
facl [f:(set OBJECT*AccessCtrlListData)] :
OBJECT -> (Exc AccessCtrlListData) :=
(PARTFUNC OBJeq_dec f).
Definition
domsecmat [f:(set OBJECT*ReadersWriters)] :=
(DOM OBJeq_dec f).
Definition
ransecmat [f:(set OBJECT*ReadersWriters)] :=
(RAN RWeq_dec f).
Definition
fsecmat [f:(set OBJECT*ReadersWriters)] :
OBJECT -> (Exc ReadersWriters) :=
(PARTFUNC OBJeq_dec f).
Definition
domOSC [f:(set OBJECT*SecClass)] :=
(DOM OBJeq_dec f).
Definition
fOSC [f:(set OBJECT*SecClass)] : OBJECT -> (Exc SecClass) :=
(PARTFUNC OBJeq_dec f).
Definition
domSSC [f:(set SUBJECT*SecClass)] :=
(DOM SUBeq_dec f).
Definition
fSSC [f:(set SUBJECT*SecClass)]: SUBJECT -> (Exc SecClass):=
(PARTFUNC SUBeq_dec f).
|
Filesystem update functionsThey are under-specified, i.e. we do not say how the content of a given directory is changed when a new file is created on it. |
Parameter
create_files: SUBJECT->OBJNAME->(set OBJECT*FILECONT).
Parameter
create_directories: SUBJECT->OBJNAME->(set OBJECT*DIRCONT).
Parameter
mkdir_directories: SUBJECT->OBJNAME->(set OBJECT*DIRCONT).
Parameter
rmdir_directories: OBJECT->(set OBJECT*DIRCONT).
Parameter
unlink_files: OBJECT->(set OBJECT*FILECONT).
Parameter
unlink_directories: OBJECT->(set OBJECT*DIRCONT).
Parameter
write_files: OBJECT->nat->FILECONT->(set OBJECT*FILECONT).
|
Modes of access and the list of system operations |
|
Inductive
MODE : Set :=
|READ : MODE
|WRITE : MODE.
|
Inductive
Operation : Set :=
|Aclstat: Operation
|AddUsrGrpToAcl: Operation
|Chmod: Operation
|Chobjsc: Operation
|Chown: Operation
|Chsubsc: Operation
|Close: Operation
|Create: Operation
|DelUsrGrpFromAcl: Operation
|Mkdir: Operation
|Open: Operation
|Oscstat: Operation
|Owner_Close: Operation
|Read: Operation
|Readdir: Operation
|Rmdir: Operation
|Sscstat: Operation
|Stat: Operation
|Unlink: Operation
|Write: Operation.