目录
以下原则是安全使用任何应用程序的基础。
保持软件最新。良好的安全实践原则之一是保持所有软件版本和补丁最新。激活 Oracle VM VirtualBox 更新通知,以便在新版本可用时收到通知。更新 Oracle VM VirtualBox 时,不要忘记更新 Guest Additions。同时保持主机操作系统和客户机操作系统最新。
限制对关键服务的网络访问。使用适当的方法,例如防火墙,来保护您的计算机和客户机免受外部访问。为虚拟机选择适当的网络模式有助于将主机网络与客户机网络分离,反之亦然。
遵循最小权限原则。最小权限原则指出,应仅赋予用户执行其工作所需的最低权限。始终以普通用户身份执行 Oracle VM VirtualBox。我们强烈不建议任何人使用系统权限执行 Oracle VM VirtualBox。
创建配置文件时选择严格的权限,例如创建 /etc/default/virtualbox 时,参见 第 2.3.3.7 节 “自动安装选项”。首选模式 0600。
监控系统活动。系统安全建立在三大支柱之上:良好的安全协议、适当的系统配置和系统监控。审计和审查审计记录满足第三个要求。系统中的每个组件都具有一定程度的监控能力。遵循本文档中的审计建议并定期监控审计记录。
及时了解最新的安全信息。Oracle 不断改进其软件和文档。请每年查看此说明以获取修订。
Oracle VM VirtualBox 基本包应仅从受信任的来源下载,例如官方网站 https://virtualbox.ac.cn。应使用官方网站上提供的 SHA256 校验和验证软件包的完整性。
受支持主机的 Oracle VM VirtualBox 通用安装说明可在 第 2 章 安装详情 中找到。
在 Windows 主机上,安装程序可用于禁用 USB 支持、桥接网络支持、仅主机网络支持和 Python 语言绑定。参见 第 2.1 节 “在 Windows 主机上安装”。所有这些功能默认都是启用的,但如果任何虚拟机不需要相应功能,禁用其中一些功能可能更合适。仅当外部 Python 应用程序要使用 Oracle VM VirtualBox API 时才需要 Python 语言绑定。特别是 USB 支持和两种网络模式的支持需要在主机上安装 Windows 内核驱动程序。因此,禁用这些选定的功能不仅可以限制用户使用特定功能,还可以最小化潜在攻击者可攻击的表面。
通常情况是安装完整的 Oracle VM VirtualBox 软件包。安装必须使用系统权限完成。所有 Oracle VM VirtualBox 二进制文件都应以普通用户身份执行,绝不能以特权用户身份执行。
Oracle VM VirtualBox Extension Pack 提供了额外功能,必须单独下载和安装,参见 第 1.5 节 “安装 Oracle VM VirtualBox 和扩展包”。与基本包一样,应验证扩展包的 SHA256 校验和。由于安装需要系统权限,Oracle VM VirtualBox 会在安装扩展包期间要求输入系统密码。
本节概述了 Oracle VM VirtualBox 提供的特定安全机制。
Oracle VM VirtualBox 等虚拟机监视器 (VMM) 的一个特性是,通过在受保护的环境(作为主机操作系统上的用户进程运行的虚拟机)中执行客户机来封装客户机。客户机无法直接与硬件或其他计算机通信,只能通过 VMM。VMM 向客户机提供模拟的物理资源和设备,客户机操作系统通过这些资源和设备执行所需任务。虚拟机设置控制提供给客户机的资源,例如客户机内存量或客户机处理器数量以及为该客户机启用的功能。例如,远程控制、某些屏幕设置等。参见 第 3.4 节 “常规设置”。
虚拟机配置的几个方面需要考虑安全性。
虚拟机的默认网络模式是 NAT,这意味着虚拟机像路由器后面的计算机一样运行,参见 第 6.3 节 “网络地址转换 (NAT)”。客户机是属于该虚拟机的私有子网的一部分,客户机 IP 在外部不可见。此网络模式无需额外设置即可工作,并且适用于许多目的。请记住,NAT 允许访问主机操作系统的回环接口。
如果使用桥接网络,虚拟机就像与主机处于同一网络中的计算机一样运行,参见 第 6.5 节 “桥接网络”。在这种情况下,客户机具有与主机相同的网络访问权限,可能需要防火墙来保护子网上的其他计算机免受潜在恶意客户机的攻击,以及保护客户机免受其他计算机的直接访问。在某些情况下,值得考虑在 NAT 模式下使用特定端口的转发规则,而不是使用桥接网络。
有些设置根本不需要虚拟机连接到公共网络。内部网络(参见 第 6.6 节 “内部网络”)或仅主机网络(参见 第 6.7 节 “仅主机网络”)通常足以实现虚拟机之间的连接,或仅将虚拟机与主机连接而不与公共网络连接。
当使用 Oracle 提供的 Oracle VM VirtualBox Extension Pack 以支持 VRDP 远程桌面时,您可以选择使用各种方法配置 RDP 身份验证。“null” 方法非常不安全,应在公共网络中避免使用。参见 第 7.1.5 节 “RDP 身份验证”。
共享剪贴板使用户能够在主机和客户机之间共享数据。在双向模式下启用剪贴板可使客户机读写主机剪贴板。主机到客户机模式和客户机到主机模式将访问限制在一个方向。如果客户机能够访问主机剪贴板,它也可能访问通过剪贴板共享的主机上的敏感数据。
如果客户机能够读取和/或写入主机剪贴板,则通过网络连接到客户机的远程用户也将获得此能力,这可能不是期望的结果。因此,对于新机器,共享剪贴板是禁用的。
使用 Guest Additions 启用 3D 图形会使主机面临额外的安全风险。参见 第 4.5.1 节 “硬件 3D 加速 (OpenGL 和 Direct3D 8/9)”。
启用 CD/DVD 直通使客户机能够在 CD/DVD 驱动器上执行高级操作,参见 第 5.9 节 “CD/DVD 支持”。这可能会带来安全风险,因为客户机可能会覆盖 CD/DVD 介质上的数据。
将 USB 设备传递给客户机可为客户机提供对这些设备的完全访问权限,参见 第 3.11.1 节 “USB 设置”。例如,除了读写外部 USB 磁盘分区的内容外,客户机还将能够读写该磁盘的分区表和硬件数据。
Oracle VM VirtualBox 的以下组件可以使用密码进行身份验证
当使用远程 iSCSI 存储且存储服务器需要身份验证时,可以使用 VBoxManage storageattach 命令可选地提供发起方密钥。只要不通过命令行选项 --settingspwfile
提供设置密码,此密钥将 未加密 地存储在机器配置中,因此可能在主机上可读。参见 第 5.10 节 “iSCSI 服务器” 和 第 8.26 节 “VBoxManage storageattach”。
当使用 Oracle VM VirtualBox Web 服务远程控制 Oracle VM VirtualBox 主机时,与 Web 服务的连接通过各种方式进行身份验证。这在 Oracle VM VirtualBox 软件开发工具包 (SDK) 参考中详细描述。参见 第 11 章 Oracle VM VirtualBox 编程接口。
Oracle VM VirtualBox 的以下功能可能带来安全问题
使用 Guest Additions 启用 3D 图形会使主机面临额外的安全风险。参见 第 4.5.1 节 “硬件 3D 加速 (OpenGL 和 Direct3D 8/9)”。
在远程迁移虚拟机时,机器内存内容从一个主机传输到另一个主机的 数据流 未加密。因此,能够访问数据传输网络的第三方可以截取该数据。可以使用 SSH 隧道来保护两个主机之间的连接。但是,当考虑在不受信任的网络上远程迁移虚拟机时,首先要回答的问题是,两个虚拟机如何才能以合理的性能安全地访问同一个虚拟磁盘映像。
如果网络不够受信任,则每次远程迁移都应更改密码,因为第三方在密码哈希值在目标主机和源主机之间传输时可能窃取未加密的密码哈希值。
当启用页面融合(参见 第 4.10.2 节 “页面融合”)时,可能会出现一个旁道,使恶意客户机能够确定在同一主机布局上运行的另一个虚拟机的地址空间。例如,DLL 通常加载的位置。这种信息泄露本身是无害的,但恶意客户机可能利用它通过不相关的攻击向量来优化对该虚拟机的攻击。建议仅在您认为这在您的设置中不是问题时才启用页面融合。
当使用 Oracle VM VirtualBox Web 服务远程控制 Oracle VM VirtualBox 主机时,通过该 Web 服务(API 调用使用 SOAP XML 传输)的连接未加密。它们默认使用纯 HTTP。这存在潜在的安全风险。有关 Web 服务的详细信息,参见 第 11 章 Oracle VM VirtualBox 编程接口。
Web 服务默认不启动。参见 第 9.18 节 “自动启动 Oracle VM VirtualBox Web 服务”,了解如何启动此服务以及如何启用 SSL/TLS 支持。它必须以普通用户身份启动,并且只能控制该用户的虚拟机。默认情况下,该服务绑定到 localhost,阻止任何远程连接。
通过 UDP 隧道网络附件发送的流量未加密。您可以选择在主机网络级别使用 IPsec 进行加密,或在客户机网络中使用加密协议,例如 SSH。其安全特性与桥接以太网相似。
由于旧版 Windows 的不足,不建议在 Windows Vista Service Pack 1 之前的 Windows 版本上使用 Oracle VM VirtualBox。
Oracle VM VirtualBox 的以下组件使用加密来保护敏感数据
当使用 Oracle 提供的 Oracle VM VirtualBox Extension Pack 以支持 VRDP 远程桌面时,RDP 数据可以选择性地加密。参见 第 7.1.6 节 “RDP 加密”。只有带有 TLS 协议的增强型 RDP 安全方法 (RDP5.2) 才能提供安全连接。标准 RDP 安全 (RDP4 和 RDP5.1) 容易受到中间人攻击。
当使用 Oracle 提供的 Oracle VM VirtualBox Extension Pack 进行磁盘加密时,磁盘映像中存储的数据可以选择性地加密。参见 第 9.29 节 “磁盘映像加密”。此功能仅涵盖磁盘映像内容。虚拟机的所有其他数据均未加密存储,包括虚拟机的内存和设备状态,这些数据作为保存状态的一部分存储,无论是在明确创建时还是作为运行中虚拟机的快照的一部分。
本节包含针对特定问题的安全建议。默认情况下,VirtualBox 会将虚拟机配置为以安全方式运行,但如果没有额外的用户操作(例如主机操作系统或固件配置更改),这可能并非总是可行。
此安全问题影响一系列支持嵌套分页的 Intel CPU。AMD CPU 预计不受影响(有待 AMD 直接确认)。此外,该问题不影响禁用硬件虚拟化或禁用嵌套分页的虚拟机。
有关嵌套分页的更多信息,参见 第 10.6 节 “嵌套分页和 VPID”。
以下缓解选项可用。
通过禁用嵌套分页 (EPT),VMM 将构建影子页表以映射客户机中的页表。客户机无法在页表中插入任何可疑内容,因为 VMM 在映射之前会仔细验证每个条目。
禁用嵌套分页的副作用是,多个 CPU 功能将不再对客户机可用。这些功能包括 AVX、AVX2、XSAVE、AESNI 和 POPCNT。并非所有客户机都能在安装后应对这些功能的缺失。此外,对于某些客户机,尤其是在 SMP 配置中,禁用嵌套分页可能会导致稳定性问题。最后,某些工作负载可能会出现性能下降。
这旨在在运行客户机代码时从一级数据缓存中移除潜在的敏感数据。然而,由于超线程设置共享一级缓存,从而可能让一对中的另一个线程用用户不希望客户机看到的数据重新填充缓存,这使得操作变得困难。此外,刷新一级数据缓存通常会带来性能副作用。
最新的 CPU 微代码是缓存刷新缓解措施的先决条件。一些主机操作系统可能会自动安装这些,尽管传统上这最好由系统固件来完成。因此,请向您的系统/主板制造商查询最新的固件更新。
我们建议在主机上禁用超线程。这通常通过固件设置完成,但某些操作系统也提供禁用 HT 的方法。在某些情况下,它可能默认禁用,但请验证,因为缓解措施的有效性取决于它。
VirtualBox 采取的默认操作是在线程计划执行客户机代码时刷新一级数据缓存,而不是在每次虚拟机进入时刷新。这减少了性能影响,同时假设主机操作系统在没有采取预防措施的情况下,不会处理来自中断处理程序或类似来源的安全敏感数据。
通过 VBoxManage modifyvm --l1d-flush-on-vm-entry
选项提供了一个更激进的刷新选项。启用后,一级数据缓存将在每次虚拟机进入时刷新。性能影响大于默认选项,尽管这当然取决于工作负载。产生大量虚拟机退出(如网络、VGA 访问等)的工作负载可能会受到最大影响。
对于不关心此安全问题的用户,可以使用 VBoxManage modifyvm name --l1d-flush-on-sched off 命令禁用默认缓解措施。
这些安全问题影响从 Nehalem 开始的一系列 Intel CPU。CVE-2018-12130 也影响一些 Atom Silvermont、Atom Airmont 和 Knights 系列 CPU,但范围非常有限,应由主机操作系统处理,因此 Oracle VM VirtualBox 不受影响。泄漏仅在进入和离开 C 状态时发生。
以下缓解选项可用。
首先,最新的 CPU 微代码是缓冲区覆盖(清除)缓解措施的先决条件。一些主机操作系统可能会自动安装这些,尽管传统上这最好由系统固件来完成。请向您的系统或主板制造商查询最新的固件更新。
此缓解措施旨在在运行客户机代码之前从受影响的缓冲区中移除潜在的敏感数据。由于这意味着每次调度客户机时都需要额外的工作,因此可能会有一些性能副作用。
我们建议在受 CVE-2018-12126 和 CVE-2018-12127 影响的主机上禁用超线程 (HT),因为受影响的缓冲区集通常在线程对之间共享,从而导致线程之间的数据泄漏。这通常通过固件设置完成,但某些操作系统也提供禁用 HT 的方法。在某些情况下,它可能默认禁用,但请验证,因为缓解措施的有效性取决于它。
Oracle VM VirtualBox 采取的默认操作是在线程计划执行客户机代码时清除受影响的缓冲区,而不是在每次虚拟机进入时清除。这减少了性能影响,同时假设主机操作系统在没有采取预防措施的情况下,不会处理来自中断处理程序或类似来源的安全敏感数据。
VBoxManage modifyvm 命令通过 --mds-clear-on-vm-entry
选项提供了一个更激进的刷新选项。启用后,受影响的缓冲区将在每次虚拟机进入时清除。性能影响大于默认选项,尽管这当然取决于工作负载。产生大量虚拟机退出(如网络、VGA 访问等)的工作负载可能会受到最大影响。
对于不关心此安全问题的用户,可以使用 VBoxManage modifyvm name --mds-clear-on-sched off 命令禁用默认缓解措施。