An MCS policy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Part of the project I'm working on is an MCS policy that I want 
to describe and (hopefully) proof correct in this posting.

I do not expect anyone to read this through, but if maybe someone 
is interested in stuff like this, I'd really appreciate any quick 
look over it.



These are the specifications I want my policy to meet:

I want a user to have 100 compartments, each one totally
separated from every other. The user (called main user) has full 
access over every compartment. For each compartment C there shall 
be 9 subcompartments of C each one totally separated from every 
other subcompartment or compartment, but accessible from C. 

No compartment or subcompartment shall have the possibility to 
access or leak data "horizontally", i.e. to any other compartment 
or subcompartment that is not of his own.

Neither shall any compartment or subcompartment be able to access 
"upwards", i.e. from a subcompartment to its compartment or from 
a compartment to the main user.

The only allowed data flow is reading, writing and transitioning 
from the main user to the compartments and from every compartment 
to its subcompartments. (Set aside practical exceptions like 
sigchild, fd use, some X11 stuff that needs to be shared among 
all compartments etc.)


My Implementation:

I have a user user_u with range s0 - s0:c0.c999 starting off as 
main_t:s0. 

main_t is not mcs constrained. main_t can transition to sub_t 
which is mcs constrained and has no access to main_t.

I call a range of s0:c(N*10).c((N*10)+9), 0<=N<=99, a compartment 
with id N. E.g. compartment 01 with range s0:c10.c19. 

I call s0:cI, (N*10) < I <= ((N*10)+9), a subcompartment of N 
with id I. E.g. subcompartment 5 of compartment 01 with range 
s0:c15.

A process of compartment N is run as:

	sub_t:s0:c(N*10) - s0:c(N*10).c((N*10)+9)

A process of subcompartment I of N as:
	
	sub_t:s0:c((N*10)+I)

The mlsconstrain (in princip, set aside practical exceptions) is:

01:		( t1 != is_mcsconstrained )
02:	or	( t2 != is_mcsconstrained )
03:	or	(	
04:				( l1 domby h1 ) 
05:			and	( l2 domby h2 ) 
06:			and	( h1 dom h2 ) 
07:			and ( h1 dom l2 ) 
08:			and ( l1 domby l2 ) 
09:		)
	

Proof:

It is sufficient to proof this for any compartment, say 
s0:c10.c19. As there is only one sensitivity, the relation of 
dominance is that of inclusion of category sets. Set inclusion 
shall be denoted by < > = <= >=.

04 and 05 are just to prevent any "weird" contexts. (I'm pretty 
sure the kernel already enforces those and gives 'invalid 
context' if low range > high range. But definite specifications 
are hard to find, so I put them in to be sure.)

It needs to be shown that a process running as

	s0:c10 - s0:c10.c19

can not access any categories -- directly or through transition 
-- other than c10.c19.

For files created or processes transitioned to it holds true that 
low range as well as high range can only be a subset of c10.c19.  
This is ensured by 06 and 07. So the process can neither access 
nor leak data to either the compartments numerically below hin 
(s0:c0.c9) or above him (s0:c20.c29, ...). 

But note that the empty set is also subset of c10.c19. So the 
process would be able to jeopardise his own integrity by 
transitioning to or leaking data to s0 -- which in turn would 
then be accessible form any other compartment.

So the source low range must always be a subset of the target low 
range. This is ensured by 08.

For a subcompartment, say s0:c15, it holds true that the process 

	s0:c10 - s0:c10.c19

can transition to, give and write files to etc. as c15 > c10 and 
c15 < c10.c19.

For any subcompartment it is obvious from the above that it 
cannot access or transition to anything else than itself.

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux