问题:
- 如果 VM 损坏(被黑),在同一台物理机器上运行的其他 VM 会有什么风险?
- 运行在同一台物理主机上的虚拟机之间存在什么样的安全问题?
- 是否有(你能列出)那些(潜在的)弱点和/或问题的清单?
警告:
我知道存在许多虚拟化类型/解决方案,并且可能有不同的弱点。但是,我主要是在寻找有关虚拟化技术的一般安全问题,而不是特定的供应商错误。
请提供真实的事实、(严肃的)研究、遇到的问题或技术解释。请明确点。不要(只)发表你的意见。
- 例子:
两年前,我听说可能存在与MMU(我认为是访问其他机器的主内存)相关的安全问题,但我不知道截至目前这是否是一个实际威胁,或者只是一个理论研究主题。
编辑:我还发现这种“Flush+Reload”攻击能够通过利用 L3 CPU 缓存在同一台物理机器上检索 GnuPG 密钥,即使 GnuPG 在另一台VM 上运行也是如此。GnuPG 已经打了补丁。
从理论上讲,没有。管理程序的全部意义在于将虚拟机彼此隔离。
实际上,各种管理程序中已经存在(并且将来可能存在)安全漏洞,这些漏洞可能允许一个虚拟机影响同一主机上的管理程序或其他虚拟机。sVirt (用于 KVM/QEMU)等安全措施旨在解决这个问题。
当然,可以利用在同一硬件上运行的另一个虚拟机,只要有有效的利用。此外,一个可以存在。你的问题引用了一些最近的作品展示了一个。我不打算在这里分享任何具体的漏洞利用或 PoC,但我会很高兴地说出它们是如何制作的。
在此上下文中使用的漏洞利用自然不同于在您尝试利用服务的同一台机器上运行时起作用的漏洞利用,并且由于隔离度的增加,它们往往会更加困难。但是,可用于完成此类攻击的一些通用方法包括:
随着时间的推移,特定的攻击会出现并得到修补,因此将某些特定机制归类为可利用、仅在实验室条件下可利用或不可利用是永远无效的。如您所见,攻击往往涉及面广、难度大,但在特定时间哪些攻击可行是瞬息万变的,您需要做好准备。
也就是说,我上面提到的向量(在某些情况下最后一个可能例外)在裸机环境中根本不存在。所以,是的,鉴于安全性是为了防止您不知道的、不在野外的漏洞利用以及已公开披露的漏洞利用,您可以通过在裸机或在至少在管理程序不为所有人托管虚拟机的环境中。
一般来说,安全应用程序编程的一个有效策略是假设计算机上运行着其他进程,这些进程可能是攻击者控制的或恶意的,并使用漏洞感知编程技术,即使您认为您以其他方式保证没有这样的进程存在于您的虚拟机中。但是,特别是对于前两个类别,请记住,谁先接触到硬件,谁就赢了。
编辑:我以为这个话题几个月前就结束了,但它刚刚复活,现在 OP 要求更多的“真实事实、引用的研究”等,所以我想通了。
这种性质的利用是:
我们不能说破解管理程序并获得对其他 VM 的访问权限是不可能的。我们也无法量化存在多少风险,除非经验告诉我们它非常低,考虑到您不会发现许多利用虚拟机监控程序进行攻击的故事。
这是一篇相反的有趣文章,它表明已经进行了不止一些基于虚拟机管理程序的攻击。
然而,由于现在的技术比以往任何时候都更加依赖管理程序,因此与几乎任何其他类型的漏洞利用相比,此类漏洞利用都将更加紧迫地得到修补和防范。
以下是 IBM X-Force 2010 年中趋势和风险报告的摘录:
(请在新标签页中打开此图片以查看全尺寸图片。)
请注意“逃逸到管理程序”漏洞的测量百分比,这对我来说听起来很可怕。您自然会想阅读报告的其余部分,因为其中有更多数据来支持这些说法。
这是一个关于在 Playstation 3 管理程序上执行的可能漏洞利用的故事,这很有趣。可能对您的业务影响不大,除非您的业务是索尼,在这种情况下,它的影响非常大。
这是 VMware 的埃里克·霍施曼 (Eric Horschman) 写的一篇精彩文章,在我看来,他在文中有点像一个全力反对微软的青少年,但它仍然是一篇好文章。在本文中,您会发现诸如此类的花絮:
竞争者之间的狡辩。但他在整篇文章中说的最清楚的话可能是:
OpenBSD 项目中经常被引用的 Theo de Raddt:
有点煽动性,但他的观点得到了很好的采纳。从理论上讲,虚拟化应该在虚拟机和它们的主机之间提供完全隔离。在实践中,偶尔会出现安全漏洞,允许高级攻击者绕过这些保护并获得对其他虚拟机甚至更糟糕的主机的访问权限(请参阅对恶意虚拟化环境主机的安全暴露的实证研究)。正如 Ryan Ries 提到的那样,这类漏洞非常罕见(这并不意味着它们不存在)并且通常不会被供应商披露,但它们确实存在。
如果您担心此类攻击的可能性(我认为在某种程度上您应该担心),我建议您不要在单个虚拟主机或虚拟主机集群上混合使用安全区域。例如 - 您将拥有一个用于 DMZ 虚拟机的专用双主机虚拟主机集群、一个用于中间件的专用集群和一个用于受保护资产的专用集群。这样,如果以允许攻击者破坏其他虚拟机或更糟的管理程序本身的方式利用漏洞,您的安全模型仍然完好无损。