[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
File Share and Sandbox project
From: |
David Walter |
Subject: |
File Share and Sandbox project |
Date: |
Tue, 01 Oct 2002 13:38:03 -0400 |
User-agent: |
Gnus/5.090007 (Oort Gnus v0.07) XEmacs/21.4 (Honest Recruiter, hurd-i386-debian) |
I am developing a thesis topic using the GNU/Hurd OS as the
implementation platform.
I'd be interested to see the comments that any and all might have
regarding these ideas.
So far, I have come up with a first draft proposal to use translator
composition as a mechanism to build a secure environment, potentially
one that is portable and, hopefully one that provides some degree of
user anonymity for privacy.
I. Overview
1. The GNU/Hurd OS design can be used for secure and anonymous work
environments, with a balance of user control and system protections.
The following items are the work that I intend to implement to
demonstrate these points:
a. a proof of concept translator for user configurable file
sharing
b. an authentication server using public key technology.
c. a console client combined with the authentication server to
encapsulate a user email process.
d. demonstrate the composition of these to create a virtual
sandbox, where the file space and the user interface are
confined by the Hurd authentication processes and translators.
2. The GNU/Hurd OS is a _better_ mouse trap. There are security
solutions which are cleaner to implement using it. Where by cleaner, I
mean that there is substantial motivation to code/utility reuse.
3. Verifiability: The GNU/Hurd OS's security can be verified more
easily than traditional monolithic kernels because of the use of
translators and a micro kernels and the reduction of sharing of kernel
memory.
One of the problems with monolithic kernels and verifiability is that
the address space of the kernel includes many of the devices and
shared data structures used by the kernel to share information with
the drivers.
This leads to potential side effects which are difficult to find, as
unrelated sections of the kernel can affect / modify other unrelated
locations.
Loadable modules share these same problems.
GNU/Hurd has the potential to reduce these problems through separation
of drivers from the kernel as well as ability to compartmentalize
functionality that traditionally would have been a kernel component.
II. User Configurable File Share Translator
While looking at the problem of file sharing in user space, the
administration problems have been traditionally a poison pill in the
ubiquitous adoption of file sharing in secure environments.
The work that an administrator has to do in a traditional *nix (POSIX)
environment requires the maintenance of users and groups, and the
granularity of access control is limited to the compositions of users
in groups. A user belonging to a group has access privileges
equivalent to any other user in the group, unless the owner gives away
their ownership, or they begin having the problem of end users
attempting to define a complex relationship of interactions in a
shared user space.
Goal one: enable simple user configurable file sharing with
granularity, in a user space implementation.
Example application: 'fileshare' translator.
When Joe wishes to share information with Mary, in a traditional
environment, he may give world permissions so that anyone has access
to the information, or he may give ownership of the file / information
to Mary, or the administrator must create a group to which Joe and
Mary belong.
In order to understand a 'hurdish' implementation option and the
associated security analysis we would have to consider how the Hurd
processes information and how it handles authentication.
First the goals.
1. We want to reduce the administration overhead
2. We want to empower the end user to share information they want to
share that they have access to, but disable the acquisition of greater
privileges.
3. We want a flexible model for implementation.
Example goal:
Joe wants to give Mary access to the following files in these
respective locations:
File Joe access rights/privileges
1. ~/reports/proj1 drwx------ 1 joe joe
2. ~/images/graphic.jpg -rw-r--r-- 1 joe joe
3. ~/slides/slides.ps -rw-r--r-- 1 joe joe
Joe wants to allow Mary to have read/write/execute access to
reports/proj1 read-only access to graphic.jpg and read/write access to
slides.ps .
File joes access rights/privileges
1. ~/reports/proj1 drwxrwx--- 1 joe mary
2. ~/images/graphic.jpg -rw-r----- 1 joe mary
3. ~/slides/slides.ps -rw-rw---- 1 joe mary
Further joe wants to disallow other users to be given access to the
files by mary.
Now Joe can do the following: (assuming we have written our fileshare
translator)
mkdir -p /home/share/joe/mary
settrans /home/share/joe/mary /hurd/fileshare --user-names=mary \
/home/joe/share/mary_file_list.txt | mail mary
The translator might for the benefit of providing information for a
pipe to mail the end user the names and locations of the files print
the following:
file will be available as
proj1 /home/share/joe/mary/proj1 drwxrwx--- joe mary
graphic.jpg /home/share/joe/mary/graphic.jpg -rw-r----- joe mary
slides.ps /home/share/joe/mary/slides.ps -rw-rw---- joe mary
Where mary_file_list.txt might contain the following:
# --------------------------------------------------------------------
# source file translated as perm owner user
# --------------------------------------------------------------------
/home/joe/reports/proj1 proj1 drwxrwx--- joe mary
/home/joe/images/graphic.jpg graphic.jpg -rw-r----- joe mary
/home/joe/slides/slides.ps slides.ps -rw-rw---- joe mary
What activities will the fileshare translator perform?
1. settrans sets up the inode for joe's share directory under
/home/share to invoke the passive translator /hurd/fileshare on the
next access.
2. when the translator is activated, by an authorized user (mary) the
translator will (via cd or a file open on any of the names.) This node
is owned by joe, but the translator will _only_ allow mary access.
a. authenticate the user using the port rights for that
individual.
b. if it is the appropriate individual, the permissions
will be granted for the user via the mechanisms of the port
requests made to access the files via the translated port
entries.
Naturally joe will have had to have granted mary at least execute and
will likely give read access to the translated inode so that she can
do directory listing.
inode fileshare authenticate
[mary] -> [okay]
inode fileshare action
[mary] / [report.tex] -> [okay]
open
3. When mary types ls at the prompt /home/share/joe/mary she sees:
/home/share/joe/mary/proj1 drwxrwx--- joe mary
/home/share/joe/mary/graphic.jpg -rw-r----- joe mary
/home/share/joe/mary/slides.ps -rw-rw---- joe mary
III. Process Rights Management: Sample application: Confined Email
End users are affected by the threat of antagonistic, viral programs
being delivered via email or other mechanisms of information sharing.
Administrators have little success in controlling the end users choice
of software, while simultaneously maintaining security for that
individuals workspace.
Personal and corporate information are often intermixed in the end
users file space, thus security breaches can compromise more than just
personal information, industry is motivated financially to ensure
their information is secure, but restrictions for security often are
inflexible and unduly restrictive.
Virtual machines have been proposed as a sandbox mechanism[3]. While
virtual machines are one method, the performance costs seem to
continue to be prohibitive, as well as tending to be resource
intensive.
Goal two: Implement a secure 'virtual sandbox' for potentially rogue
processes whose authenticity or unverifiability make them a threat to
the user.
Example application: confined-email program.
In order to isolate the confined-email program I would like to compose
several translators to produce a virtual sandbox.
My first design of the sandbox will be something like the following.
File space:
pub_key_auth -> chroot ~/email -> fakeuser[4] -> fileshare[5] ->
pub_key_encrypt -> shadowfs
Program Space:
auth ~/.myetc[7]
^
pub_key_auth -> chroot ~/email -> fakeuser[4] ->
fileshare /.emailrc [5] ->
^
virtual console
^
email_client
Start up auth with a directory containing the definitions of the local
users and groups to share files with. In this case the argument is
~/.myetc. ~/.myetc contains passwd, group, and public key files of
those users.
pub_key_auth: handles authentication of any requests via public key.
chroot: places the users effective root to ~/email limiting the scope
of activities to the supplied argument directory[6]
email_client: has an effective root directory of ~/email, and runs
with permissions limited by the authentication server auth or with the
replacement pub_key_auth, which works by validating the user with
public key authentication, i/o is via the file share translator which
is mounted on ~/email and supplies / restricts i/o to files defined by
the configuration file it uses. It runs within a virtual console
constraining it to the console's io interface (which are authenticated
via the auth server -- or a user auth server running with restricted
privileges).
fileshare: reads a startup configuration file /.emailrc from which the
end user (whose real path is ~/email/.emailrc) mail directories are
found.
IV. Verification:
**FIXME**
V. Related discussions.
If I have overlooked places where there is or was prior ideas that you
are aware of, I will appreciate being made aware of them.
Time line: My goal is to complete a workable version of the first run
of this translator prior to Jan 1 2003.
Design: In progress
Implementation: Starting from 2002.10.01
Footnotes:
[1] https://hurd/security/pre-design.txt
or https://hurd/security/*Article nnml:sent-mail.2002.06*
[2] https://hurd/security/about_the_login_shell.txt The above URL is a
log of the discussion that took place on the debian-hurd mailing list.
I want to acknowledge the dialogue that took place Starting on August
19, 2002, in a thread begun by Moritz Schulte titled: About the login
shell, with independently discussing some of these same ideas.
This dialogue came quite close to the file sharing translator ideas, I
had been envisioning, so even though disorganized, I'm going to point
to the disorganzied draft proposal I had given my advisor during June
of this year[1].
[3] **FIXME** references for virtual machine sandbox.
[4] **FIXME** fakeuser derives from the functionality of fakeroot but
gives the appearance of running as a specific user.
[5] **FIXME** fileshare will be a user configurable translator that
enables exporting files with defined permissions limited to
authenticated users.
[6] I am not sure yet, if a fakeuser == (fakeroot --user=USER) is
necessary or helpful, I have been considering this as a way to
implement a _local_ no_user id that is locked into this environment.
[7] **FIXME** auth add option for local user and groups files
--
/^\
\ / ASCII RIBBON CAMPAIGN
X AGAINST HTML MAIL
/ \
- File Share and Sandbox project,
David Walter <=