保护虚拟硬件(XEN、KVM、VMWare 等)上的密钥/密码

信息安全 加密 云计算 虚拟化 记忆
2021-09-02 06:03:44

有什么合理的方法可以保护虚拟硬件上的数据吗?我所说的“虚拟硬件”是指可以从各种在线托管商那里租用的各种托管系统,它们运行在 XEN、KVM、VMWare ESXi 等之上。

使用实际的专用硬件,如果出现以下情况,人们可以在一定程度上安全地假设系统本身没有受到损害:

  1. 可以假定该软件是安全的,即可以假定在该机器上运行的软件(ssh、webserver 等)没有被利用或暴力破解
  2. 硬件可以被假设为没有受到损害,即机器没有离线,因此攻击者可以用受到损害的部件更改基本的硬件部件,如 HDD/RAM/等。(是的,我知道热插拔硬件,但我们假设它会留下足够的痕迹,无论是在日志中还是软件故障中,如果不是由合法机构完成的话。)

但是对于虚拟硬件,硬件没有受到损害的假设不再成立,因为主机可以随意暂停、复制和重新启动机器,而无需重新启动甚至离线。此外,主机可以直接访问整个虚拟机的 RAM 和磁盘 - 当它仍在运行时。

通过一些努力,主机甚至可以更改系统上的 authorized_keys 或 /etc/passwd 文件以获得对其的(root-)访问权限,因此甚至可以查看当前安装的加密分区的内容。

鉴于这些漏洞或可能的攻击,我现在的问题是:

  1. 这些漏洞有多现实,它们是真正的威胁还是只是“科幻小说”?有什么东西让它们在现实中不切实际吗?VM 软件供应商(Citrix、VMWare 等)是否实施了任何使这些攻击更加困难的安全机制?(除了安全性之外,他们还能做些什么来让这件事变得更难)?或者虚拟机供应商是否甚至可能向托管商(毕竟是他们的直接客户)提供工具,使这些攻击更容易?

  2. 来宾操作系统是否有任何有效的方法可以保护自己或 RAM 和磁盘中的数据免受此类攻击?可信计算方法(签名代码等)会有帮助吗?我知道 DEP 和 ASLR,但这并不能真正阻止主机读取所有可用内存。此外,我猜 RAM 加密对于传统的 x86 硬件/VM 来说是不可能的……因为那将不再是“随机访问”内存。

  3. 有没有这方面的研究?我很惊讶关于这个话题的讨论如此之少。一切都已经如此明显或无法解决,还是兴趣太少了?

2个回答

对我来说,仅考虑假设就很清楚,虚拟服务器没有实际主机管理员的实际技术保护。

我会尽量具体。鉴于对真实主机的控制,破解虚拟服务器不一定是不切实际的。这是我想像的那种策略。拆解虚拟机主机软件,找到虚拟键盘驱动。然后修改,不一定是VM主机软件,可能是操作系统内核中的一个调度表。以这种方式,可以进行作为虚拟键盘驱动程序特征的某些系统调用序列来触发虚拟输入键的记录器。结果是虚拟服务器的键盘记录器无法从虚拟端清楚地检测到。

防止这种操作的主机系统可能不会很好地工作。在不故意为分析师增加障碍的情况下调试和监控软件已经够难的了。

就资源而言,我确信谷歌搜索/学者搜索可以产生许多关于虚拟化的理论和实际安全影响的结果。这是我找到的(但还有更多):NIST Full Virtualization Security Guidelines

是的,当您直接在硬件上运行时,虚拟化打开了许多难以访问(但仍然可能)的攻击向量。然而,关于编写整个代码以在硬件上运行,而不是使用现有的操作系​​统,可以说相同的原则。进行自己的低级内存访问以及 I/O 和进程管理,以避免某些内核补丁或木马访问与您的程序相同的内存段的机会。

当然还有一个信任问题。如果您不能信任您的托管服务提供商,那么我的硬件也不会信任他们。你相信你的操作系统吗?您信任所有 3rd 方应用程序代码和模块吗?

最后也是最重要的,在我看来,就像生活中的几乎所有事情一样,这是您的风险和收益之间的权衡。您想要“在云中”获得虚拟化和虚拟主机的所有好处吗?(以编程方式启动虚拟服务器,向上/向下扩展服务器,即时拍摄快照,克隆虚拟机,无需额外硬件即可对每台服务器进行简单的控制台访问,添加虚拟网络接口以创建复杂的网络设置等等)或者您更喜欢灵活性较低但安全性更高*?选择当然是你的。这取决于您对风险与收益的看法。


*有些人会争辩说,虚拟化可以帮助提高可用性,这当然也是安全性的重要组成部分。