这是作者为 Handmade Network 的 2024 年学习狂欢提交的文章,从近期学习者角度出发,非 CPU 或 CPU 漏洞专家视角,内容未经权威验证。
Spectre 漏洞相关:
- 2017 年发布,是利用现代 CPU 设计中固有的推测执行特性的一类漏洞,可通过推测执行来利用原本正确的程序并提取本应保密的信息。
- 推测执行是 CPU 用于提高性能的一种技术,在处理条件语句时会预测条件真假并相应执行,正确预测可节省时间,错误预测则会回滚并承担小的代价。
- 但 CPU 不能完美回滚错误推测,例如在推测执行时缓存不会回滚,这为 Spectre 攻击提供了可能。
通过定时攻击读取内存:
- 利用定时信息可揭示系统工作情况,通过计时可以仅利用定时器提取内存内容,如通过代码
char dereferenceAndLookup(char* p) { return probeArray[*p]; }
,加载最快的probeArray
索引就是*p
的值。
实际 Spectre 攻击示例:
- 利用数组作为相对指针绕过语言中不能直接访问内存地址的限制,在有边界检查的程序中,推测执行可在知道越界前加载越界数据到缓存,从而实现攻击。
- 如
char exploitable(int i) { if (0 <= i && i < arraySize) { char secret = pointerishArray[i]; return probeArray[secret]; } return -1; }
,恶意的越界i
值可导致推测执行加载敏感数据到缓存。 - 实际攻击需考虑 CPU 缓存单位为缓存行(128 字节),
probeArray
需较大且secret
乘以 4096 以确保每次访问有自己的缓存行,还需训练 CPU 预测i
在界限内等细节,且要将probeArray
从缓存中清除以利用缓存时间确定secret
的值。
总之,文章介绍了 Spectre 漏洞的原理及利用方式,展示了其潜在的危险性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。