Quali approcci esistono per garantire la sicurezza durante la distribuzione di software in ambienti non affidabili?

3

È possibile distribuire software in modo tale che un attore canaglia che ha accesso fisico all'hardware non sia in grado di raccogliere alcuna informazione sul codice in esecuzione o su cosa viene archiviato in memoria?

So che esistono altri approcci "sperimentali" come la crittografia dei dati a livello di RAM e l'archiviazione di dati non crittografati nella cache della CPU (ad esempio TRESOR). Ci sono altri modi per risolvere questo al momento? Qualcosa di simile a uno schema di crittografia completamente omomorfico sarà d'aiuto quando diventerà pratico in termini di velocità?

    
posta narruc 19.02.2018 - 22:43
fonte

2 risposte

2

La crittografia della memoria completa è fuori dalla fase sperimentale, ma non posso ancora nominare alcun servizio di hosting che lo utilizza. È supportato come modalità operativa per AMD Epyc e Ryzen Pro - link - quindi probabilmente lo vedremo presto disponibile.

L'intento è specificamente quello di impedire a un amministratore di ladri di rubare i dati dalla VM del client che opera nella sua infrastruttura cloud.

La crittografia utilizzata è AES in modalità ECB ottimizzata, priva dell'autenticazione, quindi non è un sistema sicuro. Sono stati proposti attacchi specifici su di esso: link

La crittografia omomorfica è molto lontana dall'essere pratica per l'hosting remoto - se puoi permetterti il sovraccarico, puoi eseguirlo su un Raspberry. L'interesse al riguardo è attualmente finalizzato alla conservazione della privacy di documenti pubblici per il voto e le transazioni. La crittografia omomorfica ha davvero un suo valore in un contesto blockchain, quindi è probabile che vedremo più applicazioni.

È possibile progettare un sistema che protegge i dati anche con hardware compromesso. Ma l'architettura x86 non è stata progettata pensando agli attacchi e si sta dimostrando difficile aggirare la sua implicita fiducia. Poiché stai chiedendo informazioni sui modi attuali, il modo più semplice per ottenere sicurezza dimostrabile è la creazione di un ASIC che impone la crittografia autenticata ("Esiste solo una modalità di funzionamento, e quella è sicura") e accetta solo comandi e dati firmati.

Tuttavia, anche l'attuale crittografia della memoria non sicura (crittografia strong, modalità debole) rende più difficile rubare surrettiziamente i dati. Non lo farà per informazioni classificate o di grande valore, per cui vale la pena rischiare esposizione, ma, combinato con misure di sicurezza e supervisione attive, può rendere molto meno probabile l'estrazione di dati opportunistici.

    
risposta data 20.02.2018 - 10:18
fonte
1

Is it possible to deploy software in such a way that a rogue actor who has physical access to the hardware is unable to glean any information on the code that is running or what is being stored in memory?

No, questo è impossibile, per i seguenti motivi:

  1. L'accesso fisico significa quasi sempre game over, quindi questo da solo sarebbe una strong indicazione che quello che vuoi non è fattibile.

  2. Indipendentemente da quanto si tenta di proteggere il proprio codice e i dati che produce, alla fine il processore deve avere accesso sia al codice macchina del programma che ai dati con cui lavora. Anche se il tuo codice decodifica e crittografa ogni dato prima che venga spostato da un registro CPU alla RAM, le chiavi di crittografia devono ancora essere memorizzate da qualche parte (anche nei registri, ma questo significa solo che sono più difficili da accedere) non impossibile). Posso immaginare vari modi per accedere a questi dati, come scaricare l'intera RAM in un file, eseguire il codice in un debugger, sospendere la macchina e archiviare lo stato sospeso per l'ispezione dopo che la macchina si è riavviata, cambiando il kernel o la libc per aiutare a spiare il tuo codice e così via.

Non capisco cosa intendi con "sarà qualcosa di simile a uno schema di crittografia completamente omomorfico di aiuto con questo", ma dubito molto che cambierà il punto 2, qualunque esso sia.

I TPM forniscono un modo per archiviare chiavi e crittografare e decifrare all'interno del TPM, quindi le chiavi non sono esposte, ma, di nuovo, questo rende più difficile ottenere le informazioni rilevanti, non impossibile.

    
risposta data 19.02.2018 - 23:17
fonte

Leggi altre domande sui tag