在阅读零号项目关于 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
据我所知,数组的访问时间并不取决于您正在查看的偏移量,那么如何在这里测量不同的加载时间?
谢谢
最佳答案
内存延迟取决于缓存命中/未命中。读 What Every Programmer Should Know About Memory作者:乌尔里希·德雷珀。
或者只是阅读 Meltdown 攻击论文 ( https://meltdownattack.com/meltdown.pdf ),其中解释了所有这些作为攻击如何工作的背景,包括 clflush
+Read side-channel 来转换微架构状态(缓存的内容) )进入架构状态(您正在运行的非特权代码中的寄存器值)。
这是一篇非常好的论文,但他们可以更清楚地表明,这取决于英特尔 CPU 将仅内核页面映射视为对用户空间代码的推测执行有效。如果您无权从内部读取的映射的行为与未映射的页面相同,则不会存在漏洞。 AMD 大概就是这种情况,这就是为什么 AMD CPU 在微架构上不受这种攻击的影响。但英特尔 CPU 显然使用 TLB 命中并继续推测执行,直到故障负载尝试退出。
它是从https://meltdownattack.com/首页链接的.
如果您只查看其他漏洞而不是 Meltdown,也许您没有看到它。但侧 channel 是相同的。
关于CVE-2017-5753 边界检查绕过,又名每个人都在谈论的巨大错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48094537/