spectre攻击建模及防护设想


本文笔者将基于Spectre攻击中的V1,V2,V4这三个变种,来尝试对Spectre类攻击建立抽象模型,并基于模型构思Spectre类攻击可能的防护方式

Spectre攻击建模

该类攻击的本质为处理器的预测执行(Speculative execution)和微架构侧信道之间的配合联动,从而导致用户信息泄露。

目前笔者研究的三个Spectre攻击变种,其大体逻辑与攻击流程见下表

变体 名称 核心机制 攻击条件 & 流程
v1 Bounds Check Bypass (边界检查绕过) 条件分支预测 (Conditional Branch Prediction) 条件 :代码中存在 if (x < array1_size)之类的边界检查。 流程
1. 攻击者训练分支预测器(多次输入合法的 x),使其倾向于预测“跳转成立”。
2. 攻击者输入越界的 x
3. CPU预测检查通过,推测执行越界读取 array1[x](秘密数据),并将其作为索引访问 array2(ASCII字符 256*CachelineSize)
4. array2 的特定Cache Line被加载。
5. CPU发现预测错误,回滚状态,但Cache变化保留。
v2 Branch Target Injection (分支目标注入) 间接分支预测 (Indirect Branch Prediction) 条件 :存在间接跳转指令(如虚函数调用、函数指针),且攻击者能操控BTB(分支目标缓冲)。 流程
1. 攻击者污染BTB,让CPU误以为某个间接跳转的目标是攻击者指定的“Gadget代码”(通常存在于共享库中)。
2. 受害者执行该跳转时,CPU推测执行跳转到Gadget。
3. Gadget代码执行类似v1的侧信道操作。
4. 预测失败回滚,但cache泄露完成。
v4 Speculative Store Bypass (推测性存储绕过) 内存依赖预测 (Memory Disambiguation) 条件 :后序的Load指令依赖前序的Store指令,但地址计算尚未完成。 流程
1. 内存依赖预测器(Memory Disambiguation Predictor)猜测当前的Load与之前的Store 无关 (地址不冲突)。
2. CPU允许Load指令 提前(乱序)执行 ,读取了旧的内存值(或错误值)。
3. 利用该值进行侧信道访问。
4. 地址计算完成,发现冲突,回滚。

综合以上变种运用条件,我们可以抽象出该类攻击达成所必须满足的核心要素:

  1. 预测执行 : 存在一个短暂、会被丢弃的窗口期,在这个期间内,投机操作可以获取不被允许的秘密信息
  2. 微架构组件的共享特性: 在预测执行结束以后,基于cache、分支预测器等组件的共享特性,其内部状态将会出现对应变化

基于该条件细化条件为状态机

graph TB
    %% 8.8.0 兼容修复版:移除敏感字符
  
    subgraph Attacker_Domain [攻击者域]
        InputGen[1. 输入生成与训练]
        Probe[5. 侧信道探测]
        Analysis[6. 统计分析与去噪]
        SecretRecovered((秘密恢复))
    end

    subgraph CPU_Core [处理器微架构]
  
        subgraph Frontend [前端预测单元]
            PHT[PHT或BTB状态]
            Prediction{预测逻辑}
        end
  
        subgraph Execution [执行引擎]
            NormalPath[正常路径]
            TransientPath[瞬态路径]
            Squash[回滚机制]
        end
  
        subgraph Backend [后端资源]
            Regs[寄存器-可回滚]
            Cache[Cache-持久化]
        end
    end

    %% 攻击流程连接
    InputGen --训练欺骗--> PHT
    PHT --误导--> Prediction
  
    Prediction --Check Pass--> NormalPath
    Prediction --Speculative execution 条件1--> TransientPath
  
    TransientPath --访问秘密--> Cache
    NormalPath --正常访问--> Cache
  
    TransientPath --触发--> Squash
    Squash --恢复--> Regs
    Squash --不恢复--> Cache
  
    %% 侧信道提取
    Cache --条件2 共享资源区域残留数据--> Probe
    Probe --原始数据--> Analysis
    Analysis --多次采样--> SecretRecovered

    %% 样式
    style TransientPath fill:#f96,stroke:#333
    style Cache fill:#9cf,stroke:#333
    style Analysis fill:#f96,stroke:#333,color:#fff

四步解析:

  1. Trigger: attacker构造特殊输入序列或反复执行特殊数据,训练CPU的预测器
  2. Predict: CPU基于错误经验,遇到非法输入,或存在未知数据时,mis-predict错误路径,进入瞬态窗口
  3. Side Effect :瞬态窗口中所读取到的secret将通过代码逻辑,转换为架构上的某一状态(例如Cache痕迹)。
  4. Persistence :CPU 与真实程序流对比后发现预测错误,Rollback了寄存器等逻辑状态,但未清除架构状态 (Cache 残留),实现了瞬态窗口的信息留存。

防护设想及建模


文章作者: Yssx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Yssx !
评论
  目录