Dan S. Wallach, Dirk Balfanz, Drew Dean, and Edward W. Felten
Notes by Kevin Walsh
Browsers need a way of controlling/auditing access to system resources by applets.
These applets may be untrusted, fully trusted, or semi-trusted, and multiple applets
inter-operate in a single environment.
Access to resources should not be transferable, except under monitored conditions.
Hardware control is generally slow, different across platforms, and does not address much
other than kernel-user calls and memory access.
Stack introspection seems inherently bad: It is not intuitive to the programmer,
is very difficult to figure out where rights are propagating, and is not very flexible.
Untrusted code may limited in it's ability to use the security mechanism for it's
own purposes (to protect itself against other code). Also, a run-time search of the
stack is involved with every access. Further, if limits are imposed on the depth of the
stack search (as is done in some systems), a dependence on an unrelated programming issue
(functional code design) is mixed in with security decisions.
Capability systems are very intuitive and are a natural way of having security in Java.
However, it can sometimes be clumsy or difficult to implement certain policies.
Containment of rights is an issue.
Namespace management is also intuitive to programmers, and is very simple to
understand. The paper claims that all security decisions must be made at load time,
but this doesn't seem quite right -- security policy decisions must be made at link time
(substituting one class for another in the namespace), but access decisions can be
dynamically.
All systems presented use the notion of Principals, which is basically the name of the
company/person who wrote the code. I don't think this is what we want. The
name of the author may have some influence on security decisions, but policies should be
written on a module by module basis.
Also, the user of the browser is (seems to be) consulted for nearly all policy
decisions. It is specifically forbidden for one module to grant rights to another
module. This seems bad -- the user generally can only make top-level security
decisions. Internal decisions should be left up to the module which is exporting a
resource.