I ricercatori della Università di Scienza e Tecnica della Difesa dell'Esercito Popolare della Cina, dell'Università Nazionale di Singapore e della Scuola Politecnica Federale di Zurigo hanno sviluppato un nuovo metodo di attacco agli enclave isolati di Intel SGX (Software Guard eXtensions). L'attacco è stato chiamato SmashEx ed è stato causato da problemi di rientrabilità durante la gestione delle eccezioni nel funzionamento dei componenti runtime per Intel SGX. Il metodo di attacco proposto consente, in presenza di controllo sul sistema operativo, di identificare i dati riservati memorizzati nell'enclave o di organizzare la copia del proprio codice nella memoria dell'enclave e la sua esecuzione.
Sono stati preparati prototipi di exploit per enclave con runtime basato su Intel SGX SDK (CVE-2021-0186) e Microsoft Open Enclave (CVE-2021-33767). Nel primo caso è stata dimostrata la possibilità di estrarre la chiave RSA utilizzata sul server web per HTTPS, mentre nel secondo è stato possibile identificare il contenuto dell'utility cURL eseguita all'interno dell'enclave. La vulnerabilità è stata già corretta via software nelle versioni Intel SGX SDK 2.13 e Open Enclave 0.17.1. Oltre ai pacchetti Intel SGX SDK e Microsoft Open Enclave, la vulnerabilità si manifesta anche in SDK Google Asylo, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX e Veracruz.
Ricordiamo che la tecnologia SGX (Software Guard Extensions) è stata introdotta nei processori Intel Core di sesta generazione (Skylake) e offre una serie di istruzioni che consentono di allocare nelle applicazioni a livello utente aree di memoria protette, chiamate enclave, il cui contenuto non può essere letto o modificato nemmeno dal kernel e dal codice in esecuzione in modalità ring0, SMM e VMM. Trasferire il controllo del codice nell'enclave non è possibile tramite funzioni di transizione tradizionali e manipolazioni con registri e stack: per trasferire il controllo nell'enclave vengono utilizzate nuove istruzioni EENTER, EEXIT ed ERESUME, che eseguono un controllo delle autorizzazioni. Inoltre, il codice inserito nell'enclave può utilizzare metodi di chiamata classici per accedere alle funzioni all'interno dell'enclave e un'istruzione speciale per chiamare funzioni esterne. Per proteggere da attacchi hardware, come la connessione al modulo DRAM, viene utilizzata la crittografia della memoria dell'enclave.

Il problema è legato al fatto che la tecnologia SGX consente al sistema operativo di interrompere l'esecuzione di un enclave generando un'eccezione hardware, mentre negli enclave non vengono implementati correttamente i primitivi per la gestione atomica di tali eccezioni. A differenza del nucleo del sistema operativo e delle normali applicazioni, il codice all'interno degli enclave non ha accesso ai primitivi per organizzare azioni atomiche durante la gestione delle eccezioni che si presentano in modo asincrono. Senza i suddetti primitivi atomici, l'enclave può essere interrotta in qualsiasi momento e ripresa, anche nei momenti in cui all'interno dell'enclave vengono eseguite sezioni critiche e si trova in uno stato insicuro (ad esempio, quando i registri della CPU non sono stati salvati/ripristinati).

Per un funzionamento normale, la tecnologia SGX consente di interrompere l'esecuzione dell'enclave tramite eccezioni hardware configurabili. Questa caratteristica consente agli ambienti di runtime degli enclave di implementare la gestione delle eccezioni interne all'enclave o la gestione dei segnali, ma può anche provocare errori di rientrabilità. L'attacco SmashEx si basa sull'approfittare delle lacune nel SDK, a causa delle quali la situazione di richiamo ripetuto del gestore dell'eccezione non viene gestita correttamente. È importante notare che per sfruttare la vulnerabilità, l'attaccante deve avere la possibilità di interrompere l'esecuzione dell'enclave, cioè deve controllare il funzionamento dell'ambiente di sistema.
Dopo la generazione di un'eccezione, l'attaccante ottiene una breve finestra temporale durante la quale può intercettare il flusso di esecuzione manipolando i parametri di input. In particolare, se si ha accesso al sistema (ambiente al di fuori dell'enclave), è possibile generare una nuova eccezione immediatamente dopo l'esecuzione dell'istruzione di ingresso nell'enclave (EENTER), il che porterà al ritorno del controllo al sistema in una fase in cui l'impostazione dello stack per l'enclave non è ancora completata, incluso lo stato dei registri della CPU che deve essere mantenuto.
Il sistema può poi restituire il controllo all'enclave, ma poiché lo stack dell'enclave non era impostato al momento dell'interruzione, l'enclave verrà eseguito con lo stack presente nella memoria del sistema, che può essere utilizzato per applicare metodi di sfruttamento basati sulla programmazione orientata al ritorno (ROP - Return-Oriented Programming). Utilizzando la tecnica ROP, l'attaccante non tenta di posizionare il proprio codice in memoria, ma opera su frammenti di istruzioni macchina già presenti nelle librerie caricate, che terminano con un'istruzione di ritorno (di solito sono le terminazioni delle funzioni di libreria). Il funzionamento dell'exploit consiste nel costruire una catena di chiamate a questi blocchi simili (


Fonte: opennet.ru
