Attacco a Intel SGX per estrarre dati sensibili o eseguire codice nell'enclave

I ricercatori dell'Università di scienza e tecnologia della difesa dell'Esercito popolare di liberazione, dell'Università nazionale di Singapore e dell'ETH di Zurigo hanno sviluppato un nuovo metodo per attaccare le enclavi isolate Intel SGX (Software Guard eXtensions). L'attacco si chiama SmashEx ed è causato da problemi di rientro durante la gestione di situazioni di eccezione durante il funzionamento dei componenti runtime per Intel SGX. Il metodo di attacco proposto consente, se si ha il controllo sul sistema operativo, di determinare i dati riservati che si trovano 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 le enclavi con runtime basato su Intel SGX SDK (CVE-2021-0186) e Microsoft Open Enclave (CVE-2021-33767). Nel primo caso è stata dimostrata la capacità di estrarre una chiave RSA utilizzata su un server web per HTTPS, mentre nel secondo è stato possibile determinare il contenuto ottenuto dall'utilità cURL in esecuzione all'interno dell'enclave. La vulnerabilità è già stata risolta a livello di programmazione nelle versioni di Intel SGX SDK 2.13 e Open Enclave 0.17.1. Oltre a Intel SGX SDK e Microsoft Open Enclave, la vulnerabilità appare anche in Google Asylo SDK, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX e Veracruz.

Ricordiamo che la tecnologia SGX (Software Guard Extensions) è apparsa nei processori Intel Core di sesta generazione (Skylake) e offre una serie di istruzioni che consentono alle applicazioni a livello utente di allocare aree di memoria chiuse - enclave, il cui contenuto non può essere letto e modificato anche dal kernel e dal codice eseguito nelle modalità ring0, SMM e VMM. È impossibile trasferire il controllo al codice nell'enclave utilizzando le tradizionali funzioni di salto e manipolazioni con i registri e lo stack: nuove istruzioni appositamente create EENTER, EEXIT ed ERESUME vengono utilizzate per trasferire il controllo all'enclave, che esegue controlli di autorità. In questo caso, il codice inserito nell'enclave può utilizzare metodi di chiamata classici per accedere alle funzioni interne all'enclave e istruzioni speciali per chiamare funzioni esterne. La crittografia della memoria Enclave viene utilizzata per proteggere da attacchi hardware come la connessione a un modulo DRAM.

Attacco a Intel SGX per estrarre dati sensibili o eseguire codice nell'enclave

Il problema è che la tecnologia SGX consente al sistema operativo di interrompere un'enclave lanciando un'eccezione hardware e le enclave non implementano correttamente le primitive per gestire atomicamente tali eccezioni. A differenza del kernel del sistema operativo e delle applicazioni regolari, il codice all'interno delle enclavi non ha accesso alle primitive per organizzare le azioni atomiche durante la gestione delle eccezioni generate in modo asincrono. Senza le primitive atomiche specificate, l'enclave può essere interrotta in qualsiasi momento e riportata in esecuzione, anche nei momenti in cui l'enclave sta eseguendo sezioni critiche ed è in uno stato non sicuro (ad esempio, quando i registri della CPU non vengono salvati/ripristinati).

Attacco a Intel SGX per estrarre dati sensibili o eseguire codice nell'enclave

Per il normale funzionamento, la tecnologia SGX consente di interrompere l'esecuzione dell'enclave tramite eccezioni hardware configurabili. Questa funzionalità consente agli ambienti runtime dell'enclave di implementare la gestione delle eccezioni intra-enclave o l'elaborazione del segnale, ma può anche causare errori rientranti. L'attacco SmashEx si basa sullo sfruttamento di difetti nell'SDK a causa dei quali la situazione di richiamo del gestore delle eccezioni non viene gestita correttamente. È importante che per sfruttare la vulnerabilità l'attaccante debba essere in grado di interrompere l'esecuzione dell'enclave, ovvero deve controllare il funzionamento dell'ambiente di sistema.

Dopo aver lanciato un'eccezione, l'aggressore riceve una piccola finestra temporale durante la quale il thread di esecuzione può essere intercettato attraverso la manipolazione dei parametri di input. In particolare, se si ha accesso al sistema (ambiente esterno all'enclave), è possibile creare una nuova eccezione subito dopo aver eseguito l'istruzione di ingresso all'enclave (EENTER), che restituirà il controllo al sistema in una fase in cui lo stack si è configurato per l'enclave non è stata ancora completata l'enclave, in cui viene salvato anche lo stato dei registri della CPU.

Il sistema può quindi restituire il controllo all'enclave, ma poiché lo stack dell'enclave non era configurato al momento dell'interruzione, l'enclave verrà eseguito con lo stack residente nella memoria di sistema, che può essere utilizzato per utilizzare la programmazione orientata al ritorno (ROP ) tecniche di sfruttamento (Programmazione Orientata). Quando si utilizza la tecnica ROP, l'attaccante non tenta di mettere il proprio codice in memoria, ma opera su pezzi di istruzioni macchina già disponibili nelle librerie caricate, terminando con un'istruzione di ritorno di controllo (di norma, queste sono le estremità delle funzioni di libreria). . Il lavoro dell'exploit si riduce alla costruzione di una catena di chiamate a blocchi simili (“gadget”) per ottenere la funzionalità desiderata.

Attacco a Intel SGX per estrarre dati sensibili o eseguire codice nell'enclave
Attacco a Intel SGX per estrarre dati sensibili o eseguire codice nell'enclave


Fonte: opennet.ru

Aggiungi un commento