Программа SDelete (версия 1.6.1)

Автор: Марк Руссинович (Mark Russinovich)

Опубликовано 11 января 2013 г.

Введение

Одной из возможностей ОС Windows NT и 2000, которые обеспечивают соответствие системы классу C2 критериев оценки доверенных компьютерных систем, является защита от повторного использования объектов. Это означает, что при выделении приложению участка дискового пространства или виртуальной памяти, ему не доступны для просмотра ранее хранившиеся в выделенном участке данные. Перед предоставлением приложению запрошенных ресурсов ОС Windows NT производит очистку выделяемой памяти или секторов диска, заполняя эти участки нулевыми значениями. Тем не менее, такая защита не предполагает очистку участка диска в момент удаления файла. Очистка не производится, потому что ОС Windows NT и 2000 разрабатывались с предположением, что контроль доступа к системным ресурсам осуществляет операционная система. Если же операционная система неактивна, можно воспользоваться дисковыми редакторами или инструментами для восстановления данных, и с их помощью просмотреть или восстановить данные, удаленные операционной системой. Даже если зашифровать файлы с помощью шифрованной файловой системы EFS в Windows 2000, исходные незашифрованные данные остаются на диске после создания зашифрованной версии файла.

Единственным способом удостовериться, что удаленные или зашифрованные с помощью 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 [буква диска]

-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 нет возможности выделения свободного пространства в структурах данных директорий для безопасной очистки этого пространства.

Загрузить программу SDelete (81 КБ)


К началу страницы К началу страницы