Su ext4 c'è la possibilità che i tuoi dati (le tue chiavi segrete) possano essere ripristinati indipendentemente dall'hardware sottostante, a seconda di come lo monti. (Le seguenti spiegazioni sono valide anche per molti altri filesystem di journaling e hai sempre un problema con i filesystem copy-on-write come btrfs e altri che sono abilitati all'istantanea).
La maledizione dei file system di journaling / copia su scrittura
Questo ha a che fare con il modo in cui i moderni filesystem (di journaling) assicurano che se si ha una perdita di potenza nel mezzo della scrittura sul filesystem, il filesystem si troverà comunque in uno stato normale. Con piccoli dischi, dovevamo eseguire programmi come fsck per riparare un filesystem dopo un tale crash. Con dischi di grandi dimensioni, l'esecuzione di fsck richiederebbe troppo tempo, quindi i file system di journaling sono un'opzione molto migliore.
Tuttavia, ottengono la loro magia di recupero tenendo un diario delle operazioni (da cui il nome) che possono o rigiocare per intero o scartare se non ci sono commit su record (ad esempio se il computer è morto nel mezzo della scrittura di qualcosa sul disco ).
Ora, a seconda di quanto il filesystem scrive nel giornale (solo le operazioni sui metadati del file o anche i dati associati), potresti avere un problema.
Un modo per essere in grado di ripristinare uno stato pulito dopo che una scrittura di dati in un file è andato storto / interrotto nel mezzo) è di non scrivere mai dati nella stessa posizione, quindi se si sovrascrivono i dati di un file, il nuovo i contenuti non sono memorizzati nello stesso blocco del disco del contenuto del file originale. Al suo posto viene invece assegnato un nuovo blocco disco. Questo è chiamato copy-on-write (COW in breve). In questo modo, il vecchio contenuto del file può essere facilmente recuperato quando si scopre che l'operazione di scrittura non è stata completata correttamente.
Tuttavia, ciò significa anche che le tue chiavi segrete risiedono ancora sul disco dopo essere state "sovrascritte" con nuovi dati e possono essere trovate con una semplice operazione grep
sul dispositivo di partizione, ad esempio:
grep "my-secret" /dev/sda1
o forse
strings /dev/sda1 | grep "my-secret"
Quindi non è necessario essere uno scienziato missilistico per recuperare i dati precedentemente sovrascritti quando il file system è montato con l'opzione di registrazione dei dati.
giornale dei dati su ext3 e ext4
ext3 e ext4 consentono di attivare l'inserimento dei dati su (opzione data=journal
) o disattivare (che, penso, è l'impostazione predefinita). Io penso che senza data journaling (o almeno con data=writeback
), i tuoi file dovrebbero essere sovrascritti sul posto (questo è ciò che man ext4
suggerisce, comunque). Ma non sono sicuro al 100%, quindi è meglio testarlo.
Problemi causati da dischi a stato solido e algoritmi di livellamento dell'usura
Le unità SSD e flash pongono più problemi: gli algoritmi di livellamento dell'usura rendono praticamente impossibile sapere dove i dati finiscono fisicamente.
L'opzione di ritaglio dell'unità SSD può essere d'aiuto perché consente al controller SSD di contrassegnare i blocchi come eliminati, in modo che il controllore possa programmarli per essere sovrascritti in un momento precedente. Tuttavia, qui non hai garanzie. Gli SSD economici potrebbero anche non implementarlo e giacciono sul sistema operativo.
Infine, anche i dischi magnetici rotazionali pongono problemi. La maggior parte di questi dischi, che sono ancora operativi, dispone di controller intelligenti che possono sostituire al volo un settore di lavoro per un settore difettoso. Questo può accadere in qualsiasi momento, quindi se sei molto sfortunato, il settore che contiene il tuo segreto potrebbe finire contrassegnato come difettoso e trasparente scambiato. Di solito non è possibile accedere a questi settori difettosi (dopo tutto sono difettosi), ma ciò non significa che gli esperti con l'hardware diagnostico necessario non possano ancora leggere questi settori difettosi. Tuttavia, non mi preoccuperei molto di questo scenario, è solo qualcosa da tenere a mente.
Che cosa puoi fare?
Quindi la tua unica scommessa sicura è quella di crittografare il filesystem in cui memorizzi le informazioni sensibili. Quindi puoi assicurarti che sia davvero inaccessibile eliminando la chiave di crittografia. Questa è l'unica soluzione che funziona indipendentemente dal tipo di filesystem e hardware che usi.
Un altro modo per sovrascrivere i dati è creare un file che occupa tutto lo spazio libero di una partizione:
dd if=/dev/zero of=stupidly_big_file
Tuttavia, questo potrebbe richiedere molto tempo e non è abbastanza infallibile.