Intel SGX e MSR: cosa devono sapere gli sviluppatori?

9

Intel SGX è una nuova tecnologia intrigante che verrà spedita come parte dei prossimi processori Intel. È progettato per abilitare la gestione software in un'enclave sicura. Il codice in esecuzione nell'enclave verrà isolato dall'hardware dal codice non attendibile in esecuzione sullo stesso processore, in modo da poter eseguire codice di sicurezza nell'enclave e proteggerlo dagli attacchi. Mentre SGX non è supportato nei processori attualmente disponibili, Intel suggerisce che sarà presto disponibile. La speranza è che questo possa fornire una solida base per certi tipi di isolamento: gli sviluppatori saranno in grado di eseguire determinati codici (ad esempio, codice crittografico di gestione delle chiavi) in un'enclave protetta, con garanzie che altri codici non saranno in grado di manomettere esso.

Un registro specifico del modello (MSR) è uno speciale registro di configurazione che controlla il funzionamento del processore. Ad esempio, gli MSR possono essere utilizzati per abilitare la ramificazione, i contatori delle prestazioni, i watchpoint hardware e altre utili funzioni speciali. Normalmente, solo il codice privilegiato può leggere e scrivere la maggior parte dei MSR.

La mia domanda: in che modo la modalità SGX interagisce con gli MSR? Cosa devono sapere gli sviluppatori di codice che gira in modalità SGX sui MSR?

La specifica SGX non dice in che modo la modalità SGX interagisce con gli MSR. Tuttavia, si potrebbe immaginare che i MSR potrebbero potenzialmente rappresentare un rischio per il codice in esecuzione in un'enclave, a seconda di come i due interagiscono. Ad esempio, se il codice non affidabile può abilitare la tracciatura di ramo (tramite un MSR) e quindi attivare il richiamo di un'enclave sicura e se questa impostazione è stata mantenuta attraverso il selettore di modalità che ha causato la registrazione di tutti i rami presi dal codice di enclave in memoria accessibili da non attendibili codice, quindi questo potrebbe consentire al codice non affidabile di attivare potenti attacchi di canale laterale contro il codice di enclave.

Quindi, in che modo i valori del MSR influenzano l'esecuzione del codice in esecuzione in un'enclave? Gli MSR vengono ignorati durante l'esecuzione in modalità enclave? Il codice progettato per funzionare in un'enclave deve cancellare / resettare tutti gli MSR prima di fare qualcosa di sensibile? Cosa devono sapere gli sviluppatori di codice che gireranno in un'enclave per sapere come funzionano gli MSR in modalità SGX, per scrivere codice sicuro e proteggere il loro codice dagli attacchi?

    
posta D.W. 19.02.2015 - 01:46
fonte

1 risposta

7

Questa è una bella domanda! Non ci ho mai pensato fino a quando non l'hai chiesto. Innanzitutto, il codice in esecuzione all'interno di un'enclave protetta viene eseguito nell'anello 3. Pertanto, si applicano tutte le restrizioni applicabili al codice dell'anello 3 non enclave non attendibile. Quindi un'enclave non può scrivere su MSR.

Successivamente, le specifiche non menzionano esplicitamente nulla sugli MSR, ma indicano l'interazione con le funzioni IA32. Per l'esempio di tracciatura del ramo che hai dato, guarda la sezione su LBR (ultimo record del ramo). Questo ti dice esattamente come interagisce. Dalla mia comprensione, le istruzioni EENTER / EXIT sono viste come un ramo lungo ciascuna verso il punto di ingresso all'interno dell'enclave. Tutto ciò che accade dopo il salto nel codice all'interno dell'enclave non viene registrato o visibile su un codice non affidabile, a prescindere dal privilegio, poiché i record del ramo vengono estratti dallo stack LBR all'uscita dell'enclave. È visibile solo su una voce di debug opt in che può essere impostata dallo sviluppatore dell'enclave e come dice chiaramente il nome, l'enclave è in modalità debug (vedi capitolo 7, sezione 5 sulla tracciatura delle derivazioni). Quindi il canale laterale stai parlando non dovrebbe essere possibile.

Gli attacchi ai canali laterali di tracciamento delle filiali potrebbero non essere un problema, ma altri tipi di monitoraggio delle prestazioni potrebbero essere un problema. Gli errori di pagina, gli accessi alla memoria, il comportamento della cache, ecc. Possono ancora essere monitorati. Gli attacchi ai canali laterali basati su cache sono ancora possibili. Quindi sì gli attacchi al canale laterale sono possibili contro il codice enclave. Il documento Haven di Microsoft spiega il tipo di limitazioni che SGX ha ancora in termini di canale laterale attacchi.

E per rispondere alla tua domanda, ciò che uno sviluppatore di enclave deve sapere su MSR dipende dal tipo di attacchi che lo sviluppatore si aspetta nel suo codice. Presumo che ci sarà una sorta di modellazione delle minacce durante la progettazione e lo sviluppo dell'enclave e in base alle minacce che ci si aspetta, è necessario capire come SGX tratta queste minacce. Il collegamento sul lato del ramo è un esempio di come SGX lo tratta.

Per la maggior parte, mi aspetto che qualsiasi stato MSR / registro / processore che possa far trapelare informazioni sull'enclave e la sua esecuzione siano nascosti / protetti da codice non fidato, privilegiato o non privilegiato e uno scrittore di enclave non debba preoccuparsene.

    
risposta data 19.02.2015 - 14:57
fonte

Leggi altre domande sui tag