Page 151 - 《软件学报》2020年第10期
P. 151
张倩颖 等:抗电路板级物理攻击的操作系统防御技术研究 3127
Peapods [61] 是一种基于 LLVM 的编译器增强工具,旨在利用事务内存为软件加密引擎中的密钥提供用户模
式的保护.Peapods 在编译阶段解析程序开发人员指定的要保护的敏感变量(密钥)和代码片断(密码学计算),将
其作为 peapod 封装在事务中,并为程序添加初始化代码,用于生成 AES 主密钥,用主密钥加密敏感变量,以及将
主密钥加载到 XMM 寄存器中.在执行阶段,Peapods 采用事务内存保护密钥,将密码学计算作为事务在 CPU L1
数据缓存中执行,以保证其原子性,事务结束前会重新加密密钥和中间计算结果,以确保敏感变量仅以密文形式
出现在 RAM 中.Peapods 支持将耗时的密码学计算拆分为多个事务以提高性能,采用 peapods 保护开源加密引
擎 PolarSSL 中的 RSA-2048 私钥计算时,引入的性能开销约为 10%.
3.1.2 内核层密钥和密码算法保护方案
这类方案在内核层实现,通常作为操作系统补丁.这类方案用于保护密钥的片内存储资源通常具有以下特
点:(1) 能够特权占用.为防止用户空间进程访问密钥,密钥存储资源应能够设置为仅特权级别才可以访问;
(2) 能够不将数据泄露到片外 RAM.密钥存储资源应能够设置为不将数据存储到片外 RAM 中,如不在上下文
之中或不写回到片外 RAM;(3) 被占用不影响系统运行.密钥存储资源在系统运行期间由密钥保护机制独占使
用,不能用于预期用途,缺少该资源应仍能保持大部分应用程序的二进制兼容性;(4) 具有足够保护密钥的容量.
密钥存储资源应具备密钥存储和密码学计算所需的存储空间.基于以上特点,许多保护方案选择调试寄存器、
SSE 扩展的 XMM 寄存器组等作为密钥存储资源.为防止密码学计算过程中上下文切换将敏感数据泄漏到片外
RAM,或其他内核模块访问敏感数据,密钥保护机制通常以原子方式执行.
内核层密钥和密码算法保护方案有 x86 架构中保护对称密码算法的方案 AESSE [63] 、TRESOR [64] 、
Loop-Amnesia [65] 、FrozenCache [66] ,ARM 架构中保护对称密码算法的方案 ARMORED [67,68] 、Key-hiding [69] 、
Anti-forensics [70] ,x86 架构中保护非对称密码算法的方案 PRIME [71] 、文献[72]中的方案、RegRSA [73] 、Copker [74] 、
Mimosa [75] ,以及利用 GPU 保护对称和非对称密码算法的方案 PixelVault [76] .
在 x86 架构对称密码算法保护方面,AESSE [63] 是针对 x86 架构上 Linux 操作系统的 AES 抗冷启动攻击实
现.与 Parker 等提出的方案 [60] 类似,AESSE 不将密钥存储在片外 RAM 中,而是将一个密钥和与密钥有关的轮密
钥和中间状态等中间计算结果直接存储在 SSE 寄存器中,并在 SSE 寄存器中实现 AES 算法,确保密钥和任何中
间计算结果不会离开 CPU.AESSE 在内核模式原子执行,SSE 仅在原子代码段中启用,以防止 SSE 寄存器中的敏
感数据被读取或覆盖以及在上下文切换时被保存到片外 RAM 中.受限于 SSE 寄存器的容量,AESSE 对每个 128
bit 输入块的加解密运算都需要重新计算 10 个轮密钥以节约轮密钥的存储空间,造成较高的性能开销,其速度比
内核标准 AES 慢 6 倍.AESSE 的另外一个问题是兼容性:用 SSE 寄存器长期存储 AES 密钥,影响使用 SSE 扩展
的多媒体、数学和 3D 等应用.TRESOR [64] 是 AESSE 作者提出的后继方案,旨在解决 AESSE 在性能和兼容性两
方面的问题,其基本思路与 AESSE 相同,但是不需要长期占用 SSE 寄存器,并大幅提高了 AES 加解密性能.为尽
量避免引起兼容性问题,TRESOR 没有使用 SSE 寄存器长期存储密钥,而是将 x86 架构中的调试寄存器用于长
期存储 AES 密钥,仅在每次加解密时将 SSE 寄存器用于加载密钥及存储轮密钥和中间状态,因而无需长期占用
SSE 寄存器.为提高算法性能,TRESOR 采用了用于硬件加速 AES 实现的 Intel AES-NI(Intel AES new
instructions)扩展指令集 [77,78] .尽管在每次加解密时仍需重新计算轮密钥,但是通过使用 AES-NI 指令,TRESOR
可达到与标准 AES 相同或更好的性能.该方案的一个问题是:长期占用调试寄存器的全部断点寄存器,运行
TRESOR 的系统无法再设置硬件断点,会对 GDB 等调试程序造成影响.Loop-Amnesia [65] 是一个与 TRESOR 类
似的方案,其与 TRESOR 的不同点在于:(1) 使用 MSRs(model-specific registers)中的性能计数寄存器而不是调
试寄存器长期存储 AES 密钥;(2) 将主密钥存储在性能计数寄存器中,将其他密钥经主密钥加密后存储在片外
RAM 中,以这种方式用存储一个密钥的能力支持对多密钥的保护;(3) 基于 Linux 的开源磁盘加密软件包
loop-AES [79] 实现,不使用 AES-NI 指令,导致其性能低于 TRESOR 和标准 AES;(4) 使用 x86-64 架构中全部通用寄
存器而不是 SSE 寄存器存储轮密钥.由于占用了 MSRs 的性能计数寄存器,运行 Loop-Amnesia 的系统不能使用硬
件辅助的性能分析器,会影响硬件性能分析工具的正常运行.上述方案仅能抵抗冷启动攻击这一种板级物理攻击,
不能抵抗 DMA 攻击.Blass 等提出对类似 TRESOR 和 Loop-Amnesia 的方案的一种 DMA 攻击 TRESOR-