Как можно безопасно удалить содержимое флэш-накопителя, чтобы данные не могли быть восстановлены.


32

Я хотел бы знать, как удалить USB-накопитель через терминал, если это возможно, чтобы данные не могли быть восстановлены.


31
Флешка? Взломайте вещь, оторвите все чипсы от зеленой платы и разбейте их на мелкие кусочки, а затем купите еще одну. Физическое разрушение действительно единственный способ быть уверенным, потому что все выравнивание износа и прочее. В будущем используйте шифрование всего диска и теряйте ключи | пароль, когда вы больше не хотите этого.
Blacklight Shining

1
@ BlacklightShining - это единственный реальный ответ. много дешевых палочек тоже перерабатывается.
mikeserv

1
@ BlacklightShining Превращение в плазму тоже хорошо работает.
PyRulez

3
Если для вас важно, чтобы данные не подлежали восстановлению, единственное «безопасное» решение - это физическое уничтожение. Если этого достаточно, чтобы просто было трудно восстановить, тогда нет необходимости больше, чем форматировать / перезаписывать.
Sobrique

Сожгите это в огне угля, гарантируя, что все части достигают красного высокой температуры.
Бен

Ответы:


47

TL / DR: убедитесь, что вы получили правильное имя устройства, убедитесь, что оно не подключено, и выполните столько случайных перезаписей, сколько можете себе позволить. Вы можете следовать за ней командой erase, предназначенной для флеш-оборудования, если у вас достаточно свежий дистрибутив. В этих проверках всегда используйте диск (например, / dev / sd h ), а не имя раздела (которое будет / 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
#

Теоретически, перезапись с нуля с помощью ddпросто отлично. Однако из-за того, как встроены внутренние устройства флэш-диска, если вы используете один проход перезаписи, может быть несколько слоев данных, скрытых за фактическими блоками, которые все еще хранят оставшуюся информацию.

Как правило, часть флэш-памяти неисправна и помечена во время производства. Есть и другие биты, которые могут пойти не так (стать неизменяемыми, неустановимыми или неустранимыми), эти части также должны быть помечены как неисправные в течение срока службы. Эта информация хранится в зарезервированном месте на тех же чипах, что и ваши данные. Это одна из нескольких причин, по которой флэш-накопитель емкостью 4 ГБ не показывает емкость 2 ^ 32 байта.

Флэш-память также внутренне организована в более крупные блоки, иногда намного больше, чем файловые системы, работающие на диске. Типичный размер блока файловой системы составляет 4 КБ, а сегменты флэш-памяти, которые можно стереть за один раз, могут варьироваться от 64 КБ до даже нескольких мегабайт. Эти большие блоки могут быть стерты только целиком, что приводит к сбросу всего блока в известное состояние (все 1 или все 0). После этого запись данных может изменить любой из битов (при необходимости изменить 1-е значение по умолчанию на 0 или изменить нулевые значения по умолчанию на 1), но только один раз . Чтобы изменить любой из битов обратно на значение по умолчанию, весь сегмент необходимо стереть снова!

Поэтому, когда вы хотите изменить блок размером 4 КБ (файловой системе предлагается изменить один символ в середине файла), контроллеру флэш-памяти потребуется прочитать и буферизовать все 64 КБ старых данных, стереть их все и напишите новое содержание. Это будет очень медленно, удаление сегментов - самая медленная операция. Кроме того, сегмент может быть удален только в течение ограниченного времени (обычно десятки тысяч), поэтому, если вы вносите слишком много изменений в один файл, это может быстро повредить диск.

Но это не так, как это делается. Интеллектуальные контроллеры флэш-памяти просто записывают новые данные объемом 4 КБ в другое место и делают пометки для перенаправления операций чтения на эти 4 КБ данных в середине старого блока. Им нужно больше места, которое мы не можем увидеть, чтобы хранить эту информацию о перенаправлениях. Они также пытаются убедиться, что они проходят все доступные сегменты для хранения данных, это называется выравниванием износа .

Это означает, что обычно старые данные все еще находятся на диске ! Если вы только что очистили все доступные блоки, все скрытые блоки по-прежнему сохраняют последнюю версию данных. Доступно ли это злоумышленнику, от которого вы хотите защитить свои данные, - это другой вопрос.

Если у вас достаточно недавний дистрибутив, а USB-накопитель запрограммирован на выявление того, что это флэш-накопитель, blkdiscardможно использовать базовую TRIMоперацию, а именно стирание сегмента, о котором мы говорили выше. У этого также есть дополнительный флаг, чтобы гарантировать, что даже невидимые скрытые данные полностью удалены аппаратным обеспечением:

# blkdiscard -s /dev/myusbdevice

-s, --secure Выполнить безопасное удаление. Безопасный сброс аналогичен обычному сбросу, за исключением того, что все копии отброшенных блоков, которые, возможно, были созданы сборщиком мусора, также должны быть удалены. Это требует поддержки со стороны устройства.

Это не обязательно будет работать, как я продемонстрировал выше. Если вы получаете Operation not supported, ваше ядро, ваши утилиты или чип USB-шлюза (который позволяет контроллеру флэш-памяти выглядеть как диск через USB) не поддерживает передачу TRIMкоманд. (Контроллер вспышки должен по-прежнему иметь возможность стирать сегменты самостоятельно). Если это поддерживается поставщиком вашего диска, это самый безопасный способ.

Другой, менее безопасный способ убедиться, что вы позволяете меньшему количеству старых данных задерживаться где-то, - это перезаписывать их несколько раз, по возможности случайными значениями.

Вы спрашиваете, почему случайно? Просто представьте, что USB-накопитель был сделан слишком интеллектуальным, и обнаружил, что вы хотите очистить сектор, и просто внес изменения в растровое изображение, что этот сектор теперь свободен, и позже потребуется очистка. Поскольку это означает, что он может ускорить запись нулей, значит, это делает привод, который кажется более эффективным, верно? Трудно сказать, делает ли это ваш диск.

В крайнем случае, накопитель может просто помнить, сколько с самого начала вы очистили, и все, что ему нужно для хранения, - это около 4 байтов информации, чтобы сделать это, и ничего не очистить от данных, которые вы хотите удалить. Все так, чтобы это могло выглядеть очень быстро.

Если вы перезаписываете данные случайными непредсказуемыми значениями, эти оптимизации невозможны. Поэтому накопитель должен убедиться, что данные в конечном итоге хранятся внутри флеш-чипов. Но вы все равно не сможете исключить, что некоторые из ранее использованных секторов все еще были там с некоторыми вашими старыми данными, но накопитель просто не посчитал важным стереть его, поскольку он обычно недоступен. Только фактическая TRIMкоманда может гарантировать это.

Чтобы автоматизировать перезапись со случайными значениями, вы можете захотеть использовать shred, например:

# shred -vzn88 /dev/myusbdrive

Используемые параметры:

  • -v для того, чтобы заставить его показать прогресс
  • -z, чтобы обнулить его в качестве заключительной фазы
  • -n8 - сделать 8 случайных проходов перезаписей

Если возможно, используйте оба, blkdiscardи shred, если blkdiscard -sэто поддерживается вашим приводом, это оптимальное решение, но не повредит сделать shredзаранее, чтобы исключить ошибки прошивки.

О, и всегда дважды проверяйте устройство, которое вы пытаетесь очистить! dmesg может помочь увидеть, какое устройство было установлено последним, а также стоит проверить имя устройства, с которым вы собираетесь очистить ls -al, даже для номеров узлов устройства, и blkidвывод, чтобы увидеть, какие разделы могут быть доступны, которые вы НЕ ДЕЛАЕТЕ. хочу очистить.

Никогда не используйте эти команды на внутреннем диске, который вы хотите продолжать использовать - blkdiscardбудут работать только на твердотельных дисках, но не стоит пытаться потерять данные!

Могут быть и другие способы безопасной очистки данных по мере развития технологий.

Еще один упомянутый способ - это SECURITY ERASEкоманда ATA, которая может быть выполнена с помощью hdparmкоманд. По моему опыту, он не поддерживается на флешках. Он был разработан для корпоративных жестких дисков, и эта функция не всегда реализована в устройствах хранения данных с наименьшими затратами.

Операция TRIM/ DISCARDнамного новее, чем SECURITY ERASEкоманда, и была создана в ответ на функции флэш-памяти, поэтому у нее гораздо больше шансов быть реализованной даже на дешевых USB-накопителях, но она по-прежнему не повсеместна. Если вы хотите стереть SD / micro SD карту в USB-ключ и сообщить, что blkdiscardона не поддерживается, вы можете попробовать другой аппаратный ключ / кардридер и / или сделать это на машине с прямым слотом SD / MMC ,


Спасибо за передовую информацию. blkdiscardнаходится в Debian Jessie и только в двух последних выпусках Ubuntu, но не в Ubuntu LTS 14.04. blkdiscardбыл добавлен в util-linuxверсию пакета 2.23.
RobertL

Знаете ли вы, как blkdiscardсравнивается с hdparmрешением в другом комментарии @zhenech (в частности, ссылка: ata.wiki.kernel.org/index.php/ATA_Secure_Erase ).
RobertL

Не уверен, что это также относится и к флеш-накопителям, но, возможно, стоит прочитать howtogeek.com/234683/…
hhaslam11

1
@RobertL Равно, плохо. Большинство дешевых флеш-накопителей не поддерживают ни ATA Secure Erase, ни TRIM, поэтому оба метода, вероятно, потерпят неудачу.
сумерки

27

Я понимаю, что на самом деле это не ответ на ваш вопрос, но самый простой способ - физически уничтожить диск (разбив его многократно кувалдой, как правило, добьется цели, но промышленное измельчение или сжигание - также варианты). Если вы беспокоитесь о безопасности и хотите убедиться, что данные невозможно восстановить, ценность этих данных, вероятно, во много раз превышает стоимость самого диска, а физический метод дешев и надежен.


5
Если это дешевая, сменная флешка, определенно идите с физическим уничтожением. Если вы используете молоток, убедитесь, что вы получили реальный чип для хранения. Я взломал старую флешку для развлечения пару недель назад, и большая часть ее физического объема на самом деле была корпусом и воздухом.
Blacklight Shining

1
Помимо моего ответа, я полностью согласен - просто сложно разбить их на куски с помощью доступа по ssh :) Учитывая ненадежность этих ключей для хранения данных, удивительно сложно заставить их фактически избавиться от одних и тех же данных.
chexum

Согласитесь - если для вас важно, что данные не подлежат восстановлению, то физическое уничтожение является единственным вариантом. Посмотрим правде в глаза, по сравнению с коммерческой ценностью данных на нем, даже самые дорогие накопители, вероятно, не так уж важны. Если это не так, что важно практически любой протирать / переписывание является «достаточно хорошо».
Sobrique

1
Этот метод не только самый эффективный, но и самый веселый. Никогда не упускайте возможность использовать кувалду и получать за это деньги.
Zetetic

2

Почти все доступные функции безопасного удаления были разработаны для вращения магнитных носителей, где компьютер обычно может определять физическое местоположение [1] блоков, используемых для файла, и записывать поверх этих же блоков. Твердотельные чипы контроллера хранилища абстрагируют физическое местоположение данных от системы и любят перемещать их.

Ваш вопрос действительно зависит от того, кто будет искать ваши данные. Если вы беспокоитесь о случайной потере или случайной краже, тогда подойдет обычный формат. Если вы беспокоитесь о том, чтобы вас преследовал высоко мотивированный, технически компетентный пользователь, обладающий значительными ресурсами [2], просто сожгите диск и потратите 10 долларов на новый.

  1. да, есть логическое отображение блоков. Но логический блок A всегда будет отображаться в физический блок B.

  2. этот человек откроет диск, вытащит чип памяти из карты и прочитает флэш-память напрямую, минуя контроллер


1

Самый простой и быстрый способ, который я знаю, это записать нули (0) на весь диск:

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

где /dev/sdXнаходится узел устройства вашего флэш-накопителя.

Некоторые предлагают более тщательный процесс с большим количеством итераций и других шаблонов. Для этого доступны специальные утилиты. Пакет GNU coreutils содержит shredкоманду специально для этой цели. Многие люди также используют badblocks -w, который является частью пакета e2fsprogs. Во FreeBSD shredутилита вызывается gshredи должна быть доступна либо в портах, /usr/ports/sysutils/coreutilsлибо /usr/ports/sysutils/fileutils.


Этого не достаточно, чтобы сделать безопасную очистку. Я бы выбрал не менее 20 серий записей случайных вещей. Лучше всего я бы использовал инструмент для безопасного вытирания, например, клочья. Хотя некоторые люди говорят, что это не имеет смысла и что обнуления достаточно - я бы не стал этому доверять.
понедельник,

4
@monsune Это просто городская легенда. Хотя некоторые стандарты требуют этого , никакой практической атаки, похоже, нет.
Жиль "ТАК - перестань быть злым"

Флэш-накопители используют выравнивание износа, чтобы не слишком быстро разрушать их. Представьте себе, что это так: накопитель имеет 1200 ячеек, но только говорит, что у него 1000 ячеек, и контроллер выбирает, в какую ячейку он действительно записывает. Таким образом, после дд вы удалили 1000 ячеек, но не 200 в резерве, и их можно было бы прочитать, подключив фактическую флэш-память к контроллеру без резерва. Я бы посоветовал сделать безопасное удаление после dd, но не все флеш-носители поддерживают это.
Женек

@zhenech, что такое "безопасное стирание"?
RobertL


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.