无论是企业内部还是托管在IDC或云服务商的虚拟机,如何保障运行的环境是安全的,虚拟机是安全的(虚拟机文件里的数据以及看到的监视器画面)成为此篇文章和大家探讨研究的。

比如您正在运行的虚拟机,管理员是可以通过虚拟化平台通过监视器看到您的系统并操作的,比如关机,开启,重启等等操作,其次如果有别有用心的管理员或者不法分子在拿到您虚拟机的虚拟磁盘文件后拷贝到自己的电脑展开查看等,那么虚拟机里的数据一览无遗,甚至严重一点的拿到您AD虚拟机的虚拟磁盘后对域控用户数据库解密,获取到企业用户的登录信息及密码,那么后果就相当严重了。

其次如果有人把虚拟机的虚拟磁盘拷贝出来放到竞争对手的虚拟机环境里导入运行,那么是否会有虚拟机业务成果的山寨呢?

当然我这里只是列举可能出现的风险和案例,针对这样的问题而展开如何确保虚拟机运行安全以及虚拟机运行所处的环境是可信任的展开话题讨论。

针对以上的痛点,在Windows Server 2016开始提供了一个新的技术叫“受保护者服务”可以使用受保护的结构(Hyper-V主机环境)为VM提供更安全的运行环境。受保护的结构主要有三个部分组成:

  • 由一个主机保护者服务(HGS)组成 (通常是三个节点的集群)

  • 一个或多个受保护的主机

  • 一组受保护的虚拟机(VM)

在Windows Server 2016里只支持Windows系统的虚拟机保护,而在Windows Server 2019里还新增支持了Linux系统的虚拟机保护。

那么整个受保护的虚拟机运行在受保护的结构环境中,拓扑如下:

image  

对于工作模式只要分为2中:TPM模式和主机密钥模式

用到的安全手段主要大致可以为四种:TPM(vTPM)、签名证书、加密证书、Bitlocker

从受保护的主机来判断是否受信任和安全主要是根据这3点来衡量:提取主机的系统特征,硬件基准,以及当前运行环境作为代码完整性策略

从受保护的虚拟机来判断虚拟机是否安全主要是根据这4点来衡量:虚拟磁盘模板是否加密,卷签名目录,受保护的数据文件PDK(监护人证书:签名和加密;防护数据文件所有者:签名和加密),vTPM

受保护的虚拟机工作关系结构是这样的:

clip_image002  

受保护的虚拟机在受保护的Hyper-V主机工作关系结构是这样的:

clip_image003  

  1. 请求开启受保护的虚拟机VM01
    在受保护的主机可以启动受保护的VM之前,首先必须证明它是可信任的。为了证明它是可信任的,它必须向密钥保护服务(KPS)提供受信任证明。受信任证书通过证明过程获得。

主机请求证明。
受保护的主机请求证明。认证模式由受保护主机服务群集决定:
TPM可信证明:Hyper-V主机发送的信息包括:

  • TPM识别信息(认可密钥)

  • 最近的启动引导顺序的进程信息(TCG日志)

  • 主机上应用的代码完整性策略信息(CI)

备注:受保护的Hyper-V主机启动后每8小时进行一次验证,如果由于某种原因,当受保护的VM尝试启动时收保护的主机没有认证证书也会触发请求。

主机密钥证明:Hyper-V主机发送密钥对的公钥。HGS验证主机密钥是否已注册。
管理员信任的证明:Hyper-V主机发送Kerberos票证,该票证标识主机所在的安全组。HGS验证主机属于先前由受信任的HGS管理员配置的安全组。(在Windows Server 2019中该模式已经取消)

  1. 证明成功(或失败)
    成功证明主机受信任所需的检查:

    • 通过TPM可信证明,验证主机的TPM标识,引导验证和代码完整性策略。

    • 使用主机密钥证明,仅验证主机密钥的注册。

  2. 认证证书已发送给主机
    假设证明成功,则向主机发送受信任证书,并且主机被视为“被保护”(被授权运行受保护的VM)。主机使用信任证书授权密钥保护服务安全地发放使用受保护虚拟机所需的密钥

  3. 主机请求VM密钥
    受保护的主机没有启动受保护的VM(本例中为VM01)所需的密钥。要获得必要的密钥,受保护的主机必须向KPS提供以下内容:

    • 目前的受信任证明

    • 加密密钥(密钥保护程序或KPS),包含启动VM01所需的密钥。密钥是使用只有KPS知道的其他密钥加密的。

  4. 发布密钥
    KPS检查受信任证书以确定其有效性。证书不得过期,KPS必须信任颁发证书的证明服务。

  5. 密钥返回给主机
    如果受信任证书有效,KPS会尝试解密该密钥并安全地返回启动VM所需的密钥。请注意,密钥已加密到受保护主机的VBS。

  6. 主机启动VM01

那么部署这样一套受保护的结构需要多少步骤呢?下面这张图列了关键步骤:

clip_image004  

部署这样一套受保护的Hyper-V环境和受保护的虚拟机最后是可以通过Powershell来管理,也或者使用SCVMM或Windows Azure Pack来管理的。

过程不复杂,但要注意的点和涉及的知识是比较复杂的。

简单来说怎么实现虚拟机安全以及达到的效果,我的总结是:

  • 以签名证书和加密证书构建独立的监护域(监护人)

  • 扫描认为合格的Hyper-V硬件及系统环境作为基准存放在另一个独立域中作为基准校验,其中可以以TPM为安全芯片加固

  • 虚拟机磁盘进行证书Bitlocker加密,也可以结合vTPM加固,虚拟磁盘再进行证书签名绑定唯一性,让在独立域中作为基准校验

  • 设置虚拟机的所有者和监护域(人)进行定向校验

  • 虚拟机的每一次启动都会进行全方位多维度基准校验,缺一都将导致启动失败

  • 虚拟机的虚拟磁盘也是全方位360度无死角加密,无论是网路复制传输还是拷贝都无法获取虚拟磁盘内容

  • 受保护的虚拟机在受保护的Hyper-V主机之前移动或传输数据也是全加密状态

  • 如果恶意人员要获取虚拟机里的数据,需要具备3大块:受保护的Hyper-V主机,监护域(人)以及虚拟机文件,想想都不现实可以同时拿到这么多才能获取到vhdx里的内容

这项功能我觉得针对业务场景也解决如下需求:

  • 在加域的虚拟机(域成员服务器),从外围增加了虚拟机的安全加固,但对内使用域管理员账号进行访问还需要多种约束手段以及其他的技术手段做安全辅助;

  • 如果虚拟机是不加域的托管在企业虚拟化平台上,那么业务人员直接管理该虚拟机:从外保障了恶意的IT管理员无法进行数据的窃取和窥窃,从内由直接的使用者放心的使用管理自己的系统。

后续如何实现主要核心三个章节:

    最后感谢王泽和高毅的功能介绍,让我有更深入的研究与实践把这样一个好的技术和功能分享给大家。