是否可以从虚拟机内部找到有关主机的信息?
例如它的IP。
编辑:到目前为止我发现的一件事是:
HKLM\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters 包含
- 主机名
- 物理主机名
- PhysicalHostNameFullyQualified
ETC。
答案1
对此,理想的答案(从虚拟机管理角度来看)是,除非明确向您提供该信息,否则您不应该知道有关物理主机的任何信息。实际上,虚拟机安装往往会泄露有关主机的一些信息,主要是因为安装了提供更好虚拟机性能的定制(通常是半虚拟化)驱动程序。虚拟机环境的默认设置通常会在各个地方提供一些基本信息(例如您列出的 Hyper-V 数据)。
虽然在某些情况下,我可以看到这样做的正当理由(例如,集群中的虚拟机在启动高负载但低优先级的任务之前,会检查其运行的主机是否确实提供了虚拟机认为它拥有的所有物理资源),但几乎所有虚拟机“想要”了解有关其主机的更多信息的情况都是恶意的。如果虚拟机中运行的进程有正当理由知道此类信息,那么建立一个合法的机制向其提供该信息是一项简单的任务 - 在大多数情况下,作为虚拟机管理员,我不希望虚拟机能够知道任何这些信息。
这Sourcefire VRT 的帖子概述了恶意软件用来检测它们是否在 VM 中运行的一些机制以及可以采取的缓解措施 - 在大多数情况下,VM 几乎总是可以判断它正在 VM 中运行,并且通常可以告知虚拟机管理程序供应商,可能识别虚拟机管理程序类型,并可能对具体版本做出很好的猜测。通常可以从网络收集一些其他信息,但这几乎肯定是应该归类为恶意的活动。如果您阅读该帖子,您会发现可以配置 VM,使得在 VM 中运行的任何东西都很难确定除了它是 VM 这一基本事实之外的任何其他信息,因此依赖这些机制是一个坏主意。
关于您关于虚拟机管理程序的“IP 地址”的具体问题,一般答案是虚拟机管理程序可以有许多 IP 地址 - 管理控制台、iSCSI 端口、Live Motion\Fault Tolerance 端口和许多没有明确 IP 地址的端口(VM 端口)和其他变体。查找管理控制台 IP 地址可能很简单 - 根据您的 Hyper-V 示例 - 但使用它做任何事情都应该很难,在设计良好的 VM 基础架构中,VM 不应该能够路由到管理控制台地址。
答案2
虚拟机注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters 键列出了 hyper-v 主机的信息。我有一台在 hyper-v host 2008 R2 服务器上运行的 Windows 2003 VM。我可以在 2003 vm 的注册表中看到主机名称。
答案3
虽然虚拟机客户机理论上“不知道”有关其主机的任何信息(通常它甚至不知道自己是虚拟机),但从客户机的角度来看,您只需将主机视为网络上的另一台机器即可获取有关主机的信息。这假设客户机可以在网络上看到主机。
一旦您拥有主机的网络访问权限(和正确的凭据),您就可以通过多种方式收集信息:
- 远程注册表访问(如上所述)
- 远程执行命令。例如,您可以运行免费的 psexec.exe (http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx)远程执行 IPCONFIG 和/或任何其他命令行。例如:
psexec \\主机计算机名称 ipconfig
答案4
几乎不可能。客户操作系统无法访问主机。为什么您希望客户操作系统与主机对话?