Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Jan 2000 08:46:35 -0500 (EST)
From:      Robert Watson <robert@cyrus.watson.org>
To:        freebsd-security@freebsd.org
Subject:   Further issues (was: Re: Restructuring authorization checks to facilitate new security models)
Message-ID:  <Pine.BSF.3.96.1000114083023.35781B-100000@fledge.watson.org>
In-Reply-To: <Pine.BSF.3.96.1000113200906.33318B-100000@fledge.watson.org>

next in thread | previous in thread | raw e-mail | index | archive | help

A further expansion on a question I meant to address in my previous email,
but didn't go into in detail:

Should type information for objects/subjects be passed as a property of
the object/subject argument components, or as a property of the operation
component?  I.e., ACCESS_PKILL implies that both elements are processes,
but you could imagine using more generic ACCESS_WRITE and providing type
information to indicate that the elements are processes.  I.e.,

int access_check(subject_type, subject_label, object_type, object_label,
    operation_descriptor);

In this manner, modules could determine whether they are interested in
mediating a particular request--i.e., a prison implementation could decide
to ignore all file requests, as chroot would cover its requirements.  This
could result in a reduced set of operations that are easier to manage: 
i.e., ACCESS_READ, ACCESS_WRITE, ACCESS_ALLOC, ACCESS_DELETE, and so on,
allowing more overlap between categories based on subject/object type. 
The nature of the operation_descriptor field is pretty relevant--do access
control mechanisms wants to make decisions based on well-defined
abstractions, or based on specific call descriptors (i.e.,
per-syscall/vnops/vfsops/etc)?  Or both?  Possible object_type's might be:

	OBJECT_IPFW
	OBJECT_VNODE
	OBJECT_PROC
	OBJECT_KERNLINKER
	...

You could also imagine a two-level hierarchy for the operations as a
possibility, with flags indicating specifics if necessary:

	..., REQUEST_TYPE_VNODE, REQUEST_OPEN, FWRITE|FREAD)
	..., REQUEST_TYPE_IPFW, REQUEST_READ, 0)
	..., REQUEST_TYPE_PTRACE, REQUEST_OPEN, 0)
	..., REQUEST_TYPE_IP_TCP_PRIVILEGED, REQUEST_OPEN, 0)

or

	..., OBJECT_VNODE, REQUEST_OPEN, FWRITE|FREAD)
	..., OBJECT_PTRACE, REQUEST_OPEN, 0)
	..., OBJECT_SOCKET_IP, REQUEST_OPEN, SRESERVED)

Depending on how fine-grained the mechanism needed to be, this might have
to be very detailed, or fairly broad.  Keeping a standard REQUEST_ field
would allow decisions about operations that might not be understood by the
policy mechanism--i.e., MAC might not know about vnodes, but would know
that a process with an appropriate label might be permitted to read but
not write that object, suggesting REQUEST_OPEN should in fact be two calls
at open time--request permission to READ, and optionally WRITE if
vn_open() wanted it.  Similarly, signalling might constitute a WRITE from
the point of view of MAC, suggesting:

	..., OBJECT_PROC, PROC_SIGNAL, REQUEST_WRITE, 0)
	..., OBJECT_PROC, PROC_PTRACE, REQUEST_WRITE, 0)

Anyhow, thoughts are welcome.  Depending on response on -security, I may
move this to -arch in a bit.

  Robert N M Watson 

robert@fledge.watson.org              http://www.watson.org/~robert/
PGP key fingerprint: AF B5 5F FF A6 4A 79 37  ED 5F 55 E9 58 04 6A B1
TIS Labs at Network Associates, Safeport Network Services



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-security" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.1000114083023.35781B-100000>