You need to enable JavaScript to run this app.
导航
检查并验证TDX功能
最近更新时间:2024.12.04 10:56:18首次发布时间:2024.09.30 14:18:20

本文介绍如何在基于Intel® TDX技术的ECS实例(以下简称TDX实例)中检查并验证TDX功能,以及TDX实例存在的一些功能限制。

概述

安全增强通用型实例g3ilt基于Intel® TDX技术提供机密计算能力,可以为实例和应用提供默认的安全保护。您可以将现有应用直接迁移至TDX实例上并获得TDX能力带来的安全保护,而无需重新开发现有的应用程序。

Intel® TDX简介

Intel® TDX (Trust Domain Extensions) 是一种基于CPU硬件的云服务器ECS保护技术,TDX实例的CPU寄存器、内存数据以及中断处理等均受到CPU硬件的机密保护,云厂商和外部攻击者均无法对TDX实例的内部运行状态(诸如运行的进程、计算中的敏感数据等)进行监控或篡改。关于Intel® TDX技术的更多信息,请参见Inte® Trust Domain Extensions (Intel® TDX)

TDX的关键特性

  • 强隔离性:在处理器中建立了新的信任边界,即 “信任域”。每个虚拟机都被分配一个信任域,确保虚拟机之间以及虚拟机与宿主机之间的隔离更加坚固,防止恶意软件跨域攻击。
  • 内存加密:对每个信任域的内存进行加密,这意味着即使在hypervisor层或物理主机上,数据也是以加密形式存在,从而降低了数据泄露的风险。
  • 远程证明:TDX支持远程证明功能,允许信任域所有者验证其虚拟机是否在可信的硬件环境中启动,并且没有被篡改,增强了对基础设施的信任。
  • 安全启动:确保虚拟机仅从经过签名和验证的引导加载程序启动,进一步加强了启动过程的安全性。
  • 兼容性与透明性:尽管提供了高级别的安全性,Intel® TDX设计为对操作系统和应用程序尽可能透明,减少对现有工作负载的修改需求。

前提条件

已创建具备TDX特性的安全增强通用型g3ilt实例。如无可用,请先创建实例

说明

  • 该实例正在华北2(北京)地域邀测中,如需试用,请联系客户经理申请。
  • 火山引擎提供如下公共镜像用于创建TDX实例,该类镜像提供开箱即用的TDX环境,默认使能TDX功能并内置TDX驱动,您无需手动操作即可使用并验证TDX功能。
    • Ubuntu 24.04
    • veLinux 2.0 for TDX
    • veLinux 2.0 CentOS Compatible for TDX

检查TDX使能状态

在使用TDX机密计算环境前,建议您先检查对应实例的TDX使能状态,确保实例处于安全保护中。

  1. 登录实例

  2. 执行以下命令,检查TDX的使能状态。

    lscpu |grep -i tdx_guest
    

    回显如下,表示TDX被正确使能。
    alt

  3. 执行以下命令,检查TDX驱动的安装情况。

    ls -l /dev/tdx_guest
    

    回显如下,表示已安装相关驱动。
    alt

验证TDX远程证明

您可以通过在TDX实例中生成远程证明报告(TD Quote),并通过验证工具度量其可信性,证明TDX实例处于可信安全的TDX环境。

说明

远程证明报告(TD Quote)用于证明您所购买的TDX实例开启了Intel® TDX保护,确保其运行环境具有数据完整性、机密性和真实性。其中Quote内容包含TD Report与Attestation key签名等关键信息。TD Report是由CPU硬件生成的代表该TDX实例身份的数据,其中包含了TDX实例的属性(attributes)、初始度量值(MRTD)、动态度量值(RTMR)、TCB SVN等关键信息,并以密码学方法保护其完整性。

步骤一:生成远程证明报告

说明

通常情况下您所购买的TDX实例已经安装并编译了远程证明所需的工具,可参考步骤4查看。若没有安装请参考以下步骤进行安装与编译。

  1. (可选)依次执行以下命令,安装远程证明所需的工具。

    # velinux/ubuntu版本
    sudo apt-get update
    sudo apt-get install -y libtdx-attest-dev
    
    # velinux(centos compatible)版本
    sudo yum makecache
    sudo yum install -y libtdx-attest-devel
    
  2. (可选)编译生成远程证明报告的工具。

    1. 进入对应tdx-quote-generation-sample的工作路径。
      cd /opt/intel/tdx-quote-generation-sample/
      
    2. 依次执行以下命令,编译生成远程证明报告的工具。
      sudo sed '/rtmr_event.version = 1;/,/tdx_att_free_quote(p_quote_buf);/{/tdx_att_free_quote(p_quote_buf);/!d;}' -i test_tdx_attest.c
      sudo make
      
  3. 运行编译出的可执行文件。

    sudo ./test_tdx_attest
    

    回显如下,“Successfully get the TD Quote”表明已成功生成远程证明报告(TD Quote)。
    alt
    4. 执行以下命令,查看生成的文件。

    ls -al /opt/intel/tdx-quote-generation-sample/
    


    回显如上图,在tdx-quote-generation-sample的工作路径下,新增了quote.dat与report.dat文件。其中,quote.dat即为远程证明报告(TD Quote);report.dat为TD report,生成TD report需要提供16进制、长度为64字节的字符串(本文选择随机生成),该字符串会作为生成的TD report的一部分,在实践中通常作为一个哈希值。例如,它可以是一个公钥的哈希值,验证方在验证该远程证明报告成功后,可以提取这段哈希值用于后续的密钥协商流程使用。

    说明

    如需自行设置report.dat,您可以参考下方提供的文件,手动修改test_tdx_attest.c文件,并重新执行sudo make命令进行编译,然后通过sudo ./test_tdx_attest -d <report_data>运行。其中<report_data>为您指定的16进制、64字节的字符串,例如sudo ./test_tdx_attest -d 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

    tdx_attest_sample_code.c
    4.41KB

步骤二:验证远程证明报告

为了验证您所购买的TDX实例的环境可信,您可以使用远程证明验证工具,验证TD Quote中内容。

  1. 执行以下命令,安装远程证明验证工具及其所依赖的软件包。

    # velinux/ubuntu版本
    sudo apt-get install -y tee-appraisal-tool libsgx-dcap-ql-dev libsgx-dcap-quote-verify-dev libsgx-dcap-default-qpl-dev libssl-dev libtdx-appraisal-sample
    
    
    # velinux(centos compatible)版本
    sudo yum install -y tee-appraisal-tool libsgx-dcap-ql-devel libsgx-dcap-quote-verify-devel libsgx-dcap-default-qpl-devel libubsan libtdx-appraisal-sample
    
  2. 配置火山引擎TDX远程证明服务。
    配置/etc/sgx_default_qcnl.conf文件中的PCCS_URL。例如,将PCCS_URL设置为华北2(北京)的PCCS(Provisioning Certificate Cache Service)服务。

    sudo sed "s|\"pccs_url\": \"https:\/\/localhost:8081\/sgx\/certification\/v4/\"|\"pccs_url\": \"https:\/\/tdx-dcap-server-cn-beijing.ecs.volces.com\/sgx\/certification\/v4\/\"|" -i /etc/sgx_default_qcnl.conf
    
  3. 进入tdx-quote-appraisal-sample目录,编译对应的证明工具。

    cd /opt/intel/tdx-quote-appraisal-sample/
    sudo make
    

    回显如下图所示。
    alt

  4. 生成安全评估策略(JSON格式)。

    • 方式一:使用验证工具自带的默认策略(位于/opt/intel/tdx-quote-appraisal-sample/Policies/default_enclave.json)。
      {
          "policy_array": [
              {
                  "environment": {
                      "class_id": "45b734fc-aa4e-4c3d-ad28-e43d08880e68",
                  },
                  "reference":{
                      "tdx_attributes":"8000000010000000",
                      "tdx_attributes_mask": "7FFFFFFFFFFFFFFF"
                  }
              }
          ]
      }
      
    • 方式二:编写您的自定义策略。
      关于安全评估策略(Appraisal Policy)的详细介绍,请参见Intel DCAP Appraisal Engine Developer Guide
    • 方式三:通过步骤一中生成的TD Report,来生成对应的安全评估策略。
      sudo tee_appraisal_tool gen_payload -in <report_path> -out <td_identity_policy>
      
      • <report_path>请替换为真实的TD Report路径,本文使用/opt/intel/tdx-quote-generation-sample/report.dat。
      • <td_identity_policy>请替换为要生成的策略名,本文使用payload.json。
  5. 对安全评估策略进行签名。
    生成安全评估策略后,还需要将策略进行签名并转换成对应的JWT(JSON Web Token)格式。生成的JWT文件可以被传输至任何需要验证远程证明报告的环境中,用作远程评估的安全策略以进行后续的检验流程。

    • 方式一:使用默认的安全评估策略。
      在编译阶段就已经生成对应的签名策略,您无需操作,具体的文件存放在/opt/intel/tdx-quote-appraisal-sample/Policies/default_enclave.jwt。
      alt

    • 方式二:对自定义策略进行签名(包括通过TD Report生成的安全评估策略)。

      sudo tee_appraisal_tool sign_policy -in <td_identity_policy> -key ec_priv.pem -out <signed_td_identity_policy>
      
      • <td_identity_policy>请替换为待签名的策略文件路径(.json文件),本文使用/opt/intel/tdx-quote-generation-sample/payload.json。
      • <signed_td_identity_policy>请替换为签名的策略名(以.jwt后缀命名),本文使用/opt/intel/tdx-quote-generation-sample/payload.jwt。

      回显如下,表示已生成JWT格式的安全策略。
      alt

  6. 验证远程证明报告。

    • 方式一:使用验证工具自带的默认安全评估策略,验证远程证明生成的Ouote。

      sudo ./verifier -quote <quote_path>
      

      <quote_path>请替换为待验证的Quote路径,本文使用/opt/intel/tdx-quote-generation-sample/quote.dat。

      回显如下图所示。
      alt
      alt

    • 方式二:使用您签名后的自定义策略进行验证(包括通过TD Report生成的安全评估策略)。

      sudo ./verifier -quote <quote_path> -td_identity_policy <td_identity_policy>
      
      • <quote_path>请替换为待验证的Quote路径,本文使用/opt/intel/tdx-quote-generation-sample/quote.dat。
      • <td_identity_policy>请替换为您生成的策略路径,本文使用/opt/intel/tdx-quote-appraisal-sample/payload.jwt。

      回显如下图所示。
      alt

TDX实例限制说明

  • TDX实例暂不支持VNC登录。

  • TDX实例的CPU寄存器和内存中的数据会通过CPU硬件进行加密保护,因此其性能相较常规ECS实例存在一定损失。

  • 当前仅支持使用 Ubuntu 24.04 通用公共镜像和 veLinux 2.0 for TDX 、veLinux 2.0 CentOS Compatible for TDX 定制版公共镜像,若您使用自定义镜像创建TDX实例可能会导致实例无法使用。

  • Linux guest kernel SWIOTLB buffer已知问题:

    SWIOTLB:Single-page Input/Output Transfer Lookaside Buffer,单页输入输出转换后备缓冲区。

    • 可见内存较常规实例较小,开启了TDX特性的ECS实例内部将使用特定的非加密内存(SWIOTLB)用于外设通信,该内存区域的大小默认情况下为ECS实例可用内存的6%(但不大于1 GiB)。

    • 大规格实例插入多张弹性网卡可能导致ECS实例夯机,原因是网卡多队列情况下SWIOTLB内存可能不足导致内存分配失败,您可以在控制台将对应ECS实例关机并卸载对应弹性网卡以从启动失败中恢复。

    • 如果您的实例负载涉及大量的I/O通信,则可能遭遇由SWIOTLB不足导致的性能下降。您可以执行以下命令检查该问题是否存在:

      dmesg| grep 'swiotlb buffer is full'
      

      注意

      错误配置SWIOTLB参数可能导致您的实例启动失败,建议您在操作前创建磁盘快照以方便在任何错误情况下可以安全回滚。具体操作,请参见创建快照

      若存在该问题,您可以尝试调大SWIOTLB的值以改善ECS的性能,具体操作如下:

      1. 打开/etc/default/grub文件。
        vim /etc/default/grub
        
      2. 在GRUB_CMDLINE_LINUX字段后加入SWIOTLB相关参数。例如将GRUB_CMDLINE_LINUX修改为GRUB_CMDLINE_LINUX=".... swiotlb=524288"以将SWIOTLB的大小修改为1 GiB。

        SWIOTLB参数取值的计算方法为:目标大小(以MiB为单位)* 512。更多信息,请参见The kernel's command-line parameters

      3. 执行以下命令,更新grub.cfg配置文件使修改生效。
        # velinux/ubuntu版本
        sudo update-grub
        
        # velinux(centos compatible)版本
        sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg --update-bls-cmdline