论文标题
单纯形:重新利用英特尔内存保护扩展信息,以隐藏信息
Simplex: Repurposing Intel Memory Protection Extensions for Information Hiding
论文作者
论文摘要
随着软件利用的迅速增加,过去几十年来,已经看到了一些硬件级功能,以增强安全性(例如,英特尔MPX,ARM Trustzone,Intel SGX,Intel CET)。由于安全性,性能和/或可用性问题,这些功能引起了稳定的批评。这样的功能是Intel内存保护扩展(MPX),这是指令集架构扩展,有希望的空间内存安全性,由于硬件加速界限检查,其性能成本较低。但是,最近对MPX的调查发现,这种调查既不像基于软件的空间内存安全性那样具有性能,准确或精确。直接结果,对MPX的编译器和操作系统支持即将死亡,英特尔已经开始生产没有MPX的桌面CPU。尽管如此,鉴于MPX的无处不在,它提供了一种出色但未充分利用的硬件资源,可用于安全目的。在本文中,我们提出了单纯形,这是一个将MPX寄存器作为通用寄存器重新填充的库框架。使用单纯形,我们演示了如何将MPX寄存器直接用于将敏感信息(例如加密密钥)直接在硬件上存储。我们评估了单纯性的性能,并发现其开销足够小,可以在最密集的代码中部署其部署。我们重构了字符串。H缓冲区操纵功能,并发现了几何平均0.9%的性能开销。我们还修改了Deepsjeng和LBM规格CPU2017基准,以使用单纯形,并分别发现1%和0.98%的性能开销。最后,我们研究了MPX上下文在多进程和多线程程序方面的行为。
With the rapid increase in software exploits, the last few decades have seen several hardware-level features to enhance security (e.g., Intel MPX, ARM TrustZone, Intel SGX, Intel CET). Due to security, performance and/or usability issues these features have attracted steady criticism. One such feature is the Intel Memory Protection Extensions (MPX), an instruction set architecture extension promising spatial memory safety at a lower performance cost due to hardware-accelerated bounds checking. However, recent investigations into MPX have found that is neither as performant, accurate, nor precise as cutting-edge software-based spatial memory safety. As a direct consequence, compiler and operating system support for MPX is dying, and Intel has begun to manufacture desktop CPUs without MPX. Nonetheless, given how ubiquitous MPX is, it provides an excellent yet under-utilized hardware resource that can be aptly salvaged for security purposes. In this paper, we propose Simplex, a library framework that re-purposes MPX registers as general purpose registers. Using Simplex, we demonstrate how MPX registers can be used to store sensitive information (e.g., encryption keys) directly on the hardware. We evaluate Simplex for performance and find that its overhead is small enough to permit its deployment in all but the most performance-intensive code. We refactored the string.h buffer manipulation functions and found a geometric mean 0.9% performance overhead. We also modified the deepsjeng and lbm SPEC CPU2017 benchmarks to use Simplex and found a 1% and 0.98% performance overhead respectively. Finally, we investigate the behavior of the MPX context with regards to multi-process and multi-thread programs.