我最近正在阅读以下有关在 Javascript 中进行缓存攻击的论文:
https://arxiv.org/pdf/1502.07373v2.pdf
但我对它如何工作感到困惑。在论文中,一个 8 MB 的缓冲区足以让找到驱逐集的成功率很高(对于 12 路缓存)。我不确定这怎么可能。
我为自己的计算机计算了数字,但它似乎不起作用(3MB 缓存,12 路):
- 驱逐缓冲区可以是 4 MB 而不是 8 MB
- 这是缓冲区索引将存储的内容:
- 位 0 - 6:高速缓存行中的字节
- 位 6 - 12:设置索引的前 6 位
- 12 之后的位:没有用,因为它可以映射到任何物理地址
- 驱逐缓冲区中有 1024 个页面
- 在这 1024 个页面中,需要有 12 个映射到与受害地址共享相同位 12-18 值的物理页面。我不擅长概率,但这似乎很不可靠
为什么它有效?
我在自己的电脑上试过了,它似乎能够在 70% 的时间里驱逐受害者地址(尽管即使我根本不运行任何驱逐程序,受害者地址似乎仍然得到一个大约 20% 的失误率)。