Santhosh-2308/cache-side-channel-simulator
GitHub: Santhosh-2308/cache-side-channel-simulator
一个基于 Python 的缓存侧信道攻击模拟器,通过模拟受害者秘密依赖的内存访问和攻击者的时间测量,直观展示微架构攻击如何利用缓存命中与未命中的时间差泄露秘密信息。
Stars: 0 | Forks: 0
# 缓存侧信道模拟器
## 概述
本项目通过一个简单的模拟展示了基于缓存的侧信道攻击是如何工作的。其基本原理是,当程序根据某个秘密信息访问内存时,会改变缓存的状态。这种状态变化会影响后续访问的速度。
在这个设定中,受害者根据秘密信息访问某个内存槽。该内存槽会被缓存,从而使其响应更快。然后攻击者探测所有内存槽,并利用时间差来确定哪一个被访问过。
本项目灵感来源于 Flush+Reload 和 Prime+Probe 等真实攻击手法,但为了便于理解,采用了简单直观的方式来实现。
## 攻击模型
该系统由三部分组成:
* 受害者:根据秘密信息访问某个内存槽
* 缓存模拟器:模拟缓存命中和未命中的耗时
* 攻击者:探测所有内存槽并利用耗时来猜测秘密信息
具体运行步骤如下:
1. 清除缓存
2. 受害者访问与秘密信息相关的内存槽
3. 攻击者检查所有内存槽并测量时间
4. 将耗时最短的内存槽作为猜测结果
## 项目结构
```
cache-side-channel-simulator/
├── simulator.py
├── victim.py
├── attacker.py
├── plot_results.py
├── results.csv
├── requirements.txt
└── README.md
```
## 环境配置
安装所需的依赖包:
```
pip install --user matplotlib
```
## 运行攻击
运行以下命令:
```
python3 attacker.py
```
运行流程:
* 重置缓存
* 受害者访问某个内存槽
* 攻击者测量访问时间
* 攻击者选取耗时最短的内存槽
示例输出:
```
[+] Round 0: probing cache...
Slot 00 -> 0.003112s
Slot 01 -> 0.002998s
Slot 02 -> 0.000612s
...
[+] Secret slot : 2
[+] Guessed slot: 2
[+] Result : SUCCESS
[+] Final accuracy: 100.00%
```
## 结果
攻击者通过挑选耗时最短的结果,能够成功识别出对应的秘密内存槽。
由于缓存命中的速度远快于未命中,正确的内存槽总是非常显眼。经过多轮测试,准确率保持在较高水平。
## 可视化
使用以下命令生成图表:
```
python3 plot_results.py
```
这会生成:
```
round_0_timings.png
round_1_timings.png
...
```
每张图表显示:
* 所有内存槽及其访问时间
* 某个内存槽的速度明显快于其他内存槽
* 该最快的内存槽即为受害者的秘密信息
## 安全见解
本项目展示了时间差是如何泄露信息的。
关键要点:
* 缓存命中比未命中快
* 依赖于秘密信息的访问会留下特定模式
* 攻击者可以利用时间差来还原秘密信息
在真实系统中,类似的原理常被用于攻击:
* 密码学实现
* 浏览器活动
* 安全飞地
* 机器学习系统
## 局限性
这是一个简化模型。
由于以下因素,真实系统会更加复杂:
* 系统噪声
* 多级缓存
* 并行进程
* 硬件差异
## 未来工作
* 使模拟更接近真实的缓存行为
* 添加噪声并测试鲁棒性
* 扩展到多个秘密信息
* 建模高级缓存结构
* 结合真实硬件测量数据
## 作者
Santhosh Kandagatla
标签:Flush+Reload, Matplotlib, meg, Prime+Probe, Python, 侧信道攻击, 信息安全, 密码学, 微架构攻击, 手动系统调用, 攻击模拟, 教育演示, 无后门, 时序分析, 时间盲注, 硬件安全, 缓存侧信道, 缓存命中, 缓存未命中, 网络安全, 逆向工具, 隐私保护, 隐私泄露, 驱动签名利用