È davvero impossibile dire cosa sta facendo una CPU? [chiuso]


24

I programmatori di computer spesso recitano il mantra secondo cui le istruzioni x86 sono totalmente opache: Intel ci dice che stanno facendo qualcosa, ma non c'è speranza che qualcuno possa verificare cosa sta succedendo, quindi se l'NSA dice loro di eseguire il backdoor dei loro RNG, allora non possiamo davvero fare qualcosa al riguardo.

Bene, credo che i programmatori di computer non possano fare nulla per questo problema. Ma come potrebbe attaccarlo un ingegnere elettrico? Esistono tecniche che un ingegnere elettrico potrebbe utilizzare per verificare che un circuito esegua effettivamente le operazioni descritte nelle sue specifiche e nessun'altra operazione?


5
Dovresti fare qualcosa come xray the die e analizzare tutto per vedere cosa sta realmente facendo. Fondamentalmente decodifica il chip e tiene conto della funzione di ogni circuito. Totalmente poco pratico.
DKNguyen

7
Nessun circuito elettrico funziona esattamente a causa del rumore e della leggera possibilità che un giorno si verifichi un problema tecnico "abbastanza grande".
Andy aka

5
Informazioni divertenti: questo è vagamente correlato al demone di Laplace .
Harry Svensson,

6
Sarà più facile rubare documenti interni dal database dei contenuti di Intel piuttosto che decodificare persino una singola CPU Intel moderna e complessa.
foresta

14
@Harper il tuo atteggiamento non è costruttivo e la tua affermazione che una backdoor non può essere nascosta nell'hardware non è vera.
pjc50,

Risposte:


14

Il miglior articolo che ho letto sull'argomento è "Stealthy Dopant-Level Hardware Trojan" (Becker et al) del 2014.

Dal momento che il circuito modificato appare legittimo su tutti gli strati di cablaggio (compresi tutti i metalli e polisilicio), la nostra famiglia di Trojan è resistente alla maggior parte delle tecniche di rilevamento, tra cui l'ispezione ottica a grana fine e il controllo contro i "chip dorati". Dimostriamo l'efficacia del nostro approccio inserendo i Trojan in due progetti: una post-elaborazione digitale derivata dal design RNG crittograficamente sicuro di Intel utilizzato nei processori Ivy Bridge e un'implementazione SBox resistente ai canali laterali e esplorando la loro rilevabilità e i loro effetti sulla sicurezza.

Il documento descrive come viene effettuata la modifica, come è estremamente difficile rilevare dall'ispezione del silicio, le tecniche per nasconderlo dal test di produzione e come può essere fatto per ridurre la sicurezza di un crittografia hardware RNG o per perdere informazioni chiave attraverso un canale laterale power-rail di un'implementazione AES.

I canali laterali sono un campo di interesse emergente. Intel è stata afflitta da problemi relativi all'esecuzione speculativa che trapelano informazioni dalla memoria che non sono state nemmeno utilizzate dal programma. Potrebbe essere stato un difetto di progettazione deliberato? È quasi impossibile dirlo.


Un canale laterale non richiederebbe una sorta di trasmettitore per inviare le informazioni all'NSA? Altrimenti noterei sicuramente qualcuno che misura la corrente della power rail sul mio laptop mentre ci sto lavorando.
Dmitry Grigoryev

24

Esistono tecniche che un ingegnere elettrico potrebbe utilizzare per verificare che un circuito esegua effettivamente le operazioni descritte nelle sue specifiche e nessun'altra operazione?

In teoria, sì, penso che sia possibile. Tuttavia, per una CPU complessa ci vorrà molto tempo e denaro. Inoltre, se non conosci e comprendi appieno il progetto, non sarai in grado di giudicare se qualsiasi attività è "legittima" o meno.

Una CPU è "solo" un complesso circuito digitale costituito da molte celle logiche.

È possibile decodificare il chip e ricostruire il progetto osservando le connessioni metalliche. Possono esserci molti di questi layer di connessione come fino a 8 layer o più.

Avrai bisogno di esperti nel campo per riconoscere le celle logiche e quindi forse alcuni software possono capire come sono tutti collegati in modo da poter ricostruire la netlist.

Una volta che hai la netlist "conosci" il design. Ciò non significa che ora sai anche come funziona!

È possibile che una determinata funzione attivi 2 sezioni del progetto mentre pensi che una dovrebbe essere sufficiente in modo da sospettare che siano in corso attività sospette. Tuttavia, il design fa qualche trucco intelligente che non conosci per accelerare le operazioni.

Senza conoscere e comprendere il progetto, qualsiasi conclusione che trarre potrebbe essere ancora errata. Solo gli ingegneri che hanno progettato la CPU hanno tutte le informazioni di progettazione e hanno le migliori possibilità di essere in grado di capire o indovinare cosa succede realmente o dovrebbe succedere in una CPU.


77
Solo gli ingegneri che hanno progettato la CPU sanno tutto quello che succede - mi capita di essere un ingegnere che lavora in questo settore e mi permetta di valutare questa affermazione come molto ottimista :)
Eugene Sh.

18
No, i progettisti della CPU non saprebbero tutto ciò che accade: la progettazione a quel livello dipende dagli strumenti di sintesi e quelli potrebbero iniettare comportamenti oltre a quelli nella progettazione HDL. Per fare un esempio non nefasto, molti strumenti FPGA ti permetteranno di compilare in un analizzatore di logica.
Chris Stratton,

9
Il reverse engineering di un chip con "miliardi di transistor" rappresenterebbe una sfida. spettro.ieee.org/semiconductors/processors/…
Voltage Spike

4
@Wilson Perché i circuiti complessi (comprese le CPU) conterranno molti progetti proprietari (e segreti, con marchio / persino brevettati) che non sono resi disponibili al pubblico perché le aziende che possiedono tali progetti vogliono trarne vantaggio (guadagnare soldi). Il 6502 è un vecchio design , non ha più preziose informazioni di design, quindi sì, è completamente aperto e disponibile a tutti.
Bimpelrekkie

3
@Bimpelrekkie: se sono brevettati, per definizione non sono segreti. Questo è il punto di un brevetto. Scambia un segreto per un monopolio temporaneo.
MSalters

9

Bene, credo che i programmatori di computer non possano fare nulla per questo problema. Ma come potrebbe attaccarlo un ingegnere elettrico?

Non ci sono buoni modi per trovare backdoor, un modo per trovare un backdoor hardware sarebbe testare combinazioni o istruzioni non documentate. Ecco una bella chiacchierata di qualcuno che lo fa effettivamente e fa audit sull'hardware x86 . Questo può essere fatto senza rompere il chip. Un problema con Intel (non sono sicuro di altri chip) è che in realtà ha un processore con Linux in esecuzione su di esso, quindi c'è anche un software in esecuzione su alcuni processori e non si ha accesso a quello presumibilmente.

Esistono tecniche che un ingegnere elettrico potrebbe utilizzare per verificare che un circuito esegua effettivamente le operazioni descritte nelle sue specifiche e nessun'altra operazione?

Esistono modi per testare l'utilizzo dell'hardware stesso per testare la funzionalità. Poiché x86 ha una parte non documentata del suo set di istruzioni, sarebbe insolito introdurre backdoor nelle normali istruzioni perché introdurrebbe la possibilità di bug (come se avessi una backdoor in un'istruzione add o mult), quindi il primo posto dove cercare sarebbe nelle istruzioni non documentate.

Se fosse necessario testare la funzionalità delle istruzioni regolari, è possibile controllare il tempo necessario per eseguire le istruzioni, osservare la quantità di energia necessaria per eseguire le istruzioni per vedere se ci sono differenze rispetto a quanto ci si aspetterebbe.


3
Non sarei d'accordo, non è impossibile che qualcuno lo faccia, ma è improbabile. diciamo che hai backdoor un'istruzione regolare come un'istruzione add, e se hai eseguito un'istruzione aggiuntiva diciamo che ha aperto una backdoor. Quindi un cliente sviluppa un programma che ha esattamente quella combinazione, ci guardano dentro, trovano la porta sul retro e tutti si arrabbiano e si fa causa. Molto più sicuro inserire una backdoor nelle istruzioni non documentate (o nel computer linux integrato nella CPU)
Voltage Spike

4
L'IME esegue Minix che non è Linux ed è molto più piccolo e semplice. Linux è stato ispirato dall'esistenza di Minix e originariamente ha usato il suo filesystem ed è stato annunciato sul suo newsgroup, ma erano piuttosto diversi allora e lo sono estremamente adesso.
Chris Stratton,

5
@utente14717 - la brutta possibilità sarebbe una sequenza di trigger in un eseguibile nativo imprigionato, qualcosa come client nativo. Ma non c'è motivo per cui debba essere codice e non dati .
Chris Stratton,

5
@ laptop2d Bug in cui le CPU non fanno ciò che dice la documentazione teorica del set di istruzioni in ogni momento ; nessuno viene citato in giudizio, di solito: leggi la sezione errata nell'aggiornamento del documento della famiglia Core i7 di Intel di settima generazione, per esempio. L'utilizzo di un'istruzione non documentata darebbe immediatamente l'allarme a qualsiasi ricercatore di malware. L'uso di un'insolita combinazione di ADD ritmici con i MOV inter-register corretti ha meno probabilità di innescare qualsiasi allarme.
Marcus Müller,

6
@ laptop2d Sono stato stordito dall'istruzione "embedded linux into the CPU". Quindi ho fatto un po 'di ricerche, immagino tu parli del motore Intel ME. Bene, non funziona sulla CPU stessa, ma sul chipset del bridge nord. Sembra che ci siano state molte disinformazioni al riguardo, vedi itsfoss.com/fact-intel-minix-case
dim

6

L'unico modo sarebbe quello di ridurre lo strato di chip per strato e registrare ogni transistor con un microscopio elettronico, quindi inserirlo in una sorta di programma di simulazione e poi guardarlo correre.

Questo è essenzialmente il problema della scatola nera in cui si tenta di ricostruire gli interni dalla misurazione di ingressi e uscite. Una volta che la complessità degli interni, o il numero di I / O, supera il banale c'è un'esplosione combinatoria in cui il numero di possibili stati interni diventa astronomico. Dove vengono lanciati numeri come Googol .


2
... ed è più facile rubare il design usando il social engineering :)
Eugene Sh.

8
No. L'errore eclatante qui è che la simulazione non sarebbe sufficiente. Anche se ti venisse dato un modello di simulazione accurato , non saresti ancora in grado di trovare un comportamento accuratamente nascosto, perché non hai idea di come attivarlo .
Chris Stratton,

4
@ChrisStratton Non chiamerei questo errore abbagliante . È ragionevole supporre che il progetto si basasse su semplificazioni che sono fisicamente consuete, ad esempio che non si mettono due tracce di metallizzazione così vicine tra loro che si accoppiano induttivamente in modo sufficiente per cambiare lo stato di una porta MOSFET. Questo è solo un errore se a) le tue semplificazioni non corrispondono al modello fisico di ciò che il designer ha utilizzato oppure b) il progettista nasconde intenzionalmente qualcosa rompendo intenzionalmente i requisiti di tali semplificazioni in modi non ovvi.
Marcus Müller,

7
@ChrisStratton ah, scusa, ok, penso che ora stia ottenendo il tuo punto. Dici che anche i modelli digitali / comportamentali con clock di una CPU sono abbastanza complessi da nascondere casi in cui la comprensione / ipotesi del programmatore semplicemente non si applicano. È vero. Uno avrebbe potuto documentare gli effetti che hanno portato allo SPETTRO in dettagli lancinanti, e la maggior parte delle persone non avrebbe mai pensato di memorizzare nella cache gli effetti collaterali relativi al flusso di dati o programmi. Infatti!
Marcus Müller,

3
Grazie :) La tua argomentazione riporta alla luce l'intero argomento della verifica formale della correttezza degli ISA ("questo ISA garantisce effettivamente che una CPU conforme non conceda i privilegi di RING 0 al codice non privilegiato?") E della verifica formale di HDL / RTL contro tali specifiche ISA (Mi piace soprattutto questo progetto di verifica del core CPU RISC-V .)
Marcus Müller,

5

Provare che la CPU non sta facendo qualcosa di subdolo è straordinariamente difficile. L'esempio classico è una macchina per il voto. Se ha un solo bit in esso che prende una copia del tuo voto e poi lo intrufola in qualche dittatore, potrebbe essere la vita o la morte per te in alcuni punti. E provare che non c'è un solo pezzo del genere tra i miliardi è piuttosto difficile.

Potresti pensare di isolare fisicamente il chip, quindi è pratico vedere che non ci sono collegamenti dei cavi non corretti. E inserendo un altro chip, o più di un chip in serie (da diverse fonti) nella sua connessione di rete, ciò garantisce che si connetta solo nel posto giusto. Quindi accendi e riaccendi dopo aver espresso il tuo voto. E sperando che non ci siano bit non volatili lì dentro. O subdole connessioni wireless. Ma ti fideresti della tua vita?


5

La trasmissione di dati all'NSA richiederà l'accesso alla rete, quindi sarà abbastanza facile individuare tale backdoor eseguendo un sistema operativo con servizi di rete disabilitati e controllando il traffico delle interfacce di rete. Per un sistema operativo open-source è anche possibile eseguire con il pieno supporto di rete e individuare connessioni non autorizzate dal loro IP di destinazione che non corrisponderà a nessun indirizzo al quale il sistema operativo potrebbe legittimamente accedere.

Una backdoor basata su RNG senza trasmissione di dati avrà un'utilità molto limitata. A meno che l'RNG della CPU non sia l' unica fonte di entropia, le possibilità che tale backdoor offrano alcun vantaggio all'attaccante senza essere ovvi allo stesso tempo sono praticamente zero . A meno che non insista sul fatto che la teiera di Russel sia là fuori nonostante non abbia buone ragioni per esistere, dovresti essere in grado di applicare lo stesso argomento alle backdoor dell'RNG hardware.


5
Quindi supponi che l'avversario abbia il tempo, i soldi e l'abilità per creare e nascondere un cavallo di Troia hardware, ma la prima cosa che fanno è telnet www.nsa.gov? Sembra un punto di vista molto ingenuo.
Elliot Alderson,

1
Se l'NSA avesse nascosto una vulnerabilità, allora sì spererebbero che le persone lo usassero rdrando rdseedcome suggerito da Intel: l'unica fonte di entropia per un seme PRNG. Linux (il kernel) ha scelto di non farlo per /dev/random, ma glibc / libstdc ++ 's attuale std::random_device fa uso solo rdrandse è disponibile in fase di esecuzione, invece di apertura /dev/random. Entra nella chiamata in biblioteca standard con godbolt
Peter Cordes,

@ElliotAlderson Qual è il tuo punto di vista allora? Come si può rubare dati preziosi senza mai trasmetterli da qualche parte?
Dmitry Grigoryev

@PeterCordes std::random_devicenon è un RNG crittograficamente potente. Lo standard C ++ ti consente di implementarlo con un PRNG, restituendo effettivamente la stessa sequenza ogni volta , quindi è abbastanza ovvio che nessuno dovrebbe usarlo per la crittografia.
Dmitry Grigoryev

Oh giusto, ho dimenticato che non c'è alcuna garanzia che vada bene, xD. Si è buono su molte implementazioni, ma MinGW è l'eccezione più clamorosa per le finalità di progettazione che ti dà come numeri casuali di buona qualità come la piattaforma è in grado di, sconfiggendo lo scopo principale della biblioteca. (Che come dici tu non è cripto, ma semina PRNG per altri scopi). ( Perché ottengo la stessa sequenza per ogni esecuzione con std :: random_device con mingw gcc4.8.1? ). Sarebbe accettabile su una piattaforma senza entropia (dispositivo embedded minimo), ma non su Windows x86!
Peter Cordes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.