Re: A TrustedBSD voluntary sandbox policy.

2007-11-16 Thread Robert Watson


On Thu, 8 Nov 2007, Andrea Campi wrote:


On Wed, Nov 07, 2007 at 10:20:28PM -0500, [EMAIL PROTECTED] wrote:

I'm considering developing a policy/module for TrustedBSD loosely based on 
the systrace concept - A process loads a policy and then executes another 
program in a sandbox with fine grained control over what that program can 
do.

...
Please note that the 'policy' given on the command line is purely for the 
sake of example, no syntax or semantics have been decided upon.


Can't comment on the implementation or wider issues, but if you pursue this, 
please have a look at how MacOS Leopard does it (Seatbelt). Would be nice to 
converge on both syntax (a Schema dialect) and tools names / command line 
args--or if converging is not possible, at least know where and why and make 
a conscious decision.


FYI, Seatbelt is based on the Mac OS X port of the TrustedBSD MAC Framework, 
which while it has some significant changes (some now present in the 8-CURRENT 
branch of FreeBSD), may well be a good starting point.  Last I checked, the 
source for Seatbelt wasn't yet available, but there was hope it would be 
available in the near future.  A port of the policy to FreeBSD sounds like it 
would be very interesting to do, and might provide a nice starting point 
rather than having to write up a policy from scratch.


Robert N M Watson
Computer Laboratory
University of Cambridge
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: A TrustedBSD voluntary sandbox policy.

2007-11-15 Thread Christopher Davis
On Nov 8, 2007 9:23 AM, Pawel Jakub Dawidek [EMAIL PROTECTED] wrote:
 First problem is that it is hard to operate on file paths. MAC passes a
 locked vnode to you and you cannot go from there to a file name easly.
 You could do it by comparsion: call VOP_GETATTR(9) on the given vnode,
 do the same for /etc/passwd and others and compare their inodes and
 file system ids. Performance hit may be significant for complex
 policies.

 You can register yourself for process_exit, process_fork and
 process_exec in-kernel events and do your cleanups from your event
 handler. Take a look at EVENTHANDLER(9).

 --
 Pawel Jakub Dawidek   http://www.wheel.pl
 [EMAIL PROTECTED]   http://www.FreeBSD.org
 FreeBSD committer Am I Evil? Yes, I Am!


Couldn't you use stat() syscall on the paths from the userland utility
that parses the rules, collect the mount point or mount id and the
inode from the stat struct,  then have the MAC policy module
match that data with the file id and mount id available from the
vnode?


-- 
Christopher Davis
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: A TrustedBSD voluntary sandbox policy.

2007-11-08 Thread Andrea Campi
On Wed, Nov 07, 2007 at 10:20:28PM -0500, [EMAIL PROTECTED] wrote:
 I'm considering developing a policy/module for TrustedBSD loosely based
 on the systrace concept - A process loads a policy and then executes
 another program in a sandbox with fine grained control over what that
 program can do.
...
 Please note that the 'policy' given on the command line is purely for 
 the sake of example, no syntax or semantics have been decided upon.

Can't comment on the implementation or wider issues, but if you
pursue this, please have a look at how MacOS Leopard does it
(Seatbelt). Would be nice to converge on both syntax (a Schema
dialect) and tools names / command line args--or if converging is not
possible, at least know where and why and make a conscious decision.

Bye,
Andrea

-- 
If it's there, and you can see it, it's real. If it's not there, and you can 
see it, it's virtual. If it's there, and you can't see it, it's transparent. If 
it's not there, and you can't see it, you erased it.
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: A TrustedBSD voluntary sandbox policy.

2007-11-08 Thread Pawel Jakub Dawidek
On Wed, Nov 07, 2007 at 10:20:28PM -0500, [EMAIL PROTECTED] wrote:
 I'm considering developing a policy/module for TrustedBSD loosely based
 on the systrace concept - A process loads a policy and then executes
 another program in a sandbox with fine grained control over what that
 program can do.
 
 I'm aiming for a much simpler implementation, however. No interaction.
 No privilege elevation (only restriction). No system call rewriting,
 only access control.
 
 The interface will look something like this:
 
 (cat EOF
 deny all 
 allow file_open /etc/passwd
 allow file_open /dev/tty
 allow sock_connect 127.0.0.1 80
 allow sock_connect 208.77.188.166 80
 rlimit core 0
 rlimit cpu 20
 rlimit nofile 10
 EOF
 ) | sandbox /bin/ls -alF /bin
 
 Please note that the 'policy' given on the command line is purely for 
 the sake of example, no syntax or semantics have been decided upon.
 
 The implementation appears to be simple, as far as I'm aware. I'm sure
 there will be thorns and problems - that's what I'm here to find out.
 
 The 'sandbox' process compiles the policy text into a binary structure
 in userland, loads the binary structure into the kernel module via a
 system call implemented with mac_syscall(), sets various rlimits and 
 then runs /bin/ls with execve().  When the process exits, the memory for 
 the binary structure is freed.
 
 I would like, at this stage, to know if the above model is seriously
 incompatible with the way the MAC framework works, it's not entirely
 clear either way having read other policies such as mac_biba, mac_stub
 etc.
 
 For example - how to know when a process has exited? Policy for an
 executed process would be kept in a small hash table, indexed by process
 id. The policy will be enabled when the process sucessfully calls
 execve() for the first time and will be destroyed when the process
 exits.  If we're not notified when a process has exited, we can't remove
 policy from the table.
 
 Also, what should be done when a process decides to fork() or execve()?
 It'd be rather unfortunate if the process could break out of the sandbox
 just by executing another process but blocking all attempts to fork()
 or execve() would make classes of programs unusable.

First problem is that it is hard to operate on file paths. MAC passes a
locked vnode to you and you cannot go from there to a file name easly.
You could do it by comparsion: call VOP_GETATTR(9) on the given vnode,
do the same for /etc/passwd and others and compare their inodes and
file system ids. Performance hit may be significant for complex
policies.

You can register yourself for process_exit, process_fork and
process_exec in-kernel events and do your cleanups from your event
handler. Take a look at EVENTHANDLER(9).

-- 
Pawel Jakub Dawidek   http://www.wheel.pl
[EMAIL PROTECTED]   http://www.FreeBSD.org
FreeBSD committer Am I Evil? Yes, I Am!


pgpnSAKoJorcw.pgp
Description: PGP signature


A TrustedBSD voluntary sandbox policy.

2007-11-07 Thread dexterclarke
I'm considering developing a policy/module for TrustedBSD loosely based
on the systrace concept - A process loads a policy and then executes
another program in a sandbox with fine grained control over what that
program can do.

I'm aiming for a much simpler implementation, however. No interaction.
No privilege elevation (only restriction). No system call rewriting,
only access control.

The interface will look something like this:

(cat EOF
deny all 
allow file_open /etc/passwd
allow file_open /dev/tty
allow sock_connect 127.0.0.1 80
allow sock_connect 208.77.188.166 80
rlimit core 0
rlimit cpu 20
rlimit nofile 10
EOF
) | sandbox /bin/ls -alF /bin

Please note that the 'policy' given on the command line is purely for 
the sake of example, no syntax or semantics have been decided upon.

The implementation appears to be simple, as far as I'm aware. I'm sure
there will be thorns and problems - that's what I'm here to find out.

The 'sandbox' process compiles the policy text into a binary structure
in userland, loads the binary structure into the kernel module via a
system call implemented with mac_syscall(), sets various rlimits and 
then runs /bin/ls with execve().  When the process exits, the memory for 
the binary structure is freed.

I would like, at this stage, to know if the above model is seriously
incompatible with the way the MAC framework works, it's not entirely
clear either way having read other policies such as mac_biba, mac_stub
etc.

For example - how to know when a process has exited? Policy for an
executed process would be kept in a small hash table, indexed by process
id. The policy will be enabled when the process sucessfully calls
execve() for the first time and will be destroyed when the process
exits.  If we're not notified when a process has exited, we can't remove
policy from the table.

Also, what should be done when a process decides to fork() or execve()?
It'd be rather unfortunate if the process could break out of the sandbox
just by executing another process but blocking all attempts to fork()
or execve() would make classes of programs unusable.

Comments, flames, etc, appreciated.

(cc'd to trustedbsd-discuss@ regardless of whether or not anybody actually
reads it).

--
dc
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]