Accertati che i dati non si fermino dopo essere stati cancellati

12

Sto cercando di creare un servizio che mantenga il minor numero possibile di dati sui suoi utenti. A tal fine, voglio assicurarmi che qualcuno che utilizza strumenti forensi non acquisirà più informazioni di quelle che vorrei guardando il mio database o il mio filesystem. In altre parole, non dovresti essere in grado di esaminare il mio disco rigido con un editor esadecimale e trovare un messaggio cancellato ieri da un utente.

Misure che ho già preso:

Elimina i file di registro con informazioni identificative entro 30 minuti. Ho disattivato lo swap. Ho /tmp , /home , /root e /var/log montati su un disco RAM. Ho rimosso rm e ho inserito un link fisico in srm al suo posto.

Ho un disco rigido che non rialloca i blocchi, a meno che non ci sia un settore danneggiato.

Problemi al mio sistema attualmente:

  1. Se un file sensibile viene modificato e ridotto, questo (AFAIK) rilascia un settore, che non verrà triturato, anche se srm viene chiamato sul file.
  2. La modifica di rm non fa nulla per i programmi che chiamano scollegare direttamente.
  3. Ho delle righe in MySQL che contengono dati sensibili. Elimina quelle righe, ma sono preoccupato che MySQL li tenga in qualche modo.
    Modifica: sembra che SQLite abbia una impostazione di configurazione chiamata secure_delete . Userò SQLite invece.

Possibili miglioramenti:

  • Imposta l'attributo chattr s (cancellazione sicura) Non ho questo set ora perché il manuale chattr dice che ext2 / 3/4 ignora questo flag. Ho trovato informazioni contrastanti su se ext4 lo supporta. Quali filesystem lo rispettano?
  • Pulisci lo spazio. Sembra una specie di approccio da mazza, ma non riesco a trovare un modo per risolvere il # 1 altrimenti. Inoltre, i modi che ho visto per farlo consistono nel creare un file veramente grande, quindi cancellarlo. Sono preoccupato che potrebbe causare un arresto anomalo del programma quando questo sistema è quasi esaurito.
  • Potrei fare backup testuali del database MySQL (che sicuramente non contengono le righe cancellate) eliminare gli originali, quindi ripristinarli.
  • Passa a un diverso daemon SQL?
  • Riavvia per cancellare il disco RAM. Tuttavia, non voglio frequenti tempi di inattività. Inoltre, non farebbe nulla per cancellare i dati presenti sul disco rigido.

Qual è il modo migliore per risolvere questi due three ? Attualmente sto usando Arch Linux con ext3 e MySQL SQLite. Sono disposto a cambiare nessuno di questi.

Grazie per l'attenzione!

    
posta Nick ODell 12.10.2013 - 09:33
fonte

2 risposte

5

Distruggere i dati correttamente senza danneggiare fisicamente il supporto è un compito abbastanza difficile, soprattutto dal momento che gli HDD hanno iniziato a venire con le riallocazioni dei blocchi. Questo è un ordine di grandezza più difficile (se non impossibile) degli SSD, dal momento che il firmware è letteralmente magico con ciò che è realmente memorizzato nel flash. Poiché il mio commento che chiedeva informazioni più dettagliate sulla configurazione è andato senza risposta, supponiamo che sia coinvolto un SSD.

Dato che non puoi davvero distruggere i dati, la cosa migliore è renderli inaccessibili . Qual è il tipo di crittografia solitamente piuttosto buona (se eseguita correttamente). Quindi la tua soluzione generica è quella di criptare tutti i dati che vuoi essere in grado di dimenticare facilmente e buttare via la chiave una volta arrivato.

L'implementazione per vari servizi può essere molto diversa e può (o non può) richiedere modifiche sostanziali alla tua infrastruttura. In tutti i casi, tuttavia, si applicheranno due regole:

  1. usa un buon algoritmo di crittografia e configurazione (modalità di funzionamento, generazione IV)

  2. assicurati di essere in grado di scartare la chiave (in realtà qualsiasi testo in chiaro sensibile per quella materia!) in modo veramente corretto - questo in pratica impone di archiviarlo fisicamente nella RAM e di ricordarlo per sovrascriverlo con qualcos'altro quando non è necessario ancora più 1 .

Un semplice esempio (su Linux) relativo alle home directory degli utenti

  • Crea un file normale - le sue dimensioni determinano la dimensione della casa dell'utente, lo riempiono di dati casuali (pseudo) (un modo per farlo è scrivere gli zeri su un dispositivo dm-crypt supportato da quel file)

  • Crea una periferica dm-crypt supportata dal file, mantieni la password memorizzata solo nella RAM (vedi 1 ). Se hai utilizzato un dispositivo dm-crypt per "randomizzare" il file di supporto nel passaggio precedente, utilizza una diversa password ora.

  • Crea un file system sul dispositivo crittografico;

  • Montaggio a casa dell'utente;

  • Quando decidi di rimuovere la casa, smontarla, gettare via la chiave, rimuovere il file (eventualmente riempirlo di dati casuali di nuovo, ma ricorda che questo non ha molto senso per gli SSD).

1 Una parte piuttosto complicata e il tuo chilometraggio può variare (come sempre con la sicurezza). Il punto è che anche per un server ci sono casi in cui quella chiave (o altri dati sensibili) potrebbe essere presente in memoria quando non dovrebbe . Nel tuo caso questo può essere ad esempio quando un servizio (database ...) si blocca (o è appena interrotto per manutenzione) o, come suggerito in un commento, nel caso di un power-off, specialmente uno forzato - cioè il attaccante che rimuove fisicamente il server dalla sua posizione per l'analisi.

Il primo caso potrebbe essere risolto con il kernel che cancella tutte le pagine di memoria appartenenti a un'applicazione dopo che le libera (includendo quindi qualsiasi forma di arresto dell'applicazione).

Il secondo è ancora più complicato. Potresti chiederti perché dovresti preoccuparti di RAM dopo uno spegnimento e non saresti il primo - leggi su Data rimanenza , attacchi di avvio a freddo e controlla ad es. Ci sono chip di memoria volatile che non conservare i dati dopo lo spegnimento? . Risposta generale: non c'è molto che puoi fare senza un hardware appositamente progettato che cancelli la RAM al momento dello spegnimento. E anche allora - puoi escludere la possibilità che un aggressore si agganci a un sistema operativo a livello hardware?

Anche se sembra paranoico, è solo un suggerimento su ciò che potresti prendere in considerazione quando implementerai un tale servizio. Devi decidere cosa ha un senso, quali minacce non vuoi veramente spendere e quali sono i compromessi accettabili. Ad esempio, se vuoi essere in grado di riavviare la macchina incustodita, allora sei praticamente sfortunato, dal momento che richiede di avere accesso ad almeno alcuni dati sensibili non cifrati (diciamo la chiave di crittografia), che a sua volta si rompe l'intera catena della privacy.

Un altro problema è che devi assicurarti che non venga scambiato, almeno non con uno spazio di swap non crittografato .

Per riassumere: la domanda non è se sia possibile rendere impossibile per un utente malintenzionato i dati: è la difficoltà con cui lo si realizza. Devi specificare la parte quanto per vedere cosa ha senso.

    
risposta data 13.10.2013 - 13:52
fonte
1

La soluzione migliore è davvero la più semplice.

Non salvare le informazioni che non vuoi finire nelle mani di qualcun altro in primo luogo. Non vuoi che i tuoi registri siano recuperabili dopo la cancellazione? Non registrare. Non vuoi che i tuoi cookie siano utilizzati per tracciarti? Non usare i cookie. Non vuoi che i messaggi cancellati siano recuperabili in seguito? Beh, è difficile, perché il messaggio doveva essere salvato prima che fosse cancellato, quindi non posso aiutarti.

Questo è il metodo utilizzato dai browser Web con "modalità privacy". Le loro tracce non sono recuperabili perché non le lasciano mai in primo piano. Nessuna cache viene utilizzata, nessuna cronologia viene salvata, nessuna password memorizzata. Ovviamente, ti avvertono anche che i dati che invii possono ancora essere intercettati quando lascia il tuo computer, quindi c'è sempre una terza parte di cui non puoi controllare le azioni.

    
risposta data 10.09.2014 - 20:02
fonte

Leggi altre domande sui tag