[cap-talk] What sustained interest in capabilities
Mitsu Hadeishi
mitsu at syntheticzero.com
Mon Dec 29 14:54:19 EST 2008
On Dec 29, 2008, at 2:09 PM, David-Sarah Hopwood wrote:
> I disagree. Complexity is the enemy of security, and it's not possible
> to make a system simpler by adding layers. Since an ACL layer is
> typically already too complicated, it is only by removing such layers
> that we can obtain a high degree of confidence in the security of the
> whole system.
I'd just ask that you try to keep an open mind about this because I
know the result we're trying to report here is quite surprising, but I
think if you consider it more carefully you'll see the merit.
When you say "it's not possible to make a system simpler by adding
layers" I think I understand where you're coming from, but think this
through more deeply. Even a fully top-to-bottom capability OS is in
itself a simplifying layer on top of the raw bits of the underlying
computer or network of computers. Imagine trying to "secure" a system
where users were allowed to directly program to the hardware level in
binary.
All security approaches, whether capability-based or ACL-based, are
implemented at some layer of abstraction above another, chaotic, and
highly insecure layer. Whether that layer is the underlying raw bits
on the hard drive or in RAM, or it is a pre-existing ACL-based system,
is rather arbitrary.
So I agree the enemy of security is complexity, but *every* approach
to simplifying that complexity involves writing a layer of some kind.
What makes the layer simple is its internal structure, combined with
whether or not there are holes in the layer. For example, even a top-
to-bottom capability OS might have a bug in it that would allow access
to the underlying bits in RAM or on the hard drive -- in which case
the top-to-bottom capability OS would be vulnerable, again. Even if
one were to build a capability secure CPU, there could be a bug in the
CPU's hardware design! So you cannot completely eliminate risk even
with a so-called "top-to-bottom" design.
What you can do, however, is build a layer that *itself* is based on
capability security principles. That, I would argue, is what every
approach to capability security involves, not just the approach my
colleagues and I have used in our designs.
In more concrete terms, a capability wrapper around an ACL-based
resource acts in every way like a pure capability from the layer's
POV. I.e., it's no different from a top-to-bottom system in which
one, for example, defines a capability to access, say, a database. In
a wrapper, the interface is a wrapper with role-based credentials ---
however these credentials are only visible to the creator of the
capability (who must have ordinary ACL permissions to do so) --- but
then you can give out this capability in a capability secure manner.
For example, one can grant the capability to access the DB in a
restricted fashion (throttling access, for example), or one can revoke
access (via a proxy switch) and the grantee never has access to the
ACL-based permissions. Even the capability to *create* database
capabilities can be restricted, so even if a user had the ACL
credentials, they wouldn't be able to access the DB.
A capability layer enables all sorts of fine-grained scenarios, such
as a programmer creating a program in the layer that has access to a
few files or DB tables in the programmer's control, and publishing
that program so others can use it --- the other people can grant the
program access to one or more of their own files or resources. The
program itself will never be able to violate that sandbox: the worst
it could do is mess up the few files it has been granted access.
Again, we're assuming here the layer itself doesn't have bugs that
would allow one to escape the capability security world, but again
this same vulnerability exists in the top-to-bottom case.
>>>>
> Because adoption of technologies (especially in the security field,
> which is quite disfunctional in this respect) does not generally
> proceed
> according to technical merit. Luck, and marketing, play huge roles,
> that have been systematically underestimated by capability advocates.
> There haven't been enough *fully* implemented capability systems
> for one to get lucky. A partially implemented system stands no chance.
A capability-secure layer is not "partially implemented" --- it's
fully implemented at that layer, as is the case with any such system,
no matter how top-to-bottom it is. And, as I've noted before, it is
already being used in Caja, which is already being used in production,
and it is going to be used by at least two major projects which I've
been involved with. And the beauty of these systems is they fully
interoperate with the existing ecosystem of software out there, while
providing powerful capability security-based security management. I
believe the emphasis on top-to-bottom systems is the chief impediment
to the adoption of capability security --- because it forces people to
choose to throw out everything they're using now, which is simply
untenable. There is a way to introduce capability security to the
wider world, and it doesn't require building top-to-bottom systems
(though I agree that eventually, top-to-bottom is the wave of the
future).
>
>
> --
> David-Sarah Hopwood ⚥
>
> _______________________________________________
> cap-talk mailing list
> cap-talk at mail.eros-os.org
> http://www.eros-os.org/mailman/listinfo/cap-talk
More information about the cap-talk
mailing list