在阅读零项目对CVE-2017-5753的解释时(请参见此处https://googleprojectzero.blogspot.fr/2018/01/reading-privileged-memory-with-side.html?m=1),我偶然发现了这个断言:

通过测量加载arr2-> data [0x200]和arr2-> data [0x300]所需的时间,攻击者可以确定在推测执行期间index2的值是0x200还是0x300

AFAIK对数组的访问时间并不取决于您要查看的偏移量,那么如何在这里测量不同的加载时间呢?

谢谢

最佳答案

内存延迟取决于高速缓存命中/未命中。读
乌尔里希·德雷珀(Ulrich Drepper)的What Every Programmer Should Know About Memory

或者只是阅读Meltdown攻击论文(https://meltdownattack.com/meltdown.pdf),该论文将所有这些内容解释为攻击如何进行的背景知识,包括clflush + Read侧通道将微体系结构状态(缓存的内容)转换为架构状态(寄存器值)在您运行的非特权代码中)。

这是一篇相当不错的论文,但他们可能更清楚地表明,这取决于英特尔CPU将仅内核页面映射视为对用户空间代码的推测执行有效。如果您没有权限从内部读取的映射与未映射的页面相同,则不会存在任何漏洞。据推测,AMD就是这种情况,这就是为什么AMD CPU在微体系结构上不受此攻击的影响。但是,英特尔CPU显然会使用TLB命中并继续进行推测执行,直到出现故障的负载试图退役为止。

它是从https://meltdownattack.com/的首页链接的。

如果仅查看另一个漏洞而不是Meltdown,则可能看不到它。但是旁通道是相同的。

10-06 00:40