ARM64 GIC时序侧信道

摘要 ARM64 通用中断控制器在分发硬件中断时,会短暂挂起当前执行的指令流。在核心保存上下文期间,被中断的指令序列可能已经执行了部分加载指令,将敏感数据预取到 L1 数据缓存。攻击者若能够控制中断到达的精确时机(例如通过软件生成的中断 SGI),可在安全世界(EL3)的关键指令(如 eret)执行前中断它,使预加载的安全世界缓存行在普通世界可被探测,从而绕过 TrustZone 的隔离,窃取安全世界的加密密钥或敏感数据。 GIC 与 ARM64 异常入口的时序窗口 GICv3 中断分发路径 ARM64 平台的通用中断控制器(GIC)负责管理所有中断源,并向 CPU 核心分发。GICv3 由分发器(Distributor)和再分发器(Redistributor)以及 CPU 接口组成。软件生成中断(SGI)通过写 ICC_SGI0R_EL1 或 ICC_SGI1R_EL1 寄存器来触发,可指定目标核心和中断 ID。攻击者如果具备在普通世界 EL1 的代码执行能力,便可以向自身或其他核心注入 SGI,制造精确的本地中断。 当中断到达核心时,CPU 完成当前指令的边界,然后进入异常入口流程:保存处理器状态到栈,跳转到中断向量。ARM64 的中断向量表定义了不同异常级别和类型的入口。关键点是,从异常被触发到第一条异常处理指令执行之间存在固定的指令流水线延迟,并且在这个窗口内,处理器可能已经执行了后续的部分指令(由于分支预测和推测执行)。 安全世界与普通世界的切换 在 TrustZone 架构中,普通世界(Normal World)和安全世界(Secure World)的切换通过 smc 指令进入 EL3,或在 EL3 中通过 eret 返回普通世界。当安全世界正在执行敏感操作(如加密、认证)时,若被中断抢占,处理器必须先保存安全世界上下文,然后跳到中断处理程序。如果该中断处理程序位于普通世界(例如在 EL1 内核中),则会进行一次世界切换(从安全世界到普通世界),这涉及缓存和 TLB 的维护操作。 [EL0 用户态代码] │ ├─ (发生异常/中断, 如 SVC / IRQ) ▼ [硬件自动行为 (CPU Core)] ├─…

AMD Inception++

摘要 AMD Zen 4 架构引入增强的返回栈缓冲区预测机制,其 RSB 深度仅 32 条,且回填策略在 RSB 下溢时依赖 BTB 预测。安全研究人员在 2024 年发现,Zen 4 的 RSB 下溢行为与 BTB 训练之间的交互存在根本性裂缝:攻击者可构造深层调用链使 RSB 耗尽,随后用精心布局的间接跳转训练 BTB,使 RSB 下溢预测跳转到攻击者控制的 Spectre 小工具。该攻击可绕过 Zen 4 的 IBPB 缓解,因为 RSB 操作与 BTB 训练不在同一清理路径。 Zen 4 分支预测器的微架构景观 返回栈缓冲区 返回栈缓冲区(RSB)是高性能处理器中用于预测 RET 指令目标的专用预测器。当 CPU 执行 CALL 指令时,将返回地址(即 CALL 之后的下一条指令地址)压入 RSB;当执行 RET 指令时,从 RSB 弹出顶部条目作为预测目标。这种机制使得函数返回预测的精度极高——正常情况下,CALL 与 RET 严格配对,RSB 的栈结构天然匹配调用约定。 +—————————————+ <– 硬件栈底 (Bottom) | Entry [N-1]…