
Automatisiertes Reasoning-Tool basierend auf dem SMACK-Verifier, das SGX-Enklaven-Bugs durch Verletzungen der vertrauenswürdigen Grenzen erkennt, einschließlich ungültiger Zeigerbehandlung, Fehler bei der Speicherfreigabe und TOCTOU-Bugs.
Intel SGX schützt isolierte Anwendungslogik und sensible Daten innerhalb einer Enclave mit hardwarebasierter Speicherverschlüsselung. Um einen solchen hardwarebasierten Sicherheitsmechanismus nutzen zu können, ist ein striktes Programmiermodell für die Speichernutzung erforderlich, mit komplexen APIs innerhalb und außerhalb der Enclave-Grenze. Enclave-Entwickler müssen sorgfältige Programmierpraktiken anwenden, um die Sicherheit der Enclave zu gewährleisten, insbesondere beim Umgang mit Daten, die über die vertrauenswürdige Grenze der Enclave fließen. Verstöße gegen die vertrauenswürdige Grenze können zu Speicherkorruption führen und von Angreifern ausgenutzt werden, um geschützte Daten abzurufen und zu manipulieren. Derzeit gibt es keine öffentlich verfügbaren Tools, die solche Probleme in realen Enclaven effektiv erkennen können.
SGXRay ist ein automatisiertes Reasoning-Tool, das auf dem SMACK-Verifizierer basiert und automatisch SGX-Enclave-Fehler erkennt, die auf Verletzungen vertrauenswürdiger Grenzen zurückzuführen sind. Es kompiliert einen gegebenen Enclave-Code neu und startet die Analyse von einem benutzerdefinierten Enclave-Funktionseinstiegspunkt. Nach der Analyse findet es entweder eine ungültige Zeigerbehandlung innerhalb eines SGX-Software-Stacks, wie das Dereferenzieren eines ungeprüften Zeigers innerhalb einer Enclave, ungültige Speicherfreigabe und TOCTOU-Fehler, oder es beweist die Abwesenheit solcher Fehler bis zu einer benutzerdefinierten Schleifen- und Rekursionsgrenze.
Derzeit unterstützt SGXRay SGX-Anwendungen, die auf zwei SGX-SDKs basieren: Intel SGX SDK und openenclave SDK. Benutzer können SDK-Code für eine gründlichere Analyse einbeziehen.
Für einen schnellen Einstieg folgen Sie bitte einer Schritt-für-Schritt-Anleitung zur Verwendung von SGXRay anhand eines der Demo-Beispiele hier.
Die folgende Abbildung zeigt den Arbeitsablauf von SGXRay.
Die Ausführung von SGXRay erfolgt in zwei Schritten. Der erste Schritt besteht darin, eine LLVM-IR-Datei für die Anwendung zu erhalten. Der zweite Schritt besteht darin, die SGXRay-CLI zur Verifizierung aufzurufen.
Für den ersten Schritt stellen wir jeweils zwei Docker-Images für jedes SDK bereit.
docker pull baiduxlab/sgx-ray-frontend-intel
docker pull baiduxlab/sgx-ray-frontend-oe
Detaillierte Anweisungen zur Durchführung des ersten Schrittes finden Sie hier.
Für den zweiten Schritt stellen wir ebenfalls ein Docker-Image bereit.
docker pull baiduxlab/sgx-ray-distro:latest
Detaillierte Anweisungen zur Durchführung des zweiten Schrittes finden Sie hier.
Wir stellen ein Dockerfile bereit, das das Image für den Verifizierungsschritt erstellt.
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
Ein erfolgreicher Build sollte ein Image namens sgx-ray-distro-local erzeugen, das einen Benutzer user mit derselben Benutzer-ID wie das Host-Konto hat.
Detaillierte Dokumentationen zu SGXRay finden Sie wie folgt.