如果 libvirt 存储卷加密将秘密密钥存储在 hyper 本身,如果攻击者具有物理访问权限,如何保护秘密本身

if libvirt storage volume encryption store secret key on hyper itself, how to protect the secret itself if attacker has physical access

我想在我们的KVM虚拟化平台加密我们VM的磁盘,参考:https://libvirt.org/formatstorageencryption.html#StorageEncryption.

我们可以通过简单的步骤来完成:

  1. 创建密文
  2. 创建加密卷
  3. 在VM定义中,指向secret uuid,如
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source dev='/dev/vg/test-vm01'/>
      <target dev='vda' bus='virtio'/>
      <encryption format='luks'>
        <secret type='passphrase' uuid='ebb28309-fb26-4a2a-a5a8-e25adea4bc8c'/>
      </encryption>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

然而,实际上,libvirt 将秘密的值存储为 base64 编码在 hyper 上的 /etc/libvirt/secrets,如果攻击者具有 hyper 的物理访问权限,他可以轻松获得秘密值。

我假设黑客无法远程进入,但如果有物理访问权限,任何人都可以重置 root 密码,然后登录 hyper 以获取所有内容。

有什么方法吗?

或者这个威胁根本不存在。

谢谢。

如果攻击者在本地主机上拥有 root 访问权限,那么您就已经输了。即使 libvirt 在磁盘上加密了它的秘密,攻击者也可以从 libvirtd 内存中获取解密密钥。或者他们可以直接访问来宾 VM 内存以获取 LUKS 主密钥。

libvirt 磁盘加密主要用于保护存储在网络存储(NFS 等)上的磁盘映像。在这种情况下,它可以防止网络 MITM 攻击者或来自 NFS 服务器管理员的攻击。它可以在主机关闭时保护存储在本地主机上的图像 - 假设主主机根 FS 也被加密。

唯一超出范围的是在本地虚拟主机上防止 root。

即使是网络 MITM 也不能真正停止,如果不是平凡的话,因为也有几种方法可以获取解密密钥。

与非琐碎(例如重复)、中间人攻击,无论是网络还是本地/(远程-本地)相比,人们真的无能为力。