libmpk:英特尔内存保护密钥的软件抽象层
密码学与安全
2018-11-20 v1
摘要
英特尔内存保护密钥(MPK)是一项新的硬件特性,用于在不修改页表的情况下支持对页组进行线程本地权限控制。遗憾的是,其当前的硬件实现与软件支持存在安全性、可扩展性和语义鸿沟问题:(1)MPK 易受保护密钥释放后使用(protection-key-use-after-free)和保护密钥损坏攻击;(2)受硬件限制,MPK 无法良好扩展;(3)MPK 与 mprotect() 并非完全兼容,因为它不支持跨线程的权限同步。本文提出 libmpk,一种面向 MPK 的软件抽象层。libmpk 对保护密钥进行虚拟化,以消除保护密钥释放后使用和保护密钥损坏问题,同时支持海量内存页组。libmpk 还防止对其元数据的未授权写入,并支持线程间密钥同步。我们将 libmpk 应用于三个真实应用:OpenSSL、JavaScript JIT 编译器和 Memcached,用于内存保护与隔离。评估显示,与不安全版本相比,libmpk 引入的性能开销可忽略不计(<1%),并且相比使用 mprotect() 的安全等效方案,将其性能提升了 8.1 倍。libmpk 的源代码将公开提供并作为开源项目维护。
引用
@article{arxiv.1811.07276,
title = {libmpk: Software Abstraction for Intel Memory Protection Keys},
author = {Soyeon Park and Sangho Lee and Wen Xu and Hyungon Moon and Taesoo Kim},
journal= {arXiv preprint arXiv:1811.07276},
year = {2018}
}