Blindfold: Confidential Memory Management by Untrusted Operating System
Caihua Li, Seung-seob Lee, Lin Zhong
TL;DR
Blindfold addresses the challenge of confidential memory management with an untrusted OS by introducing Guardian, a small trusted component that mediates memory access through switching page and interrupt tables and a capability-based semantic interface. It preserves OS-level optimizations by providing an encrypted view for non-semantic accesses and a secure ABI for common kernel operations, avoiding full data encryption. The approach is architecture-agnostic and demonstrated on ARMv8-A/Linux, with around 400 lines of kernel modifications and Guardian implemented in about 2.2K lines of Rust code. Evaluation shows competitive performance and a runtime TCB smaller than prior CC systems, while maintaining Linux functionality for memory management except for memory compression.
Abstract
Confidential Computing (CC) has received increasing attention in recent years as a mechanism to protect user data from untrusted operating systems (OSes). Existing CC solutions hide confidential memory from the OS and/or encrypt it to achieve confidentiality. In doing so, they render OS memory optimization unusable or complicate the trusted computing base (TCB) required for optimization. This paper presents our results toward overcoming these limitations, synthesized in a CC design named Blindfold. Like many other CC solutions, Blindfold relies on a small trusted software component running at a higher privilege level than the kernel, called Guardian. It features three techniques that can enhance existing CC solutions. First, instead of nesting page tables, Guardian mediates how the OS accesses memory and handles exceptions by switching page and interrupt tables. Second, Blindfold employs a lightweight capability system to regulate the kernel semantic access to user memory, unifying case-by-case approaches in previous work. Finally, Blindfold provides carefully designed secure ABI for confidential memory management without encryption. We report an implementation of Blindfold that works on ARMv8-A/Linux. Using Blindfold prototype, we are able to evaluate the cost of enabling confidential memory management by the untrusted Linux kernel. We show Blindfold has a smaller runtime TCB than related systems and enjoys competitive performance. More importantly, we show that the Linux kernel, including all of its memory optimizations except memory compression, can function properly for confidential memory. This requires only about 400 lines of kernel modifications.
