Bezpieczne usuwanie danych

Series: publications December 14, 2017

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 czy DoD 5220.22-M, nadpisywania liczbami pseudolosowymi oraz nadpisywania danych zerami.

Spis treści

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ę.

Opis narzędzi

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ć zamazywanie 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

Generalnie program ten służy do sprawdzania dysków pod względem bad sectoró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ą:

  • srm - bezpieczny odpowiednik polecenia rm, usuwa dane (pliki, katalogi) nadpisując je kilkukrotnie losowymi danymi a na koniec usuwa
  • sdmem - służy do czyszczenia zawartości pamięci operacyjnej, która może być odzyskana nawet po wyłączeniu urządzenia
  • sfill - wypełnia całą wolną przestrzeń na wskazanym punkcie montowania (tworzy plik o wielkości równej wolnej pojemności na danym punkcie)
  • sswap - usuwa dane z partycji wymiany (należy wyłączyć partycję wymiany przed wykonywaniem czyszczenia)

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

built with Jekyll and trimstray blog — read the fine print