
Un pratico framework di attacco per un controllo preciso dell'esecuzione dell'enclave
SGX-Step è un framework open-source per facilitare la ricerca sugli attacchi a canale laterale su processori Intel x86 in generale e su piattaforme Intel SGX in particolare. SGX-Step consiste in un driver del kernel Linux avversario e una piccola libreria del sistema operativo in spazio utente che permette di configurare voci di tabella delle pagine non fidate e/o interrupt del timer APIC x86 completamente dallo spazio utente. SGX-Step è stato sfruttato nella nostra ricerca, così come da ricercatori indipendenti, per abilitare diversi nuovi e migliorati attacchi all'esecuzione nelle enclave che raccolgono osservazioni a canale laterale con una risoluzione temporale massima (cioè, interrompendo l'enclave vittima dopo ogni singola istruzione).
Licenza. SGX-Step è software libero, concesso in licenza sotto GPLv3. Il logo di SGX-Step è derivato dall'iconica serie di foto di pubblico dominio "Sallie Gardner at a Gallop" di Eadweard Muybridge, che, come il nostro obiettivo di single-stepping delle enclave, scompone le dinamiche del cavallo al galoppo in una serie di singoli fotogrammi per rivelare le proprietà generali dell'andatura del cavallo.
| Rilascio SGX-Step | Caratteristiche del changelog |
|---|---|
| v1.5.0 | Correzioni di stabilizzazione (KPTI, mapping ISR del kernel); (sperimentale) porting Gramine; supporto IPI. |
| v1.4.0 | Gate di interrupt/chiamata privilegiati (Plundervolt). |
| v1.3.0 | Supporto per esecuzione transiente (Foreshadow). |
| v1.2.0 | Gestione degli interrupt in spazio utente e filtraggio deterministico zero-step (Nemesis). |
| v1.1.0 | Supporto IA32. |
| v1.0.0 | Manipolazione delle tabelle delle pagine in spazio utente e single-stepping del timer APIC. |
Pubblicazioni. SGX-Step è stato utilizzato da diversi gruppi di ricerca indipendenti e ha abilitato una nuova linea di attacchi SGX ad alta risoluzione. Un elenco completo e aggiornato dei progetti noti che utilizzano SGX-Step è incluso in fondo a questo README. Una copia del documento originale è disponibile qui.``` @inproceedings{vanbulck2017sgxstep, title = {{SGX-Step}: A Practical Attack Framework for Precise Enclave Execution Control}, author = {Van Bulck, Jo and Piessens, Frank and Strackx, Raoul}, booktitle = {2nd Workshop on System Software for Trusted Execution {(SysTEX)}}, publisher = {{ACM}}, pages = {4:1--4:6}, month = Oct, year = 2017, }
**Demo.** La directory [app/memcmp](https://github.com/jovanbulck/sgx-step/blob/master/app/memcmp) contiene una piccola applicazione demo che illustra la potenza degli attacchi SGX-Step eseguendo passo-passo un enclave di esempio che contiene una logica di confronto password `memcmp` non a tempo costante, sottile. A differenza dei tradizionali attacchi a tempo, notoriamente rumorosi, SGX-Step può forzare deterministicamente la password carattere per carattere in tempo _lineare_:

## Panoramica
Cruciale per la progettazione di SGX-Step, a differenza delle precedenti proposte di prelazione degli enclave, è la creazione di mapping di memoria virtuale nello spazio utente per le locazioni di memoria fisica che contengono le voci delle tabelle delle pagine, così come per i registri di configurazione I/O memory-mapped dell'APIC locale e per la tabella dei descrittori di interrupt (IDT) x86. Ciò consente a un processo host non fidato, controllato dall'attaccante, di (i) tracciare o modificare facilmente le voci delle tabelle delle pagine dell'enclave, (ii) configurare la sorgente di interrupt one-shot/periodica del timer APIC, (iii) attivare interrupt inter-processore e (iv) registrare gestori di interrupt personalizzati completamente _all'interno_ dello spazio utente.

La figura sopra riassume la sequenza di passi hardware e software nell'interrompere e riprendere un enclave SGX tramite il nostro framework.
1. L'interrupt del timer APIC locale arriva durante un'istruzione enclave.
2. Il processore esegue la procedura AEX che memorizza in modo sicuro il contesto di esecuzione nel frame SSA dell'enclave, inizializza i registri della CPU e vettorizza al gestore di interrupt (nello spazio utente) registrato nell'IDT.
3. A questo punto, qualsiasi codice spia specifico per l'attacco può essere facilmente inserito.
4. La libreria ritorna al trampolino AEP nello spazio utente. Abbiamo modificato il runtime non fidato dell'SDK SGX ufficiale per consentire la facile registrazione di uno stub AEP personalizzato. Inoltre, per consentire una valutazione precisa del nostro approccio su enclave di debug benchmark controllati dall'attaccante, SGX-Step può _opzionalmente_ essere strumentato per recuperare il puntatore all'istruzione memorizzato dal frame SSA dell'enclave interrotta (utilizzando l'interfaccia `/proc/self/mem` di Linux e l'istruzione `EDBGRD`).
5. Successivamente, configuriamo il timer APIC locale per il prossimo interrupt scrivendo nel registro I/O memory-mapped del conteggio iniziale, appena prima di eseguire (6) `ERESUME`.
## Panoramica del codice sorgente
Questo repository è organizzato come segue:```
.
├── app -- Collection of sample client applications using SGX-Step to
│ attack different victim enclave scenarios.
├── doc -- Papers and reference material.
├── kernel -- Minimal dynamically loadable Linux kernel driver to export
│ physical memory to user space and bootstrap `libsgxstep`.
├── libsgxstep -- Small user-space operating system library that implements the
│ actual SGX-Step functionality, including x86 page-table and
│ APIC timer manipulations.
└── sdk -- Bindings to use SGX-Step with different SGX SDKs and libOSs.
SGX-Step è un framework universale di controllo dell'esecuzione che consente l'interleaving preciso delle istruzioni dell'enclave vittima con codice attaccante arbitrario. Alcuni dei principali casi d'uso del framework SGX-Step sono riassunti nella figura seguente (vedere anche il fondo di questo README per un elenco aggiornato delle pubblicazioni che utilizzano SGX-Step).
