<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Memory Segmentation to Support Secure Applications</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Cambridge</institution>
          ,
          <addr-line>Computer Laboratory</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>Current CPU architectures provide only weak support for software segmentation, a key underpinning for software security techniques such as sandboxing, managed languages, and static analysis. Because hardware memory segmentation is relevant mainly in the program abstraction its support has been deemphasized in modern operating systems, yet modern hardware requires operating system support to use its segmentation features. This paper argues that by implementing a capability model, it is possible to safely support creation, distribution and use of segments purely in user space. Hardware support for user-mode segmentation would enable e cient sandboxing within processes, enforcement of compiler structure, managed languages, and formal veri cation of machine code. We present a working prototype of such a system implemented on an FPGA and running FreeBSD.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        2.1
ments, allowing them to protect and relocate program modules [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. However a more forward-looking proposal
in 1961 suggested that if programs were willing to sacri ce precise control over protection and virtualization
to use regularly sized pages, an operating system could e ciently allow multiple programs to run on the same
machine [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Large-scale computers generally moved to paging to support operating systems with
multiprogramming [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. Nevertheless, computers that are expected to run a single program often support segmentation, for
example the Intel 286 [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] and the modern ARM Cortex R cores [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. As computer designers preferred paging to
segmentation, programmers eventually found that strict high-level languages could enforce memory protection
to some degree [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] and that managed languages could actually verify memory references at run-time [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Thus
hardware segmentation fell out of use for large computer programs.
      </p>
      <p>
        Intel's IA-32 instruction set demonstrates this historical pattern. The Intel 286 was the rst Intel x86 processor
to support memory protection [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], but because it was not expected to be used primarily for multiprogramming,
a segmentation model was devised that might support protection for program objects. However segments were
found to be awkward to use since segment descriptors were manipulated in kernel mode, a higher privilege level
than that of the program which was creating and using the objects. The next generation of x86 processor, the 386,
supported paging in addition to segmentation to enable standard multiprocess operating systems. Eventually
the segmentation system was rarely used and was mostly dropped in the transition to x86-64 [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
2.2
      </p>
      <sec id="sec-1-1">
        <title>Motivation for Renewed Segment Support: Security</title>
        <p>
          While strict programming languages and managed runtimes have been su cient to ensure a level of working
correctness, both have shown cracks when facing intentional exploitation [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. These aws were often due to
compilers and runtimes being programmed in unsafe languages themselves. Recurrent and escalating problems
with security due to the ever more connected global network of computers have shown that a working correctness
is not su cient for security conscious programs.
        </p>
        <p>Maintaining security in the face of a global collection of capable adversaries requires very strong correctness of
security mechanisms. While securing individual client computers does not automatically make a network secure,
many network intrusions begin with a violation of a client's memory protection. A comprehensive hardware
segmentation system would make direct, automatic and continual protection of objects in memory available to
compilers and runtimes to improve performance and simplify enforcement.
2.3</p>
      </sec>
      <sec id="sec-1-2">
        <title>The Capability System Model: A Guide for a Comprehensive Segment Model</title>
        <p>
          In 1966 Computer Science began to clearly discuss a cohesive, decentralized system for program correctness
and security [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]. The result was the development of capability theory. A capability is an unforgeable token of
authority which can be used by a program component and which can be manipulated according to rules and
delegated to another program component. Computer scientists spent much e ort toward proving that capability
systems could be correct and safe and even constructed several hardware capability systems [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ], including
commercial systems from IBM [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ] and Intel [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. Many of these hardware capability systems were the pinnacle
of program-centered, segment-based computers as their memory protection systems often did not depend on a
central authority for inter-domain transactions, but on a set of hardware enforced rules that allowed safe, direct
sharing between program components. These hardware capability systems were mostly overlooked by industry
because they sacri ced performance for memory safety in a time when RISC processors were demonstrating how
much performance was available to simpli ed integrated circuit computers [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. However, we can learn from these
validated capability machines to build a comprehensive segment system for modern RISC processors.
3
        </p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>A Capability Segment Model for RISC Processors</title>
      <p>A segment mechanism that implements the capability model of safe, programmatic memory protection should
have three properties:
{ All memory accesses must be via segments.
{ The program must be able to restrict its segments but not expand them.
{ The program must be able to pass control between domains possessing di erent segments without granting
additional segments to either domain.</p>
      <p>The rst property, the non-bypassable property, implies an additional layer of indirection before the page
table that all memory requests must pass through.</p>
      <p>The second property, the guarded manipulation property, requires that segment descriptors be distinguished
from general purpose data by the processor hardware, not only in registers, but also in memory. This segment
manipulation property also implies new instructions for manipulating segment descriptors, or at least special
restrictions on general purpose instructions when manipulating segment descriptors.</p>
      <p>The third property, the protected call gate property, suggests a special ow control instruction with the ability
to safely leave a domain, as de ned by a set of segments, and enter a new domain.
3.1</p>
      <sec id="sec-2-1">
        <title>Our Instruction Set Architecture</title>
        <p>We have chosen to implement our RISC capability model by extending the 64-bit MIPS instructions set. We
selected MIPS because it has a well established 64-bit instruction set and adheres to a prototypical RISC
philosophy.</p>
        <p>We chose to implement the universal enforcement property by adding a segment table through which all
virtual addresses are o set before reaching the page table. General purpose loads and stores are implicitly o set
via a xed segment in the table and instruction fetches are o set via another xed segment. This xed implicit
o set model is very similar to the i286 segment model. We have also added a complete complement of new load
and store instructions which allow explicit use of other segments in the table.</p>
        <p>By storing segment descriptors in a distinct register le, separate from general purpose registers, we partially
ful ll the guarded manipulation property by not allowing general purpose manipulation. We also added a
dedicated set of segment descriptor manipulation instructions which only allow reducing the privilege of descriptors.
We decided to protect segment descriptors in memory using tags on general purpose memory locations rather
than using dedicated memory so that compilers could treat descriptors as they do pointers, including storing
them on the stack and passing them as arguments.</p>
        <p>We are able to ful ll the protected call gate property with a single-cycle instruction. We observe that a domain
can be trusted to manually store its own state and to \unpack" its own state when it is called. Since any number
of segment descriptors can be stored in a segment, it is only necessary to make a single segment available in
a new domain for the entire domain to be \unsealed". To facilitate this, we allow segments to be sealed by a
domain and passed to other domains to be used in protected calls. This simple primitive is su cient to support
protected procedure calls and is easily implemented as a standard single cycle instruction.</p>
        <p>Possibly the most radical feature mentioned above is tagged memory, which implies an extra bit for each word
in memory. We were able to implement this with a simple scheme which is practical in a traditional computer
system without modifying the external memory hierarchy. The tags for DRAM locations are stored together in
the top of DRAM and a small tag controller sits at the mouth of the memory controller on the processor and
provides a tag for every memory request made by the core. Our segment descriptors are 256 bits wide and must
be aligned in memory, thus we have an overhead of 1-bit for every 256-bits of data (i.e. 0.4%).
4</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Proposed Evaluation of the Capability Segment Model</title>
      <p>We have only begun to evaluate our segment implementation, but we hope to demonstrate that several key
applications will bene t from our RISC capability segment model.
4.1</p>
      <sec id="sec-3-1">
        <title>Protected Procedure Calls</title>
        <p>We would like to thoroughly study the low-level performance of crossing between protection domains using our
novel RISC style protected procedure calls. This will include various trust relationships: mutually untrusting
domains and calls with asymmetric trust. Our methodology here will likely focus on performance and compare
against x86 segmentation domain crossings as well as domain crossings using seperate address spaces.
4.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Sandboxing</title>
        <p>We would like to demonstrate that our capability segment model can conveniently and e ciently support
application sandboxing. State of the art application sandboxing depends on process separation using TLB enforcement.
Thus protected interactions which are logically procedure calls must be implemented as inter-process
communication involving the operating system and two independent memory spaces. Allowing program components to
run in a hardware enforced segment of the program's address space should allow a simpler communication model
and more e cient use of the TLB.</p>
        <p>
          We have experience with the Capsicum [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] sandboxing API in FreeBSD and have a version of gzip which uses
Capsicum sandboxes. We plan to implement the same sandbox architecture using user space segments. We will
note the complexity of the code modi cations required for each approach and will then measure how performance
scales with the number of sandboxes. We expect that a large number of sandboxes will place undue pressure on
the TLB and cause performance collapse in the Capsicum case but that the segment model will scale more closely
to the unprotected model. We have done an initial experiment which sandboxes libpng using both techniques.
While we have a methodology for measuring performance and at least some methodology for usability, we are
still working on a methodology for measuring relative security which will involve formal veri cation.
4.3
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>C/C++ Annotations</title>
        <p>Segments in our model can be used as general purpose pointers with a limited range of modi cations available.
David Chisnall has extended Clang and LLVM to accept annotations that implement pointers as segments to
ensure they are used according to programmer intent, including bounds checking and read, write, and execute
property enforcement. This approach is designed to allow simple security enhancement of existing code bases in
C which often have poor security properties. We plan to evaluate usability of the annotations by measuring the
number of lines that needed modi cation for added security bene t compared to pervasive bounds checking, and
by attempting to compare the clarity of resulting code.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Future Work/Collaboration Potential</title>
      <sec id="sec-4-1">
        <title>Enforcing Program Structure in the Linker</title>
        <p>Modern ELF les which are consumed by a linker to incorporate binaries into a running program specify segments
of the program along with properties for each segment. It should be possible to build a custom linker which
constructs a segment descriptor for each ELF segment and implements memory references as segment loads and
stores.</p>
      </sec>
      <sec id="sec-4-2">
        <title>Managed Language Runtimes</title>
        <p>Flexible segment hardware should allow managed language runtimes to be simpler, faster, and more secure. A
straight forward use of segment registers as pointers and of protected calls on invocations would provide strong
hardware protection of managed language objects.</p>
      </sec>
      <sec id="sec-4-3">
        <title>Static Analysis Assistance</title>
        <p>6</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusion</title>
      <p>Static analysis of computer programs for correctness has proven very promising. If segment manipulation was part
of the user space code stream, static analysis may be able to make a breakthrough in reducing proof complexity.
We hope to demonstrate that a user space segment model is useful in the context of the modern software stack
to enhance the security and correctness of computer programs. We also hope to demonstrate that a user space
capability segment model is implementable in a modern RISC processor without breaking the principles of RISC
design.</p>
      <p>An FPGA implementation of the 64-bit MIPS processor will be available for download this year and we
will welcome collaboration with researchers who would like to apply our capability segment model to their own
challenges in engineering secure software and systems.
6.1</p>
      <sec id="sec-5-1">
        <title>Acknowledgments</title>
        <p>We would like to thank our colleagues - especially Peter Neumann, Jonathan Anderson, Ross Anderson, Nirav
Dave, Ben Laurie, Steven J. Murdoch, Philip Paeps, Michael Roe, David Chisnall, Robert Norton and Khilan
Gudka.</p>
        <p>This PhD work is part of the CTSRD Project which is sponsored by the Defense Advanced Research Projects
Agency (DARPA) and the Air Force Research Laboratory (AFRL), under contract FA8750-10-C-0237. The
views, opinions, and/or ndings contained in this report are those of the authors and should not be interpreted
as representing the o cial views or policies, either expressed or implied, of the Defense Advanced Research
Projects Agency or the Department of Defense.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Chess</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Improving Computer Security using Extended Static Checking</article-title>
          .
          <source>In: Security and Privacy</source>
          ,
          <year>2002</year>
          . Proceedings. 2002
          <string-name>
            <given-names>IEEE</given-names>
            <surname>Symposium</surname>
          </string-name>
          <article-title>on</article-title>
          . pp.
          <volume>160</volume>
          {
          <fpage>173</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Childs</surname>
            <given-names>Jr</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Crawford</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>House</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Noyce</surname>
          </string-name>
          , R.:
          <article-title>A Processor Family for Personal Computers</article-title>
          .
          <source>Proceedings of the IEEE</source>
          <volume>72</volume>
          (
          <issue>3</issue>
          ),
          <volume>363</volume>
          {
          <fpage>376</fpage>
          (
          <year>1984</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Cleveland</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          : x86-64
          <source>Technology White Paper. Tech. rep., Advanced Micro Devices (02</source>
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Cowan</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wagle</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pu</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Beattie</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Walpole</surname>
          </string-name>
          , J.:
          <article-title>Bu er Over ows: Attacks and Defenses for the Vulnerability of the Decade</article-title>
          .
          <source>In: DARPA Information Survivability Conference and Exposition</source>
          ,
          <year>2000</year>
          .
          <source>DISCEX'00. Proceedings</source>
          . vol.
          <volume>2</volume>
          , pp.
          <volume>119</volume>
          {
          <fpage>129</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Denning</surname>
            ,
            <given-names>P.: Virtual</given-names>
          </string-name>
          <string-name>
            <surname>Memory. ACM Computing</surname>
          </string-name>
          <article-title>Surveys (CSUR) 2(3</article-title>
          ),
          <volume>153</volume>
          {
          <fpage>189</fpage>
          (
          <year>1970</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Dennis</surname>
            ,
            <given-names>J.B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Van Horn</surname>
            ,
            <given-names>E.C.</given-names>
          </string-name>
          :
          <article-title>Programming semantics for multiprogrammed computations</article-title>
          .
          <source>Commun. ACM</source>
          <volume>9</volume>
          (
          <issue>3</issue>
          ),
          <volume>143</volume>
          {
          <fpage>155</fpage>
          (
          <year>1966</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Feiertag</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Neumann</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>The Foundations of a Provably Secure Operating System (PSOS)</article-title>
          .
          <source>In: Proceedings of the National Computer Conference</source>
          . vol.
          <volume>48</volume>
          , pp.
          <volume>329</volume>
          {
          <issue>334</issue>
          (
          <year>1979</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Fotheringham</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          :
          <article-title>Dynamic Storage Allocation in the Atlas Computer, Including an Automatic Use of a Backing Store</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>4</volume>
          (
          <issue>10</issue>
          ),
          <volume>435</volume>
          {
          <fpage>436</fpage>
          (
          <year>1961</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Frame</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Turner</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Introducing New ARM Cortex-R Technology for Safe and Reliable Systems</article-title>
          .
          <source>Tech. rep.</source>
          ,
          <source>ARM</source>
          (03
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Gudka</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Watson</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hand</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Laurie</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Madhavapeddy</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Exploring Compartmentalisation Hypotheses with SOAAP</article-title>
          . In: Workshop paper, Adaptive Host and
          <article-title>Network Security (AHANS</article-title>
          <year>2012</year>
          )
          <article-title>(</article-title>
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Hansen</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Linton</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mayo</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Murphy</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Patterson</surname>
            ,
            <given-names>D.:</given-names>
          </string-name>
          <article-title>A Performance Evaluation of the Intel iAPX 432</article-title>
          .
          <source>ACM SIGARCH Computer Architecture News</source>
          <volume>10</volume>
          (
          <issue>4</issue>
          ),
          <volume>17</volume>
          {
          <fpage>26</fpage>
          (
          <year>1982</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Houdek</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Soltis</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ho</surname>
            <given-names>man</given-names>
          </string-name>
          , R.:
          <article-title>Ibm System/38 Support for Capability-based Addressing</article-title>
          .
          <source>In: Proceedings of the 8th Annual Symposium on Computer Architecture</source>
          . pp.
          <volume>341</volume>
          {
          <fpage>348</fpage>
          . IEEE Computer Society Press (
          <year>1981</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Levy</surname>
            ,
            <given-names>H.M.</given-names>
          </string-name>
          :
          <article-title>Capability-Based Computer Systems</article-title>
          . Butterworth-Heinemann, Newton, MA, USA (
          <year>1984</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Needham</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Walker</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          : The Cambridge CAP Computer and
          <article-title>its Protection System</article-title>
          .
          <source>Operating Systems</source>
          Review pp.
          <volume>1</volume>
          {
          <issue>10</issue>
          (
          <year>1977</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Parrend</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Frenot</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Classi cation of Component Vulnerabilities in Java Service Oriented Programming (SOP) Platforms</article-title>
          . Component-Based Software Engineering pp.
          <volume>80</volume>
          {
          <issue>96</issue>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Randell</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kuehner</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Dynamic Storage Allocation Systems</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>11</volume>
          (
          <issue>5</issue>
          ),
          <volume>297</volume>
          {
          <fpage>306</fpage>
          (
          <year>1968</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Saltzer</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schroeder</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>The protection of information in computer systems</article-title>
          .
          <source>Proceedings of the IEEE</source>
          <volume>63</volume>
          (
          <issue>9</issue>
          ),
          <volume>1278</volume>
          {1308 (
          <year>September 1975</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Schroeder</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Saltzer</surname>
            ,
            <given-names>J.:</given-names>
          </string-name>
          <article-title>A hardware architecture for implementing protection rings</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>15</volume>
          (
          <issue>3</issue>
          ) (
          <year>March 1972</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Watson</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Neumann</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Woodru</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Anderson</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Anderson</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dave</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Laurie</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moore</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Murdoch</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Paeps</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          , et al.:
          <article-title>CHERI: A Research Platform Decon ating Hardware Virtualization and Protection</article-title>
          . In: Workshop paper, Runtime Environments, Systems, Layering and Virtualized Environments (RESoLVE
          <year>2012</year>
          ) (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>Watson</surname>
            ,
            <given-names>R.N.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Anderson</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Laurie</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kennaway</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Capsicum: Practical capabilities for Unix</article-title>
          .
          <source>In: Proceedings of the 19th USENIX Security Symposium. USENIX (August</source>
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>