VM 沙盒究竟是如何运作的?它肯定仍在使用相同的硬件资源和相同的底层操作系统?我不明白为什么操作系统上的多个 VM 是安全的,但多个应用程序/进程却不安全?
VM 架构有何特别之处?
答案1
沙盒充当代理。应用程序或操作系统不会直接在 CPU 上运行,而是可以通过沙盒了解应用程序想要执行的操作,并拦截指令以使其执行其他操作。这可用于防止应用程序执行不该执行的操作或干扰其他应用程序。
例如,假设程序 A 想要创建一个名为document.txt
通常情况下,这个文件会直接创建在硬盘上。但是如果程序 B 还想将其用于document.txt
其他用途怎么办?
在沙箱中,硬盘实际上并不存在。那里只有一个假装是硬盘的接口。应用程序可以从中读取数据,也可以向其中写入数据,从应用程序的角度来看,它似乎是唯一使用 的程序document.txt
。
但由于沙箱可以看到并拦截一切对于应用程序来说,程序 A 写入的数据document.txt
会被沙箱安全地存储在一个仅为程序 A 保留的特殊文件中。当程序 A 读取时document.txt
,沙箱会将程序 A 的特殊文件中的数据提供给它。
VM 与之类似,但级别较低,规模较大。应用程序沙盒会更改应用程序与主机交互的接口,而 VM 能够对整个操作系统进行沙盒处理,操作系统需要拥有自己的所有硬件。这需要虚拟化显卡、内存、CPU、硬盘、USB 设备、网络等一切。但是,由于 VM 可以监视和拦截操作系统尝试执行的所有操作,因此它可以施加和执行人为限制,以防止发生冲突。
一个更简单的思考方式是这样的:
通常情况下,Windows 会告诉计算机该做什么。如果 Windows 位于虚拟机中作为“来宾操作系统”,Guest-Windows 会告诉虚拟机该做什么,如果虚拟机认为没问题,那么虚拟机就会转而告诉计算机做同样的事情。如果虚拟机不喜欢 Guest-Windows 尝试执行的操作,它会阻止它。由于这种实现方式,Guest-Windows 无法确定它是否在虚拟机中运行,而且由于虚拟机始终具有完全的控制,Guest-Windows必须遵守 VM 施加的规则。