Как найти файл в ntfs

Обновлено: 06.07.2024

В предыдущей статье мы описали алгоритм работы программ по восстановлению данных, работающих на дисках, использующих файловую систему FAT . Сегодня мы расскажем о том, как работает восстановление удалённых файлов с дисками, отформатированными в файловой системе NTFS .

Что такое NTFS

Файловая система NTFS была разработанная компанией Microsoft с чистого листа для использования в новой операционной системе Windows NT. NTFS должна была заменить собой устаревшую на тот момент файловую систему FAT, многочисленные ограничения которой не позволяли организовать работу в действительно многопользовательской и многозадачной системе.

Разработчики NTFS поставили цель спроектировать надёжную, безопасную, расширяемую и отказоустойчивую файловую систему для HDD-дисков. Им это прекрасно удалось: файловая система получилась на редкость удачной, однако у нее есть как сильные, так и слабые стороны в сравнение с FAT .

Все данные – файлы

В файловой системе FAT ни одну часть данных нельзя было назвать «файлом» в полном смысле этого слова. Концепция NTFS была полностью переработана. В архитектуре NTFS все данные, включая служебные структуры самой файловой системы, универсально представлены в виде файлов. Более того: в NTFS даже сама файловая система представлена в виде отдельных файлов!

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

При необходимости эти файлы могут менять свой размер (в частности, файловые таблицы заметно «распухают» при хранении на томе большого числа файлов), при этом системой используются стандартные механизмы, предусмотренные для работы с файлами. Если не будет непрерывного участка для хранения данных файловой системы – ничего страшного: файл будет фрагментирован (сохранён в виде нескольких фрагментов в разных частях диска).

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

Файловая таблица MFT

NTFS хранит информацию о файлах и каталогах в главной файловой таблице MFT. Эта таблица содержит информацию обо всех файлах и каталогах. Каждому файлу или каталогу соответствует как минимум одна запись. Формат записей MFT исключительно прост. Размер записи составляет 1 КБ, при этом первые 42 байта заголовка имеют жёстко заданное предназначение. Остальное пространство используется для хранения атрибутов – например, имени файла и системных атрибутов. Уникальной является возможность сохранения небольших файлов непосредственно в MFT. В этом случае файл хранится в виде атрибута.

Рис. 1. Структура записи MFT, включающая заголовок и три атрибута.

Формат записи MFT

Формально размер записи MFT определяется переменной в загрузочном секторе. Однако все существующие версии Microsoft Windows используют записи размером 1024 байт. В начале записи расположен заголовок размером 42 байта, который содержит 12 полей. Остальные 982 байта не имеют фиксированной структуры и используются для хранения атрибутов.

Формат записи MFT чрезвычайно прост и очень удобен как для быстрой работы операционной системы, так и для поиска удалённых файлов. Фактически запись MFT представляет с собой небольшую ячейку, позволяющую положить в неё всё, что угодно – но в пределах её размера (982 байта). Начало записи зарезервировано для «этикетки», позволяющей корректно идентифицировать и адресовать ячейку.

Адреса записей MFT

Записи MFT пронумерованы. Каждой записи соответствует 16-разрядный порядковый номер. При создании новой записи этот номер автоматически увеличивается.

К примеру, рассмотрим запись MFT 313 с порядковым номером 1. При удалении файла, которому была выделена эта запись, и выделении записи другому файлу записи MTF будет выделен новый порядковый номер 2.

Адрес файла формируется следующим образом. Адрес записи MFT объединяется с порядковым номером, занимающим старшие 16 бит. Таким образом формируется уникальный 64-разрядный базовый адрес файла.

Рис. 2. Базовый адрес файла формируется объединением адреса записи MFT и её порядкового номера.

Для обращения к записям MFT в файловой системе NTFS используется порядковый номер записи. Использование уникального порядкового номера записи предоставляет и дополнительное удобство: оно упрощает выявление повреждений файловой системы. К примеру, если сбой происходит на этапе выделения структур данных для нового файла, то по порядковому номеру записи MFT можно будет определить, какому файлу принадлежит данная запись – новому или предыдущему. Соответственно, порядковый номер используют программы для восстановления данных NTFS .

Атрибуты записей MFT

NTFS – уникальная файловая система, не имеющая, в отличие от FAT, жёстко заданной структуры записей. Каждая запись MFT минимально структурирована. Есть заголовок, и есть место для хранения разнообразных атрибутов. Причём атрибутом может быть практически всё, что угодно – дата, время, имя файла и так далее – вплоть до собственно содержимого файла!

Атрибуты могут хранить самую разнообразную информацию. Понятно, что разные типы информации могут быть записаны в разных форматах и занимать больше или меньше места в записи.

Рис. 3. Пример записи MFT с заголовком записи, двумя атрибутами и неиспользуемой областью.

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

В статье « Алгоритм восстановления данных с раздела NTFS » мы рассмотрим процесс поиска и восстановления удаленного файла.

Object Id

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

Речь пойдёт о точках повторной обработки (reparse points), идентификаторах объектов (object id) и о других типах данных, которые может содержать файл помимо своего основного содержимого.

Object Id

Идентификатор объекта это 64 байта, которые можно прикрепить к файлу или каталогу. Из них первые 16 байт позволяют однозначно идентифицировать файл в пределах тома и обращаться к нему не по имени, а по идентификатору. Остальные 48 байт могут содержать произвольные данные.

Идентификаторы объектов существуют в NTFS со времён Windows 2000. В самой системе они используются для отслеживания расположения файла, на который ссылается ярлык (.lnk). Допустим, файл, на который ссылается ярлык, был перемещён в пределах тома. При запуске ярлыка он всё равно откроется. Специальная служба Windows в случае, если файл не найден, произведёт попытку открыть файл не по его имени, а по заранее созданному и сохранённому идентификатору. Если файл не был удалён и не покидал пределы тома, он откроется, а ярлык снова будет указывать на файл.

Идентификаторы объектов использовались в технологии iSwift Антивируса Касперского 7-ой версии. Вот как описана эта технология: Технология разработана для файловой системы NTFS. В этой системе каждому объекту присваевается NTFS-индентификатор. Этот индентификатор сравнивается с значениями специальной базы данных iSwift. Если значения базы данных с NTFS-индентификатором не совпадают, то объект проверяется или перепроверяется, если он был изменен.

Впрочем, переизбыток созданных идентификаторов вызывал проблемы со сканированием диска стандартной утилитой проверки chkdsk, она происходила слишком долго. В следующих версиях Антивируса Касперского отказались от использования NTFS Object Id.

Reparse Point

Символьная ссылка изнутри

В файловой системе NTFS файл или каталог может содержать в себе reparse point, что переводится на русский язык как «точка повторной обработки». В файл или каталог добавляются специальные данные, файл перестаёт быть обычным файлом и обработать его может только специальный драйвер фильтра файловой системы.

В Windows присутствуют типы reparse point, которые могут быть обработаны самой системой. Например, через точки повторной обработки в Windows реализуются символьные ссылки (symlink) и соединения (junction point), а также точки монтирования томов в каталог (mount points).
Reparse-буфер, присоединяемый к файлу это буфер, имеющий максимальный размер 16 килобайт. Он характеризуется наличием тега, который говорит системе о том, к какому типу принадлежит точка повторной обработки. При использовании reparse-буфера собственного типа ещё необходимо задавать в нём GUID в специальном поле, а в reparse-буферах Microsoft он может отсутствовать.

Какие типы точек повторной обработки существуют? Перечислю технологии, в которых используются reparse point'ы. Это Single Instance Storage (SIS) и Cluster Shared Volumes в Windows Storage Server 2008 R2, Hierarchical Storage Management, Distributed File System (DFS), Windows Home Server Drive Extender. Это технологии Microsoft, здесь не упомянуты технологии сторонних компаний, использующие точки повторной обработки, хотя такие тоже есть.

Extended Attributes

Расширенные атрибуты файла. Про них был мой предыдущий топик. Здесь стоит упомянуть только то, что под Windows эта технология практически не применяется. Из известного мне программного обеспечения только Cygwin использует расширенные атрибуты для хранения POSIX прав доступа. У одного файла на NTFS могут быть или расширенные атрибуты, или буфер точки повторной обработки. Одновременная установка и того и другого невозможна. Максимальный размер всех расширенных атрибутов у одного файла составляет 64 Кб.

Alternate Data Streams

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

Так пользователю даётся дополнительная защита от необдуманного запуска программ, полученных из интернета. Это лишь одно применение потоков, а так в них можно хранить самые разные данные. Упомянутый Антивирус Касперского хранил там контрольные суммы каждого файла, но позже от этой технологии тоже по какой-то причине отказались.

Что-нибудь ещё?

Есть ещё идентификатор безопасности, плюс стандартные атрибуты файла, к которым нет прямого доступа, несмотря на то, что они тоже реализованы как потоки файлов. И они, и расширенные атрибуты, и reparse и object id — всё это потоки файла с точки зрения системы. Напрямую изменять идентификатор безопасности, показанный на следующей картинке как ::$SECURITY_DESCRIPTOR смысла нет, пусть его изменением занимается система. К другим типам потоков сама система не даёт прямого доступа. Так что на этом всё.

Просмотр содержимого object id, точек повторной обработки, а также работа с расширенными атрибутами и альтернативными файловыми потоками возможна с помощью программы NTFS Stream Explorer, а также через системную консольную утилиту fsutil.

Читайте, как происходит восстановление данных с NTFS диска . Какой алгоритм используется программами для восстановления файлов. Вот мы и подошли вплотную к теме восстановления файлов. В отличие от FAT , NTFS – очень удобная для восстановления данных файловая система, позволяющая полностью восстановить все занимаемые удалённым файлом секторы на диске. Но есть у неё и недостаток: при определённых обстоятельствах теряется имя файла. Впрочем, содержимое файла гораздо важнее его названия, так что недостаток этот хоть и неприятный, но не критичный.

В статье « Анализ файловой системы NTFS » мы рассмотрели основные структуры данных файловой системы NTFS, далее мы рассмотрим алгоритм поиска удаленного файла.

Удаление файла

Рассмотрим ситуацию, когда файл был удалён штатными средствами системы (т.е. файловая система присутствует в полном объёме и не повреждена). Восстановить удаленный файл в NTFS проще, чем в большинстве файловых систем. Как мы помним, при удалении файла в файловой системе FAT терялась цепочка записей, указывающих на занимаемые файлом кластеры. Такого безобразия в NTFS не происходит.

При удалении файла с HDD, USB-диска, карт памяти CompactFlash, MicroSd его имя исключается из индекса родительского каталога, а соответствующая ему запись MFT и занимаемые им кластеры освобождаются. Происходит пересортировка индекса, в результате которой информация об имени файла может быть утеряна. Соответственно, имя удалённого файла более не будет присутствовать в исходном каталоге.

Впрочем, этот недостаток более чем компенсируется, тем фактом, что MFT хранит все записи в одной таблице. Таким образом, поиск свободных записей сильно упрощается. Каждая запись содержит атрибут с базовым адресом родительского каталога. Соответственно, при нахождении свободной записи становится возможным определить её полный путь.

Для того чтобы восстановить удалённые в NTFS файлы, необходимо просканировать MFT в поиске свободных записей. При обнаружении свободной записи становится возможным определить имя файла – оно хранится в одном из атрибутов. Как было сказано ранее, имя файла удаётся определить не всегда. Зато в отличие от файловой системы FAT указатели на кластеры, занимаемые удалённым файлом, продолжают существовать. Соответственно, удаётся восстановить файл любого размера и любой степени фрагментации – разумеется, при условии, что занимаемые им кластеры не были перезаписаны другими данными.

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

Особенностью NTFS является алгоритм выделения записей MFT. При выделении записи, Windows использует алгоритм, выделяющий первую по порядковому номеру доступную запись. Соответственно, записи MFT с малыми номерами выделяются чаще, чем записи с большими номерами.

Ранее мы публиковали статью о преимуществах файловых систем FAT и NTFS в нашем блоге.

Журнал файловой системы

Одним из преимуществ NTFS является особенность организации записи информации в виде транзакций. Все изменения на диске регистрируются в специальном файле – журнале файловой системы. Журнал изменений активен не всегда, но он содержит информацию о времени удаления и последнего редактирования файла.

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

Что происходит, если во время операции записи происходит сбой? В этом случае операционная система сможет проанализировать журнал файловой системы и «откатить» состояние файловой системы к предыдущему состоянию.

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

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

В первую очередь необходимо сохранить динамическую информацию, хранящуюся в устройстве. Информация, хранящаяся в ОЗУ, крайне полезна для криминалистической экспертизы. Существует множество инструментов, используемых в компьютерной форензике, используемых для создания дампов оперативной памяти. В данной статье мы рассмотрим FTK Imager.

При загрузке FTK Imager с официального сайта требуется указать ваши данные, но валидным из них должен быть только email (на него придет ссылка на скачивание).

Почему мы будем использовать виртуальную машину? Дело в том, что на вашей хостовой машине может быть установлено и запущено много программ и утилит в фоновом режиме и вам будет сложно анализировать большой дамп.


Процесс регистрации на сайте и получения ссылки.


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

После этого можно запустить FTK Imager и создать дамп оперативной памяти, как показано на рисунке ниже.


Создание дампа оперативной памяти.


Текущее состояние оперативной памяти можно сохранить в виде файла, образа или раздела диска для последующего анализа.




Также, с помощью FTK Imager можно создать образ жесткого диска для изучения артефактов, хранящихся в файловой системе. Это может быть история браузера, временные файлы, логины, хешированные пароли и многое многое другое.


Введение в анализ файлов NTFS

Главная файловая таблица (Master File Table или MFT) считается одним из самых важных файлов в файловых системах формата NTFS, так как в ней хранятся записи о физическом местонахождении всех файлов на диске и их метаданные. NTFS использует MFT в качестве базы данных для отслеживания файлов.

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

Далее будет описан процесс извлечения данных с физического устройства на примере файловой системы в формате NTFS, процесс обнаружения артефактов и метаданных в MFT, а также способ восстановления данных с помощью FTK Imager.

Ниже будет показан пример использования FTK Imager версии 3.1.4.6 для поиска и восстановления изображений.

Основы использования FTK Imager

Откройте физический диск или дамп диска компьютера в FTK Imager. Содержание будет отображено в панели директорий (Evidence Tree Pane).

После щелчка мыши на корень диска, находящиеся там файлы будут отображены в панели файлов (File List Pane), среди которых можно заметить MFT.

Кликните на этот файл, чтобы отобразить содержимое в панели просмотра (Viewer Pane).


Панели FTK Imager

Поиск интересных файлов

Кликните на панель просмотра и нажмите CTRL + F для поиска. Мы будем искать изображения, поэтому для поиска используем стандартный тег “IMG”.

За короткое время FTK Imager найдет результат, который в нашем случае является изображением с именем IMG00264_20100109-1450.jpg.


Поиск артефактов файлов в MFT

Как мы уже заметили, первой идет дата создания файла. При выделении этой последовательности байт, мы увидим ее в интерпретаторе hex значений в доступном для прочтения виде.


Смещение на 80 байтов


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




Восстановление данных

Восстановим найденное изображение для последующего анализа. Один из атрибутов записи в MFT это раздел $DATA. Он начинается с hex последовательности 0 x 80 00 00 00, поэтому, чтобы переместиться к нему, воспользуемся поиском, предварительно сменив входные значения с текстовых на hex.


Перемещение к атрибуту $DATA

Следующие 4 байта в этом разделе содержат информацию о его размере, в нашем случае это 0 x 48 00 00 00. В интерпретаторе hex это значение конвертируется в 72 в десятичной системе счисления.

Следующие 2 байта содержат информацию о текущем состоянии файла.

01 00 существующий файл

00 00 удаленный файл

03 00 существующая папка

04 00 удаленная папка


Размер файла и его состояние

Изображение, которое мы собираемся восстановить, не было удалено с физического носителя.

В NTFS у атрибута DATA существует такой раздел как Data Runs. В нем содержится информация о местоположении файловых кластеров.

Для начала необходимо выяснить на каком отступе расположен раздел Data Runs в этом файле.

Для этого сместимся на 32 байта от начала раздела $DATA, в нашем случае отступом будет являться 0 x 40, что в десятичной интерпретации равно 64.


Отступ, на котором расположен раздел data runs


После смещения на 64 байта от начала раздела $DATA указатель будет расположен в начале раздела Data Runs, в котором содержится информация о первом кластере данных изображения.

В нашем случае раздел Data Runs начинается с 0 x 31 и заканчивается 0 x 0, однако, так бывает не всегда.


Раздел data runs

Следующий байт после начала раздела Data Runs содержит информацию о количестве кластеров, на которые разбиты данные изображения.


Следующие три байта содержат информацию о номере кластера.


В разделе свойств панели директорий будет отображен размер кластера.


Свойства панели директорий

94 x 4096 = 385024

И так, начальный кластер 8103083, а размер фото 385024 байт.

Теперь в панели директорий выберем наш том и после щелчка правой кнопкой мыши на панели просмотра выберем перемещение “go to sector/cluster” к кластеру 8103083.


Процесс перемещения к кластеру

В начале кластера видим заголовок JPEG файла (ÿØÿà..JFIF)



Выделение данных изображение

Теперь кликаем правой кнопкой мыши по выделенным данным и сохраняем. Та-дам! Наш файл:

Читайте также: