2013-10-25 15 views
5

I processori Intel XEON più recenti hanno 30 MB di memoria L3, sufficienti per un hypervisor sottile di tipo 1.Come assicurarsi che un pezzo di codice non lasci mai la cache della CPU (L3)?

Sono interessato a capire come mantenere un Hypervisor all'interno della CPU, ovvero impedire che venga scaricato nella RAM o, perlomeno, crittografare i dati prima di essere inviati alla memoria/disco.

Si presume che stiamo eseguendo su bare metal e che possiamo eseguire il bootstrap utilizzando DRTM (Late Launch), ad es. carichiamo da memoria/disco non fidati ma possiamo caricare il vero sistema operativo solo se possiamo unseal() un segreto che viene utilizzato per decrittografare il sistema operativo e che ha luogo dopo aver impostato le regole appropriate per assicurarsi che tutto ciò che viene inviato alla RAM sia criptato.

p.s. So che l'ACEA di TXT aka ACRAM (Authenticated Code Execution Area aka Authentication Code RAM) si dice che abbia tale garanzia (cioè si tratti di cache della CPU), quindi mi chiedo se si possa fare qualche trucco in questo senso.

p.p.s. Sembra che questo sia al di là delle ricerche attuali quindi non sono proprio sicuro che sia possibile una risposta a questo punto.

+1

Potrei sbagliarmi visto che è passato un po 'di tempo, ma ho il sospetto che tu (ancora) non possa bloccare le linee della cache su un Xeon. –

+0

Sembra che PrivateCore.com/vcage abbia avuto successo con questo. – northox

+1

Vedere questa discussione su Twitter: https://twitter.com/jf/status/377582143490510848 – northox

risposta

7

La tua domanda è un po 'vaga, ma sembra ridursi a se puoi mettere le linee della cache in un blocco su un Xeon. La risposta sembra essere no perché non si fa menzione di tale caratteristica nei documenti Intel per Intel 64 o IA-32 ... almeno per i modelli disponibili pubblicamente. Se puoi lanciare qualche milione di $ su Intel, puoi probabilmente ottenere un Xeon personalizzato con tale funzione. Intel ora fa parte del business dei processori personalizzati.

Il blocco della cache è in genere disponibile sui processori integrati. Intel XScale ha questa caratteristica, come molti processori ARM ecc.

Si noti tuttavia che il blocco della cache non significa che i dati/istruzioni nella cache non vengano mai trovati nella RAM. Quello che sembri voler è una forma di memoria privata sicura (non cache), possibilmente a livello di microcodice. Ma non è una cache, perché contraddice la definizione di cache ... Come probabilmente sapete, ogni CPU Intel prodotta negli ultimi dieci anni ha un microcodice aggiornabile, che è memorizzato abbastanza saldamente all'interno della CPU, ma è necessario avere il diritto chiavi di firma crittografica per produrre codice accettato dalla cpu (tramite aggiornamento microcodice). Ciò che sembra necessario è l'equivalente, ma a livello di istruzione x86/x64 anziché a livello di microcodice. Se questo è il tuo obiettivo, quindi la licenza di un core IP compatibile x86/x64 e l'aggiunta di EEPROM crittografato a quella è la strada da percorrere.

Il futuro Intel Software Guard Extensions (SGX), che citi nei tuoi ulteriori commenti (dopo la tua domanda, tramite il link Invisible Things Lab), non risolve il problema del codice hypervisor che non viene mai archiviato nella memoria RAM . E questo è di progettazione in SGX, quindi il codice può essere scansionato alla ricerca di virus, ecc. Prima di essere enclave.

Infine, non posso davvero commentare la tecnologia di privatecore perché non riesco a trovare una vera descrizione tecnologica di ciò che fanno. I commenti di Twitter e gli articoli di notizie sui siti orientati allo start-up non forniscono questo e nemmeno il loro sito. Il loro modello di business si riduce a "fidati di noi, sappiamo cosa facciamo" in questo momento. Potremmo vedere una vera descrizione/analisi della sicurezza delle loro cose un giorno, ma non riesco a trovarlo ora. Le loro affermazioni di essere "prova PRISM" stanno probabilmente facendo entrare qualcuno nella risata della NSA ...

Aggiornamento importante: è apparentemente possibile disabilitare la cache (intera) dalla scrittura alla RAM nel mondo x86. Queste sono modalità ufficialmente prive di documenti conosciute come "cache-as-RAM mode" in AMD land una "no-fill mode" in Intel. Altro su https://www.youtube.com/watch?v=EHkUaiomxfE Essendo roba non documentata, Intel (almeno) si riserva il diritto di interrompere quella "funzionalità" in strani modi, come discusso allo https://software.intel.com/en-us/forums/topic/392495 per esempio.

Aggiornamento 2: Un brevetto Lenovo 2011 http://www.google.com/patents/US8037292 discute utilizzando la nuova (?) Modalità No-Eviction (NEM) su CPU Intel per il caricamento del BIOS nella cache della CPU. Il metodo può probabilmente essere utilizzato per altri tipi di codice, inclusi i supervisori. C'è comunque un grande avvertimento. Il codice diverso da quello già memorizzato nella cache verrà eseguito molto lentamente, quindi non lo vedo come realmente utilizzabile al di fuori della procedura di avvio. C'è un codice coreboot che mostra come abilitare NEM (https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/84defb44fabf2e81498c689d1b0713a479162fae/src/soc/intel/baytrail/romstage/cache_as_ram.inc)

Problemi correlati