Заметаем следы или как безвозвратно удалить данные

21 Декабря 2018

Почему-то безвозвратное удаление данных часто ассоциируется с криминалом. Если пользователю нужно безвозвратно стереть данные с жесткого диска, то он обязательно нарушил закон и не хочет, чтоб полиция узнала о его грязных делишках. Видимо, сказываются прошлые стереотипы вроде «А наши люди в булочную на такси не ездят». Если какому-нибудь криминального элементу понадобится удалить данные с жесткого диска, то ему это проще (а главное — быстрее) сделать физическим путем — сжечь, вбить гвоздь потолще или просто несколько раз ударить молотком. После такого редкий жесткий диск или SSD выживет. Мы же будем рассматривать мирные кейсы — когда нужно подарить или продать носитель данных (диск, флешку и т. д.). Поскольку на носителе могут быть персональные данные (например, платежная информация), никому не хочется, чтобы их использовали в корыстных целях.

Уничтожение информации на жестком диске

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

Традиционный способ уничтожения данных — форматирование. Вот только, как показывает практика, после форматирования данные относительно просто восстановить. Особенно, если использовалось быстрое форматирование. Совсем другое дело — полное форматирование.

Если на жестком диске никакой ценной информации нет, достаточно несколько раз его отформатировать, используя полное форматирование — флажок Быстрое нужно снять.

1.png

Полное форматирование диска

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

В США использовался стандарт DoD 5220.22-M. Стандарт подразумевал трехкратную перезапись диска. При первом проходе выполняется запись любого символа, затем — его XOR-варианта, а после (третий проход) — случайной последовательности. Получается, что за три прохода каждый байт информации на жестком диске перезаписывался так:

10101010 > 01010101 > 11011100 (последнее значение — случайное)

Действительно, раньше такой алгоритм использовался в государственных учреждениях США. Но, видимо, он не обеспечивает должной надежности, поскольку сейчас носители физически размагничивают или даже полностью уничтожают. А DoD 5220.22-M используется только для уничтожения несекретной информации.

В Канаде используется утилита DSX. Утилита работает так: сначала перезаписывает инфу нулями, а потом — единицами, после чего записывает на диск последовательность данных, в которой закодирована информация о версии утилите, дате и времени уничтожения информации.

В Германии для уничтожения несекретных данных (а у нас, мы надеемся, именно такие) используется стандарт BSI VSITR (расшифровку аббревиатуры вы без проблем найдете в Интернете, если она вам нужна). Стандарт подразумевает от 2 до 6 проходов, на каждом из которых на диск записывается псевдослучайная последовательность и ее XOR-эквивалент. Последним проходом записывается последовательность 01010101.

Какой алгоритм выбрать? Для всех современных жесткий дисков для окончательного удаления информации достаточно один раз перезаписать их псевдослучайной последовательностью, все что более — делается исключительно для самоуспокоения и никак не влияет на результат.

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Приложения для безопасного удаления данных с жестких дисков

Приложений для безопасного удаления достаточно много — Secure Erase, DBAN и т. д. Выбор утилиты зависит от предпочтений пользователя. Мы рекомендуем выбирать только OpenSource-утилиты, исходный код которых доступен. Важно, чтобы утилита выполняла именно удаление, а не шифрование информации.

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

Приложение DBAN является как раз OpenSource — его исходный код доступен всем желающим и настоящие параноики могут даже откомпилировать его из исходников, чтобы быть уверенными в том, что утилита действительно делает то, что нужно.

Впрочем, можно обойтись и без всяких утилит. Для этого достаточно зашифровать диск с помощью BitLocker. А после этого — отформатировать диск быстрым форматированием (для дополнительной надежности можно использовать полное). При форматировании томов BitLocker (даже при быстром) уничтожается и криптографический ключ, что делает невозможным восстановление информации. Так что BitLocker можно использовать не только для шифрования данных, но и как способ быстрого и безвозвратного их удаления.

Важно только, чтобы не нашлась копия ключа. Нужно убедиться, что ключ не загружается в облако OneDrive. При использовании учетной записи Microsoft проверить наличие дополнительных ключей можно по ссылке.

Удаление информации с SSD

Безвозвратно удалить данные с SSD сложнее, чем с обычного жесткого диска. Чтобы удалить ее действительно надежно, нужно понимать, как происходит удаление информации с SSD.

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

Чтобы записать данные в ячейку, контроллер SSD должен сначала стереть данные в этой ячейке, а затем уже записывать новые. Поскольку сей процесс не очень быстрый, производители SSD разработали ряд оптимизационных алгоритмов, благодаря которым в распоряжении контроллера всегда есть нужное количество пустых ячеек, то есть в большинстве случаев при записи информации на SSD она записывается в чистую, а не уже использованную ячейку. Именно поэтому когда SSD диск новый и пустой, он работает быстрее, чем когда уже на нем есть информация и чем больше информации на SSD, тем медленнее он работает.

Что случится, если ОС захочет записать данные в ячейку с определенным адресом, но по этому адресу уже есть какие-то данные? Тогда контроллер SSD выполнит подмену адресов: нужный адрес будет назначен другой — пустой ячейке, а занятый блок или получит другой адрес или уйдет в неадресуемый пул для последующей фоновой очистки.

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

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

Самое интересное, что в результате работы Trim сама ОС не перезаписывает эти блоки, то есть не стирает информацию физически. Она просто передает информацию контроллеру SSD, с этого момента начинается фоновый процесс (или может начаться — все решает контроллер) удаления информации.

Что случится, если злоумышленник попытается считать данные из ячеек, на которые поступила команда Trim, но которые не очищены физически. Тут все зависит от типа контроллера. Существуют три типа контроллеров, точнее три алгоритма работы контроллеров:

  • Non-deterministic trim — контроллер может вернуть фактические данные, нули или еще что-то, причем результат может отличаться между попытками. При первой попытке это могут быть нули, при второй — единицы, при третьей — фактические данные.
  • Deterministic trim (DRAT) — контроллер возвращает одно и то же значение (чаще всего нули) для всех ячеек после команды Trim.
  • Deterministic Read Zero after Trim (DZAT) — гарантированное возвращение нулей после Trim.

Узнать тип контроллера в Linux можно так:

$ sudo hdparm -I /dev/sda | grep -i trim
* Data Set Management TRIM supported (limit 1 block)
* Deterministic read data after TRIM

Контроллеры первого типа сейчас практически не встречаются. Ранее подобным поведением отличались накопители стандарта eMMC. На данный момент они практически все успешно вымерли, как мамонты. Как правило, на обычных ПК сегодня используется диски второго типа, третий тип используется только на дисках, предназначенных для работы в составе многодисковых массивов.

Казалось бы все просто. Если у нас есть контроллер даже со вторым типом Trim, то для ячейки, помеченной на удаление, мы гарантировано получим нули. Но не тут то было.

А Trim вообще включен и поддерживается ОС? Поддержка Trim есть только в Windows 7 и более новых ОС. Но только при соблюдении ряда условий. Первое условие — диск должен быть подключен напрямую по SATA/NVME, для USB-накопителей Trim не поддерживается (бывают приятные исключения, но это исключения). Второе — Trim поддерживается только для NTFS-томов. Третий момент — Trim должны поддерживать, как драйверы диска/контроллера, так и BIOS.

Проверить работоспособность trim в Windows можно с помощью команды:

fsutil behavior query DisableDeleteNotify

2.png

Команда fsutil

Значение 0 (см. рис. 2) означает, что trim включен и работает корректно. Значение 1 — trim выключен. Для USB-дисков с большей вероятностью Trim будет выключен.

Остановить процесс сборки мусора невозможно. Если на SSD-диск подается питание, то контроллер будет продолжать уничтожать данные после Trim. Но если анные очень ценные, то можно извлечь из накопителя чипы памяти и с помощью специального оборудования — считать их. Да, это сложно, да, из-за фрагментации данных — очень сложно, но такую задачу решить все же можно.

Если подытожить, то с SSD ситуация складывается следующим образом:

  1. Примерно 10% (в некоторых накопителях — чуть меньше) емкости SSD отводится под резервный неадресуемый пул. В теории ячейки этого пула должны очищаться, но на практике это происходит не всегда из-за многочисленных особенностей реализации и банальных ошибок в прошивке данные из этого пула можно достать.
  2. Мгновенно удалить данные с SSD с включенным Trim можно путем форматирования раздела как NTFS: trim пометит блоки как неиспользуемые, а контроллер постепенно удалит информацию из них.
  3. Если все прошло правильно, восстановить информацию будет невозможно. Даже если подключить SSD к другому компьютеру или специальному стенду, контроллер продолжит затирать инфу.
  4. Если же из SSD извлечь микросхемы, то данные можно будет считать.

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

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent