Ques/Help/Req Воскрешению подлежит! Восстанавливаем файлы в NTFS с использованием PowerShell

XakeR

Member
Регистрация
13.05.2006
Сообщения
1 912
Реакции
0
Баллы
16
Местоположение
Ukraine
Существует множество способов вернуть утраченные или удаленные с накопителей файлы. В статье мы с тобой освежим в памяти теоретические основы восстановления удаленной информации в файловой системе NTFS v3.1 и подробно рассмотрим практический способ ручного восстановления файлов с использованием PowerShell.

info​


Хочу отдать должное Крису Касперски за его труды на эту тему и подробное описание теории и практики в книге «Восстановление данных. Практическое руководство», а заодно поблагодарить Валентина Холмогорова и Ксению Кирилову за обновление и переиздание книги в 2021 году.

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



Теория​


Подробно рассматривать структуру NTFS я не вижу смысла, описание можно найти в книге Криса «Восстановление данных. Практическое руководство» и статье «Файловая система NTFS извне и изнутри» (в двух частях). Однако, чтобы наши действия при восстановлении файлов были осмысленными, нам все же придется освежить в памяти некоторые ключевые особенности файловой системы NTFS 3.1, а заодно вспомнить, как хранятся и удаляются файлы.

warning​


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

В файловой системе NTFS работает принцип «все есть файл». Файл же имеет определенный набор атрибутов. Мы не будем разбирать все атрибуты файлов, затронем только самые важные: $STANDARD_INFO, $FILE_NAME, $DATA.

В атрибутах $STANDARD_INFO и $FILE_NAME записаны метки времени, подробнее о них мы поговорим позже, а в атрибуте $DATA хранится содержимое резидентного файла. В случае с нерезидентными файлами там располагаются «ссылки» на разбросанное по секторам содержимое файла, называемое data runs или отрезками. Отрезки представляют собой последовательность кластеров, которые хранят содержимое нерезидентного файла, а в качестве упомянутых «ссылок» в атрибуте $DATA используется номер начального кластера и количество идущих следом кластеров. Как видишь, математика простая: если файл нерезидентный (больше 720 байт), нам нужно найти кластер, с которого он начинается, и собрать все кластеры воедино в верном порядке, а после записать содержимое кластеров в новый файл.

Все файловые атрибуты хранятся в файловой записи (File Record) таблицы Master File Table ($mft). Это наиважнейший служебный файл (оттого он имеет резервную копию $mftmirr), так как содержит в себе информацию обо всех файлах и директориях на томе. Имея на руках только файл $mft, можно выстроить хронологию связанных с файлами событий, а в некоторых случаях — восстановить файлы.

Еще один важный служебный файл — карта свободного пространства $BitMap. С ее помощью отслеживаются все используемые и неиспользуемые кластеры, что, конечно же, напрямую связано с созданием и удалением файлов или директорий. Кластер же в NTFS — минимальная единица дискового пространства, доступного для размещения файлов и директорий в файловой системе NTFS. По умолчанию размер кластера равен 4096 Kбайт, но при создании тома можно задать иной размер.

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



Резидентные и нерезидентные файлы атрибуты​


Некоторые материалы, посвященные файловой системе NTFS v3.1, упоминают о резидентных и нерезидентных файлах. Резидентными файлами считаются те, размер которых меньше или равен 720 байт (это количество байтов было получено исключительно опытным путем в NTFS v3.1 в Windows 10, хотя в других источниках читатель может найти иную информацию о максимальном размере резидентного файла: он варьируется от 700 байт до 1 Кбайт). Такие файлы хранят все содержимое в $mft (Master File Table), и в этом случае флаг нерезидентности (Non-resident flag) у них равен 00h. Для нерезидентных файлов (строго больше 720 байт) флаг Non-resident flag равен 01h.

На самом деле флаг резидентности присущ каждому атрибуту файла в отдельности (в том числе $FN, $SI и другим атрибутам), а не самому файлу как таковому. Несмотря на наличие такого флага у каждого атрибута, существуют исключительно резидентные атрибуты, которые хранят свои данные только в файле $mft (например, $FILE_NAME, $STANDARD_INFO, $VOLUME_NAME). Есть атрибуты, которые могут быть как резидентными, так и нерезидентными (это справедливо по отношению к атрибутам $DATA, $EA и другим). Наконец, существуют файловые атрибуты, которые хранят свои данные исключительно за пределами $mft, то есть являются строго нерезидентными ($BITMAP, $REPARSE_POINT, $SECURITY_DESCRIPTOR и прочие).



При создании файла на томе, перемещении между томами и практически любых манипуляциях с файлами (переименование, локальное перемещение, доступ внутри одного тома, изменение) у файла изменяются атрибуты $STANDARD_INFO (далее — $SI) и $FILE_NAME (далее — $FN). В них указано время, когда произошло действие с файлом.

В следующих таблицах показано, какие атрибуты файлов $SI и $FN меняются и при каких действиях с файлом.

Изменение атрибута $FILE_NAMEИзменение атрибута $STANDARD_INFO

Здесь:

  • Modification (изменение атрибутов $Data и $INDEX);
  • Accessed (обращение к содержимому файла);
  • Change MFT (запись в таблицу MFT — не отображается в Windows);
  • BornTime (или birthday of file — создание файла).

Важно, что при удалении через del или erase атрибуты $FILE_NAME и $STANDARD_INFO не изменяются.

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



Восстановление файлов, удаленных с использованием del или erase​


Настало время приступить к практической части, чтобы закрепить теорию и поупражняться в восстановлении удаленных файлов. Но для начала следует выделить два способа удаления файлов в Windows:

  • удаление c использованием системных утилит del (Shift-Del) или erase;
  • удаление через корзину.

Такое разделение связано с разницей в механизме удаления и некотором отличии при восстановлении файлов.

warning​


Никогда не восстанавливай удаленные файлы на тот же том, с которого они были удалены. Лучше всего использовать отдельный носитель.

В первую очередь разберемся с восстановлением нерезидентных файлов, а дальше посмотрим, как восстанавливать резидентные. Итак, практиковаться мы будем с использованием PowerShell-модуля PowerForensics авторства Джареда Эткинсона. Этот модуль прост в установке и содержит полезные командлеты для работы с файловыми системами NTFS и FAT. Он позволяет работать с системными файлами Windows и парсить атрибуты файлов NTFS, конвертировать метки времени из байтового представления в человеко‑читаемое (что необходимо в форензике). Подробнее узнать о возможностях модуля можно из его описания.

Для начала установим этот модуль (нужно запускать PowerShell от имени администратора, поскольку при чтении служебных файлов требуются привилегии локального администратора):

Import-Module PowerForensics

Проверим, что все прошло успешно, для этого выполним командлет

Get-Command — Module PowerForensics Установка модуля PowerForensics

Установка модуля завершена, теперь давай найдем все удаленные файлы на томе. В главной файловой таблице они имеют флаг удаления 00h по смещению 16 байт от начала файловой записи.

Как уже было сказано в теоретической части, в Windows постоянно происходят изменения, какие‑то файлы удаляются, а какие‑то, наоборот, создаются (например, начиная с Windows 8 количество файлов Prefetch ограничено 1024, поэтому старые удаляются системой, а новые создаются при запуске исполняемых файлов).

Для чистоты эксперимента создадим том F (запускаем diskmgmt.msc, затем сжимаем имеющийся том и отдаем для нового 5 Гбайт с дефолтным размером кластера 4096 Кбайт). Поместим туда файл (в роли подопытного будет выступать калькулятор, но читатель может использовать любой другой файл) calc.exe и удалим его через erase (то же самое будет при удалении через del или Shift-Del).

Теперь для поиска удаленного файла на томе F воспользуемся командлетом Get-ForensicsFileRecord и отфильтруем вывод по флагу True для атрибута Deleted:

Get-ForensicFileRecord -VolumeName F: | Where-Object {$_.Deleted}Получение удаленных файлов на томе F

Присоединяйся к сообществу «Xakep.ru»!​


Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

-60%

1 year​


9990 рублей 4000 р.


[TD]

1 month_r​


920 р.
[/TD]

Я уже участник «Xakep.ru»
 
198 175Темы
635 146Сообщения
3 618 415Пользователи
еу4уууеууеНовый пользователь
Верх