
Proof-of-concept che dimostra l'elusione della crittografia del disco LUKS vincolata a TPM su sistemi Linux, estraendo le chiavi del volume tramite un attacco personalizzato al filesystem di root.
Questo repository contiene un semplice codice proof-of-concept che sfrutta una debolezza comune descritta per la prima volta oltre un anno fa all'indirizzo https://oddlama.org/blog/bypassing-disk-encryption-with-tpm2-unlock/. Sebbene sia specificamente mirato a IncusOS, l'attacco è abbastanza generico contro la maggior parte dei sistemi Linux moderni.
Se stai vincolando la tua crittografia LUKS a un TPM, assicurati di impostare anche un PIN per il TPM.
Questo è un PoC rapido e sporco. Non è completamente rifinito e ci sono alcuni spigoli. Non c'è supporto e non ho intenzione di svilupparlo ulteriormente.
Io, come la maggior parte delle persone, presumevo che configurare la crittografia del disco LUKS vincolata al chip TPM del mio laptop fosse sicuro e impedisse a un attaccante di estrarre la chiave del volume LUKS (nota anche come chiave master). Si scopre che è quasi deprimentemente facile da fare e non lascia traccia dell'attacco.
Sì, il problema è che un attaccante può fornire un file system root personalizzato e, dopo che il tuo sistema si avvia, il TPM si troverà in uno stato "buono" noto in cui sbloccherà volentieri il tuo volume LUKS. L'attaccante può quindi fare tutto ciò che vuole e coprire facilmente qualsiasi prova dell'attacco.
Ma un attaccante preparato ha letteralmente bisogno solo di avere il tuo computer in suo possesso per un paio di minuti e sei compromesso. Lasci il tuo laptop in camera d'albergo mentre esci a cena? E che dire di un posto di controllo di sicurezza dove vieni messo da parte per un interrogatorio? Sì, non è una bella situazione.
Lo script ./prepare.sh esegue i passaggi necessari per compromettere la VM di destinazione. Gli stessi passaggi possono essere facilmente
eseguiti contro un disco rigido reale che è stato temporaneamente rimosso dal suo alloggiamento normale.
Il vero "exploit" estrarrà la chiave del volume LUKS originale, che può essere vista guardando il log di journal
per attack.service. Molte varianti di questo attacco sono possibili.
Esegui ./restore.sh per cancellare ogni prova delle tue azioni mentre te ne vai con la chiave del volume LUKS della
tua vittima.