
Strumento di ragionamento automatico basato sul verificatore SMACK che rileva bug negli enclave SGX da violazioni del confine fidato, inclusa la gestione di puntatori non validi, errori di deallocazione della memoria e bug TOCTOU.
Intel SGX protegge la logica applicativa isolata e i dati sensibili all'interno di un enclave con crittografia della memoria basata su hardware. Per utilizzare questo meccanismo di sicurezza hardware è necessario un modello di programmazione rigoroso sull'uso della memoria, con API complesse dentro e fuori il confine dell'enclave. Gli sviluppatori di enclave devono adottare pratiche di programmazione attente per garantire la sicurezza dell'enclave, soprattutto quando gestiscono dati che attraversano il confine fidato dell'enclave. Le violazioni del confine fidato possono ulteriormente causare corruzione della memoria e possono essere sfruttate dagli aggressori per recuperare e manipolare dati protetti. Attualmente, nessuno strumento disponibile pubblicamente è in grado di rilevare efficacemente tali problemi per enclave reali.
SGXRay è uno strumento di ragionamento automatico basato sul verificatore SMACK che rileva automaticamente i bug delle enclave SGX derivanti da violazioni dei confini fidati. Ricompila un dato codice enclave e avvia l'analisi da un punto di ingresso di funzione enclave specificato dall'utente. Dopo l'analisi, trova una gestione non valida dei puntatori all'interno di uno stack software SGX, come il deferenziamento di un puntatore non controllato all'interno di un'enclave, la deallocazione di memoria non valida e bug TOCTOU, oppure dimostra l'assenza di tali bug fino a un limite di loop e ricorsione specificato dall'utente.
Attualmente, SGXRay supporta applicazioni SGX costruite su due SDK SGX: Intel SGX SDK e openenclave SDK. Gli utenti possono includere il codice SDK per un'analisi più approfondita.
Per un avvio rapido, segui un tutorial passo-passo sull'uso di SGXRay su uno degli esempi dimostrativi qui.
La figura seguente mostra il flusso di lavoro di SGXRay.
Eseguire SGXRay è un processo in due fasi. Il primo passo è ottenere un file LLVM IR per l'applicazione. Il secondo passo è invocare la CLI di SGXRay per la verifica.
Per il primo passo, forniamo due immagini Docker per ciascun SDK, rispettivamente.
docker pull baiduxlab/sgx-ray-frontend-intel
docker pull baiduxlab/sgx-ray-frontend-oe
Le istruzioni dettagliate per eseguire il primo passo si trovano qui.
Per il secondo passo, forniamo anche un'immagine Docker.
docker pull baiduxlab/sgx-ray-distro:latest
Le istruzioni dettagliate per eseguire il secondo passo si trovano qui.
Forniamo un Dockerfile che costruisce l'immagine per il passo di verifica.
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 build riuscita dovrebbe produrre un'immagine denominata sgx-ray-distro-local che ha un utente user con lo stesso ID utente dell'account host.
La documentazione dettagliata di SGXRay è disponibile come segue.