Следы удалённых файлов: что хранит таблица MFT
Удаление файла с компьютера не всегда означает полное исчезновение информации о нём. В файловой системе могут сохраняться его имя, расположение, временные метки и другие служебные сведения. Благодаря этому специалисты могут установить, какие файлы ранее находились на устройстве и какие действия с ними выполнялись.
Такие данные являются важным источником информации при анализе компьютерных инцидентов, восстановлении удалённых объектов и исследовании цифровых следов.
Сотрудниками Центра исследования вредоносного кода Государственной технической службы была проведена работа по изучению механизмов хранения файловых данных в операционных системах Windows. В ходе исследования были рассмотрены структура и содержимое файловой таблицы MFT, а также особенности сохранения информации после удаления файлов.
Файловая таблица MFT (Master File Table) является основной структурой файловой системы NTFS, которая по умолчанию используется в операционных системах Windows. В MFT хранится информация обо всех файлах и папках, находящихся на диске. Для каждого объекта создается отдельная запись, в каждой записи содержатся основные сведения о файле. После удаления файла его запись некоторое время остается в MFT, что позволяет восстановить удаленные данные.
Запись MFT состоит из нескольких атрибутов. В начале находится Header (FILE Record Signature), далее атрибут $STANDARD_INFORMATION (0x10), который содержит временные метки и атрибуты файла, включая права доступа. Атрибут $FILE_NAME (0x30) хранит имя файла или каталога, а также ссылку на родительский каталог. Атрибут $DATA (0x80) содержит данные файла или ссылки на область диска, где они расположены. Если размер файла меньше 700 байт, его данные могут храниться непосредственно в записи MFT.

Рисунок 1. Структура записи MFT в NTFS
Структура записи MFT
Каждый атрибут состоит из двух частей: заголовка (Header) и содержимого (Content). Заголовок имеет одинаковую структуру для всех атрибутов и содержит информацию о типе атрибута, его размере и имени. Содержимое зависит от типа атрибута и может иметь различный размер.
Данные атрибутов в NTFS могут храниться двумя способами. Резидентный атрибут (resident attribute) хранится прямо в записи MFT вместе со своим заголовком. Такой способ подходит только для небольших атрибутов. Нерезидентный атрибут (non-resident attribute) хранится вне записи MFT в кластерах диска. Если атрибут резидентный, его данные находятся сразу после заголовка. Если атрибут нерезидентный, заголовок содержит информацию о том, где на диске находятся его данные.
Анализ файла $MFT в FTK Imager

Рисунок 2. Образ NTFS в FTK Imager
На рисунке 2 в FTK Imager представлен образ файловой системы NTFS. В левой части окна отображается дерево доказательств (Evidence Tree), где показан образ диска, раздел NTFS, а также его основные элементы. В нижней левой части приведены основные свойства тома, включая серийный номер тома (Volume Serial Number), который используется для его уникальной идентификации, а справа в шестнадцатеричном представлении выделена сигнатура NTFS, подтверждающая тип файловой системы.

Рисунок 3. Файл $MFT в FTK Imager
На рисунке 3 показано расположение файла $MFT в корневом каталоге файловой системы NTFS. В окне Evidence Tree отображается переход к корневому каталогу тома ([root]), в котором находятся системные файлы NTFS. В списке файлов представлен файл $MFT, в панели свойств приведены его основные характеристики, включая тип объекта, размер файла и номер начального кластера (Start Cluster), определяющий место начала хранения файла на диске.

Рисунок 4. Запись MFT в шестнадцатеричном представлении
На рисунке 4 представлена запись MFT в шестнадцатеричном представлении. В начале записи находится последовательность байтов 46 49 4C 45, которая в ASCII соответствует строке FILE и является сигнатурой записи MFT. В конце записи выделена последовательность FF FF FF FF, обозначающая завершение записи MFT. В современных версиях Windows, содержимое файла после переноса из записи MFT не сохраняется в свободной области записи. Вместо этого свободное пространство заполняется нулевыми байтами (\x00).
Анализ остаточных данных MFT
Каждая запись MFT имеет фиксированный размер 1024 байта. В ней хранятся сведения о файле или каталоге. Если данные каталога небольшие, они располагаются непосредственно в записи MFT. Когда объем информации увеличивается и перестает помещаться, данные переносятся в другое место на диске, а в записи MFT остается ссылка на их расположение. После удаления файлов или перемещения информации из каталога часть служебных данных может остаться в свободной области записи MFT, которая называется MFT Slack Space. В этой области могут сохраняться сведения об именах файлов, их расположении и других метаданных. Эти данные позволяют установить, что файл ранее существовал в системе и находился в определенном каталоге, даже если сам файл уже удален.

Рисунок 5. Исследуемый каталог test.
Для исследования остаточных данных MFT был создан каталог test, содержащий три файла: 1a.txt, 2a.txt и 3a.txt (рисунок 5). Поскольку каталог небольшой, информация о его содержимом хранится непосредственно в атрибуте $INDEX_ROOT записи MFT. На рисунке 6 показаны индексные записи файлов, содержащие их основные метаданные, а также сигнатура окончания списка индексных записей FF FF FF FF.

Рисунок 6. Запись MFT до удаления файла 3a.txt.

Рисунок 7. Запись MFT после удаления файла 3a.txt.
После удаления файла 3a.txt была повторно исследована запись MFT каталога test на рисунке 7. Анализ показал изменение служебных полей атрибута $INDEX_ROOT, что свидетельствует об обновлении структуры индекса каталога. При этом запись файла 3a.txt частично сохранилась в бинарных данных записи MFT. Между сигнатурами окончания индексных записей FF FF FF FF сохраняются остаточные данные (MFT Slack), содержащие часть метаданных удалённого файла.
Анализ MFT с помощью MFTECmd

Рисунок 8. Запись MFT в MFTECmd
Для анализа файла $MFT использовалась утилита MFTECmd. На рисунке 8 показана запись 0, которая соответствует файлу $MFT. Значение InUse в поле Flags означает, что запись используется файловой системой. Значение IsFree означало бы, что запись свободна, а файл или каталог удален, но его метаданные еще могут сохраняться. Для файла $MFT установлены атрибуты Hidden, System, указывающие, что он является скрытым системным файлом NTFS и не отображается пользователю при обычном просмотре содержимого диска. Также отображаются атрибуты STANDARD_INFO и FILE_NAME, содержащие основные сведения о системном файле $MFT.
В атрибуте $STANDARD_INFORMATION хранятся четыре временные метки. Их называют MAC(B)-временными метками:
- Modified (Modified) - время последнего изменения содержимого файла. При сохранении документа это значение обновляется. При переименовании или перемещении файла оно не меняется.
- Accessed (Last Accessed) - время последнего обращения к файлу. Оно изменяется при открытии или чтении файла. В современных версиях Windows обновление этой метки часто отключено, поэтому она не всегда бывает точной.
- Changed (Record Modified) - время последнего изменения записи MFT. Эта метка обновляется при изменении метаданных файла, таких как права доступа, атрибуты или количество жестких ссылок. Она не является временем создания файла.
- Birth (Created) - время создания файла на этом томе NTFS. При копировании файла это отражает время копирования, а не дату создания исходного файла.
Время Birth хранится не во всех файловых системах. Эта метка есть только в NTFS. Каждый файл в NTFS содержит восемь временных меток. Четыре находятся в атрибуте $STANDARD_INFORMATION, еще четыре в атрибуте $FILE_NAME.

Рисунок 9. Запись MFT в MFTECmd
На рисунке 9 показан атрибут DATA файла $MFT. Значение Resident: False указывает, что содержимое файла не хранится непосредственно в записи MFT, а размещено в отдельных кластерах диска. Их расположение определяется списком NTFS Data Runs (DataRuns Entries), в котором указаны смещения и количество выделенных кластеров для хранения данных файла. Наличие нескольких записей Data Runs свидетельствует о том, что данные файла распределены по нескольким областям диска.

Рисунок 10. Временные метки MFT в Timeline Explorer
На рисунке 10 рассмотрен Timeline Explorer, где для каждой временной метки отображаются два столбца: Created, Last Modified, Last Record Change и Last Access. Столбцы с окончанием 0x10 содержат значения из атрибута $STANDARD_INFORMATION, а столбцы с окончанием 0x30 содержат значения из атрибута $FILE_NAME. Временные метки $STANDARD_INFORMATION доступны через Windows API и отображаются, например, в Проводнике Windows. Временные метки $FILE_NAME напрямую не отображаются средствами Windows и обычно используются самой файловой системой NTFS. Часть столбцов 0x30 остается пустой. Это означает, что значение временной метки в атрибуте $FILE_NAME совпадает со значением в соответствующем столбце $STANDARD_INFORMATION (0x10). Если между ними есть различия, это может указывать на изменение временных меток (timestomping). Однако такие различия сами по себе не являются доказательством изменения времени, так как они могут возникать и при обычной работе Windows.
Заключение
В ходе рассмотрения файловой таблицы MFT были изучены ее структура, основные атрибуты записей NTFS и особенности хранения метаданных файлов. Практический анализ с использованием FTK Imager, MFTECmd и Timeline Explorer позволил исследовать содержимое файла $MFT, проследить изменения записей после удаления файлов и выявить сохранение остаточных данных в области MFT Slack Space. Таким образом, анализ показал, что MFT является важным источником информации о файлах, каталогах и событиях файловой системы, что делает его одним из основных объектов для изучения.