Замітаємо сліди чи як безповоротно видалити дані


Чомусь безповоротне видалення даних часто асоціюється з криміналом. Якщо користувачеві потрібно безповоротно стерти дані з жорсткого диска, він обов'язково порушив закон і хоче, щоб поліція дізналася про його брудних справах. Мабуть, даються взнаки минулі стереотипи на кшталт "А наші люди в булочну на таксі не їздять". Якщо якомусь кримінальному елементу знадобиться видалити дані з жорсткого диска, то це простіше (а головне – швидше) зробити фізичним шляхом – спалити, вбити товстіший цвях або просто кілька разів ударити молотком. Після цього рідкісний жорсткий диск або SSD виживе. Ми ж розглядатимемо мирні кейси – коли потрібно подарувати або продати носій даних (диск, флешку тощо). Оскільки на носії можуть бути персональні дані (наприклад, платіжна інформація), нікому не хочеться, щоб їх використовували з корисливою метою.

Знищення інформації на жорсткому диску

Спосіб знищення інформації залежить від типу пристрою. Зараз ми поговоримо про те, як знищити інфу на класичному жорсткому диску не SSD. Про твердотілі диски (SSD) ми поговоримо далі в цій статті.

Традиційний спосіб знищення даних – форматування. Ось тільки, як показує практика, після форматування дані просто відновити. Особливо якщо використовувалося швидке форматування. Зовсім інша річ – повне форматування.

Якщо на жорсткому диску жодної цінної інформації немає, достатньо кілька разів його відформатувати, використовуючи повне форматування – прапорець Швидке потрібно зняти.


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

Але що робити, якщо спостерігаються напади параної або ж жорсткий диск дійсно містить цінну інформацію, яка не повинна потрапити в чужі руки? І тут потрібно використовувати алгоритми гарантованого знищення інформації.

У США використовувався стандарт DoD 5220.22-M. Стандарт мав на увазі триразовий перезапис диска. При першому проході виконується запис будь-якого символу, потім його XOR-варіанту, а після (третій прохід) – випадкової послідовності. Виходить, що за три проходи кожен байт інформації на жорсткому диску перезаписувався так:

10101010 > 01010101 > 11011100 (останнє значення – випадкове)
Дійсно, раніше такий алгоритм використовувався в державних установах США. Але, мабуть, він не забезпечує належної надійності, оскільки зараз носії фізично розмагнічують або повністю знищують. А DoD 5220.22-M використовується лише для знищення несекретної інформації.

У Канаді використовується утиліта DSX. Утиліта працює так: спочатку перезаписує інфу нулями, а потім – одиницями, після чого записує на диск послідовність даних, в якій закодована інформація про версію утиліти, дату та час знищення інформації.

У Німеччині для знищення несекретних даних (а у нас, ми сподіваємося, саме такі) використовується стандарт BSI VSITR (розшифровку абревіатури ви без проблем знайдете в Інтернеті, якщо вона вам потрібна). Стандарт має на увазі від 2 до 6 проходів, на кожному з яких на диск записується псевдовипадкова послідовність та її XOR-еквівалент. Останнім проходом записується послідовність 01010101.

Який алгоритм вибрати? Для всіх сучасних жорстких дисків для остаточного видалення інформації достатньо один раз перезаписати їх псевдовипадковою послідовністю, все що більше робиться виключно для самозаспокоєння і ніяк не впливає на результат.

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

Додатків для безпечного видалення досить багато – [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, але які не очищені фізично. Тут усе залежить від типу контролера. Існують три типи контролерів, точніше три алгоритми роботи контролерів:

  1. Non-deterministic trim – контролер може повернути фактичні дані, нулі чи ще щось, причому результат може відрізнятися між спробами. За першої спроби це може бути нулі, за другий – одиниці, за третьої – фактичні дані.
  2. Deterministic trim (DRAT) – контролер повертає те саме значення (найчастіше нулі) для всіх осередків після команди Trim.
  3. 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


Команда 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 в плани не входить, тоді потрібно заздалегідь відформатувати диск і чекати деякий час (в надії часу вистачить), поки контролер очистить комірки пам'яті.