取证选择挂起功能的目的是为满足法律、安全和运维需求提供准确且未经修改的数据。当前支持的用例允许在用户因法律、突发事件响应或运维原因被置于选择挂起状态时,定期实时捕获与用户桌面相关的数据。将用户置于取证选择挂起状态会使用户的桌面暂时保持不变,从而避免刷新或删除(“重新创建映像”)桌面,并赋予管理员访问用户桌面的权限,使其能够以对用户体验影响最小的方式进行调查。

取证选择挂起功能的工作原理

  • 基于角色的访问控制

    取证功能由全局特权 FORENSICS 控制。超级管理员可以将此特权分配给另一个称作取证管理员的管理员,但默认情况下,将不会为超级管理员启用此权限。有关更多信息,请参阅《Horizon 8 管理指南》文档中的“全局特权”。

  • 存档数据存储

    存档数据存储是在 LDAP 中全局设置的挂载的 NFS 或 VMFS。Horizon 8 从 LDAP 中读取此设置以确定存档数据的放置位置。默认情况下,该设置会使用池所在的同一数据存储。

  • 选择挂起工作流
    • 将用户置于挂起状态
      只能在单个 AD 用户级别应用挂起。当取证管理员使用 API 将用户置于挂起状态时,会出现以下情况:
      • 如果用户已经在使用虚拟机了,则挂起将应用于其当前登录的虚拟机以及分配给用户的任何其他虚拟机。
      • 当该用户登录到虚拟机时,Horizon 8 将即时克隆虚拟机的状态从无状态更改为有状态,但会将有状态虚拟机挂起在其原始池中。
      • 处于挂起状态的用户将继续重新登录到同一虚拟机,并查看以前对其桌面所做的所有更改。Horizon 8 不会以任何方式更改虚拟机的内容。
      • 管理控制台中的状态指示器显示虚拟机处于挂起状态。
      • 虚拟机会在 vCenter 中进行标记,以便提示 vCenter 管理员不要对其进行更改。
    • 在挂起期间
      将用户置于挂起状态后,取证团队可以访问有状态桌面以进行调查并实时捕获实时数据。对于这类数据捕获,取证管理员可使用以下选项。
      • 使用 Archive API。Archive API 可以跨多个虚拟机和多个用户工作。您只能存档用户未登录的单个虚拟机。如果用户已登录,则需要将存档命令延迟到用户注销以后。
        存档操作如下:
        • 关闭虚拟机。
        • 整合所有磁盘。
        • 整合所有快照。
        • 将 VMDK 文件复制到选定的存档位置。
        • 将虚拟机重新同步到目标映像。
      • 使用您自己的脚本或第三方工具。在这种情况下,您可以选择是否要仅存档 Hypervisor 内存、仅存档虚拟机的 VMDK,还是同时存档 Hypervisor 内存和 VMDK。

        isHeldUser 环境变量指示连接到会话的用户是否处于挂起状态。根据此变量的值,您可以在已挂起用户登录到桌面时触发数据收集脚本。当脚本主机服务在连接服务器虚拟机上运行时,可以触发脚本。有关更多信息,请参阅《Horizon 远程桌面功能和 GPO》文档中的“激活 VMware Horizon View 脚本主机服务”。

      挂起期间需要注意的事项:
      • 无法刷新、恢复、移除挂起的虚拟机,或将其置于维护模式。这仅适用于挂起的虚拟机,不适用于同一池中的任何其他虚拟机。
      • 无法删除包含已挂起虚拟机的池。
      • 设置池自动缩小功能后,Horizon 8 会确定已挂起虚拟机的优先级,以使其不会丢失。
      • 当即时克隆池需要执行池刷新或修补程序更新时,有两个选项可供选择:
        • 当需要刷新包含已挂起虚拟机的池并且未设置存档数据存储时,推送映像将忽略有状态虚拟机。这样可以保留挂起的虚拟机以进行取证,并且在用户登录时,他们仍会被定向到永久虚拟机。然后,必须使用单独的工具(如永久虚拟机)修补这些虚拟机。
        • 当需要刷新包含已挂起虚拟机的池并且设置了存档数据存储时,Horizon 8 将首先对池中的所有其他虚拟机执行推送映像,然后存档已挂起的虚拟机。存档已挂起的虚拟机后,Horizon 8 会对它们执行正常的推送映像过程。已挂起用户下次重新登录时,他们将获得一个全新的虚拟机,该虚拟机将变为有状态虚拟机,并重复此过程。请注意,每次执行修补操作时,需要更多存储来复制和存档有状态虚拟机。
    • 从挂起状态移除用户

      当取证管理员使用 API 从挂起状态释放用户时,会出现以下情况。

      • Horizon 8 将虚拟机重新转换为无状态虚拟机。
      • 用户在下次注销时,会从最佳配置映像中删除并重建虚拟机,从而使其恢复到全新状态。
  • 事件数据库中的取证操作

    所有操作(包括授予 FORENSICS 特权和挂起/释放用户)都会被捕获到事件数据库中。此操作可用来通知需要运行的任何脚本。

使用 API 执行取证选择挂起功能

您可以使用 Horizon API 来执行取证选择挂起功能,如下所述。对于每个 API,都有一个链接指向其 VMware {code} 网站上的文档。

  • 创建取证管理员角色并分配用户
    1. 使用以下 API 创建自定义取证管理员角色:
      /config/v1/roles

      有关此 API 的文档,请参阅此处

    2. 按照《Horizon 8 管理指南》指南的“在 Horizon Console 中创建管理员”中的说明,分配自定义取证管理员角色。
  • 指定用于存档的数据存储
    要指定用于存档虚拟磁盘和内存的数据存储,请使用以下 API:
    /config/v1/virtual-centers/{id}/action/mark-datastores-for-archival

    有关此 API 的文档,请参阅此处

  • 将用户置于挂起状态
    要将用户置于挂起状态,请使用以下 API:
    /external/v1/ad-users-or-groups/action/hold
    此 API 会返回分配给已挂起用户的所有桌面的桌面 ID、池 ID 和计算机状态。您可以使用此警示信息触发脚本式数据收集。有关此 API 的文档,请参阅 此处

    在 vCenter 中,ForensicHold 标记将应用于所有已挂起用户使用的虚拟机。

  • 存档虚拟机的虚拟磁盘和内存
    要存档虚拟机的虚拟磁盘和内存,请使用以下 API:
    /inventory/v1/machines/action/archive

    有关此 API 的文档,请参阅此处

    • 存档发生在用户从挂起的虚拟机注销时。
    • 对虚拟机进行存档后,它们将显示在 vCenter 中存档数据存储(如上述 API 中所指定)上的 Archive 文件夹内。
    • 如果虚拟机具有多个磁盘,则仅对主磁盘进行存档。多磁盘存档在此发行版中不受支持。
  • 从挂起状态释放用户
    要从挂起状态释放用户,请使用以下 API:
    /external/v1/ad-users-or-groups/action/release-hold

    此 API 会返回分配给已挂起用户的所有桌面的桌面 ID、池 ID 和计算机状态。您可以使用此警示信息触发脚本式数据收集。有关此 API 的文档,请参阅此处

  • 列出挂起的用户
    要列出挂起的用户,请使用以下 API:
    /external/v1/ad-users-or-groups/held-users-or-groups

    有关此 API 的文档,请参阅此处

  • 列出挂起的计算机
    要生成当前处于挂起状态的计算机列表,请使用以下 API:
    /inventory/v3/machines

    有关此 API 的文档,请参阅此处

    注: 此 API 将返回所有计算机。在此响应中,处于挂起状态的虚拟机具有 "held_machine": true 值。