Confidential Computing - Testiamo la protezione dei dati in memoria

banner

Dopo aver esplorato i principi teorici del Confidential Computing, passiamo alla pratica.

In questa seconda parte vedremo come:

  • Creare una Virtual Machine su cloud Azure con supporto a Intel SGX (Software Guard Extensions)
  • Avviare sulla macchina due container Docker che eseguono rispettivamente un’applicazione protetta con enclave ed un’applicazione classica che non sfrutta la crittografia in memoria
  • Provare tramite memory dump a leggere i dati sensibili in memoria e confronteremo i risultati ottenuti nei due casi

Allacciate le cinture, si parte!

Famiglie di VM che supportano il Confidential Computing

Azure offre due famiglie di macchine virtuali progettate per il Confidential Computing:

  1. DC Family: Virtual Machines “general purpose”.
  2. EC Family: Virtual Machines ottimizzate per “memory-intensive workloads”.

Per il nostro laboratorio utilizzeremo una VM della famiglia DC, in particolare la serie DCsv2, queste VM supportano la tecnologia Intel SGX (Software Guard Extensions) per creare enclave di memoria protette.

📌 Curiosità:
Ogni macchina virtuale ha un quantitativo limitato di EPC Memory (Enclave Page Cache), ovvero la porzione di memoria riservata alle enclave dove i dati e il codice restano cifrati anche durante l’esecuzione.

La tabella seguente mostra le configurazioni disponibili per la serie DCs_v2:

Size NameCoresMemory (GB)EPC Memory (MiB)
Standard_DC1s_v21428
Standard_DC2s_v22856
Standard_DC4s_v2416112
Standard_DC8_v2832168

Nella nostra demo utilizzeremo una VM di tipo Standard_DC1s_v2, che offre 1 core, 4 GB di RAM e 28 MiB di EPC Memory. Questa configurazione è perfetta per ambienti di test, demo o piccoli workloads.

Per applicazioni più complesse o per l’addestramento di modelli di machine learning, Azure offre anche la serie DCs_v3, che dispone di un quantitativo di memoria EPC significativamente maggiore, adatta a gestire enclave più grandi e carichi di lavoro reali in produzione.

Creazione della VM in Azure

Creare la VM è molto semplice, può essere creata sia tramite Azure CLI, sia direttamente dal portale, quest’ultimo è il metodo che seguiremo.

Dal menù di creazione di una VM, per trovare facilmente il sizing richiesto, aggiungere un filtro “Type: Confidential Computing”, scegliere poi il sizing “Standard DC1s v2”, selezionare come immagine una delle ultime versioni di Ubuntu Server e completare la creazione della VM con le impostazioni desiderate.

VM Size
Selezione VM size da portale

Configurazione della VM

Una volta creata la VM, colleghiamoci tramite SSH e installiamo i tool necessari per la nostra demo: Git, Docker e Gcore.

Non andremo a riportare qui i dettagli dell’installazione di questi software, dal momento che esistono diverse guide ufficiali sul web.

Terminiamo la fase di setup clonando il repository GitHub ufficiale di Intel SGX SDK per Linux, che contiene esempi di applicazioni protette con enclave:

git clone https://github.com/intel/confidential-computing-demos.git
cd confidential-computing-demos/intel-sgx/memory_dump_docker

All’interno della cartella memory_dump_docker sono presenti due Docker file: protected.Dockerfile e unprotected.Dockerfile, andiamo ad eseguire la build di entrambe le immagini:

docker build -f protected.Dockerfile -t python_minimal_protected .
docker build -f unprotected.Dockerfile -t python_minimal_unprotected .

Ed eseguiamo i due container in 2 shell differenti in modo da vedere i due output generati in parallelo:

docker run --rm --name python_minimal_unprotected python_minimal_unprotected
docker run --rm --device /dev/sgx_enclave --name python_minimal_protected python_minimal_protected

Le due applicazioni all’interno dei container eseguono un semplice script Python che scrive ogni 2 secondi in memoria una stringa dal valore “topsecret_<id_incrementale>_<stringa_esadecimale>” che rappresenta il nostro dato sensibile e ne stampa a video il valore.

Run applicazione non protetta
Run applicazione non protetta

Run applicazione protetta
Run applicazione protetta

Come vediamo dagli output, le due applicazioni si comportano in modo analogo.

Ora andiamo a verificare cosa succede quando proviamo a leggere la memoria dei due processi.

Memory Dump e analisi dei risultati

Per effettuare il memory dump dei due processi, utilizzeremo gcore, che consente di creare un dump della memoria di un processo in esecuzione.

Il repository clonato in precedenza contiene già uno script bash sniffer.sh che esegue il dump della memoria per entrambi i container.

Apriamo una terza shell ed eseguiamo lo script sui due containers:

./sniffer.sh unprotected
./sniffer.sh protected

Memory dump dell&rsquo;applicazione non protetta
Memory dump dell’applicazione non protetta

Memory dump dell&rsquo;applicazione protetta
Memory dump dell’applicazione protetta

Analizziamo i risultati ottenuti:

  • Applicazione non protetta: nel dump di memoria del processo non protetto, riusciamo a trovare chiaramente le stringhe “topsecret” che rappresentano i nostri dati sensibili. Questo dimostra che i dati in memoria sono accessibili e leggibili quantomeno da un amministratore di sistema. In questo caso io, in qualità di admin, rappresento l’insider threat.

  • Applicazione protetta: nel dump di memoria del processo protetto, non riusciamo a trovare alcuna traccia delle stringhe “topsecret”. Questo conferma che i dati all’interno dell’enclave SGX sono effettivamente protetti e non accessibili dall’esterno, nemmeno tramite un dump di memoria.

Conclusioni

Attraverso questo laboratorio pratico, abbiamo visto come l’applicazione del Confidential Computing tramite tecnologia Intel SGX possa offrire un livello di protezione avanzato per i dati sensibili durante l’elaborazione.

La capacità di isolare i dati in enclave protette garantisce che anche in scenari di compromissione del sistema operativo o dell’hypervisor, i dati rimangano al sicuro e inaccessibili.

Post correlati

TheRedCode.it - Il mondo #tech a piccoli #bit

Partners

Community, aziende e persone che supportano attivamente il blog

Logo di Codemotion
Logo di GrUSP
Logo di Python Milano
Logo di Schrodinger Hat
Logo di Python Biella Group
Logo di Fuzzy Brains
Logo di Django Girls
Logo di Improove
Logo del libro open source
Logo di NgRome
Logo de La Locanda del Tech
Logo di Tomorrow Devs
Logo di DevDojo

Vuoi diventare #tech content creator? 🖊️

Se vuoi raccontare la tua sul mondo #tech con dei post a tema o vuoi condividere la tua esperienza con la community, sei nel posto giusto! 😉

Manda una mail a collaborazioni[at]theredcode.it con la tua proposta e diventa la prossima penna del blog!

Ma sì, facciamolo!