Scrittura del file shredder

2

Voglio scrivere un semplice file shredder in c ++, cioè un programma che cancella un file in modo che non sia recuperabile. Il seguente sarebbe un modo sicuro e corretto per farlo?

(1) Apri il file con

ofstream myfile;
myfile.open ("deleteme.txt", ios::out | ios::binary); 

(2) Quindi esegui 10 round di qualcosa come

unsigned int x = 0;
for (int i =0; i <= filesize -1; i++)
    {
    myfile.seekg (i, ios::beg);
    myfile << (char)x;
       [put new random character in x]
        }

(3) Quindi elimina semplicemente il file

  if( remove( "deleteme.txt" ) != 0 ) {
       cout << "Error deleting file";
       }
  else {cout << "File successfully deleted";
       }

(Suppongo che si possa semplicemente cancellare semplicemente il file in una console.)

Potrebbe aggiungere ulteriore sicurezza per rinominare il file prima dell'eliminazione?

C'è qualcos'altro che dovrebbe essere fatto per rimuovere completamente un file in modo che non possa essere ripristinato o è sufficiente?

EDIT1 : giusto per chiarire, il codice sopra è sime-pseudo. La mia preoccupazione principale è se sovrascrivi un file byte per byte e l'eliminazione del file sarà un buon modo per renderlo irrecuperabile.

EDIT2 : mi interessa solo il modo migliore per farlo utilizzando il solo software.

Modifica3 : aggiungere un'altra cosa: sono interessato principalmente a un livello di sicurezza che impedisce il recupero con metodi di software.

    
posta Thomas 07.06.2012 - 05:01
fonte

4 risposte

6

Sembra un progetto divertente. So che hai detto "semplice", ma qui sono comunque i miei pensieri.

I dati con cui stai scrivendo il file non sono casuali, e un passaggio lascerà comunque tracce dei dati originali. Dipende dal supporto di memorizzazione. Ad esempio, con i dispositivi magnetici, c'è microscopia a forza magnetica . Anche dopo dieci round della stessa cosa, non sono sicuro che stai aggiungendo ulteriori benefici.

Rinominare ed eliminare file non aggiungerà una protezione robusta perché, nella maggior parte dei file system, cambia semplicemente il puntatore nel percorso sul disco in cui si trovano i dati. L'eliminazione di un file rimuove solo il puntatore, quindi il disco vede i blocchi come "disponibili" anche se il file è effettivamente lì. (Questo è il motivo per cui il software di ripristino funziona.)

Le eliminazioni complete e sicure hanno le seguenti caratteristiche (basate sul software, non considerando le soluzioni hardware):

  • PRNG ( Generatore di numeri pseudocasuali ) che genera valori casuali da scrivere ad ogni byte dello spazio allocato del file (vedi anche la funzione di crittografia sotto).

  • Più passaggi (attenzione qui, dipende dal mezzo)

  • Un'esecuzione con tutti gli 0, quindi tutti e 1 non potrebbero ferire. Può aiutare a interrompere un modello prevedibile, ma sottile, di casualità (perché i computer non sono veramente casuali).

  • Alcuni file system sono "Copy-on-write", che è come un tipo di "controllo di revisione". Questi cercano di evitare di sovrascrivere i dati già in atto. Tale protezione dovrebbe essere aggirata.

  • I dispositivi RAID eseguono il mirroring delle modifiche su un disco su un altro disco.

  • I file frammentati possono iniziare in un settore e finire in un'altra parte del disco. In alternativa, le funzionalità anti-frammentazione possono conservare copie ridondanti dei dati o trasferirle in tempo reale.

  • Le unità a stato solido gestiscono lo spazio su disco in modo diverso rispetto alle unità magnetiche. In combinazione con il livellamento dell'usura, ci sono ragioni tecniche che rendono lo spazzolamento sicuro un po 'complicato. (Vedi link Wikipedia sotto)

  • Crittografare un file prima di cancellarlo contribuirà a riempirlo con bit "casuali" ... ma in realtà la migliore risposta per garantire lo shredding è crittografarla prima che colpisca il disco.

Non perdere questa grande domanda che parla della cancellazione delle informazioni su unità a stato solido, in particolare le unità flash. Ricorda che gli SSD si logorano dopo essere stati scritti abbastanza volte.

Guarda questo articolo su Wikipedia per informazioni più dettagliate sullo sfondo.

A proposito ...

Mi piacerebbe davvero vedere un distruggidocumenti che conferisce una certa negabilità plausibile. Cancellerebbe il file in modo sicuro, quindi traccerà i resti di un file falso al suo posto, forse un file scelto dall'utente che si trova altrove sul disco rigido. Sembrerebbe essere il resto di una copia di quel file che a un certo punto è stato indicato dal file system, è stato cancellato dall'utente e, a seconda delle dimensioni, potrebbe essere gradualmente sovrascritto dall'uso regolare.

Se un agente forense doveva esaminare la porzione di un disco su cui era in esecuzione un normale shredder, è facile dire che era stato cancellato con dati casuali. Ma se un file di richiamo è stato messo al suo posto, immagino che sarebbe più difficile da dire.

    
risposta data 07.06.2012 - 06:06
fonte
3

L'eliminazione sicura dei file è più un fattore del filesystem che dell'applicazione. Diversi filesystem usano meccanismi di copy-on-write, compresi i più famosi ZFS e BTRFS, ma anche in qualche misura anche NTFS con copie shadow. Quindi sovrascrivere un file con dati casuali assegna solo uno spazio precedentemente vuoto e lo riempie di casualità. Abbastanza inutile in tutta praticità.

Un programma di cancellazione sicura dovrebbe essere in grado di riconoscere i file system, se non addirittura un driver del filesystem stesso, per cercare e sovrascrivere direttamente i blocchi rilevanti. E anche in questo caso esiste la possibilità che persino il filesystem non abbia l'ultima parola sul fatto che i dati vengano sovrascritti. Ad esempio, le istantanee LVM e il livellamento dell'usura SSD possono impedirti di effettivamente sovrascrivere i tuoi dati, di nuovo semplicemente allocando settori altrimenti vuoti e scrivendo lì i tuoi dati casuali.

Stai molto meglio, molto più sicuro, asciugando l'intera unità in una volta sola usando DBAN o qualcosa di simile.

Inoltre, mentre tecnicamente, teoricamente, puoi recuperare i bit precedentemente sovrascritti usando un microscopio a forza magnetica o cosa hai, le probabilità che anche se fosse una possibilità, anche nelle circostanze più estreme, sono approssimativamente zero. Ogni bit dovrebbe essere manualmente, ricostruito individualmente con un tasso di successo relativamente basso e un costo per un costo estremamente elevato se è addirittura possibile , che con le unità di densità arealistica odierne appare incredibilmente improbabile. Le tracce magnetiche originali prima ancora di essere sovrascritte sono così deboli che le unità moderne fanno molto affidamento sui bit ECC solo per ritracciare in modo affidabile i dati.

Vedi anche: link

    
risposta data 08.06.2012 - 19:52
fonte
2

Non dovresti scrivere il tuo programmatore shredder. Invece, prendi un trituratore ben controllato.

  • Per la distruzione del disco rigido, raccomando ATA Secure Erase o DBAN (cerca questo sito per i dettagli). DBAN è open-source, quindi puoi guardarne l'origine.

  • Per la distruzione dei file, raccomando il programma shred di GNU (fornito con Coreutils). shred è open-source, quindi puoi anche guardarne l'origine.

Comprendi che la distruzione dei file a livello di file è intrinsecamente insicura in molte circostanze, indipendentemente da quanto accuratamente sia scritto il programma. Dato il modo in cui i moderni filesystem, sovrascrivendo un file con byte diversi, non significa che tutte le copie dei dati originali su disco verranno necessariamente sovrascritte. In alcuni casi, sovrascrivere un file può far sì che il filesystem esegua una copia e modifichi la copia, lasciando i dati originali memorizzati altrove nel disco rigido (in "spazio libero") in cui un distruggidocumenti a livello di file non può eliminarlo. In altri casi, i resti dei vecchi dati possono essere lasciati sul disco rigido per altri motivi.

    
risposta data 08.06.2012 - 19:02
fonte
1

Come sapete, l'eliminazione di un file lascia i dati sul file system, che in seguito potrebbero essere sovrascritti o meno.

Tuttavia, una singola sovrascrittura di un file impedisce di recuperare i dati nella pratica, sebbene ci sia una piccola minaccia teorica di recupero parziale dei dati analizzando bit per bit con un microscopio elettronico. In pratica questa minaccia non è mai stata dimostrata per recuperare una quantità significativa di dati (ad esempio 1 kb + ~ 8192 bit) rispetto a pochi bit in condizioni idealizzate. Vedi [1] , [2] .

Il problema principale con l'eliminazione sicura mediante sovrascrittura non è il numero di wipes, ma non si sa esattamente come il sistema operativo / hardware sta gestendo i dati. Ad esempio, potresti aver inizialmente salvato un file in un determinato settore, ma in seguito tale blocco è stato determinato come non valido, quindi ha mappato i dati in un settore diverso. Il problema peggiora con le unità a stato solido (SSD) che a causa delle limitazioni della tecnologia flash (sovrascritture limitate di un determinato blocco, devono prima azzerare l'intero blocco prima di scrivere, quindi riscrive l'intero blocco), l'hardware cerca di evitare di riscrivere i settori ogni volta che è possibile per un funzionamento ottimale.

Soluzione: se i tuoi dati devono essere tenuti segreti, usa la crittografia completa del disco. Se la chiave di crittografia è compromessa, scrivere sull'intero disco (anche se i dati potrebbero ancora esistere in settori danneggiati) o distruggere fisicamente il disco.

    
risposta data 08.06.2012 - 19:44
fonte

Leggi altre domande sui tag