一群我格拉茨科技大学的研究人员 (奥地利),以前以开发 MDS、NetSpectre、Throwhammer 和 ZombieLoad 攻击而闻名, 揭示了一种新的侧信道攻击 (CVE-2021-46778) AMD 处理器的调度程序队列中用于调度指令在 CPU 的不同执行单元中的执行。
攻击,称为 SQUIP,允许确定在另一个过程中的计算中使用的数据 或虚拟机或组织进程或虚拟机之间的隐藏通信通道,允许数据交换而无需通过系统访问控制机制。
该 基于第 1、第 2 和第 3 Zen 微架构的 AMD CPU 一代(AMD Ryzen 2000-5000、AMD Ryzen Threadripper、AMD Athlon 3000、AMD EPYC) 被影响到的 当使用同时多线程 (SMT) 技术时。
现代 CPU 使用超标量设计,同时执行多条指令以最大限度地提高性能。 这些 CPU 通过几个阶段处理流水线中的指令:(1) 获取,(2) 解码,(3) 编程/执行,以及 (4) 获取。
攻击基于评估争用发生的程度(争用级别)在不同的调度程序队列中,并通过在同一物理 CPU 上的另一个 SMT 线程中执行的检查操作开始时测量延迟来完成。 为了分析内容,使用了 Prime+Probe 方法,该方法涉及用一组参考值填充队列,并通过测量重新加载时对它们的访问时间来确定更改。
程序/执行阶段可以无序地处理指令以最大化指令级并行性。 我们简要描述每个阶段:
-搜索。 CPU 从 L1i 高速缓存中查找要执行的下一条指令。
-解码。 为了高效执行,将获得的指令(宏操作)解码为一个或多个更简单的微操作(µops)并放入 µop 队列中。 这些微操作被馈送到后端,在那里它们被调度和执行。
- 计划/运行。 调度器跟踪哪些微操作准备好执行(有可用的输入)并动态地将它们(无序)调度到可用的执行单元。 一个 CPU 内核有多个执行单元,可以有多个算术和逻辑单元 (ALU)、分支执行单元 (BRU)、地址生成单元 (AGU)。
在实验期间 研究人员能够完全重建 4096 位 RSA 私钥 用于使用 mbedTLS 3.0 密码库创建数字签名,该库使用蒙哥马利算法将数字提升到幂模数。 需要 50.500 条轨迹来确定密钥。
总攻击时间为 38 分钟。 演示了在不同进程和受 KVM 管理程序控制的虚拟机之间提供泄漏的攻击变体。 还表明,该方法可用于编排虚拟机之间以 0,89 Mbit/s 的速率和进程之间以 2,70 Mbit/s 的速率进行的隐蔽数据传输,错误率小于 0,8、XNUMX%。
CPU 内核被划分为多个逻辑内核或线程,执行独立的指令流,但共享 L1i 缓存等资源。 这些线程的微操作也动态共享执行单元以允许更高的总利用率。 内核不同部分的分区。
它是通过竞争性交换来完成的。 AMD Zen 架构允许两个线程
每个核心。 这些线程可以来自单个程序,也可以来自不同的程序,由操作系统管理。
英特尔处理器不易受到影响 攻击,因为它们使用单个调度队列,而易受攻击的 AMD 处理器为每个执行单元使用单独的队列。
作为阻止信息泄露的解决方案, AMD 推荐 那个开发商 使用始终在恒定时间内执行数学计算的算法,无论正在处理的数据的性质如何,并且还可以防止基于秘密数据的分叉。
最后,如果您有兴趣能够了解更多,可以在 以下链接.