
Инструмент автоматического рассуждения на основе верификатора SMACK, который обнаруживает ошибки в анклавах SGX, вызванные нарушениями доверенной границы, включая некорректную обработку указателей, ошибки освобождения памяти и ошибки TOCTOU.
Intel SGX защищает изолированную логику приложения и конфиденциальные данные внутри анклава с помощью аппаратного шифрования памяти. Использование такого механизма аппаратной безопасности требует строгой модели программирования при работе с памятью и сложных API для входа и выхода из анклава. Разработчики анклавов должны применять тщательные практики программирования для обеспечения безопасности анклава, особенно при работе с данными, пересекающими доверенную границу анклава. Нарушения доверенной границы могут привести к повреждению памяти и могут быть использованы злоумышленниками для извлечения и манипулирования защищенными данными. В настоящее время нет общедоступных инструментов, способных эффективно обнаруживать такие проблемы в реальных анклавах.
SGXRay — это инструмент автоматического рассуждения, основанный на верификаторе SMACK, который автоматически обнаруживает ошибки анклавов SGX, возникающие из-за нарушений доверенных границ. Он перекомпилирует заданный код анклава и начинает анализ с указанной пользователем точки входа функции анклава. После анализа он либо находит некорректную обработку указателей в программном стеке SGX, такую как разыменование непроверенного указателя внутри анклава, недопустимое освобождение памяти и ошибки TOCTOU, либо доказывает отсутствие таких ошибок вплоть до заданного пользователем ограничения по циклам и рекурсии.
В настоящее время SGXRay поддерживает приложения SGX, построенные на двух SDK: Intel SGX SDK и openenclave SDK. Пользователи могут включить код SDK для более тщательного анализа.
Для быстрого старта следуйте пошаговому руководству по использованию SGXRay на одном из демонстрационных примеров здесь.
На следующем рисунке показан рабочий процесс SGXRay.
Запуск SGXRay состоит из двух этапов. Первый этап — получение файла LLVM IR для приложения. Второй этап — вызов CLI SGXRay для верификации.
Для первого этапа мы предоставляем два Docker-образа для каждого SDK соответственно.
docker pull baiduxlab/sgx-ray-frontend-intel
docker pull baiduxlab/sgx-ray-frontend-oe
Подробные инструкции по выполнению первого этапа можно найти здесь.
Для второго этапа мы также предоставляем Docker-образ.
docker pull baiduxlab/sgx-ray-distro:latest
Подробные инструкции по выполнению второго этапа можно найти здесь.
Мы предоставляем Dockerfile для сборки образа для этапа верификации.
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
Успешная сборка должна создать образ с именем sgx-ray-distro-local, в котором есть пользователь user с таким же идентификатором пользователя, как у хост-аккаунта.
Подробная документация SGXRay доступна ниже.