Thoughts on data security

BLUF: I’ve been thinking a lot about Multics Data Security paper, and how a modern version of Multics would support enhancements to that. Specifically, I believe that Access Control Lists (ACLs) and Access Isolation Mechanism (AIM) need to be augmented with other technical controls, in order to help make ACLs and AIM more directly useful. For example, AIM ensures that Confidential data (to pick an example) can’t be accessed by a library or program marked as Public; however, it doesn’t ensure that Confidential data is never marked Public to begin with.

Definitions

First, let’s review a few things that I’ll be talking about:

Current State of Affairs

Most systems have some level of Access Control List, even if it’s as simple as Unix’s model. However, few systems codify the other items define above.

Users certainly use systems that handle some of these data security controls, but the wider suite of controls either require external enforcement or procedural controls to be enforced. Similarly, even those systems that do provide many of these controls rarely have them enforced in a way that is easily processed by users; how often do we see the equivalent of 0777 for many forms of data?

A Multicious Alternative

Yes, the Multics analog of Unixy is Multicious. Multics included many of these data security controls, as described in Multics Data Security; in essence:

This allowed Multics to have discretionary access control at a time where most systems assumed that physical access was enough to limit access. We’ll circle back to that in a moment, but first let’s focus on the last point above; Multics' ACL system included the authentication type for a user as well. This included three types of authentication modes: interaction login, daemon, and batch job (basically a cron job, but to process data primarily). This was adventageous; using ACLs, I can setup permissions for my user such that:

Although Multics included an analog to service accounts, the fact that we can specify how programs that run as our current user may access files is a huge boon to simplifying data security.

Multics took this one step further, with the introduction of Access Isolation Mechanism, AIM. AIM added a few bits to the running system, to allow further control of data, in a Mandatory Access Control (MAC) fashion:

This applied to programs and libraries as well; so, for example, a library marked as "Public" can only access Public data, even if it were called from a program marked as "Top Secret." Multics was concerned with "Trojan Horses" from third parties in 1974.

Lastly, Multics made rings of execution much more explicit than operating systems we are familiar with today. We are all familiar with say Ring 0 (hardware, or at least very low level firmware) and thoughts like Kernel Space versus User Space, but Multics allowed Administrators to specify what ring (from 0 to 7) user’s programs & libraries could execute on, and provided a limited form of privilege escalation so as to allow very limited forms of cross-ring file, library, and program access. In this way, users could be in the same Project and yet have very controlled forms of access control to the libraries, files, and programs within the Project.

towards multicious perfection

Multics was a huge leap forward in how we structure systems and file access, but it still could be improved, especially in the face of the modern threat landscape. There are three things I believe are missing that a modern system would have to address:

  1. Data Lifecycle: Multics handles Data Creation quite well, but Destruction, especially on a specific access timeframe isn’t handled, and Access Policies require diving into other AIM & Ring control mechanisms

  2. Data Subscription: given a Data Classification and Category, who should be able to see the Data internally & externally?

  3. Default Permissions: there are sets of Default Permissions for programs & libraries that could be enforced; for example, BitFrost denies access to the Camera for any program that has Network access, until the user specifically allows it

The first is harder to capture in a generic way; policies may be defined by clients (as is often the case for consultants) or regulatory policy. We’d need a way to expose Data Lifecycle policies in such a way that Deletion, Retention, and Backup can all be handled from a single source, and tied into Data Classification and Category. Likewise, the second item could be simple: we could apply something like Traffic Light Protocol (TLP) to all data (and hopefully with an easier set of names), and enforce that Data of specific Classification and Category have specific Subscriptions appied. For example, there is almost never going to be a correct application of Personally Identifiable Information (PII) and TLP:CLEAR (or All Parties) Subscriptions. I’m not quite sure if more needs to be added to Subscription other than system enforcement and tying to the Classification and Category, but exploring the Subscription needs is extremely fascinating to me.

The last is Default Permissions; Multics handled this in part with what were called "IACLs," or Initial Access Control Lists. These were then restricted based on the ACLs users & operators applied. I think combining Default Permissions, IACLs, Rings, and Gates would be faily fascinating; one of my favorite papers on the topic is the W7 Security Kernel, which is based on the Lambda Calculus. Things like W7, BitFrost, and other mechnaisms for restricting Default access dovetail nicely into Capability-based systems (like Eros and CapROS). What could be interesting is playing with a system that combines these concepts in such a way that users can by default run things they expect to run. For example, tying in source of installation with Data Classification and Category, all dependencies of a program could be installed as Public; in this way, even if malicious code were installed, it could only run within the a low-privileged ring and with access to data marked as Public. Likewise, Default Permissions for applications could specify what they have access to off the bat, and require user intervention for any further escalation of access.

the once and future Multics

So, for next steps: