
Herramienta de razonamiento automatizado basada en el verificador SMACK que detecta errores de enclave SGX por violaciones del límite de confianza, incluyendo manejo de punteros inválidos, errores de desasignación de memoria y errores TOCTOU.
Intel SGX protege la lógica de aplicación aislada y los datos sensibles dentro de un enclave mediante cifrado de memoria basado en hardware. Para usar este mecanismo de seguridad basado en hardware, se requiere un modelo de programación estricto en el uso de la memoria,con APIs complejas dentro y fuera del límite del enclave. Se requiere que los desarrolladores de enclaves apliquen prácticas de programación cuidadosas para garantizar la seguridad del enclave, especialmente al manejar datos que fluyen a través del límite de confianza del enclave. Las violaciones del límite de confianza pueden causar corrupción de memoria y son explotables por atacantes para recuperar y manipular datos protegidos. Actualmente, no hay herramientas disponibles públicamente que puedan detectar eficazmente estos problemas en enclaves reales.
SGXRay es una herramienta de razonamiento automatizada basada en el verificador SMACK que detecta automáticamente errores de enclave SGX originados por violaciones de los límites de confianza. Recompila un código de enclave dado e inicia el análisis desde una entrada de función de enclave especificada por el usuario. Después del análisis, encuentra un manejo de puntero inválido dentro de una pila de software SGX, como desreferenciar un puntero no verificado dentro de un enclave, desasignación de memoria inválida y errores TOCTOU, o demuestra la ausencia de tales errores hasta un límite de bucle y recursión especificado por el usuario.
Actualmente, SGXRay aplicaciones SGX construidas en dos SDKs de SGX: Intel SGX SDK y openenclave SDK. Los usuarios pueden optar por incluir código SDK para un análisis más completo.
Para un inicio rápido, siga un tutorial paso a paso sobre el uso de SGXRay con uno de los ejemplos de demostración aquí.
La siguiente figura demuestra el flujo de trabajo de SGXRay.
Ejecutar SGXRay es un proceso de dos pasos. El primer paso es obtener un archivo LLVM IR para la aplicación. El segundo paso es invocar la CLI de SGXRay para la verificación.
Para el primer paso, proporcionamos dos imágenes Docker para cada SDK, respectivamente.
docker pull baiduxlab/sgx-ray-frontend-intel
docker pull baiduxlab/sgx-ray-frontend-oe
Las instrucciones detalladas para ejecutar el primer paso se pueden encontrar aquí.
Para el segundo paso, también proporcionamos una imagen Docker.
docker pull baiduxlab/sgx-ray-distro:latest
Las instrucciones detalladas para ejecutar el segundo paso se pueden encontrar aquí.
Proporcionamos un Dockerfile que construye la imagen para el paso de verificación.
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
Una construcción exitosa debería producir una imagen llamada sgx-ray-distro-local que tiene un usuario user con el mismo ID de usuario que la cuenta del host.
La documentación detallada de SGXRay se puede encontrar a continuación.