FreeBSD manual
download PDF document: mac.9.pdf
MAC(9) FreeBSD Kernel Developer's Manual MAC(9)
NAME
mac - TrustedBSD Mandatory Access Control framework
SYNOPSIS
#include <sys/types.h>
#include <sys/mac.h>
In the kernel configuration file:
options MAC
options MAC_DEBUG
DESCRIPTION
Introduction
The TrustedBSD mandatory access control framework permits dynamically
introduced system security modules to modify system security
functionality. This can be used to support a variety of new security
services, including traditional labeled mandatory access control models.
The framework provides a series of entry points which must be called by
code supporting various kernel services, especially with respects to
access control points and object creation. The framework then calls out
to security modules to offer them the opportunity to modify security
behavior at those MAC API entry points. Both consumers of the API
(normal kernel services) and security modules must be aware of the
semantics of the API calls, particularly with respect to synchronization
primitives (such as locking).
Kernel Objects Supported by the Framework
The MAC framework manages labels on a variety of types of in-kernel
objects, including process credentials, vnodes, devfs_dirents, mount
points, sockets, mbufs, bpf descriptors, network interfaces, IP fragment
queues, and pipes. Label data on kernel objects, represented by struct
label, is policy-unaware, and may be used in the manner seen fit by
policy modules.
API for Consumers
The MAC API provides a large set of entry points, too broad to
specifically document here. In general, these entry points represent an
access control check or other MAC-relevant operations, accept one or more
subjects (credentials) authorizing the activity, a set of objects on
which the operation is to be performed, and a set of operation arguments
providing information about the type of operation being requested.
Locking for Consumers
Consumers of the MAC API must be aware of the locking requirements for
each API entry point: generally, appropriate locks must be held over each
subject or object being passed into the call, so that MAC modules may
make use of various aspects of the object for access control purposes.
For example, vnode locks are frequently required in order that the MAC
framework and modules may retrieve security labels and attributes from
the vnodes for the purposes of access control. Similarly, the caller
must be aware of the reference counting semantics of any subject or
object passed into the MAC API: all calls require that a valid reference
to the object be held for the duration of the (potentially lengthy) MAC
API call. Under some circumstances, objects must be held in either a
shared or exclusive manner.
API for Module Writers
to avoid calling into the module.
Locking for Module Writers
Module writers must be aware of the locking semantics of entry points
that they implement: MAC API entry points will have specific locking or
reference counting semantics for each argument, and modules must follow
the locking and reference counting protocol or risk a variety of failure
modes (including race conditions, inappropriate pointer dereferences,
etc).
MAC module writers must also be aware that MAC API entry points will
frequently be invoked from deep in a kernel stack, and as such must be
careful to avoid violating more global locking requirements, such as
global lock order requirements. For example, it may be inappropriate to
lock additional objects not specifically maintained and ordered by the
policy module, or the policy module might violate a global ordering
requirement relating to those additional objects.
Finally, MAC API module implementors must be careful to avoid
inappropriately calling back into the MAC framework: the framework makes
use of locking to prevent inconsistencies during policy module attachment
and detachment. MAC API modules should avoid producing scenarios in
which deadlocks or inconsistencies might occur.
Adding New MAC Entry Points
The MAC API is intended to be easily expandable as new services are added
to the kernel. In order that policies may be guaranteed the opportunity
to ubiquitously protect system subjects and objects, it is important that
kernel developers maintain awareness of when security checks or relevant
subject or object operations occur in newly written or modified kernel
code. New entry points must be carefully documented so as to prevent any
confusion regarding lock orders and semantics. Introducing new entry
points requires four distinct pieces of work: introducing new MAC API
entries reflecting the operation arguments, scattering these MAC API
entry points throughout the new or modified kernel service, extending the
front-end implementation of the MAC API framework, and modifying
appropriate modules to take advantage of the new entry points so that
they may consistently enforce their policies.
ENTRY POINTS
System service and module authors should reference the FreeBSD
Architecture Handbook for information on the MAC Framework APIs.
SEE ALSO
acl(3), mac(3), posix1e(3), mac(4), ucred(9), vaccess(9),
vaccess_acl_posix1e(9), VFS(9), VOP_SETLABEL(9)
The FreeBSD Architecture Handbook,
https://docs.freebsd.org/en/books/arch-handbook/.
HISTORY
The TrustedBSD MAC Framework first appeared in FreeBSD 5.0.
AUTHORS
This manual page was written by Robert Watson. This software was
contributed to the FreeBSD Project by Network Associates Laboratories,
the Security Research Division of Network Associates Inc. under
DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA
CHATS research program.
Suresh Krishnaswamy, Adam Migus, Wayne Morrison, Andrew Reisse, Chris
Vance, and Robert Watson.
Sub-contracted staff include: Chris Costello, Poul-Henning Kamp, Jonathan
Lemon, Kirk McKusick, Dag-Erling Smorgrav.
Additional contributors include: Pawel Dawidek, Chris Faulhaber, Ilmar
Habibulin, Mike Halderman, Bosko Milekic, Thomas Moestl, Andrew Reiter,
and Tim Robbins.
BUGS
While the MAC Framework design is intended to support the containment of
the root user, not all attack channels are currently protected by entry
point checks. As such, MAC Framework policies should not be relied on,
in isolation, to protect against a malicious privileged user.
FreeBSD 14.0-RELEASE-p11 May 20, 2021 FreeBSD 14.0-RELEASE-p11