学术论坛 | 基于硬件事务内存的安全增强机制
近些年,在学术界和工业界出现了一些利用非安全相关的硬件特性来增强系统安全的机制。在本文中,我们主要介绍其中的两个工作,它们都是基于硬件事务内存特性,其中一个用于增强虚拟机自省技术,另外一个用于防止私钥泄露。
事务内存(Transactional Memory),是在程序并发控制领域提出的一套完整的解决方案。传统的基于“锁”的程序并发控制面临了包括低可扩展性、死锁、活锁在内的一系列问题,而事务内存,作为乐观并发控制(Optimistic Concurrency Control,OCC)的一种解决方案,假设在大多情况下,并发的事务不会相互影响,只有在实际发生冲突的情况下才会发生事务的回滚。因此在事务间数据冲突较少的场景中,基于事务内存的程序并发控制能够获得更好的性能。在过去的近二十年中,事务内存都是通过软件来实现的。
2014年,Intel在其第四代Core处理器(代号Haswell)上装配了硬件支持的事务同步扩展(Transactional Synchronization Extensions,TSX)机制,其中一套软件接口Restricted Transactiona lMemory(RTM),成为市面上首个为程序员提供的硬件事务内存指令集。RTM在处理器缓存中为事务维护了内存地址的读写集合,从而在多核之间的缓存一致性协议中实现了一套不同事务访问数据的冲突检测机制。
和软件事务内存相比,RTM提供了更好的性能,但是也由于硬件的局限性,造成了其功能上的一些缺陷。比如某些系统事件(如中断,系统调用等)会无条件中止(abort)执行中的事务;另外,RTM维护的读写集合也是有限的,在我们的测试中,RTM维护了4M的读集合和32K的写集合,当事务中的数据超过了读写结合的大小,事务同样会被中止。
TxIntro是一个利用RTM来增强虚拟机自省技术的机制。虚拟机自省,即在虚拟机外部对虚拟机的状态进行分析,从而达到更高的隔离性和安全性。但是当前的虚拟机自省技术存在三个问题:第一,没有一套机制可以及时地触发虚拟机自省;第二,在虚拟机自省过程中需要暂停虚拟机,造成性能下降;第三,即使暂停了虚拟机,仍然会发生数据读取不一致的现象。针对这些问题,TxIntro将一些关键数据结构(如系统调用表)放入RTM的读集合中,任意对其的恶意修改都会及时触发虚拟机自省。
另外,它将自省过程置于事务之中,这样即使不暂停虚拟机,也能防止虚拟机自省过程中数据读取的不一致,因为如果虚拟机在该过程中对相关数据进行了修改,RTM就会中止这个事务,使其重新执行。
除此之外,为了解决RTM的局限性,TxIntro提出了两个创新的优化技术,从而大幅度减小了虚拟机自省过程中事务内存的读写集合。TxIntro被用于虚拟机Rootkit的检测,它使得虚拟机自省技术满足了及时性、同步性和一致性,并最小化了对虚拟机的性能影响。
Mimosa是一个利用RTM防止秘钥泄露的系统。在传统的加解密过程中,秘钥会被加载到内存中,任何系统中存在的内存泄露的漏洞,或者其它类似于冷启动(coldboot)的攻击都可能窃取秘钥。Mimosa借鉴了含羞草一旦被触碰就会合上叶子保护自己的这一特点,提出一套利用事务内存特性保护秘钥的方法。
具体的做法如下:最初秘钥被加密存储在内存中,当需要利用它加解密数据时,先创建一个事务,在该事务中解密该秘钥,获得秘钥的明文,之后的加解密操作都在这个事务中完成,并在事务结束之前清除内存中秘钥的明文。如果在事务执行过程中有其它进程(包括内核进程)读取该秘钥的明文,则会中止该事务,由于该事务尚未被提交,因此其它进程无法获得秘钥的明文信息,从而防止了秘钥的泄露。
为了克服RTM的限制,Mimosa系统做了大量的性能调节的工作,使得整套机制能够顺利完成。总的来说,Mimosa的原理就是利用事务内存的特性,在秘钥被无关进程访问时清除它,从而防止其泄露。
计算机在发展过程中会引入越来越多的硬件特性,其中的很多并非安全相关,比如RTM,其初衷在于提高程序并发控制的性能。但是如果能有效地利用这些硬件的特性,就能够在现有的硬件资源中进一步提高系统的安全等级。
(本文作者:刘宇涛 陈海波)