Jak mogę bezpiecznie usunąć zawartość pamięci USB, aby dane nie mogły zostać odzyskane.

32

Chciałbym wiedzieć, jak usunąć dysk flash USB za pośrednictwem terminala, jeśli to możliwe, aby nie można było odzyskać danych.

użytkownik
źródło
31
Pamięć flash? Roztrzaskaj rzecz, a następnie podważ wszystkie chipy z zielonej płytki drukowanej i zmiksuj je na małe, lśniące, małe kawałki, a następnie kup następną. Fizyczne zniszczenie jest naprawdę jedynym sposobem, aby się upewnić, ponieważ wszystkie poziomy zużycia i tak dalej. W przyszłości użyj szyfrowania całego dysku i zgub klucze | hasło, gdy już go nie chcesz.
Blacklight Shining
1
@BlacklightShining - to jedyna prawdziwa odpowiedź. wiele tanich patyczków również poddaje się recyklingowi.
mikeserv
1
@BlacklightShining Przekształcenie go w plazmę również działa dobrze.
PyRulez
3
Jeśli dla Ciebie ważne jest, że danych nie można odzyskać, jedynym „bezpiecznym” rozwiązaniem jest fizyczne zniszczenie. Jeśli wystarczy, że trudno jest go odzyskać, to naprawdę nie ma potrzeby więcej niż formatowania / zastępowania.
Sobrique
Spal go w ogniu węglowym, upewniając się, że wszystkie części osiągną czerwony ogień.
Ben

Odpowiedzi:

47

TL / DR: Upewnij się, że masz prawidłową nazwę urządzenia, upewnij się, że nie jest zamontowany, i wykonaj tyle losowych nadpisań, ile możesz sobie pozwolić. Możesz śledzić to za pomocą polecenia wymazywania przeznaczonego dla sprzętu flash, jeśli masz dość niedawną dystrybucję. W tych kontrolach zawsze używaj napędu (jak / dev / sd h ), a nie nazwy partycji (która byłaby / dev / sd h1 )

# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#

Teoretycznie nadpisywanie zerem ddjest w porządku. Jednak ze względu na to, jak zbudowane są elementy wewnętrzne dysku flash, jeśli użyjesz jednego przebiegu zastępowania, może być ukrytych kilka warstw danych za rzeczywistymi blokami, które nadal przechowują resztki informacji.

Zazwyczaj część pamięci flash jest uszkodzona i jest oznaczona podczas produkcji. Istnieją również inne bity, które mogą się nie udać (stają się niezmienne, nie do ustawienia lub nie można ich wyczyścić), te części również muszą zostać oznaczone jako wadliwe w trakcie życia. Informacje te są przechowywane w zarezerwowanym miejscu, na tych samych układach co dane. Jest to jeden z kilku powodów, dla których pendrive 4 GB nie wykazuje pojemności 2 ^ 32 bajtów.

Pamięć flash jest również wewnętrznie zorganizowana w większe bloki, czasem znacznie większe niż systemy plików działające na dysku. Typowy rozmiar bloku systemu plików to 4KB, a segmenty pamięci flash, które można usunąć za jednym razem, mogą wynosić od 64 KB do nawet kilku megabajtów. Te duże bloki można usunąć tylko w całości, co resetuje wszystkie bloki do znanego stanu (wszystkie 1 lub wszystkie 0). Następnie zapis danych może zmienić dowolny bit (w razie potrzeby zmień domyślne zera na 0 lub zmień domyślne zera na 1), ale tylko raz . Aby zmienić dowolny bit z powrotem na domyślny, wszystkie segmenty muszą zostać ponownie usunięte!

Tak więc, jeśli chcesz zmienić blok 4KB (system plików jest proszony o zmianę pojedynczego znaku w środku pliku), kontroler flash musiałby odczytać i buforować wszystkie 64 KB starych danych, usunąć je i odpisz nową zawartość. Byłoby to bardzo wolne, usuwanie segmentów jest najwolniejszą operacją. Ponadto segment można usunąć tylko w ograniczonym czasie (typowe są dziesiątki tysięcy), więc jeśli wprowadzisz zbyt wiele zmian w jednym pliku, może to szybko pogorszyć dysk.

Ale nie tak to się robi. Inteligentne kontrolery flash po prostu zapisują nowe dane 4KB w innym miejscu i robią notatkę, aby przekierować odczyty do tej 4KB danych w środku starego bloku. Potrzebują więcej miejsca, abyśmy nie mogli przechowywać tych informacji o przekierowaniach. Próbują również upewnić się, że przechodzą przez wszystkie dostępne segmenty w celu przechowywania danych, co nazywa się wyrównywaniem zużycia .

Oznacza to, że zwykle gdzieś na dysku są wciąż stare dane ! Jeśli właśnie wyczyściłeś wszystkie dostępne bloki, wszystkie ukryte bloki nadal przechowują całkiem nową wersję danych. To, czy jest to dostępne dla osoby atakującej, przed którą chcesz chronić swoje dane, to inna kwestia.

Jeśli masz dość niedawną dystrybucję, a dysk USB jest zaprogramowany tak, aby ujawniał, że jest to dysk flash, blkdiscardmożesz skorzystać z TRIMoperacji leżącej u podstaw , czyli usuwania segmentów, o którym mówiliśmy powyżej. Ma również dodatkową flagę, aby upewnić się, że nawet niewidoczne ukryte dane są całkowicie usuwane przez sprzęt:

# blkdiscard -s /dev/myusbdevice

-s, --secure Dokonaj bezpiecznego odrzucenia. Bezpieczne odrzucanie jest takie samo jak zwykłe odrzucanie, z tą różnicą, że wszystkie kopie odrzuconych bloków, które prawdopodobnie zostały utworzone przez odśmiecanie, również muszą zostać usunięte. Wymaga to wsparcia ze strony urządzenia.

To niekoniecznie zadziała, jak wykazałem powyżej. Jeśli tak Operation not supported, twoje jądro, narzędzia lub układ bramki USB (który pozwala kontrolerowi flash wyglądać jak dysk przez USB) nie obsługuje przekazywania TRIMpoleceń. (Kontroler flash musi nadal być w stanie samodzielnie usuwać segmenty). Jeśli jest obsługiwany przez dostawcę dysku, jest to najbezpieczniejszy sposób.

Innym, mniej bezpiecznym sposobem upewnienia się, że pozwalasz, aby mniej starych danych pozostało gdzieś w pobliżu, jest ich kilkakrotne zastąpienie, jeśli to możliwe, losowymi wartościami.

Dlaczego losowo, pytasz? Wyobraź sobie, że napęd USB stał się zbyt inteligentny i wykrył, że chcesz wyczyścić sektor, i po prostu wprowadził zmianę w mapie bitowej, że ten sektor jest teraz wolny i będzie musiał zostać wyczyszczony później. Ponieważ oznacza to, że może przyspieszyć zapis zer, więc sprawia, że ​​pendrive wydaje się bardziej wydajny, prawda? Trudno powiedzieć, czy dysk to robi.

W najbardziej skrajnym przypadku dysk mógł po prostu zapamiętać, ile wyczyściłeś od początku, a wszystko, co musi przechowywać, to około 4 bajtów informacji, aby to zrobić, i nie usuwaj niczego z danych, które chcesz zniknąć. Wszystko po to, aby mogło wyglądać bardzo szybko.

Jeśli nadpisujesz dane losowymi, nieprzewidywalnymi wartościami, te optymalizacje są niemożliwe. Dlatego dysk musi się upewnić, że dane zostaną zapisane w pamięci flash. Ale nadal nie będziesz w stanie wykluczyć, że niektóre z wcześniej używanych sektorów nadal zawierają niektóre twoje stare dane, ale dysk po prostu nie uznał za ważne, aby je usunąć, ponieważ nie jest normalnie dostępny. Tylko faktyczne TRIMpolecenie może to zagwarantować.

Aby zautomatyzować nadpisywanie losowymi wartościami, możesz rozważyć użycie shred, takich jak:

# shred -vzn88 /dev/myusbdrive

Zastosowane opcje:

  • -v za pokazanie postępu
  • -z do zera w końcowej fazie
  • -n8 oznacza wykonanie 8 losowych przebiegów nadpisywania

Jeśli to możliwe, użyj obu, blkdiscarda shredjeśli blkdiscard -sjest obsługiwany przez dysk, jest to optymalne rozwiązanie, ale nie może zaszkodzić zrobić shredwcześniej, aby wykluczyć błędy oprogramowania układowego.

Aha, i zawsze dwukrotnie sprawdź urządzenie, które próbujesz wyczyścić! dmesg może pomóc zobaczyć, co było ostatnio wstawionym urządzeniem, a także warto sprawdzić nazwę urządzenia, którą zamierzasz wyczyścić ls -al, nawet dla numerów węzłów urządzeń, i dane blkidwyjściowe, aby zobaczyć, jakie partycje mogą być dostępne, których NIE chcę wyczyścić.

Nigdy nie używaj tych poleceń na wewnętrznym dysku, z którego chcesz nadal korzystać - blkdiscarddziała tylko na dyskach półprzewodnikowych, ale nie warto próbować tracić danych!

Mogą istnieć inne sposoby bezpiecznego usuwania danych w miarę postępu technologii.

Innym wspomnianym sposobem jest SECURITY ERASEpolecenie ATA, które można wydać za pomocą hdparmpoleceń. Z mojego doświadczenia wynika, że ​​tak naprawdę nie jest obsługiwany na dyskach flash. Został zaprojektowany z myślą o dyskach twardych dla przedsiębiorstw, a funkcja nie zawsze jest wdrażana w urządzeniach pamięci masowej o najniższych kosztach.

Operacja TRIM/ DISCARDjest znacznie nowsza niż SECURITY ERASEpolecenie i została stworzona w odpowiedzi na funkcje flash, więc ma znacznie większą szansę na implementację, nawet w tanich dyskach USB, ale wciąż nie jest wszechobecna. Jeśli chcesz skasować kartę SD / micro SD w kluczu USB i blkdiscardzgłasza, że ​​nie jest obsługiwana, możesz spróbować użyć innego klucza / czytnika kart i / lub zrobić to na maszynie z bezpośrednim gniazdem SD / MMC .

chexum
źródło
Dziękujemy za najnowsze informacje. blkdiscardjest w Debian Jessie i tylko w dwóch ostatnich wersjach Ubuntu, ale nie w Ubuntu LTS 14.04. blkdiscardzostał dodany do pakietu w util-linuxwersji 2.23.
RobertL
Czy wiesz, jak wypada w blkdiscardporównaniu z hdparmrozwiązaniem w innym komentarzu @zhenech (konkretnie link: ata.wiki.kernel.org/index.php/ATA_Secure_Erase ).
RobertL
Nie jestem pewien, czy tak jest również w przypadku dysków flash, ale może warto przeczytać howtogeek.com/234683/…
hhaslam11
1
@RobertL Equal, w zły sposób. Większość tanich dysków flash nie obsługuje ani funkcji ATA Secure Erase ani TRIM, więc prawdopodobnie obie metody zawiodą.
duskwuff
27

Zdaję sobie sprawę, że tak naprawdę nie jest to odpowiedź na twoje pytanie, ale najprostszym sposobem jest fizyczne zniszczenie napędu (rozbijanie go kilkakrotnie młotkiem zwykle wystarcza, ale rozdrabnianie przemysłowe lub spalanie są również opcjami). Jeśli martwisz się wystarczająco o bezpieczeństwo, aby mieć pewność, że danych nie da się odzyskać, wartość tych danych jest prawdopodobnie wielokrotnie większa niż koszt samego dysku, a metoda fizyczna jest tania i niezawodna.

MPLewis
źródło
5
Jeśli jest to tani, wymienny dysk flash, zdecydowanie wybierz fizyczne zniszczenie. Jeśli używasz młotka, upewnij się, że otrzymałeś właściwy układ pamięci. Kilka tygodni temu otworzyłem stary dysk flash dla zabawy, a większość jego fizycznej objętości to tak naprawdę skrzynia i powietrze.
Blacklight Shining
1
Poza moją odpowiedzią, zgadzam się całkowicie - po prostu trudno jest rozbić je na kawałki za pośrednictwem dostępu ssh :) Biorąc pod uwagę, jak niewiarygodne są te klucze do przechowywania danych, zaskakująco trudno jest pozbyć się tych samych danych.
chexum
Uzgodnione - jeśli ważne jest, aby dane były nie do odzyskania, wówczas fizyczna destrukcja jest jedyną opcją. Spójrzmy prawdzie w oczy, w porównaniu z wartością handlową danych na nim zapisanych, nawet najdroższe dyski prawdopodobnie nie są tak znaczące. Jeśli nie jest to tak ważne, prawie każde czyszczenie / nadpisywanie jest „wystarczająco dobre”.
Sobrique
1
Ta metoda jest nie tylko najskuteczniejsza, ale także najbardziej zabawna. Nigdy nie przegap okazji, by użyć młota i dostać za to zapłatę.
zetetic 13.01.16
2

Prawie wszystkie dostępne funkcje bezpiecznego usuwania zostały zaprojektowane do wirowania nośników magnetycznych, w których komputer zazwyczaj może określić fizyczną lokalizację [1] bloków użytych w pliku i zapisać je na tych samych blokach. Półprzewodnikowe układy kontrolujące pamięć masową wyodrębniają fizyczną lokalizację danych z systemu i lubią je przenosić.

Twoje pytanie naprawdę zależy od tego, kto będzie śledził twoje dane. Jeśli obawiasz się przypadkowej utraty lub przypadkowej kradzieży, zwykły format będzie w porządku. Jeśli obawiasz się, że zostaniesz zaatakowany przez wysoce zmotywowanego, kompetentnego technicznie użytkownika dysponującego znacznymi zasobami [2], po prostu spopiel dysk i wydaj 10 USD na nowy.

  1. tak, istnieje logiczne mapowanie bloków. Ale blok logiczny A zawsze będzie mapowany na blok fizyczny B.

  2. osoba ta otworzy dysk, wyciągnie układ pamięci z karty i odczyta pamięć flash bezpośrednio, omijając kontroler

użytkownik149598
źródło
1

Najprostszym i najszybszym sposobem jaki znam jest zapisywanie zer (0) na całym dysku:

dd if=/dev/zero of=/dev/sdX

gdzie /dev/sdXjest węzeł urządzenia twojej pendrive'a.

Niektórzy sugerują dokładniejszy proces z większą liczbą iteracji i innych wzorców. Dostępne są do tego specjalne narzędzia. Pakiet coreutils GNU zawiera shredpolecenie przeznaczone specjalnie do tego celu. Wiele osób również korzysta badblocks -wz tego pakietu, który jest częścią pakietu e2fsprogs. W FreeBSD shrednarzędzie jest wywoływane gshredi powinno być dostępne w portach /usr/ports/sysutils/coreutilslub /usr/ports/sysutils/fileutils.

RobertL
źródło
To naprawdę nie wystarczy, aby wykonać bezpieczne czyszczenie. Wybrałbym przynajmniej 20 serii zapisów losowych. Najlepsze jest to, że użyłbym narzędzia do bezpiecznego wycierania, np. Niszczenia. Chociaż niektórzy twierdzą, że to nie ma sensu i że zerowanie wystarczy - nie ufałbym temu.
monsune
4
@monsune To tylko miejska legenda. Chociaż wymagają tego niektóre standardy , wydaje się, że nie ma żadnego praktycznego ataku.
Gilles „SO- przestań być zły”
Dyski flash wykorzystują poziomowanie zużycia, aby nie zniszczyć komórek flash zbyt szybko. Wyobraź to sobie: dysk ma 1200 komórek, ale mówi tylko, że ma 1000, a kontroler wybiera, w której komórce faktycznie pisze. Więc po dd skasowałeś 1000 komórek, ale nie 200 w rezerwie, a te mogą być czytelne poprzez podłączenie rzeczywistej pamięci flash do kontrolera bez rezerwy. Sugeruję wykonanie bezpiecznego usuwania po dd, ale nie wszystkie nośniki flash obsługują to.
zhenech
@zhenech, co to jest „bezpieczne usuwanie”?
RobertL