2011-10-13 18 views
5

Secure File Eliminazione di in Csicura eliminazione file in C

ho bisogno di eliminare in modo sicuro un file in C, qui è quello che faccio:

  1. uso fopen per ottenere un handle del file
  2. calcolare le dimensioni utilizzando lseek/ftell
  3. ottenere seme casuale a seconda dell'ora corrente/o la dimensione del file
  4. scrittura (dimensione) byte del file da uno spirito ciclo h 256 byte scritti ogni maniglia iterazione
  5. fflush/fclose il file
  6. riaprire il file e ri-eseguire i passaggi 3-6 per 10 ~ 15 volte
  7. rinominare il file quindi eliminarlo

è che come è fatto? Perché ho letto il nome "Gutmann 25 passa" in Gomma, quindi suppongo che 25 sia il numero di volte in cui il file viene sovrascritto e "Gutmann" è l'algoritmo di randomizzazione?

+0

Si noti che, per lo meno, è necessario aprire il file per l'aggiornamento. Ma anche in questo caso non si ha alcuna garanzia che i settori aggiornati vengano riscritti nella stessa posizione. (In effetti, quasi certamente non è come SSD.) –

risposta

8

Non è possibile farlo in modo sicuro senza la collaborazione del sistema operativo - e spesso nemmeno in quel momento.

Quando si apre un file e si scrive su di esso, non vi è alcuna garanzia che il sistema operativo collochi il nuovo file sullo stesso bit di ruggine rotante di quello vecchio. Anche se non sai se la nuova scrittura utilizzerà la stessa catena di cluster come prima.

Anche in questo caso non si è certi che l'unità non abbia mappato il blocco del disco a causa di qualche errore, lasciando i piani per il dominio del mondo su un blocco contrassegnato come non valido ma leggibile.

ps - la sovrascrittura 25x non è più necessaria, era necessaria su vecchie unità MFM a bassa densità con uno scarso rilevamento della testa. Sulle moderne unità GMR la sovrascrittura una volta è abbondante.

+0

che ha ucciso la mia immaginazione di come funziona l'hard disk: S, totalmente !, quindi cosa ne pensate sarà la soluzione, se ce n'è? – killercode

+0

@killercode per la parte dipendente dal sistema operativo di cui i blocchi del disco sono utilizzati da un file, quindi è possibile farlo con una funzione del sistema operativo che indica quali sono i blocchi del disco utilizzati e può sovrascriverli. Per la mappatura del blocco errato su disco, e in particolare su un SSD con livellamento dell'usura, l'unica eliminazione sicura è un martello molto grande! –

+0

@killed la mia immaginazione di come funziona il disco rigido - è corretto in termini semplici ma i filesystem e i dischi possono fare molte ottimizzazioni dietro le quinte. –

1

Sì, infatti si sovrascrive n diversi modelli su un file

E lo fa scrivendo una serie di 35 modelli sulla regione da cancellare.

La selezione dei modelli presuppone che l'utente non conosca il meccanismo di codifica utilizzato dall'unità e quindi include i modelli progettati specificamente per tre diversi tipi di unità. Un utente che ha il sa quale tipo di codifica utilizza l'unità può scegliere solo i modelli destinati alla propria unità. Un'unità con un diverso meccanismo di codifica avrebbe bisogno di schemi diversi.

Altre informazioni sono here.

1

@ Martin Beckett è corretto; esiste una cosa come "cancellazione sicura" a meno che tu non sappia tutto ciò che l'hardware sta facendo fino in fondo al disco. (E anche allora, non farei alcuna scommessa su ciò che un aggressore sufficientemente ben finanziato potrebbe recuperare dato l'accesso al supporto fisico.)

Ma partendo dal presupposto che il sistema operativo e il disco riutilizzeranno gli stessi blocchi, lo schema non funziona per un motivo più semplice: fflush in genere non scrive nulla sul disco.

Sulla maggior parte dei sistemi operativi multi-tasking (inclusi Windows, Linux e OS X), fflush impone semplicemente i dati dal buffer dello spazio utente nel kernel. Il kernel eseguirà quindi il proprio buffering, scrivendo sul disco solo quando ci si sente.

Su Linux, ad esempio, è necessario chiamare fsync(fileno(handle)). (O semplicemente usare i descrittori di file in primo luogo.) OS X è simile. Windows ha FlushFileBuffers.

Bottom line: il ciclo che descrivi è molto probabilmente solo per sovrascrivere un buffer del kernel 10-15 volte invece del file su disco. Non esiste un modo portabile in C o C++ per forzare i dati sul disco. Per questo, è necessario utilizzare un'interfaccia dipendente dalla piattaforma.

0

Il metodo Gutmann ha funzionato bene per i vecchi schemi di codifica della tecnologia del disco e lo schema di pulitura a 35 passaggi del metodo Gutmann non è più necessario, cosa che Gutmann riconosce. Vedi: Metodo Gutmann a: https://en.wikipedia.org/wiki/Gutmann_method nella sezione Critica dove Gutmann discute le differenze.

Di solito è sufficiente eseguire al massimo alcuni passaggi casuali per eliminare in modo sicuro un file (eventualmente con un passaggio di azzeramento aggiuntivo).

Il pacchetto secure-delete di thc.org contiene il comando sfill per cancellare in modo sicuro lo spazio su disco e inode su un disco rigido.

+0

"Nessuna azienda privata di recupero dati attualmente sostiene di poter ricostruire dati completamente sovrascritti." - Ho lavorato in una società di recupero dati e mentre non avremmo mai detto che potevamo recuperare un file fino a quando non è stato ripristinato c'erano tempi in cui siamo stati in grado di recuperare file parziali e occasionalmente l'intero file. Il processo richiedeva molto tempo ma avevamo programmi che aiuterebbero con alcune permutazioni ad alta probabilità del file. Ammetto che non siamo stati in grado di recuperare nulla di utilizzo probabilmente il 90% delle volte se è stato sovrascritto o in caso di corruzione da arresti anomali. – Chad

0

MFT (Master File Table) simile a FAT (File Allocation Table), MFT conserva la documentazione: file offset sul disco, il nome del file, data/ora, id, dimensione del file, e anche file di dati se i dati del file si adattano allo spazio vuoto del record che è di circa 512 byte, 1 dimensione del record è 1KB.

Nota: i dati nuovi HDD impostato su 0x00 (solo farti sapere)

Diciamo che si desidera sovrascrivere file1.txt OS MFT rileva questo offset all'interno record di file.. si inizia a sovrascrivere file1.txt con binario (00000000) in modalità binaria.

Sovrascrivere i dati dei file su disco 100% questo è il motivo per cui MFT ha lo sfalsamento del file su disco. dopo averlo rinominato ed eliminato.

NOTA: MFT segnerà il file come eliminato, ma è comunque possibile ottenere alcuni dati su questo file, ad esempio data/ora: creato, modificato, accessibile. file offset, attributi, flag.

1- create folder in c:\ and move file and in same time rename in to folder(use rename function) rename file to 0000000000 or any another without extention 

2- overwrite file with 0x00 and check if file was overwrited 

3- change date/time 

4- make without attributes 

5- leave file size untouched OS faster reuse empty space. 

6- delete file 

7- repeat all files (1-6) 

8- delete folder 

or 

(1, 2, 6, 7, 8) 

9- find files in MFT remove records of these files.