双启动操作系统比运行虚拟机更安全还是更安全?

信息安全 操作系统 虚拟化
2021-08-16 08:09:03

我在同一台物理机(现代 MacBook Pro)上的两个独立磁盘分区上运行两个操作系统。为了将它们彼此隔离,我采取了以下步骤:

  1. 使用 ro,noauto 配置 /etc/fstab(只读,无自动挂载)

  2. 使用单独的加密密钥完全加密每个分区(提交到内存)

假设病毒感染了我不知道的第一个分区。我从第一个分区(加密卷)注销,然后关闭机器以清除 RAM。然后我取消加密并启动到第二个分区。我可以合理地确信病毒没有/不能感染两个分区,还是我在这里玩火?我意识到 MBP 不附带 TPM,因此引导加载程序感染被忽视仍然是理论上的可能性。但是,这种风险似乎与运行客户操作系统时利用 VMWare/VirtualBox Hypervisor 的风险相当,特别是因为 MBP 线使用 UEFI 而不是 BIOS。

这引出了我的问题:上面概述的双分区方法比使用虚拟机隔离服务更安全还是更安全?如果我的计算机安装了 TPM,这种情况会改变吗?

背景:

请注意,我当然会采取所有常见的额外预防措施,例如每天检查操作系统软件更新,除非绝对必要,否则不要以管理员用户身份登录,在两个分区上运行实时防病毒程序,运行基于主机的防火墙,监控传出网络连接等。我的问题实际上是公开检查,​​看看我是否在这里忽略了任何东西,并试图弄清楚我的双引导方案是否真的比虚拟机路由更安全。最重要的是,我只是想了解更多有关安全问题的信息。

编辑#1:

正如评论中所指出的,对于我的特定用例,该场景有点偏执。但是想想那些可能在公司或政府环境中并正在考虑使用虚拟机来运行被认为是“高风险”的服务或应用程序的人。正如我所概述的,他们最好使用虚拟机还是双启动方案?一个有效权衡该权衡利弊的答案是我在这篇文章的答案中真正寻找的答案。

编辑#2:

这个问题的部分原因是关于虚拟机是否真正保护了主机操作系统的争论。就我个人而言,我认为确实如此,但请考虑一下 Theo de Raadt 在 OpenBSD 邮件列表中的这句话:

x86 虚拟化基本上是在几乎没有正确页面保护的讨厌的 x86 架构之上放置另一个几乎完整的内核,充满了新的错误。然后在这个全新的垃圾堆的另一边运行你的操作系统。如果您认为全球范围内无法编写没有安全漏洞的操作系统或应用程序的软件工程师,那么您绝对是被骗了,然后可以转身突然编写没有安全漏洞的虚拟化层。

-http://kerneltrap.org/OpenBSD/Virtualization_Security

通过引用 Theo 的论点,我并不赞同它。我只是指出这里有多种观点,所以我试图找出更多关于这个问题的信息。

4个回答

先回答,再回答原因:虚拟机可以更安全。

从实际的角度来看,存在可以感染引导分区、BIOS 和硬件设备的代码和恶意软件。因此,从通用的角度来看,VM 在减少攻击面方面具有稍多的优势 - 潜在的 VM 跳跃代码是特定于 VM 的最大代码。此代码可能特定于所使用的 VM 类型,例如最近的http://www.kb.cert.org/vuls/id/649219问题。请注意,它需要特定的虚拟机(kvm 或 xen)、ring 等。

所以,从恶意代码的角度来看,虚拟化更安全。

从网络的角度来看,虚拟化解决方案的许多用户通过 NAT、PAT 或操作系统可能不支持的其他功能中的 NAT 在网络级别具有更大的灵活性,或者通过使用虚拟机来提高自己的安全性。通过使用特定的虚拟机检查所有带有虚拟化的流量 i/o 来增强安全状态是相当简单的。

所以,从网络安全的角度来看,虚拟化更安全。

来宾操作。秒克隆操作系统的美妙之处...根据所采用的虚拟化解决方案的类型,关闭的虚拟机可以透明地修补,而无需用户采取任何行动。使用通用 VM 并使用各种强化指南将其锁定到除了特定应用程序之外的功能最少的地方是微不足道的。VM 可以更轻松地执行极端级别的强化,例如在证书信任存储上执行最低权限(例如,我从商业 CA 中删除了大多数证书,除了我正在使用的证书)这些类型的活动可以使用 VM 更快,因为具有以下能力快照并从灾难性更改中恢复。此外,一个完整的虚拟机可以很容易地打包成一个文件并保存在某个地方,在 USB 等上。此外,当你想到妥协时,意识到在虚拟化中,妥协可能比正常情况下获得的特权要少得多。例如,在类型 1 管理程序中,管理程序本身是计算机上最高特权的实例。增加攻击者的级别。它还可以用于授予开发人员管理/root 访问权限,而无需授予上述开发人员域管理员或公司 LDAP 上的权限。

所以,从客户运营的角度来看,虚拟化更安全。

但是,我将重点关注一个前提——虚拟化和启动的本机类型操作系统是非此即彼的选择。它们不是,因为您可以使用 3rd 方解决方案启动虚拟化操作系统,就好像它是双启动选项一样。vboot 等软件支持 VHD/VMDK/VDI/Raw 格式启动。

就虚拟化类型而言,有一些适用于这种情况。那些是类型 1 虚拟化(裸机)、类型 2 虚拟化(托管操作系统),我认为部分、操作系统和半虚拟化超出了范围。领先的 x86 类型 1 虚拟化解决方案 VMware vsphere hypervisor 使用具有最小攻击面的微内核方法。类型 2 虚拟化具有更大的攻击面,因为它们依赖于完整的底层操作系统。因此,Theo 关于完整操作系统的评论在应用于 VMware 时是不正确的。

这是有关该主题的一些 VMware 宣传

http://www.vmware.com/technical-resources/security/overview.html

当然,安全性通常是可用性和安全性之间的权衡。重要的是要考虑用户可能遇到的威胁情况,以及谁会针对您部署资源来攻击您。如果你是一个民族国家或银行,你需要广泛的保护。公司,更多。小名声的个人用户 - 足够好的保护。请记住,一个好的安全解决方案可以为您提供足够的保护,但不会对可用性产生负面影响,从而成为障碍。整体风险管理是一个不同的主题,值得在其他地方进行审查。

我没有谈论更奇特的安全方法,例如可用于通过进一步减少攻击面来扩展虚拟化安全性的瘦客户端,或者 TPM 锁定与 1 类管理程序结合使用。

每一个都更安全。

如果您想构建一个“沙盒”环境,您可以在其中试验危险代码,那么在虚拟机中这样做比使用双引导环境更安全。从您的问题来看,这似乎是您所要求的。原因是因为虚拟机无法直接访问您的硬件,它作为在程序中模拟的程序运行,因此整个运行时环境仅存在于虚拟化系统允许的范围内(假设您的管理程序中没有安全漏洞)。如果你的虚拟机系统声明不能访问硬盘,那么里面运行的程序就不能访问硬盘。

另一方面,如果您想“逃离”您的标准环境并创建一个已知安全的环境,那么双引导是实现目标的唯一方法。原因是因为虚拟机作为程序存在于标准桌面中,所以标准桌面中的任何安全故障也可能延伸到虚拟机本身——桌面可以拦截流量、击键、磁盘访问等,由虚拟机。因此,如果您的桌面不安全,那么您的虚拟机就无法确保安全。这似乎不是您所需要的,但理解它可能对将来的使用很有用。

就个人而言,对于那些不研究恶意软件的人来说,这听起来有点偏执。

如果您正在运行 2 个不同的操作系统,则需要知道如何读取两个不同文件系统的恶意软件。

如果它在 VM 中运行,则需要该恶意软件专门针对虚拟机管理程序,以便它可以突破沙箱。

您已经通过以较低权限运行等来减轻某些感染您的明显方式。否则,您最好的缓解任务将是定期备份、扫描恶意软件,或者对我来说,在运行基于 UNIX 的系统时,您可以运行使用校验和来监控文件更改的文件检查器,然后在发现可疑文件/更改时向您发送电子邮件。

同样使用虚拟机,您可以创建一个共享文件夹来保存永久数据,然后只需为您的虚拟机拍摄快照,完成课程作业,然后回滚快照,以便您的虚拟机可能发生的任何事情都将被删除。恶意软件需要特别了解您的共享才能将自身复制到共享中,即使这样它也无法运行。

虽然安全性必须分层才能有效,但对您的平均使用做一些基本的护理并不需要太多。就个人而言,如果您害怕某些活动特别会导致问题,我会在该工作期间进行快照并回滚。使用不同的操作系统和文件校验和监控应该告诉您是否发生了任何事情,然后从备份中恢复可能就绰绰有余了,因为任何破坏 VM 和影响不同操作系统的事情都必须非常适合您。

存在一些理论上的风险(尚未得到证实)会降低双引导方法的安全性。这些涉及将木马卸载到非标准硬件上。例如,用某种东西感染电池的固件,然后会溢出内核的电源管理器。这可能会跨越重新启动的界限,您对此没有任何发言权。VM 方法不会受到这个弱点的影响。

据我所知,这些充其量只是概念验证,但话又说回来,那是在白帽世界中。如果 NSA 有这样的工作,我不会感到惊讶。