
Ferramenta de raciocínio automatizado baseada no verificador SMACK que detecta bugs de enclave SGX a partir de violações de limites confiáveis, incluindo manipulação de ponteiros inválida, erros de desalocação de memória e bugs TOCTOU.
O Intel SGX protege a lógica isolada da aplicação e dados confidenciais dentro de um enclave com criptografia de memória baseada em hardware. Usar esse mecanismo de segurança baseado em hardware requer um modelo de programação estrito para o uso de memória, com APIs complexas dentro e fora do limite do enclave. Os desenvolvedores de enclaves são obrigados a aplicar práticas cuidadosas de programação para garantir a segurança do enclave, especialmente ao lidar com dados que fluem através do limite confiável do enclave. Violações do limite confiável podem causar corrupção de memória e são exploráveis por atacantes para recuperar e manipular dados protegidos. Atualmente, nenhuma ferramenta disponível publicamente pode detectar efetivamente tais problemas para enclaves do mundo real.
SGXRay é uma ferramenta de raciocínio automatizado baseada no verificador SMACK que detecta automaticamente bugs em enclaves SGX decorrentes de violações dos limites confiáveis. Ele recompila o código do enclave fornecido e inicia a análise a partir de uma função de entrada do enclave especificada pelo usuário. Após a análise, ele encontra um tratamento de ponteiro inválido dentro de uma pilha de software SGX, como desreferenciamento de ponteiro não verificado dentro de um enclave, desalocação de memória inválida e bugs TOCTOU, ou prova a ausência de tais bugs até um limite de loop e recursão especificado pelo usuário.
Atualmente, as aplicações SGX do SGXRay são construídas em dois SDKs SGX: Intel SGX SDK e openenclave SDK. Os usuários podem optar pelo código do SDK para uma análise mais completa.
Para um início rápido, siga um tutorial passo a passo sobre o uso do SGXRay em um dos exemplos de demonstração aqui.
A figura a seguir demonstra o fluxo de trabalho do SGXRay.

Executar o SGXRay é um processo de duas etapas. A primeira etapa é obter um arquivo LLVM IR para a aplicação. A segunda etapa é invocar a CLI do SGXRay para verificação.
Para a primeira etapa, fornecemos duas imagens Docker para cada SDK, respectivamente.
docker pull baiduxlab/sgx-ray-frontend-intel
docker pull baiduxlab/sgx-ray-frontend-oe
As instruções detalhadas para executar a primeira etapa podem ser encontradas aqui.
Para a segunda etapa, também fornecemos uma imagem Docker.
docker pull baiduxlab/sgx-ray-distro:latest
As instruções detalhadas para executar a segunda etapa podem ser encontradas aqui.
Fornecemos um Dockerfile que constrói a imagem para a etapa de verificação.
git clone https://github.com/baiduxlab/sgxray.git && cd sgxray
docker build . -t sgx-ray-distro-local --build-arg hostuid=$UID -f Dockerfiles/Dockerfile-CLI
Uma construção bem-sucedida deve produzir uma imagem chamada sgx-ray-distro-local que possui um usuário user com o mesmo ID de usuário da conta do host.
Documentações detalhadas do SGXRay podem ser encontradas a seguir.