2011-10-13 16 views
5

Secure File Usuwanie w CBezpieczne usuwanie pliku w C

muszę bezpiecznie usunąć plik w C, o to co zrobić:

  1. korzystanie fopen uzyskać uchwyt pliku
  2. obliczyć wielkość korzystając lseek/ftell
  3. uzyskać losowych w zależności od bieżącego czasu/lub rozmiar pliku
  4. write (wielkość) bajtów do pliku z dowcipem pętli h 256 bajtów napisany Każdy uchwyt iteracja
  5. fflush/fclose pliku
  6. ponownie otworzyć plik i re-do kroki 3-6 dla 10 ~ 15 razy
  7. zmienić nazwę pliku, a następnie usunąć go

Czy jak to się stało? Ponieważ przeczytałem nazwę "Gutmann 25 przechodzi" w Eraser, więc przypuszczam, że 25 to liczba przypadków, gdy plik jest nadpisywany, a "Gutmann" to algorytm losowości?

+0

Należy pamiętać, że należy przynajmniej otworzyć plik do aktualizacji. Ale nawet wtedy nie masz gwarancji, że zaktualizowane sektory zostaną zapisane w tej samej lokalizacji. (Prawdę mówiąc, prawie na pewno nie jako SSD.) –

Odpowiedz

8

Nie można tego zrobić bezpiecznie bez współpracy z systemem operacyjnym - a często nawet wtedy.

Po otwarciu pliku i zapisaniu do niego nie ma gwarancji, że system operacyjny umieści nowy plik na tym samym kawałku wirującej rdzy, co stary. Nawet jeśli tak, to nie wiesz, czy nowy zapis użyje tego samego łańcucha klastrów, co wcześniej.

Nawet wtedy nie masz pewności, że dysk nie zmapował bloku dysku z powodu jakiejś usterki - pozostawiając plany dominacji nad światem na bloku, który jest oznaczony jako zły, ale jest nadal czytelny.

ps - nadpisanie 25x nie jest już konieczne, było potrzebne na starych napędach MFM o niskiej gęstości z słabym śledzeniem głowy. Na nowoczesnych napędach GMR nadpisywanie raz jest dużo.

+0

który zabił moją wyobraźnię o tym, jak działa twardy dysk: S, całkowicie!, Więc jak myślisz, jakie będzie rozwiązanie, jeśli takie będzie? – killercode

+0

@killercode dla części zależnej od systemu operacyjnego, której bloki dyskowe są używane w pliku - możesz to zrobić za pomocą funkcji systemu operacyjnego, która informuje, które bloki dyskowe są używane i może je zastąpić. W przypadku mapowania uszkodzonych bloków na dysku, a zwłaszcza na dysku SSD z wyrównaniem zużycia, jedynym bezpiecznym usuwaniem jest bardzo duży młotek! –

+0

@kompilował moją wyobraźnię, jak działa dysk twardy - jest to poprawne w prostych słowach, ale systemy plików i dyski mogą wykonywać wiele optymalizacji za kulisami. –

1

Tak, w rzeczywistości jest nadpisanie n różnych wzorów na pliku

Czyni to poprzez napisanie serii 35 wzorów nad regionem zostać skasowane.

Wybór wzorów zakłada, że ​​użytkownik nie zna mechanizmu kodowania używanego przez napęd, a więc zawiera wzorce zaprojektowane specjalnie dla trzech różnych typów napędów. Użytkownik, który wie, który typ kodowania dysku używa, może wybrać tylko te modele, które są przeznaczone dla ich napędu. Napęd z innym mechanizmem kodowania wymaga różnych wzorów.

Więcej informacji pod numerem here.

1

@Martin Beckett jest poprawny; istnieje takie coś jak "bezpieczne usuwanie", chyba że wiesz wszystko o tym, co sprzęt robi aż do dysku. (I nawet wtedy nie postawiłbym żadnych zakładów na to, co wystarczająco dobrze finansowany napastnik mógłby odzyskać dzięki dostępowi do fizycznych nośników.)

Ale zakładając, że system operacyjny i dysk użyją tych samych bloków, twój schemat nie będzie działał z bardziej podstawowego powodu: fflush zasadniczo nie zapisuje niczego na dysku.

W większości wielozadaniowych systemów operacyjnych (w tym Windows, Linux i OS X), fflush wymusza jedynie dane z bufora przestrzeni użytkownika do jądra. Jądro będzie wtedy robiło własne buforowanie, tylko zapisywanie na dysku, gdy będzie to miało na to ochotę.

Na przykład na Linuksie trzeba zadzwonić pod numer fsync(fileno(handle)). (Lub po prostu użyj deskryptorów plików w pierwszej kolejności.) OS X jest podobny. Windows ma FlushFileBuffers.

Dolna linia: opisana pętla jest najprawdopodobniej jedynie nadpisaniem bufora jądra 10-15 razy zamiast pliku na dysku. Nie ma przenośnej drogi w C lub C++, aby wymusić na dysku dane. W tym celu należy użyć interfejsu zależnego od platformy.

0

Metoda Gutmanna zadziałała dobrze dla starszych schematów kodowania technologii dysków, a schemat 35-minutowego wymazywania metody Gutmanna nie jest już wymagany, co nawet potwierdza Gutmann. Zobacz: Metoda Gutmanna pod adresem: https://en.wikipedia.org/wiki/Gutmann_method w sekcji krytyki, w której Gutmann omawia różnice.

Zazwyczaj wystarczy zrobić kilka losowych przebiegów, aby bezpiecznie usunąć plik (z możliwym dodatkowym przejściem do zerowania).

Pakiet secure-delete z thc.org zawiera polecenie sfill, aby bezpiecznie wytrzeć dysk i przestrzeń i-węzła na dysku twardym.

+0

"Żadna prywatna firma odzyskiwania danych nie twierdzi obecnie, że może odtworzyć całkowicie nadpisane dane". - Pracowałem w firmie zajmującej się odzyskiwaniem danych i chociaż nigdy nie powiedzielibyśmy, że możemy odzyskać plik do czasu odzyskania, zdarzały się sytuacje, w których byliśmy w stanie odzyskać częściowe pliki i od czasu do czasu cały plik. Proces ten był czasochłonny, ale mieliśmy programy, które pomogłyby w pewnych permutacjach pliku o wysokim prawdopodobieństwie. Przyznaję, że nie byliśmy w stanie odzyskać niczego z użycia prawdopodobnie w 90% przypadków, gdyby zostało nadpisane lub gdy nastąpiło uszkodzenie z powodu awarii głowicy. – Chad

0

MFT (Master File Table) podobnie jak FAT (File Allocation Table), MFT prowadzi dokumentację: Pliki offsetu na dysku, nazwa pliku, data/czas, ID, rozmiar pliku, a nawet plik danych w razie dane pliku mieszczą się w pustej przestrzeni rekordu, która wynosi około 512 bajtów, 1 rozmiar rekordu to 1KB.

UWAGA: Nowe dane HDD ustawiony na 0x00 (tylko poinformować)

Powiedzmy chcesz nadpisać plik1.txt OS znajdzie tego pliku MFT rekord przesunięcia wewnątrz.. rozpoczynasz zastępowanie pliku1.txt binarnie (00000000) w trybie binarnym.

Nadpisujesz dane pliku na dysku w 100%, dlatego MFT ma przesunięcie pliku na dysku. po zmianie nazwy i usunięciu.

UWAGA: Program MFT będzie oznaczać plik jako usunięty, ale nadal można uzyskać dane dotyczące tego pliku, np. Datę/godzinę: utworzono, zmodyfikowano, uzyskano dostęp. przesunięcie pliku, atrybuty, flagi.

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.