Bezpieczne usuwanie danych

14 Dec 2017

rm  security  shred  tools  wipe 

Share on:

Oprócz standardowego polecenia rm, którego działanie opiera się raczej na zakrywaniu usuwanych danych, polecenia takie jak shred, scrub, sfill czy dd zamazują dane w bardzo trudny do odzyskania ich sposób. Co więcej, pozwalają na usuwanie danych za pomocą specjalnych algorytmów, np. metodą Gutmanna, DoD 5220.22-M, nadpisywania liczbami pseudolosowymi czy nadpisywania danych zerami.

Dlaczego nie rm? #

Domyślne polecenie do usuwania danych nie robi nic innego, jak tylko zwalnia i-węzeł, nie dotykając faktycznych danych na dysku. Dane takie jest dosyć łatwo odzyskać, wykorzystując przeznaczone do tego celu narzędzia.

Przedstawione w tym artykule polecenia nie tylko usuwają faktyczne dane poprzez m.in. wielokrotne nadpisywanie po „odłączeniu” i-węzła, ale też powodują, że odzyskanie ich może być nie możliwie.

Usuwanie danych a księgowanie #

Narzędzia tego typu mogą nie spełniać w pełni swojego zadania, jeśli dane, która mają usunąć, znajdują się na systemie plików z księgowaniem. Jest to ciekawa uwaga, ponieważ księgowanie może spowodować, że mimo usunięcia danych ich fragmenty gdzieś tam sobie jeszcze są.

Nie wiem, czy wyłączenie kroniki na czas usuwania jest dobrym pomysłem. Jeśli wykorzystujemy tryb księgowania polegający na zapisywaniu metadanych do dziennika, shred, jak i pozostałe narzędzia, powinien dobrze wykonać swoją pracę.

Dostępne narzędzia #

Disk (Destroyer) Dump #

Stary i poczciwy dd za pomocą którego można wykonać różne cuda w tym usunąć dane z pamięci masowej (dobrze jak proces ten odbywa się świadomie). Oto kilka przykładów:

dd if=/dev/{zero,random,urandom} of=/dev/sda
dd if=/dev/{zero,random,urandom} of=/dev/sda bs=1M
dd if=/dev/{zero,random,urandom} of=/dev/sda iflag=nocache oflag=direct bs=4096

Jeszcze taka mała rada, w jaki sposób “podejrzeć” jego działanie:

watch -n2 'kill -USR1 $(pgrep ^dd)'

Można także wykorzystać opcję status=progress (dostępna w paczce GNU coreutils >= 8.24).

Shred #

Program ten spełnia wszystkie wytyczne “bezpiecznego” usuwania danych. Warto korzystać z niego na co dzień.

W pierwszej linijce shred nadpisuje plik o nazwie file losowymi danymi powtarzając tę czynność 10 razy. Po zamazaniu pliku jest on nadpisywany zerami (opcja -z | --zero), aby ukryć sam proces zamazywania a na końcu usuwany (opcja -u | --remove). Opcja -f | --force pozwala m.in. na ewentualną zmianę uprawnień, aby zezwolić na zapis a opcja -v | --verbose włącza tryb gadatliwy.

Dodatkowo przy drugim wywołaniu polecenia określone zostało źródło pobieranych danych.

# apt-get install coreutils
shred -vfuz -n 10 file
shred --verbose --random-source=/dev/urandom -n 1 /dev/sda

Scrub #

Program, który dostarcza wiele metod (wzorów, algorytmów) usuwania danych.

Przykłady:

# apt-get install scrub
scrub /dev/sda
scrub -p dod /dev/sda
scrub -p dod -r file

Badblocks #

Ogólnie rzecz biorąc, program ten służy do sprawdzania dysków pod względem uszkodzonych sektorów. Pozwala jednak na wymazanie zawartości dysku poprzez wykonanie testu odczytu-zapisu:

# apt-get install e2fsprogs
badblocks -s -w -t random -v /dev/sda
badblocks -c 10240 -s -w -t random -v /dev/sda

Secure-delete #

Jest to zestaw narzędzi, które udostępniają zaawansowane metody bezpiecznego usuwania danych. Jako źródło wykorzystują /dev/urandom.

W skład pakietu secure-delete wchodzą:

Przykłady użycia:

# apt-get install secure-delete
# Dla każdego polecenia: -v (tryb gadatliwy), -z (nadpisuje na koniec zerami)
srm -vz /tmp/file
sfill -vz /local
sdmem -v
swapoff /dev/sda5 && sswap -vz /dev/sda5

Alternatywą dla polecenia sfill może być użycie dd i nadpisanie wolnej przestrzeni dla każdego podmontowanego zasobu (jest to bardzo dobra praktyka, którą warto wykonywać regularnie):

mount /dev/sdb1 /local
dd if=/dev/urandom of=/local/filled.file
rm -fr /local/filled.file