如何确定我的服务器没有虚拟化?

如何确定我的服务器没有虚拟化?

如何确保我的 Linux 服务器运行在非虚拟化的真实机器上?

这是我正在考虑的场景:

  1. 我在机架式服务器上安装了一些发行版,
  2. 我在数据中心租了一些机架空间并将其留在那里,
  3. 马洛里(“攻击者”)前往数据中心断开我的服务器,
  4. 马洛里拍摄磁盘的图像,
  5. Mallory 以访客身份在 KVM 机上运行磁盘映像。

为了解决这个问题,假设攻击者

  • 修改了 KVM 或任何类似的虚拟机管理程序,以模拟我的服务器运行的完全相同的硬件,
  • 知道所有已知的逃避虚拟机管理程序或检测虚拟机管理程序攻击,并已修补虚拟机管理程序以抵消它们(因此没有红色药丸和类似的攻击)。

所以我的问题是:是否会有可靠的方法来确保操作系统在物理机器(或一个精确的物理机器)上运行,并且不依赖虚拟化缺陷(例如红色药丸)?

或者反过来说:是否有证据表明这种检测总是可能的?

澄清:这是一个假设问题,而不是对当前技术的讨论。目前,很容易检测我是否处于虚拟化环境中,只需使用imvirt及其已知虚拟化故障/缺陷的集合即可。我想知道像“完美虚拟化”这样的事情是否已经被讨论过,并且从理论的角度来看是否可能或不可能。

答案1

您假设攻击者已经制作了一个完美模拟您的硬件的虚拟机。在这种假设下,根据定义,您无法检测到您的代码正在虚拟机中运行。

如果虚拟机实际上在真实硬件上运行,您应该能够从外部检测到它,因为虚拟化的开销可能会引入一些额外的响应延迟。与其他网络开销相比,该开销可能并不明显。如果虚拟机运行在更快的硬件上,理论上它可以提供完美的模拟。

在实践中,提供完美的硬件仿真是极其困难的。 (这是操作系统和驱动程序开发人员所希望的,不幸的是,对于他们来说,模拟器并不完美。)当然,理论上这是可能的,但对于攻击者来说,会有更便宜的攻击方法。您假设物理访问;攻击者可以植入隐藏的 Rootkit,或者在 PCI 或 RAM 总线上放置间谍:这比为周围的所有硬件开发完美的模拟器的成本要低。或者,更有可能的是,马洛里会利用软件漏洞,窃取密码,或者作为最后的手段使用扳手密码分析,如果她真的很烦恼的话

复制数据并植入 Rootkit 是迄今为止最简单的攻击方法。您可以通过使用以下方法在某种程度上防止这种情况发生全员生产管理在你的服务器中。 TPM 被设计为难以复制,并且如果使用正确(注意:这很困难!目前没有现成的操作系统可以从 TPM 信任根验证整个操作系统的完整性。)TPM 可以保护您的操作系统及其数据的完整性和机密性。

答案2

从理论上讲,我认为如果有人制作一个模仿计算机所有物理部分的虚拟机,这是可能的。通过“模仿”,我理解它会拥有报告它是特定物理处理器的处理器、报告它是特定芯片组的芯片组、BIOS、磁盘等。

我认为,从纯粹的技术角度来看,这是可行的。另一方面,从实际角度来看,这可能永远不会完成。为什么有人会投入大量的资金和人力来提供一台虚拟计算机来完美地模仿某些短暂的东西而不是特定的硬件版本?当他们完成虚拟解决方案的构建时,硬件将不再使用。

答案3

简而言之,没有。没有任何保证。然而,据我了解,目前还没有任何虚拟化解决方案可以采用正在运行的内核并在虚拟化环境中使用它。 Mallory 角色需要安装来宾虚拟化内核才能在虚拟机中运行。因此,最简单的检查方法是检查正在运行的内核。

我的答案是否定的,因为作为一个安全问题,我认为问题在于如何确定 Mallory 是否阻止您弄清楚正在运行的内核,并且因为我想有一天可能会解决使用不同内核的问题用于虚拟化。

答案4

乔安娜·鲁特考斯卡在早期的黑帽会议上确实谈到了这一点。虽然一个“蓝色药丸” 会将你的机器带入 VM 层,红色药丸将帮助您检测您是否位于虚拟机内。这些条款基于矩阵-电影。 ;-)

相关内容