我一直试图实施本文所述的攻击:https://eprint.iacr.org/2013/448.pdf。遗憾的是,没有源代码,也没有足够的细节来说明一些非常低级的细节是如何工作的。
例如,他们声明mmap
ping另一个进程P2的虚拟空间中的进程P1的可执行文件使得内核(假设)将P1的.text
段与相同的{{1}合并在物理内存级别由P1进行.text
分段(当然,P2到内存中只是随机数据,而不是实际的mmap
分段)。但是我怎样才能确保实际发生这种情况呢?
让我们在P1 .text
中获取地址a
。其在P2虚拟空间中的内容将位于地址.text
(属于a*
ped空间)mmap
!= a
(显然),即使它们(应该)都指向物理内存中的相同地址。如果我a*
clflush
我怎样才能确保我还刷新a*
(因为缓存映射到物理内存)?换句话说:有没有办法知道Linux是否合并了a
和a
引用的两个页面?
提前谢谢。
PS:我知道您无法将虚拟地址转换为用户空间中的物理地址,但我无法编写驱动程序或类似内容。
PPS:这是描述a*
ping阶段(第4部分)的论文的摘录:
mmap