ARM 和 Intel CPU 上指令执行时间对数据的依赖性

Eric Biggers 是 Adiantum 密码的开发者之一,也是 Linux 内核 fscrypt 子系统的维护者,他提出了一组补丁来阻止因英特尔处理器的一个功能而引起的安全问题,该功能不能保证不同处理数据的恒定执行时间。 从 Ice Lake 系列开始,该问题就出现在英特尔处理器中。 ARM 处理器中也存在类似的问题。

指令的执行时间对这些指令中处理的数据的依赖性的存在被补丁的作者视为处理器中的漏洞,因为这种行为不能保证系统中执行的加密操作的安全性。 加密算法的许多实现都是为了确保数据不会影响指令的执行时间而设计的,违反这种行为可能会导致侧通道攻击的产生,这种攻击会根据处理时间的分析来恢复数据。

潜在地,运行时数据依赖性也可用于发起攻击以从用户空间确定内核数据。 根据 Eric Biggers 的说法,即使对于执行加法和异或运算的指令,以及专门的 AES-NI 指令,默认情况下也不提供恒定的执行时间(未经测试证实的信息,根据其他数据,存在 XNUMX 的延迟)向量乘法和位计数期间的循环)。

为了禁用此行为,Intel 和 ARM 提出了新标志:ARM CPU 的 PSTATE 位 DIT(数据独立时序)和 Intel CPU 的 MSR 位 DOITM(数据操作数独立时序模式),以恒定的执行时间返回旧行为。 Intel 和 ARM 建议根据关键代码的需要启用保护,但实际上,关键计算可能发生在内核和用户空间的任何位置,因此我们正在考虑始终为整个内核启用 DOITM 和 DIT 模式。

对于 ARM 处理器,Linux 6.2 内核分支已经采用了改变内核行为的补丁,但这些补丁被认为是不够的,因为它们只覆盖了内核代码,并没有改变用户空间的行为。 对于英特尔处理器,是否包含保护仍处于审查阶段。 该补丁对性能的影响尚未测量,但根据英特尔文档,启用 DOITM 模式会降低性能(例如,通过禁用某些优化,例如特定于数据的预加载),并且在未来的处理器型号中,性能降低可能会加剧。

来源: opennet.ru

添加评论