如何确保我的Linux服务器运行在一个非虚拟化的真实机器上?
这就是我正在考虑的情景:
假设,为了这个问题,攻击者
因此,我的问题是:是否有可靠的方法来确保操作系统运行在物理盒(或一个精确的物理盒)上,而不依赖于虚拟化缺陷(比如红丸)?
或者反过来:是否有证据证明这样的探测永远是可能的?
澄清:这是一个假设性的问题,而不是关于当前技术的讨论。目前,很容易检测到我是否处于虚拟化环境中,只需使用imvirt
及其已知的虚拟化故障/缺陷集合即可。我想知道从理论的角度来看,像“完美虚拟化”这样的东西是否已经被讨论和发现是可能的还是不可能的。
发布于 2012-02-06 02:01:37
假设攻击者制造了一台完全模仿您的硬件的虚拟机。在这种假设下,根据定义,您无法检测到您的代码正在虚拟机中运行。
如果虚拟机实际上运行在实际的硬件上,那么您应该能够从外部检测到它,因为虚拟化的开销可能会带来一些额外的响应延迟。这种开销可能不会比其他网络开销明显。如果虚拟机在更快的硬件上运行,理论上它可以提供完美的仿真。
在实践中,要提供完美的硬件仿真是非常困难的。(这是操作系统和驱动程序开发人员所希望的,不幸的是,模拟器并不完美。)当然,这在理论上是可能的,但对攻击者来说有更便宜的攻击方法。您假设的是物理访问;攻击者可以安装一个隐藏的rootkit,或者在PCI或RAM总线上放置一个间谍:这比为周围的所有硬件开发完美的仿真器要便宜。或者,更有可能的是,马洛里会利用软件漏洞,提交密码,或者作为最后手段使用扳手密码分析,如果她真的被打扰了。
复制数据并植入rootkit是迄今为止最简单的攻击方法。您可以在一定程度上通过在服务器中使用TPM来防止这种情况。TPMs被设计成很难复制,如果使用正确的话(注意:这很难!)目前还没有现成的操作系统从TPM信任的根源来验证整个操作系统的完整性。)TPM可以保护操作系统及其数据的完整性和机密性。
发布于 2012-02-04 20:17:22
从理论上讲,我认为如果有人制造一台模仿计算机所有物理部件的虚拟机是可能的。通过“模仿”,我知道它会有处理器,它报告它是一个特定的物理处理器,一个芯片组,报告它是一个特定的芯片组,一个BIOS,磁盘等等。
我认为,从纯粹的技术角度来看,这是可行的。另一方面,从实际的角度来看,这可能永远不会做到。为什么有人要投入大量的金钱和人力来提供一台虚拟计算机,完美地模仿某个特定的硬件版本如此短暂的东西?当他们完成构建虚拟解决方案时,硬件将不再使用。
发布于 2012-02-04 18:47:59
总之不行。没有任何保证。然而,据我所知,目前还没有任何虚拟化解决方案可以接受运行中的内核并在虚拟化环境中使用它。Mallory字符需要安装客户虚拟化内核才能在vm中运行它。因此,最简单的检查方法是检查内核运行的情况。
我的回答是否定的,因为作为一个安全问题,我认为这是一个如何确定Mallory是如何阻止您找出内核正在运行的问题,因为我认为有一天可能会有一个解决方案来解决用于虚拟化的不同内核的问题。
https://unix.stackexchange.com/questions/30851
复制相似问题