2002-07-31 04:28:02 +04:00
|
|
|
.\" $NetBSD: systrace.1,v 1.11 2002/07/31 00:28:02 itojun Exp $
|
2002-07-30 20:29:28 +04:00
|
|
|
.\" $OpenBSD: systrace.1,v 1.23 2002/07/30 16:27:21 itojun Exp $
|
2002-06-17 20:29:07 +04:00
|
|
|
.\"
|
|
|
|
.\" Copyright 2002 Niels Provos <provos@citi.umich.edu>
|
|
|
|
.\" All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\" 3. All advertising materials mentioning features or use of this software
|
|
|
|
.\" must display the following acknowledgement:
|
|
|
|
.\" This product includes software developed by Niels Provos.
|
|
|
|
.\" 4. The name of the author may not be used to endorse or promote products
|
|
|
|
.\" derived from this software without specific prior written permission.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
.\"
|
|
|
|
.\" Manual page, using -mandoc macros
|
|
|
|
.\"
|
|
|
|
.Dd June 3, 2002
|
|
|
|
.Dt SYSTRACE 1
|
|
|
|
.Os
|
|
|
|
.Sh NAME
|
|
|
|
.Nm systrace
|
|
|
|
.Nd generates and enforces system call policies
|
|
|
|
.Sh SYNOPSIS
|
|
|
|
.Nm systrace
|
2002-07-30 20:29:28 +04:00
|
|
|
.Op Fl aAituU
|
2002-06-17 20:29:07 +04:00
|
|
|
.Op Fl g Ar gui
|
|
|
|
.Op Fl f Ar file
|
|
|
|
.Op Fl p Ar pid
|
|
|
|
.Ar command ...
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
The
|
|
|
|
.Nm
|
2002-07-31 01:58:25 +04:00
|
|
|
utility monitors and controls an application's access to the system by
|
|
|
|
enforcing access policies for system calls. The
|
|
|
|
.Nm
|
|
|
|
utility might be used to trace an untrusted application's access to
|
|
|
|
the system. Alternatively, it might be used to protect the system
|
|
|
|
from software bugs (such as buffer overflows) by constraining a
|
|
|
|
daemon's access to the system.
|
|
|
|
.Pp
|
|
|
|
The access policy can be generated interactively or obtained from a
|
|
|
|
policy file. Operations not covered by the policy raise an alarm and
|
|
|
|
allow an user to refine the currently configured policy.
|
2002-06-17 20:29:07 +04:00
|
|
|
.Pp
|
2002-07-30 20:29:28 +04:00
|
|
|
The options are as follows:
|
2002-06-17 20:29:07 +04:00
|
|
|
.Bl -tag -width Dfxfile
|
|
|
|
.It Fl a
|
2002-07-30 20:29:28 +04:00
|
|
|
Enables automatic enforcement of configured policies.
|
|
|
|
An operation not covered by policy is denied and logged via
|
2002-06-17 20:29:07 +04:00
|
|
|
.Xr syslog 3 .
|
|
|
|
.It Fl A
|
|
|
|
Automatically generate a policy that allows every operation the
|
|
|
|
application executes.
|
|
|
|
The created policy functions as a base that can be refined.
|
2002-07-30 20:29:28 +04:00
|
|
|
.It Fl u
|
|
|
|
Do not perform aliasing on system call names. Aliasing is enabled
|
|
|
|
by default to group similar system calls into a single compound
|
|
|
|
name. For example, system calls that read from the file system
|
|
|
|
like
|
|
|
|
.Fn lstat
|
|
|
|
and
|
|
|
|
.Fn access
|
|
|
|
are translated to
|
|
|
|
.Fn fsread .
|
2002-06-17 20:29:07 +04:00
|
|
|
.It Fl i
|
2002-07-31 01:43:26 +04:00
|
|
|
Inherits the policy - child processes inherit policy of the parent binary.
|
2002-06-17 20:29:07 +04:00
|
|
|
.It Fl t
|
|
|
|
Uses text mode to ask for interactive policy generation.
|
|
|
|
.It Fl U
|
|
|
|
Ignore user configured policies and use only global system policies.
|
|
|
|
.It Fl g Ar gui
|
|
|
|
Specifies an alternative location for the notification user interface.
|
|
|
|
.It Fl f Ar file
|
|
|
|
The policies specified in
|
|
|
|
.Ar file
|
|
|
|
are added to the policies that
|
|
|
|
.Nm
|
|
|
|
knows about.
|
|
|
|
.It Fl p Ar pid
|
|
|
|
Specifies the pid of a process that
|
|
|
|
.Nm
|
|
|
|
should attach to.
|
|
|
|
The full path name of the corresponding binary has to be specified
|
|
|
|
as
|
|
|
|
.Ar command .
|
|
|
|
.El
|
2002-07-30 21:06:58 +04:00
|
|
|
.Ss POLICY
|
2002-06-17 20:29:07 +04:00
|
|
|
The policy is specified via the following grammar:
|
2002-07-31 04:28:02 +04:00
|
|
|
.Bd -literal -offset 4
|
2002-06-17 20:29:07 +04:00
|
|
|
filter = expression "then" action errorcode
|
|
|
|
expression = symbol | "not" expression | "(" expression ")" |
|
|
|
|
expression "and" expression | expression "or" expression
|
|
|
|
symbol = string typeoff "match" cmdstring |
|
|
|
|
string typeoff "eq" cmdstring | string typeoff "neq" cmdstring |
|
|
|
|
string typeoff "sub" cmdstring | string typeoff "nsub" cmdstring |
|
|
|
|
string typeoff "inpath" cmdstring | "true"
|
|
|
|
typeoff = /* empty */ | "[" number "]"
|
|
|
|
action = "permit" | "deny"
|
|
|
|
errorcode = /* empty */ | "[" string "]"
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Va cmdstring
|
|
|
|
is an arbitrary string enclosed with quotation marks.
|
|
|
|
The
|
|
|
|
.Va errorcode
|
|
|
|
is used to return an
|
|
|
|
.Xr errno 2
|
|
|
|
value to the system call when using a
|
|
|
|
.Va deny
|
2002-07-30 20:29:28 +04:00
|
|
|
action. The values
|
2002-06-17 20:29:07 +04:00
|
|
|
.Do
|
|
|
|
inherit
|
|
|
|
.Dc
|
2002-07-30 20:29:28 +04:00
|
|
|
and
|
|
|
|
.Do
|
|
|
|
detach
|
|
|
|
.Dc
|
|
|
|
have special meanings when used with a
|
2002-06-17 20:29:07 +04:00
|
|
|
.Va permit
|
|
|
|
rule for the
|
|
|
|
.Va execve
|
|
|
|
system call.
|
2002-07-30 20:29:28 +04:00
|
|
|
When using
|
|
|
|
.Do
|
|
|
|
inherit,
|
|
|
|
.Dc
|
|
|
|
the current policy is inherited for the new binary.
|
|
|
|
With
|
|
|
|
.Do
|
|
|
|
detach,
|
|
|
|
.Dc
|
|
|
|
.Nm
|
|
|
|
detaches from a process after successfully
|
|
|
|
completing
|
|
|
|
the
|
|
|
|
.Va execve
|
|
|
|
system call.
|
2002-06-17 20:29:07 +04:00
|
|
|
.Pp
|
|
|
|
The filter operations have the following meaning:
|
|
|
|
.Bl -hang -width Dinpath -offset AAA
|
|
|
|
.It match
|
|
|
|
Evaluates to true if file name globbing according to
|
|
|
|
.Xr fnmatch 3
|
|
|
|
succeeds.
|
|
|
|
.It eq
|
2002-06-17 21:06:08 +04:00
|
|
|
Evaluates to true if the system call argument matches
|
2002-06-17 20:29:07 +04:00
|
|
|
.Va cmdstring
|
|
|
|
exactly.
|
|
|
|
.It neq
|
|
|
|
This is the logical negation of
|
|
|
|
.Va eq .
|
|
|
|
.It sub
|
|
|
|
Performs a substring match on the system call argument.
|
|
|
|
.It nsub
|
|
|
|
This is the logical negation of
|
|
|
|
.Va sub .
|
|
|
|
.It inpath
|
|
|
|
Evaluates to true if the system call argument is a subpath of
|
|
|
|
.Va cmdstring .
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
Policy entries may contain an appended predicate.
|
|
|
|
Predicates have the following format:
|
2002-07-31 04:28:02 +04:00
|
|
|
.Bd -literal -offset 4
|
2002-06-17 20:29:07 +04:00
|
|
|
", if" {"user", "group"} {"=", "!="} string
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
A rule is added to the configured policy only if its predicate
|
|
|
|
evaluates to true.
|
2002-06-17 21:06:08 +04:00
|
|
|
.Sh FILES
|
|
|
|
.Bl -tag -width xHOME/xsystrace -compact
|
|
|
|
.It Pa /dev/systrace
|
|
|
|
systrace device
|
|
|
|
.It Pa /etc/systrace
|
|
|
|
global systrace policies
|
|
|
|
.It Pa $HOME/.systrace
|
|
|
|
user specified policies
|
|
|
|
.El
|
2002-06-17 20:29:07 +04:00
|
|
|
.Sh EXAMPLES
|
|
|
|
An excerpt from a sample
|
|
|
|
.Xr ls 1
|
|
|
|
policy might look as follows:
|
2002-07-31 04:28:02 +04:00
|
|
|
.Bd -literal -offset 4
|
2002-06-17 20:29:07 +04:00
|
|
|
Policy: /bin/ls, Emulation: native
|
|
|
|
[...]
|
|
|
|
native-open: filename eq "$HOME" and oflags sub "ro" then permit
|
|
|
|
native-fchdir: permit
|
|
|
|
[...]
|
|
|
|
native-open: filename eq "/tmp" and oflags sub "ro" then permit
|
|
|
|
native-stat: permit
|
|
|
|
native-open: filename match "$HOME/*" and oflags sub "ro" then permit
|
|
|
|
native-open: filename eq "/etc/pwd.db" and oflags sub "ro" then permit
|
|
|
|
[...]
|
|
|
|
native-open: filename eq "/etc" then deny[eperm], if group != wheel
|
|
|
|
.Ed
|
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr systrace 4
|
2002-06-26 10:50:14 +04:00
|
|
|
.Sh HISTORY
|
|
|
|
The
|
|
|
|
.Nm
|
|
|
|
utility first appeared in
|
|
|
|
.Ox 3.2 .
|
|
|
|
It appeared in
|
|
|
|
.Nx 1.7 .
|
2002-07-30 21:06:58 +04:00
|
|
|
.Sh AUTHORS
|
|
|
|
The
|
|
|
|
.Nm
|
2002-07-31 01:43:26 +04:00
|
|
|
utility was developed by Niels Provos.
|
2002-07-30 20:29:28 +04:00
|
|
|
.Sh BUGS
|
|
|
|
Applications that use clone()-like system calls to share the complete
|
|
|
|
address space between processes may be able to replace system call
|
|
|
|
arguments after they have been evaluated by
|
|
|
|
.Nm
|
|
|
|
and escape policy enforcement.
|