Este tópico descreve como criar um ambiente de computação confidencial com Software Guard Extensions (SGX) em uma instância do Elastic Compute Service (ECS) habilitada para Intel® SGX (instância vSGX) e como verificar o recurso SGX na instância.
Pré-requisitos
Crie uma instância vSGX e conecte-se a ela.
Apenas as famílias de instâncias g7t, c7t e r7t suportam o recurso SGX. Para mais informações, consulte Visão geral das famílias de instâncias.
Informações básicas
O Intel® SGX estabelece um ambiente de computação confidencial no nível físico para garantir a segurança dos dados por meio de proteções baseadas em hardware, em vez de firmware ou software. O Intel® SGX utiliza extensões de conjunto de instruções e um mecanismo de controle de acesso para isolar o ambiente de execução de programas SGX. Isso protege a confidencialidade e a integridade de códigos e dados críticos contra ataques de malware. Em comparação com outras tecnologias de segurança, o Intel® SGX usa uma raiz de confiança composta exclusivamente por hardware. Isso evita falhas causadas por vulnerabilidades de segurança no software que serve de base para a raiz de confiança e melhora a segurança do sistema.
As famílias de instâncias com segurança aprimorada g7t, c7t e r7t fornecem memória confidencial baseada em Intel® SGX e suportam a tecnologia SGX para máquinas virtuais. Você pode desenvolver e executar programas SGX em instâncias vSGX.
Se você usar chaves vinculadas ao hardware (como chaves de selagem SGX) para criptografar os dados de uma instância dentro de um enclave Intel SGX, não será possível descriptografar esses dados após a alteração do host da instância. Recomendamos implementar redundância de dados e backup na camada de aplicação para garantir a confiabilidade da aplicação.
Procedimento
Etapa 1: Verificar se o SGX está ativado
Antes de criar um ambiente de computação confidencial SGX, use o CPUID para verificar se o SGX está ativado. Esta seção descreve como realizar essa verificação. Os exemplos a seguir utilizam imagens Alibaba Cloud Linux 2 (UEFI), Alibaba Cloud Linux 3 (UEFI) e Ubuntu 22.04 (UEFI).
Imagem Alibaba Cloud Linux 2/3 (UEFI)
-
Instale o CPUID.
sudo yum install -y cpuid -
Verifique se o SGX está ativado.
cpuid -1 -l 0x7 |grep SGXUma saída semelhante à seguinte indica que o SGX está ativado.
NotaApós ativar o SGX, o driver SGX é necessário para executar programas SGX. As imagens dedicadas fornecidas pela Alibaba Cloud possuem um driver SGX integrado. Caso não queira usar uma imagem dedicada, instale o driver SGX.
-
Verifique se o driver SGX está instalado.
ls -l /dev/{sgx_enclave,sgx_provision}Uma saída semelhante à seguinte indica que o driver SGX está instalado.

Imagem Ubuntu 22.04 (UEFI)
-
Instale o CPUID.
sudo apt-get update && sudo apt-get install -y --no-install-recommends cpuid -
Verifique se o SGX está ativado.
cpuid -1 -l 0x7 |grep SGXUma saída semelhante à seguinte indica que o SGX está ativado.
NotaApós ativar o SGX, o driver SGX é necessário para executar programas SGX. As imagens dedicadas fornecidas pela Alibaba Cloud possuem um driver SGX integrado. Caso não queira usar uma imagem dedicada, instale o driver SGX.
-
Instale o driver SGX:
-
Crie o script
install_sgx_dcap.sh:cat <<'EOF' > install_sgx_dcap.sh #!/bin/bash version_id=$(cat /etc/os-release|grep "VERSION_ID"|cut -d"=" -f2|tr -d "\"") version_codename=$(cat /etc/os-release|grep "VERSION_CODENAME"|cut -d"=" -f2) apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential dkms curl wget if [ ! -e /dev/sgx/enclave -a ! -e /dev/sgx_enclave ]; then dcap_version=$(curl -s https://download.01.org/intel-sgx/latest/version.xml |grep dcap| sed -r 's/.*>(.*)<.*/\1/') dcap_files=$(curl -s https://download.01.org/intel-sgx/latest/dcap-latest/linux/SHA256SUM_dcap_${dcap_version}.cfg) echo "${dcap_files}" | grep "ubuntu${version_id}-server" |grep "sgx_linux_x64_driver" | awk '{print $2}' | xargs -I{} curl -O -J https://download.01.org/intel-sgx/latest/dcap-latest/linux/{} bash sgx_linux_x64_driver*.bin else echo "driver already installed" fi EOF -
Execute o script para instalar o driver SGX:
sudo bash ./install_sgx_dcap.sh
-
-
Verifique se o driver SGX está instalado.
ls -l /dev/{sgx_enclave,sgx_provision}Uma saída semelhante à seguinte indica que o driver SGX está instalado.

Etapa 2: Criar um ambiente de computação confidencial SGX
Antes de desenvolver programas SGX, instale o runtime SGX e o SDK em uma instância vSGX e configure o serviço de atestação remota. Para garantir uma melhor experiência, recomendamos o uso de imagens dedicadas fornecidas pela Alibaba Cloud. Essas imagens incluem o driver SGX e fornecem o SDK de Ambiente de Execução Confiável (TEE), totalmente compatível com o Intel® SGX SDK. Esta seção descreve como criar um ambiente de computação confidencial SGX. Os exemplos a seguir utilizam imagens Alibaba Cloud Linux 2 (UEFI), Alibaba Cloud Linux 3 (UEFI) e Ubuntu 22.04 (UEFI). Se você utilizar outras imagens Linux, como CentOS, instale o driver SGX e o Platform SoftWare (PSW). Para mais informações, consulte Guia de Instalação de Software Intel® SGX para Linux.
-
Instale os módulos necessários para criar o ambiente de computação confidencial SGX.
Imagem Alibaba Cloud Linux 2/3 (UEFI)
-
(Obrigatório) Instale o runtime SGX da Alibaba Cloud.
NotaAo criar uma instância vSGX no console ECS, o runtime SGX da Alibaba Cloud é instalado automaticamente. Você pode pular esta etapa e instalar o Alibaba Cloud TEE SDK.
-
Importe o repositório de software Yellowdog Updater Modified (YUM) para computação confidencial da Alibaba Cloud.
NotaSubstitua [Region-ID] nas URLs a seguir pelo ID da região da instância vSGX:
A URL pública do repositório tem o seguinte formato:
https://enclave-[Region-ID].oss-[Region-ID].aliyuncs.com/repo/alinux/enclave-expr.repo.A URL interna do repositório tem o seguinte formato:
https://enclave-[Region-ID].oss-[Region-ID]-internal.aliyuncs.com/repo/alinux/enclave-expr.repo.
Alternativamente, crie e execute um script para importar o repositório de software YUM para computação confidencial da Alibaba Cloud.
-
Crie o script
install_sgx_repo.sh:cat <<'EOF' > install_sgx_repo.sh ID=$(grep -w '^ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"') VERSION_ID=$(grep -w '^VERSION_ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"') # Query the region of the instance. token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) # Enable the Alibaba Cloud experimental repository for the instance if an Alibaba Cloud Linux 2 (UEFI) image is used. if [ "$ID" = "alinux" -a "$VERSION_ID" = "2.1903" ]; then sudo rpmkeys --import http://mirrors.cloud.aliyuncs.com/epel/RPM-GPG-KEY-EPEL-7 sudo yum install -y alinux-release-experimentals fi yum install -y yum-utils && \ yum-config-manager --add-repo \ https://enclave-${region_id}.oss-${region_id}-internal.aliyuncs.com/repo/alinux/enclave-expr.repo EOF -
Importe o repositório YUM para computação confidencial da Alibaba Cloud:
sudo bash ./install_sgx_repo.sh
-
Instale o runtime SGX da Alibaba Cloud.
sudo yum install -y libsgx-ae-le libsgx-ae-pce libsgx-ae-qe3 libsgx-ae-qve \ libsgx-aesm-ecdsa-plugin libsgx-aesm-launch-plugin libsgx-aesm-pce-plugin \ libsgx-aesm-quote-ex-plugin libsgx-dcap-default-qpl libsgx-dcap-ql \ libsgx-dcap-quote-verify libsgx-enclave-common libsgx-launch libsgx-pce-logic \ libsgx-qe3-logic libsgx-quote-ex libsgx-ra-network libsgx-ra-uefi \ libsgx-uae-service libsgx-urts sgx-ra-service sgx-aesm-serviceNotaO SGX Architectural Enclave Service Manager (AESM) gerencia serviços como início de enclave, configuração de chaves e atestação remota. O caminho de instalação padrão do SGX AESM é /opt/intel/sgx-aesm-service.
-
-
Instale o Alibaba Cloud TEE SDK.
sudo yum install -y sgxsdk
O Alibaba Cloud TEE SDK é totalmente compatível com o Intel® SGX SDK. Após instalar o Alibaba Cloud TEE SDK, consulte a Referência do Desenvolvedor Intel® SGX para desenvolver programas SGX. Para mais informações, consulte Referência do Desenvolvedor Intel® SGX.
NotaO caminho de instalação padrão do Intel® SGX SDK no Alibaba Cloud TEE SDK é /opt/alibaba/teesdk/intel/sgxsdk/.
Imagem Ubuntu 22.04 (UEFI)
-
Crie o script
install_sgx_sdk.sh:cat <<'EOF' > install_sgx_sdk.sh #!/bin/bash version_id=$(cat /etc/os-release|grep "VERSION_ID"|cut -d"=" -f2|tr -d "\"") version_codename=$(cat /etc/os-release|grep "VERSION_CODENAME"|cut -d"=" -f2) apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential dkms curl wget dcap_version=$(curl -s https://download.01.org/intel-sgx/latest/version.xml |grep dcap| sed -r 's/.*>(.*)<.*/\1/') linux_version=$(curl -s https://download.01.org/intel-sgx/latest/version.xml |grep linux| sed -r 's/.*>(.*)<.*/\1/') dcap_files=$(curl -s https://download.01.org/intel-sgx/latest/dcap-latest/linux/SHA256SUM_dcap_${dcap_version}.cfg) echo "${dcap_files}" | grep "ubuntu${version_id}-server" | awk '{print $2}' | xargs -I{} curl -O -J https://download.01.org/intel-sgx/latest/dcap-latest/linux/{} # install sgx_sdk bash sgx_linux_x64_sdk*.bin --prefix /opt/intel source /opt/intel/sgxsdk/environment # install psw echo "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu ${version_codename} main" | tee /etc/apt/sources.list.d/intelsgx.list wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add - apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libsgx-launch libsgx-urts libsgx-epid libsgx-quote-ex libsgx-dcap-ql libsgx-dcap-ql-dev systemctl enable --now aesmd.service EOF -
Execute o script para instalar o Intel® SGX SDK e o PSW:
sudo bash ./install_sgx_sdk.sh
-
-
Configure o serviço de atestação remota SGX da Alibaba Cloud.
O serviço de atestação remota SGX da Alibaba Cloud é totalmente compatível com o serviço de atestação remota baseado no Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA) do Intel® SGX e com o Intel® SGX SDK. As instâncias vSGX fornecidas pela Alibaba Cloud podem obter confiança de provedores e produtores remotos por meio da atestação remota. Para mais informações, consulte Serviços de Atestação e Provisionamento.
O serviço de atestação remota SGX da Alibaba Cloud fornece as seguintes informações sobre o SGX SDK:
Certificados SGX: os certificados do SGX.
Lista de revogação: uma lista de certificados SGX revogados.
Informações da base de computação confiável: informações sobre a raiz de confiança.
NotaO Intel Ice Lake suporta apenas atestação remota baseada em Intel Software Guard Extensions Data Center Attestation Primitives (Intel SGX DCAP) e não suporta atestação remota baseada em Intel Enhanced Privacy ID (EPID). É necessário adaptar as aplicações antes de usar o recurso de atestação remota. Para mais detalhes sobre atestação remota, consulte Fortalecer a Confiança do Enclave com Atestação.
O serviço de atestação remota SGX da Alibaba Cloud é implantado por região. Para garantir estabilidade ideal, recomendamos acessar o serviço implantado na mesma região da sua instância vSGX. Após instalar o Alibaba Cloud TEE SDK, o arquivo de configuração padrão /etc/sgx_default_qcnl.conf é gerado automaticamente para o serviço de atestação remota. Utilize um dos métodos a seguir para adaptar o arquivo ao serviço de atestação remota SGX da Alibaba Cloud na região onde a instância vSGX está implantada.
NotaA tabela a seguir descreve as regiões onde o serviço de atestação remota SGX da Alibaba Cloud é suportado.
Região suportada
ID da Região
China (Qingdao)
cn-qingdao
China (Beijing)
cn-beijing
China (Zhangjiakou)
cn-zhangjiakou
China (Ulanqab)
cn-wulanchabu
China (Hangzhou)
cn-hangzhou
China (Shanghai)
cn-shanghai
China (Shenzhen)
cn-shenzhen
China (Heyuan)
cn-heyuan
China (Guangzhou)
cn-guangzhou
China (Chengdu)
cn-chengdu
China (Hong Kong)
cn-hongkong
Singapura
ap-southeast-1
Indonésia (Jacarta)
ap-southeast-5
-
(Recomendado) Método 1: Configurar automaticamente o arquivo /etc/sgx_default_qcnl.conf.
Execute os comandos a seguir para configurar automaticamente o arquivo /etc/sgx_default_qcnl.conf. Para mais informações, consulte Acessar metadados da instância.
# View the region of the instance. token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) # Specify the URL of Alibaba Cloud Provisioning Certificate Caching Service (PCCS) for the region in which the instance is deployed. PCCS_URL=https://sgx-dcap-server-vpc.${region_id}.aliyuncs.com/sgx/certification/v4/ sudo bash -c 'cat > /etc/sgx_default_qcnl.conf' << EOF # PCCS server address PCCS_URL=${PCCS_URL} # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE EOF -
Método 2: Modificar manualmente o arquivo /etc/sgx_default_qcnl.conf.
-
Se a instância vSGX tiver um endereço IP público atribuído, altere as configurações no arquivo /etc/sgx_default_qcnl.conf para o conteúdo a seguir. Substitua [Region-ID] pelo ID da região da instância vSGX.
# PCCS server address PCCS_URL=https://sgx-dcap-server.[Region-ID].aliyuncs.com/sgx/certification/v4/ # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE -
Se a instância vSGX estiver em uma Virtual Private Cloud (VPC) e possuir apenas endereços IP internos, altere as configurações no arquivo /etc/sgx_default_qcnl.conf para o conteúdo a seguir. Substitua [Region-ID] pelo ID da região da instância vSGX.
# PCCS server address PCCS_URL=https://sgx-dcap-server-vpc.[Region-ID].aliyuncs.com/sgx/certification/v4/ # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE
-
Exemplos de verificação do recurso SGX
Esta seção descreve como iniciar um enclave para verificar se o SGX SDK instalado funciona conforme o esperado. Se o enclave for iniciado, o SDK estará funcionando corretamente. Nos exemplos a seguir, utiliza-se o arquivo de código de exemplo SampleEnclave.
Exemplo 1: Iniciar um enclave
Imagem Alibaba Cloud Linux 2/3 (UEFI)
O Alibaba Cloud TEE SDK fornece códigos de exemplo SGX para verificar o recurso SGX. Por padrão, o código está armazenado no diretório /opt/alibaba/teesdk/intel/sgxsdk/SampleCode.
Instale um compilador.
-
Configure as variáveis de ambiente relacionadas ao SGX SDK.
if [ "$ID" = "alinux" -a "$VERSION_ID" = "2.1903" ]; then source /opt/rh/devtoolset-9/enable fi source /opt/alibaba/teesdk/intel/sgxsdk/environment -
Compile o código de exemplo no arquivo SampleEnclave.
-
Acesse o diretório SampleEnclave:
cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/SampleEnclave -
Compile o código de exemplo em SampleEnclave:
sudo -E make
-
-
Execute o arquivo executável compilado.
sudo ./appSe a saída de comando for semelhante à seguinte, o SGX está funcionando conforme o esperado.

ID=$(grep -w '^ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"')
VERSION_ID=$(grep -w '^VERSION_ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"')
if [ "$ID" = "alinux" ]; then
case "$VERSION_ID" in
"2.1903" )
sudo yum install -y devtoolset-9
;;
"3" )
sudo yum groupinstall -y "Development Tools"
;;
esac
fi
Imagem Ubuntu 22.04 (UEFI)
-
Atualize a lista de pacotes.
sudo apt update -
Instale o compilador
build-essential.sudo apt install -y build-essential -
Compile o código de exemplo no arquivo SampleEnclave.
-
Acesse o diretório SampleEnclave:
cd /opt/intel/sgxsdk/SampleCode/SampleEnclave/ -
Compile o código de exemplo em SampleEnclave:
sudo make SGX_DEBUG=1
-
-
Execute o arquivo executável compilado.
sudo ./appSe a saída de comando for semelhante à seguinte, o SGX está funcionando conforme o esperado.

Exemplo 2: Usar o serviço de atestação remota SGX
O Alibaba Cloud TEE SDK fornece códigos de exemplo SGX para verificar o recurso SGX. Por padrão, o código está armazenado no diretório /opt/alibaba/teesdk/intel/sgxsdk/SampleCode. Esta seção descreve como usar o serviço de atestação remota SGX. Neste exemplo, utiliza-se uma imagem Alibaba Cloud Linux 2 (UEFI) ou Alibaba Cloud Linux 3 (UEFI).
O resultado esperado é a geração de uma citação (quote) usando o arquivo QuoteGenerationSample e sua verificação usando o arquivo QuoteVerificationSample. O exemplo envolve a parte desafiada (programas SGX executados na instância vSGX) e a parte desafiadora (a parte que deseja verificar se os programas SGX são confiáveis). Neste exemplo, o arquivo de código de exemplo QuoteGenerationSample é usado pela parte desafiada para gerar uma citação, e o arquivo de código de exemplo QuoteVerificationSample é usado pela parte desafiadora para verificar a citação.
-
Instale um compilador.
-
Se estiver usando uma imagem Alibaba Cloud Linux 2 (UEFI), instale o devtoolset.
-
Instale o devtoolset.
sudo yum install -y devtoolset-9 -
Configure as variáveis de ambiente relacionadas ao devtoolset.
source /opt/rh/devtoolset-9/enable
-
-
Se estiver usando uma imagem Alibaba Cloud Linux 3 (UEFI), instale as Ferramentas de Desenvolvimento.
sudo yum groupinstall -y "Development Tools"
-
-
Configure as variáveis de ambiente relacionadas ao SGX SDK.
source /opt/alibaba/teesdk/intel/sgxsdk/environment -
Instale o pacote de dependências da atestação remota SGX.
sudo yum install -y libsgx-dcap-ql-devel libsgx-dcap-quote-verify-devel libsgx-dcap-default-qpl-devel -
Compile o código de exemplo no arquivo QuoteGenerationSample usado pela parte desafiada.
-
Acesse o diretório QuoteGenerationSample.
cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/QuoteGenerationSample -
Compile o código de exemplo no arquivo QuoteGenerationSample.
sudo -E make
-
-
Execute o arquivo executável compilado para gerar uma citação.
sudo ./appSe a saída de comando for semelhante à seguinte, a verificação da citação foi bem-sucedida.

-
Compile o código de exemplo no arquivo QuoteVerificationSample usado pela parte desafiadora.
-
Acesse o diretório QuoteVerificationSample.
cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/QuoteVerificationSample -
Compile o código de exemplo no arquivo QuoteVerificationSample.
sudo -E make
-
-
Assine o enclave QuoteVerificationSample.
Para lançar uma versão oficial de um enclave, forneça a chave de assinatura para assinar o enclave.
sudo sgx_sign sign -key Enclave/Enclave_private_sample.pem -enclave enclave.so -out enclave.signed.so -config Enclave/Enclave.config.xmlNotaSe a mensagem de erro
Failed to open file "Enclave/Enclave_private_sample.pem"aparecer, execute o comando a seguir para reassinar a assinatura:sudo sgx_sign sign -key ../QuoteGenerationSample/Enclave/Enclave_private_sample.pem -enclave enclave.so -out enclave.signed.so -config Enclave/Enclave.config.xml -
Execute o arquivo executável compilado para verificar a citação.
sudo ./appSe a saída de comando for semelhante à seguinte, a verificação da citação foi bem-sucedida.

Atualizar o software SGX SDK, PSW e DCAP
A pilha de software Intel® SGX inclui SGX SDK, SGX PSW e SGX Data Center Attestation Primitives (DCAP). Para garantir segurança ideal, recomendamos atualizar as versões do software regularmente. Neste exemplo, utiliza-se uma imagem Alibaba Cloud Linux 3 UEFI para atualizar os pacotes de software SGX SDK, SGX PSW e SGX DCAP.
-
Atualize o software SGX SDK, SGX PSW e SGX DCAP.
sudo rpm -qa --qf "%{NAME}\n"|grep -E "sgxsdk|libsgx-|libtdx-|^sgx-|^tdx-"|sudo xargs bash -c '</dev/tty yum update "$@"' _ -
Visualize as versões do software SGX SDK, SGX PSW e SGX DCAP.
-
Visualize as versões do software SGX SDK e SGX PSW.
sudo rpm -qa|grep -E "sgxsdk|sgx-aesm-service|libsgx-(ae-epid|ae-le|ae-pce|aesm|enclave|epid|headers|launch|quote-ex|uae-service|urts)"A saída de comando será semelhante à seguinte.

-
Visualize a versão do software SGX DCAP.
sudo rpm -qa|grep -E "sgx-(dcap-pccs|pck|ra-service)|libsgx-(ae-id-enclave|ae-qe3|ae-qve|ae-tdqe|dcap|pce-logic|qe3-logic|ra-|tdx-)|libtdx-|^tdx-"A saída de comando será semelhante à seguinte.

-
Problemas conhecidos
Vazamentos de memória podem ocorrer no driver SGX que acompanha o Alibaba Cloud Linux 2 com versão de kernel 4.19.91-23.al7.x86_64. Esse problema foi corrigido na versão mais recente. Recomendamos atualizar o kernel para a versão mais nova. Se desejar continuar usando esta versão anterior do kernel, execute os comandos a seguir para instalar patches e evitar esse problema:
sudo yum install -y alinux-release-experimentals && \
sudo yum install -y kernel-hotfix-5577959-23.al7.x86_64