[tc] info PCR tpm
Davide Vernizzi
davide.vernizzi a gmail.com
Ven 9 Nov 2007 11:45:56 CET
On Nov 8, 2007 12:30 PM, Salvatore Caratozzolo
<s.caratozzolo2 a campus.unimib.it> wrote:
>
> >
> >> e che la estensione
> >> si fa per evitare che un attaccante possa leggere i
> >> digest!
> >
> > No, l'estensione serve per fare in modo che una
> >scrittura su un pcr
> > tenga comunque traccia del valore precedente. Se così
> >non fosse,
> > sarebbe praticamente impossibile mantenere la catena di
> >trust
> > (immagina che il crtm metta la misura del boot loader
> >nei pcr, poi il
> > sistema operativo riscrive sopra alla misura fatta dal
> >crtm un valore
> > diverso... se non ci fosse l'estensione, ma solo la
> >scrittura, un
> > sistema operativo untrusted, potrebbe scrivere i valori
> >di uno
> > trusted).
>
> uffa...continuo a non capire!di sicuro mi sfugge qualcosa
> che si dà per scontato!
> allora diamo un esempio:
> il crtm all'avvio estende il pcr0 = sha1( 0000 | digest1)
> = digest_n1 poi il SO estende nuovamente il pcr0 =
> sha1(digest_n1 | digest2) = digest_n2,
Fino a qui OK.
> riavvio la macchina
> e al bootstrap ho che il crtm estende nuovamente il pcr0 =
> sha1(digest_n2 | digest3) = digest_n3.
È qui che sbagli... al riavvio il valore del pcr0 sarà resettato a
0000, quindi al successivo riavvio, avrai che pcr0 = sha1( 0000 |
digest1) = digest_n1 poi il SO estende nuovamente il pcr0 =
sha1(digest_n1 | digest2) = digest_n2 e così via...
quello che succede è che se nel frattempo c'è stato un attacco che
porta ad avere digest2Rogue != digest2, avrai che i il SO estende
nuovamente il pcr0 = sha1(digest_n1 | digest2Rogue) =
digest_n2Rogue... a questo punto è possibile accorgersi dell'attacco
confrontando il valore di pcr0Atteso con quello che hai.
> se il codice dello stadio1 è stato modificato...che fa??
> cioè..come se ne accorge?
Non te ne accorgi durante il boot, ma te ne accorgi durante
l'attestazione remota facendo un contronto con dei valori attesi
oppure cercando di fare l'unsealing che fallisce.
> > Quasi giusto.. il comando seal cifra qualcosa e protegge
> >la chiave di
> > cifratura nella memoria non volatile. In più fa in modo
> >che la chiave
> > di cifratura sia accessibile solo se i pcr si trovano
> >nelle stesse
> > condizioni in cui erano quando è stato fatto il sealing.
>
> quindi quando eseguo il seal devo MEMORIZZARE e NON
> ESTENDERE nel pcr10,
direi piuttosto legare al valore di uno o più pcr la possibilità di
accedere ad un dato. Se i pcr hanno gli stessi valori che avevano
quando è stato fatto il sealing, allora sarà possibile fare
l'unsealing, altrimenti no.
> ad esempio, che la macchina sta
> eseguendo il seal con il kernel 2.6.13 , nel pcr11 che
> l'utente è Giacomino e nel pcr12 che il prog utilizzato
> per aprirlo è Kate! oppure si salvano questi tre dati
> insieme nello stesso pcr10?
Direi così...
In pcr1 c'è la misura di tgrub fatta dal crtm
In pcr2 c'è la misura del kernel fatta da tgrub
...
In pcr10 il kernel ha messo il digest del nome dell'utente
In pcr11 il kernel ha messo il digest del sw che l'utente vuole usare
in modo trusted
a questo punto si fa il sealing di un dato usando i pcr 1, 2, 10 e 11...
l'unsealing sarà possibile solo se il sistema è nello stesso stato,
quindi se è stato avviato tgrub, se tgrub ha misurato proprio quel
kernel, se il kernel ha fatto fare il login a quell'utente e se è
avviato quel programma particolare che si vuole usare in modo trusted.
Se una di queste cose non è stata fatta o uno di questi sw è stato
compromesso, allora non sarà possibile fare l'unsealing.
> ma come vengono scritti questi dati? in codice binario?
Quali? quelli salvati? in realtà vengono cifrati e scritti sull'hd
come vuoi... la chiave di cifratura viene gestita dal tpm.
Oppure quelli delle misure? misuri un qualcosa facendone l'hash, poi
lo passi al tpm con il comando Tspi_PCR_Extend (mi pare... ma qualcosa
di simile) e lui fa l'estensione.
> con che comando? e poi perchè salvare nei PCR se questi
> possono essere ESTESI da chiunque senza che ne prenda
> possesso!(questo mi è stato detto dal tipo dell'Enforcer!)
Questo non mi sembra possibile... devi aver preso possesso del tpm...
quello che è vero è che puoi estendere un pcr anche senza essere
l'owner.
> e quindi non permettere all'utente vero di decifrarlo?
> perchè se è giusto il ragionamento l'attaccante se vede
> che non riesce ad accedere al dato potrebbe vendicarsi e
> impedire anche a te di eseguire l'unseal!
È vero... il tpm è pieno di dos... per parare questo, l'utente deve
solo riavviare... ce ne sono di ben più devastanti.
--
Davide
Maggiori informazioni sulla lista
tc