
Outil de raisonnement automatisé basé sur le vérificateur SMACK qui détecte les bugs d'enclave SGX provenant de violations de frontière de confiance, y compris la gestion de pointeurs invalides, les erreurs de désallocation mémoire et les bugs TOCTOU.
Intel SGX protège la logique applicative isolée et les données sensibles à l'intérieur d'une enclave grâce au chiffrement mémoire basé sur le matériel. L'utilisation d'un tel mécanisme de sécurité matériel nécessite un modèle de programmation strict sur l'utilisation de la mémoire, avec des API complexes entrant et sortant de la frontière de l'enclave. Les développeurs d'enclaves doivent appliquer des pratiques de programmation rigoureuses pour garantir la sécurité de l'enclave, en particulier lorsqu'ils traitent des données traversant la frontière de confiance de l'enclave. Les violations de la frontière de confiance peuvent en outre provoquer des corruptions mémoire et être exploitées par des attaquants pour récupérer et manipuler des données protégées. Actuellement, aucun outil disponible publiquement ne peut détecter efficacement de tels problèmes pour les enclaves réelles.
SGXRay est un outil de raisonnement automatisé basé sur le vérificateur SMACK qui détecte automatiquement les bogues d'enclave SGX provenant de violations des frontières de confiance. Il recompile un code d'enclave donné et commence l'analyse à partir d'un point d'entrée de fonction d'enclave spécifié par l'utilisateur. Après l'analyse, il trouve soit une gestion de pointeur invalide dans une pile logicielle SGX, telle que le déréférencement d'un pointeur non vérifié à l'intérieur d'une enclave, une désallocation mémoire invalide et des bogues TOCTOU, soit prouve l'absence de tels bogues jusqu'à une limite de boucle et de récursion spécifiée par l'utilisateur.
Actuellement, SGXRay fonctionne avec les applications SGX construites sur deux SDK SGX : Intel SGX SDK et openenclave SDK. Les utilisateurs peuvent inclure le code du SDK pour une analyse plus approfondie.
Pour un démarrage rapide, veuillez suivre un tutoriel pas à pas sur l'utilisation de SGXRay sur l'un des exemples de démonstration ici.
La figure suivante illustre le flux de travail de SGXRay.
L'exécution de SGXRay est un processus en deux étapes. La première étape consiste à obtenir un fichier IR LLVM pour l'application. La deuxième étape consiste à invoquer l'interface en ligne de commande (CLI) de SGXRay pour la vérification.
Pour la première étape, nous fournissons deux images Docker pour chaque SDK, respectivement.
docker pull baiduxlab/sgx-ray-frontend-intel
docker pull baiduxlab/sgx-ray-frontend-oe
Les instructions détaillées pour exécuter la première étape se trouvent ici.
Pour la deuxième étape, nous fournissons également une image Docker.
docker pull baiduxlab/sgx-ray-distro:latest
Les instructions détaillées pour exécuter la deuxième étape se trouvent ici.
Nous fournissons un Dockerfile qui construit l'image pour l'étape de vérification.
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
Une construction réussie devrait produire une image nommée sgx-ray-distro-local qui a un utilisateur user avec le même identifiant utilisateur que le compte hôte.
Les documentations détaillées de SGXRay se trouvent ci-dessous.