Название: SDelete
Назаначение: Позволяет перезаписать уязвимые данные и очистить свободное пространство от ранее удаленных файлов. Программа соответствует стандартам безопасности министерства обороны США.
Автор: Марк Руссинович (Mark Russinovich)
Site: http://technet.microsoft.com/ru-ru/sysinternals/bb897443.aspx
“Ломать, крушить и рвать на части,
Вот это жизнь, вот это счастье.”
Выходные уничтожали данные, очень важные данные. Ну, по-крайней мере так кто-то думает. Паранойя.
Заодно познакомились в действии с еще одним детищем Марка Руссиновича - это утилита SDelete.
Программа SDelete является реализацией поддержки стандарта очистки данных DOD 5220.22-M, разработанного министерством обороны США. Можно быть уверенным, что файл, удаленный с помощью программы SDelete, восстановлению подлежать не будет. Необходимо иметь в виду, что программа SDelete очищает содержимое, но не удаляет имена очищенных файлов, расположенных в свободном дисковом пространстве.
Ее можно использовать как для удаления существующих файлов, так и для очистки данных, расположенных на свободных участках жесткого диска (включая уже удаленные или зашифрованные файлы).
Программа SDelete выполняется в командной строке и поддерживает ряд параметров. При любом из вариантов использования она позволяет удалить один или несколько файлов или папок или обработать свободное место на логическом разделе. Программа также поддерживает использование символов шаблона в качестве части имен файлов или папок.
-p количество_проходов Количество проходов перезаписи.
-s Рекурсивный обход вложенных папок.
-q Не выводить на экран ошибки (тихий режим).
-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 нет возможности выделения свободного пространства в структурах данных директорий для безопасной очистки этого пространства.