Програма SDelete
Автор: Марк українінович (Mark Russinovich)
Єдиним способом переконатися, що видалені або зашифровані за допомогою EFS файли неможливо відновити, використання програм для безпечного видалення файлів. Такі програми за допомогою наведених нижче методик перезаписують ділянки диска, на яких розміщені видалені файли. Таким чином, навіть при використанні технологій відновлення, при яких здійснюється зчитування даних безпосередньо з магнітних носіїв, відновити видалені файли неможливо. Одним з таких програм є програмаSDelete(Secure Delete). Її можна використовувати як для видалення існуючих файлів, так і для очищення даних, розташованих на вільних ділянках жорсткого диска (включаючи віддалені або зашифровані файли). Програма SDelete є реалізацією підтримки стандарту очищення даних DOD 5220.22-M, розробленого міністерством оборони США. Можна бути впевненим, що файл, віддалений за допомогою програми SDelete, не підлягатиме відновленню. Необхідно мати на увазі, що програмаSDeleteочищає вміст, але не видаляє імена очищених файлів, розміщених у вільному дисковому просторі.
Програма SDelete працює в операційних системах Windows 95, 98, NT 4.0 та Windows 2000.
Використання програми SDelete
ПрограмаSDeleteвиконується у командному рядку та підтримує ряд параметрів. За будь-якого з варіантів використання вона дозволяє видалити один або кілька файлів або папок або обробити вільне місце на логічному розділі. Програма також підтримує використання символів шаблону як частину імен файлів чи папок.
Синтаксис: sdelete [-p кількість_проходів] [-s] [-q]sdelete [-pкількість_проходів] -z [буква диска]
Кількість проходів перезапису.
Рекурсивний обхід вкладених папок.
Не відображати помилки (тихий режим).
Здійснити очищення вільного місця.
Принцип роботи програми SDelete
Безпечне видалення файлу, у якого відсутні спеціальні атрибути, є досить очевидним завданням. Програма просто перезаписує вміст файлу спеціальною послідовністю символів для безпечного видалення. Більш складним моментом є безпечне видалення стислих, зашифрованих та фрагментованих файлів, а також очищення вільного дискового простору.
Стиснені, зашифровані та фрагментовані файли обробляються файловою системою NTFS блоками по 16 кластерів. Якщо програма записує існуючий файл, NTFS виділяє місце на диску для збереження нових даних, і після їх запису звільняє відповідні кластери, раніше закріплені за файлом. Такий обережний підхід використовується в цій файловій системі для забезпечення цілісності даних, і у випадках, коли новий стислий або фрагментований файл більший за старий. Таким чином, перезапис такого файлу не забезпечить видалення вмісту файлу з диска.
Для роботи з такими файлами програмаSDeleteвикористовує API-інтерфейс дефрагментації. За допомогою цього інтерфейсу вона визначає, в яких кластерах розташовані дані, відповідні цим стиснутим, фрагментованим або зашифрованим файлам. Після встановлення можна переписати вміст кластерів за допомогою прямого доступу до диска.
Очищення вільного місця також є непростим завданням. Так як файлові системи FAT і NTFS не надають можливості програм безпосередньо звертатися до вільного дискового простору,У програмиSDeleteє два можливі варіанти дій. Перший - перезапис кластерів, що містяться у вільному дисковому просторі, за допомогою прямого доступу до диска, аналогічно ситуації зі стислими, фрагментованими та зашифрованими файлами. Але цей підхід має один істотний недолік. Навіть якщо забезпечити у програміSDeleteповноцінну підтримку підрахунку вільного дискового простору на розділах NTFS і FAT (що само по собі нетривіально), існує ризик конфлікту з поточними файловими операціями, які відбуваються в системі під час роботиSDelete. Нескладно уявити ситуацію, коли програмаSDeleteвизначить, що кластер вільний, тоді як драйвер файлової системи (FAT або NTFS) виділить цей кластер для файлу, який на даний момент змінюється будь-яким працюючим додатком. Драйвер файлової системи записує нові дані в цей кластер, а потім вміст цього кластера переписується програмоюSDelete, завдяки чому нові дані, записані у файл, будуть втрачені. Ще більш небезпечна ситуація, коли кластер, що очищається, був виділений для системних метаданих, тому що в цьому випадку будуть пошкоджені системні структури даних, що зберігаються на диску.
Другий підхід, який і використовується в програміSDelete, полягає у непрямому перезаписі вільного простору. Спочатку програма виділяє файл найбільшого можливого розміру. Для цього використовується некешуюча операція вводу-виводу, щоб вміст кешу файлової системи Windows NT не був очищений і заповнений марними даними, пов'язаними з виділеним файлом. Некешуючі операції введення-виведення повинні вирівнюватися по межі секторів (512 байт), тому частина дискового простору залишиться вільним, навіть якщо розмір файлу, що виділяється.максимально можливе. Щоб зайняти вільний простір, що залишився, програмаSDeleteвиділяє файл максимально можливого розміру вже за допомогою кешуючих операцій введення-виведення. Для обох виділених файлів здійснюється перезапис даних, завдяки чому раніше вільний дисковий простір стає безпечно очищеним.
У разі розділів NTFS робота програмиSDeleteне вичерпується перезаписом цих двох файлів. Програма також заповнює всі існуючі вільні ділянки таблиці NTFS MFT (головної файлової таблиці) файлами, які розміщуються за розміром запису цієї таблиці. Зазвичай розмір запису таблиці MFT становить 1 КБ. Кожному файлу чи папці на диску потрібно щонайменше один запис таблиці MFT. Маленькі файли повністю зберігаються всередині своїх записів таблиці MFT, тоді як файли, які містяться у запис таблиці MFT, розташовуються у виділених кластерах поза таблиці. ПрограміSDeleteзалишається лише виділити файл максимально можливого розміру, те щоб цей файл зайняв весь вільний простір у записах таблиці MFT. Драйвер NTFS не дозволить файлу розширитися ще більше, тому що на диску більше не залишиться вільних кластерів (усі вільні кластери зайняті двома виділеними на попередньому етапі файлами). Потім процес повторюється. Коли програмаSDeleteвже не може створити на диску новий файл, вона визначає, що всі вільні записи таблиці MFT тепер повністю заповнені безпечно перезаписаними файлами.
Для перезапису імен файлів, що видаляються, програмаSDeleteперейменовує файл 26 разів поспіль, кожного разу замінюючи кожен символ імені файлу наступним за алфавітом символом. Наприклад, перше ім'я файлу foo.txt було б AAA.AAA.
Причина, через яку програма не видаляєімена файлів у процесі очищення вільного простору, полягає у необхідності прямого управління структурами даних папок. У цих структурах може бути вільніше простір, у якому містяться імена віддалених файлів, але це вільне місце не виділяється для файлів. Таким чином, програмаSDeleteне має можливості виділення вільного простору в структурах даних директорій для безпечного очищення цього простору.