TP Security
Reset attack al TPM.
Il TPM è un chip che dovrebbe garantire la sicurezza dei sistemi informativi. In particolare il TPM è stato progettato in modo da poter tenere traccia dei cambiamenti dello stato della macchina su cui è montato e farne il reporting in modo sicuro ad una entità remota (attraverso la remote attestation). Chi ha progettato il TPM, però, ha fatto qualche sbaglio nella progettazione ed ha lasciato spazio ad un possibile attacco fisico.
Cerchiamo di spiegare come funziona questo attacco.
Premesse:
1. il TPM è montato su un bus particolare per pilotare periferiche a basso costo e basse prestazioni
2. il bus dovendo essere a basso costo è poco protetto
3. il TPM è un chip normalissimo, con i pin che lo collegano al bus visibili e facilmente accessibili
4. il TPM ha un pin di RESET
Attacco:
1. si accende la macchina e la si avvia con il proprio sistema operativo preferito (Linux, ad esempio)
2. il TPM avrà alcuni valori nei PCR. Per chi non lo ricorda, i PCR sono dei registri che possono essere scritti solo dal TPM e che contengono lo stato della macchina (ad esempio versione del bios avviata, del boot loader, del kernel, dei sw o quello che volete). Inoltre i PCR sono fatti in modo che non è possibile scriverci dentro un valore arbitrario, ma solo un valore che è derivato dal valore precedente e dal nuovo valore: NUOVO PCR = F(VECCHIO PCR + VALORE DA AGGIUNGERE); il tutto è pensato in modo che non sia possibile determinare il VALORE DA AGGIUNGERE per ottenere un NUOVO PCR. Questa operazione si chiama ESTENSIONE dei PCR.
- 2.a. se si è avviato un sistema (Linux ad esempio) la macchina sarà in uno stato S_L (Stato Linux, per intenderci). A questo punto i PCR possono essere estesi a piacere (l'utente può estendere i valori dei PCR come e quando vuole), ma diventa impossibile prevedere i VALORI DA AGGIUNGERE per portare la macchina nello stato in si troverebbe se avessimo avviato un altro sistema operativo (ad esempio Windows: S_W).
3. a questo punto si apre il case della propria macchina e si fa l'attacco fisico vero e proprio. In pratica semplicemente si corto cirtcuita il pin di RESET con il pin a MASSA in modo da effettuare un reset del TPM. Notate che questo attacco è possibile grazie all la semplicità del bus e ad alcuni errori nella progettazione del TPM.
Il reset del TPM comporta l'azzeramento del PCR, ma vista la modalità con cui è stato effettuato, non ha comportato il reset della macchina. La situazione a questo punto è la seguente: abbiamo una macchina avviata con un certo sistema operativo in grado di pilotare il TPM. E poi abbiamo un TPM che è stato resettato.
4. ora ci basta fare l'estensione dei PCR in modo da far registrare al TPM uno stato diverso da quello che effettivamente ha (ad esempio S_W).
5. si fa un'attestazione remota in cui si convince un'entità remota che stiamo effettivamente eseguendo Windows (invece, dato che non abbiamo fatto il reset della macchina, stiamo ancora eseguendo Linux).
Notare che questo attacco è possibile solo per i TPM versione 1.1; per i TPM versione 1.2 l'attacco è ancora possibile, ma diventa tutto un po' più complicato.
Riferimenti:
[1] Articolo orginale in cui si parla di questo attacco: http://os.inf.tu-dresden.de/papers_ps/kauer07-oslo.pdf
[2] Pagina dell'università di Dartmouth in cui spiegano come realizzare veramente l'attacco e mostrano un filmato dell'attacco: http://www.cs.dartmouth.edu/~pkilab/sparks/
[3] Considerazioni su attacchi fisici al TPM 1.2: http://rdist.root.org/2007/07/17/tpm-hardware-attacks-part-2/