我在周末阅读了关于Meltdown and Spectre
的所有内容我也已经阅读了Spectre和Meltdown的.pdf文件 对于那些寻求更多关于这些漏洞的知识的人来说,这是必读的,但遗憾的是,这些漏洞并没有提供详细的解释。
我在github上发现了各种PoC,这非常有趣但我缺乏完全理解它的知识。关于具体部分的更多解释我会感激不尽:
从这个链接https://github.com/dendisuhubdy/meltdown/blob/master/src/poc.c和其他git存储库中,在这个漏洞利用的概念中有许多有趣的部分。
时间读取
/* Time reads. Order is lightly mixed up to prevent stride prediction */
for (i = 0; i < 256; i++) {
mix_i = ((i * 167) + 13) & 255;
addr = &array2[mix_i * 512];
time1 = __rdtscp(&junk); /* READ TIMER */
junk = *addr; /* MEMORY ACCESS TO TIME */
time2 = __rdtscp(&junk) - time1; /* READ TIMER & COMPUTE ELAPSED TIME */
if (time2 <= CACHE_HIT_THRESHOLD && mix_i != array1[tries % array1_size])
results[mix_i]++; /* cache hit - add +1 to score for this value */
}
为什么我们使用素数167和13?
/* Locate highest & second-highest results results tallies in j/k */
为什么我们关心获得最大值?
其他部分解释也非常受欢迎!!