Properties of the model |
Require
Export
TransFunc.
|
Section
ModelProperties.
|
Definition
DACSecureState [s:SFSstate] : Prop :=
(u:SUBJECT; o:OBJECT)
Cases (fsecmat (secmat s) o) of
|None => True
|(Some y) => ((set_In u (ActReaders y)) -> (PreDACRead s u o))
/\((set_In u (ActWriters y)) ->(PreDACWrite s u o))
end.
|
Definition
SimpleSecurity [s:SFSstate] : Prop :=
(u:SUBJECT; o:OBJECT)
Cases (fsecmat (secmat s) o)
(fOSC (objectSC s) o)
(fSSC (subjectSC s) u) of
|None _ _ => True
|_ None _ => True
|_ _ None => True
|(Some x)
(Some y)
(Some z) =>
((set_In u (ActReaders x)) \/ (set_In u (ActWriters x)))
->(le_sc y z)
end.
|
Definition
SecureState [s:SFSstate] : Prop :=
(DACSecureState s) /\ (SimpleSecurity s).
|
Definition
StarProperty [s:SFSstate] : Prop :=
(u:SUBJECT; o1,o2:OBJECT)
Cases (fsecmat (secmat s) o1)
(fsecmat (secmat s) o2)
(fOSC (objectSC s) o2)
(fOSC (objectSC s) o1) of
|None _ _ _ => True
|_ None _ _ => True
|_ _ None _ => True
|_ _ _ None => True
|(Some w)
(Some x)
(Some y)
(Some z) => (set_In u (ActWriters w))
->(set_In u (ActReaders x))
->(le_sc y z)
end.
|
Inductive
AclChanged: AccessCtrlListData-> AccessCtrlListData-> Prop :=
|UR: (a:AccessCtrlListData; b,c: (set SUBJECT))
~b=c ->
(AclChanged (acldata (owner a) (group a)
b (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a))
(acldata (owner a) (group a)
c (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a)))
|GR: (a:AccessCtrlListData; b,c: (set GRPNAME))
~b=c ->
(AclChanged (acldata (owner a) (group a)
(UsersReaders a) b
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a))
(acldata (owner a) (group a)
(UsersReaders a) c
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a)))
|UW: (a:AccessCtrlListData; b,c: (set SUBJECT))
~b=c ->
(AclChanged (acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
b (GroupWriters a)
(UsersOwners a) (GroupOwners a))
(acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
c (GroupWriters a)
(UsersOwners a) (GroupOwners a)))
|GW: (a:AccessCtrlListData; b,c: (set GRPNAME))
~b=c ->
(AclChanged (acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) b
(UsersOwners a) (GroupOwners a))
(acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) c
(UsersOwners a) (GroupOwners a)))
|UO: (a:AccessCtrlListData; b,c: (set SUBJECT))
~b=c ->
(AclChanged (acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
b (GroupOwners a))
(acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
c (GroupOwners a)))
|GO: (a:AccessCtrlListData; b,c: (set GRPNAME))
~b=c ->
(AclChanged (acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) b )
(acldata (owner a) (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) c )).
Inductive
UNIXAttrChanged : AccessCtrlListData -> AccessCtrlListData -> Prop :=
|Owner: (a:AccessCtrlListData; b,c:SUBJECT)
~b=c ->
(UNIXAttrChanged (acldata b (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a))
(acldata c (group a)
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a)))
|Group: (a:AccessCtrlListData; b,c:GRPNAME)
~b=c ->
(UNIXAttrChanged (acldata (owner a) b
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a))
(acldata (owner a) c
(UsersReaders a) (GroupReaders a)
(UsersWriters a) (GroupWriters a)
(UsersOwners a) (GroupOwners a))).
Inductive
DACCtrlAttrHaveChanged [s,t:SFSstate; o:OBJECT] : Prop :=
|ACL : (y,z:AccessCtrlListData)
(facl (acl s) o)=(Some AccessCtrlListData y)
->(facl (acl t) o)=(Some AccessCtrlListData z)
->(AclChanged y z)
->(DACCtrlAttrHaveChanged s t o)
|UNIX: (y,z:AccessCtrlListData)
(facl (acl s) o)=(Some AccessCtrlListData y)
->(facl (acl t) o)=(Some AccessCtrlListData z)
->(UNIXAttrChanged y z)
->(DACCtrlAttrHaveChanged s t o).
Inductive
SecClassChanged: SecClass -> SecClass -> Prop :=
|Level: (a:SecClass; b,c:(set CATEGORY))
~b=c ->
(SecClassChanged (sclass (level a) b) (sclass (level a) c))
|Categ: (a:SecClass; b,c:SECLEV)
~b=c ->
(SecClassChanged (sclass b (categs a)) (sclass c (categs a))).
Inductive
MACObjCtrlAttrHaveChanged [s,t:SFSstate; o:OBJECT] : Prop :=
|SCo: (x,y:SecClass)
(fOSC (objectSC s) o)=(Some SecClass x)
->(fOSC (objectSC t) o)=(Some SecClass y)
->(SecClassChanged x y)
->(MACObjCtrlAttrHaveChanged s t o).
Inductive
MACSubCtrlAttrHaveChanged [s,t:SFSstate; u:SUBJECT] : Prop :=
|SCu: (x,y:SecClass)
(fSSC (subjectSC s) u)=(Some SecClass x)
->(fSSC (subjectSC t) u)=(Some SecClass y)
->(SecClassChanged x y)
->(MACSubCtrlAttrHaveChanged s t u).
Definition
ControlProperty
[u:SUBJECT; s,t:SFSstate] : Prop :=
((o:OBJECT)
((DACCtrlAttrHaveChanged s t o)
->(ExecuterIsOwner s u o))
/\((MACObjCtrlAttrHaveChanged s t o)
->(set_In u ((groups s) (SecAdmGrp s)))))
/\(u0:SUBJECT)
(MACSubCtrlAttrHaveChanged s t u0)
->(set_In u ((groups s) (SecAdmGrp s))).
Definition
PreservesControlProp
[s:SFSstate; op: Operation; t:SFSstate] : Prop :=
(u:SUBJECT)
(TransFunc u s op t)
->(ControlProperty u s t).
Well-formedness system invariants. |
Axiom
WFSI1:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
((o:OBJECT)(set_In o (DOM OBJeq_dec (files s)))
->(ObjType o)=File)
->(TransFunc u s op t)
->((o:OBJECT)(set_In o (DOM OBJeq_dec (files t)))
->(ObjType o)=File).
Axiom
WFSI2:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
((o:OBJECT)(set_In o (DOM OBJeq_dec (directories s)))
->(ObjType o)=Directory)
->(TransFunc u s op t)
->((o:OBJECT)(set_In o (DOM OBJeq_dec (directories t)))
->(ObjType o)=Directory).
Axiom
WFSI3:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
(DOM OBJeq_dec (acl s))=(set_union OBJeq_dec
(DOM OBJeq_dec (files s))
(DOM OBJeq_dec (directories s)))
->(TransFunc u s op t)
->(DOM OBJeq_dec (acl t))=(set_union
OBJeq_dec
(DOM OBJeq_dec (files t))
(DOM OBJeq_dec (directories t))).
Definition
FuncPre1 [s:SFSstate] : Prop :=
((o:OBJECT)(set_In o (DOM OBJeq_dec (directories s)))
->(ObjType o)=Directory)
/\((o:OBJECT)(set_In o (DOM OBJeq_dec (files s)))
->(ObjType o)=File)
/\(DOM OBJeq_dec (acl s))=
(set_union OBJeq_dec
(DOM OBJeq_dec (files s))
(DOM OBJeq_dec (directories s))).
Axiom
WFSI4:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
(DOM OBJeq_dec (acl s))=(DOM OBJeq_dec (objectSC s))
->(TransFunc u s op t)
->(DOM OBJeq_dec (acl t))=(DOM OBJeq_dec (objectSC t)).
Definition
FuncPre2 [s:SFSstate] : Prop :=
(DOM OBJeq_dec (acl s))=(DOM OBJeq_dec (objectSC s)).
Axiom
WFSI5:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
(Included (DOM OBJeq_dec (secmat s)) (DOM OBJeq_dec (acl s)))
->(TransFunc u s op t)
->(Included (DOM OBJeq_dec (secmat t)) (DOM OBJeq_dec (acl t))).
Definition
FuncPre3 [s:SFSstate] : Prop :=
(Included (DOM OBJeq_dec (secmat s)) (DOM OBJeq_dec (acl s))).
Axiom
WFSI6:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
(IsPARTFUNC OBJeq_dec (acl s))
->(TransFunc u s op t)
->(IsPARTFUNC OBJeq_dec (acl t)).
Definition
FuncPre4 [s:SFSstate] : Prop :=
(IsPARTFUNC OBJeq_dec (acl s)).
Axiom
WFSI7:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
(IsPARTFUNC OBJeq_dec (secmat s))
->(TransFunc u s op t)
->(IsPARTFUNC OBJeq_dec (secmat t)).
Definition
FuncPre5 [s:SFSstate] : Prop :=
(IsPARTFUNC OBJeq_dec (secmat s)).
Axiom
WFSI8:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
(IsPARTFUNC OBJeq_dec (objectSC s))
->(TransFunc u s op t)
->(IsPARTFUNC OBJeq_dec (objectSC t)).
Definition
FuncPre6 [s:SFSstate] : Prop :=
(IsPARTFUNC OBJeq_dec (objectSC s)).
Axiom
WFSI9:
(s:SFSstate; op:Operation; t:SFSstate)
(u:SUBJECT)
(IsPARTFUNC SUBeq_dec (subjectSC s))
->(TransFunc u s op t)
->(IsPARTFUNC SUBeq_dec (subjectSC t)).
Definition
FuncPre7 [s:SFSstate] : Prop :=
(IsPARTFUNC SUBeq_dec (subjectSC s)).
End
ModelProperties.
Hints
Unfold SecureState DACSecureState SimpleSecurity
ControlProperty PreservesControlProp.
Hints
Resolve UR GR UW GW UO GO Owner Group Level Categ.
Hints
Resolve WFSI1 WFSI2 WFSI3 WFSI4 WFSI5 WFSI6 WFSI7 WFSI8 WFSI9.