cite: CHERI Background @RISC-V SIG CHERI
More informative introductions:
Code pointers in Cheri is protected from being corrupted. Can it prevent the code reuse attack also? If not, how to enhance it?
Code reuse that depends on the corruption of return address might be prevented if no memory error can be used to overwrite the return address.
Code reuse by data corruption (data oriented programming) might be prevented if data is well protected.
The heavy and deep motivations of CHERI: Motivations
2019 v7: Temporal memory safety
C language compilation mode where all pointers are capabilities in 2015-ASPLOS 5;
Use of capabilities to implement a safe JNI, 2017-ASPLOS6.
A complete userspace execution environment with CheriABI: 2019-ASPLOS7;
Address validity associates protection properties with regions of address space, (such as a virtual page), regardless what is stored in the region.
Pointer safety associates protection properties with object references, a higher abstraction over the raw memory regions.
Capability systems are hardware, software, or distributed systems designed to implement the principle of least privilege[^11, ^12].
Capabilities are unforgeable tokens of authority granting rights to objects in the system. They can be selectively delegated between constrained programs to enforce security policies.
Software compartmentalization, as known as privilege separation, mitigates vulnerabilities by decomposing applications into isolated components – each granted only the rights it requires to operate.
Compartmentalization granularity describes the degree of program decompositioin. Fine-grained compartmentalization improves mitigation by virtue of the principle of least privilege: attackers must exploit
process-granularity fault isolation, but
conflated protection and translation: the granularity of both is one virtual page. But
However, bounds and permissions must be initialized correctly by software – e.g. stack allocator, heap allocator, dynamic linker
(v5:) Cheri allows software privilege to be minimized at two levels of abstraction.
architectural least privilege: memory capability.
application-level least privilege: software compartmentalization using object capabilities.
If you could revise
the fundmental principles of
computer system design
to improve security...
... what would you change?