使用KSM(内核同页映射)时,如果两个完全隔离的进程(例如两个虚拟机)拥有两个完全相同的内存页面,那么这些页面是否会被合并?或者它们是否会因为每个过程彼此隔离而保持独立?我很困惑,因为虚拟机归结为主机上的单个进程,但如果这些页面合并,这似乎是一个相当重要的问题,所以我认为它们是分开的?
我也很好奇这是否会区分VM与容器?
除了将会发生什么之外,如果它们被隔离,那么可能会详细说明吗?我假设这是通过使用cgroup来完成的,这样两个进程的内存完全隔离,我想澄清一下。
答案 0 :(得分:3)
来自不同进程的页面即使是合并的,特别是如果它们归不同的VM实例所有。我特别说,因为合并来自不同虚拟机的页面可以通过合并内存页面实现最大的效果:它消除了许多虚拟机中相同的库和内核代码的复制。
此效果已用于针对GnuPG 1.4.13加密库的缓存定时攻击。包含GnuPG库代码的合并页面在两个不同的VM之间共享,并且一个VM能够恢复在另一个VM中进行的加密操作所使用的密钥。这次攻击被命名为" FLUSH + RELOAD"由于用于窥探信息的处理器指令。
以下是描述攻击的pdf的链接:https://eprint.iacr.org/2013/448.pdf