Глава 6. Файловая система ExFAT

exFAT это самая последняя версия в семействе файловых систем FAT (File Allocation Table, Таблицы размещения файлов). Эта файловая система была представлена Microsoft в 2006м году с конкретной целью создания файловой системы, которая подходила бы для устройств хранения большего размера, причём без высоких накладных расходов, которые испытывают современные файловые системы. Для выполнения этого exFAT преодолела ряд ограничений файловой системы FAT32, но всё ещё очень похожа на FAT32. Способность анализа FAT32 превратит анализ exFAT в более простой.

Одним из основных нововведений в exFAT выступает применение значений 8d байт размеров файла в противоположность четырём байт для FAT32 (и всего лишь двух байт для более ранних вариантов FAT). Это приводит к поддержке файлов гораздо большего размера, теоретически вплоть до 16d EiB. Тем не менее, максимальный размер тома всего лишь в 128d PiB означает, что самый большой размер файла обязан быть меньше этого размера. Величина максимального размера тома опять- таки теоретическая. Самый большой рекомендуемый размер тома exFAT это 512d TiB. Это гигантским образом увеличивает доступный для файловой системы FAT32 максимум в 2d TiB. Прочие ограничения FAT32, такие как значение числа файлов для каталога и общее максимальное число файлов в exFAT также возросли (см. Таблицу 4.9).

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

С точки зрения расследования, exFAT предоставляет намного более точные сведения относительно времён. Прежде всего, детализация временных меток создания и изменения равна 10мс в противоположность имеющихся в FAT двум секундам (FAT32 в действительности применял детализацию в 10мс для временной метки создания). К тому же детализация времени доступа теперь составляет 2d секунды. Это обусловлено введением значения времени FAT для времени доступа. Предыдущие варианты FAT поддерживали лишь дату доступа, определяющую степень детализации в 1d день. Наконец, файловая система exFAT хранит сведения о зоне времени. Как и в FAT, значение времени записывается в файловой системе со значением локального времени, но в отличии от FAT также предоставляется составляющая зоны времени. Это означает, что для файловой системы exFAT можно получать более точные сведения относительно времени, чем это можно было обнаружить в файловой системе FAT.

Остальная часть данной главы изучит структуры на диске в файловой системе exFAT (Раздел 6.1). Затем эта глава продолжится анализом вручную файловой системы exFAT (Раздел 6.2) прежде чем обсудить некоторые более современные вопросы в (Разделе 6.3).

Структуры на диске

По стандартам нашего времени, exFAT это простая файловая система. В качестве расширения файловой системы FAT, exFAT содержит очень похожие структуры. Предоставленные в Главе 5 понятия приемлемы и для файловой системы exFAT.

 

Рисунок 6.1


Схема файловой системы exFAT

Общая схема exFAT отражена на Рисунке 6.1. Из него ясно, что она похожа на файловую систему FAT, поскольку имеется структура VBR (volume boot record, загрузочной записи тома), некая FAT и область данных. Чем эта файловая система отличается от FAT, так это присутствием структуры резервной копии VBR, а также тем, что имеется лишь единственная FAT. Присутствие резервной VBR обусловлена важностью данной структуры. Потеря VBR может утратить доступ ко всей файловой системе, а потому сразу после исходной копии можно обнаружить резервирование данной структуры. Обратите внимание на то, что каждая VBR обладает размером в 12 секторов. Раздел 6.1.1 описывает структуру VBR exFAT. Таблица FAT очень похожа на ту, что мы находим в FAT, хотя по умолчанию имеется лишь одна копия. Такое удаление второй структуры FAT спроектировано для улучшения эффективности. При записи файлов на диск в файловые системы FATдолжны обновляться обе таблицы FAT, что влечёт более медленной время записи. В exFAT необходимо обновлять только одну таблицу FAT. К тому же, не все файлы пользуются таблицей FAT в exFAT, ибо лишь применять эту таблицу должны лишь фрагментированные файлы. Таблица FAT описывается в Раздел 6.1.2. Остающаяся область файловой системы exFAT это область данных, в которой пребывают файлы/ данные. exFAT пользуется тем же самым понятием записей каталога, что и применяется в FAT, однако существует намного больше типов записей каталога. Раздел 6.1.3 представляет различные типы записей каталога, которые присутствуют в файловой системе exFAT и поясняет их предназначение и то, как они обрабатываются.

Загрузочная запись тома

VBR exFAT находится в самых первых 12d секторах своей файловой системы. Непосредственно после первичной копии находится резервная копия VBR. В VBR можно обнаружить ряд имеющихся структур. Самый первый сектор содержит главный загрузочный сектор, за которым немедленно следует расширенный загрузочный сектор. Именно они являются самыми важными секторами в VBR с точки зрения расследования. Сектор 9 содержит параметры OEM, те параметры, которые специфичны для конкретных производителей. Эти параметры определяются собственно индивидуальными производителями, а не самой файловой системой exFAT. Завершающий сектор содержит повторяющиеся контрольные суммы структуры VBR, исключая процентное соотношение используемой файловой системы и флагов тома).

Листинг 6.1 демонстрирует вывод команды fsstat для файловой системы exFAT. Из него очевидна аналогичность между exFAT и FAT. Её схема содержит аналогичные области, такие как FAT, корневой каталог и область данных. Диапазон кластеров начинается с 2d, как это происходит и в FAT. Два самых больших отличия состоят в том, что мы уже упоминали: exFAT содержит резервную копию VBR и, как правило, лишь одну копию FAT.

 

Листинг 6.1. Вывод команды fsstat Sleuthkit при её исполнении над ExFAT_V1.E01.


FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: exFAT
Volume Serial Number: 212a-d518
Volume Label (from root directory): MyExFAT
File System Name (from MBR): EXFAT
File System Revision: 1.0
Partition Offset: 0
Number of FATs: 1
File System Layout (in sectors):
Range: 0 - 1048575
* Reserved: 0 - 127
** Volume Boot Record (VBR): 0 - 11
*** Boot Sector (MBR): 0
** Backup Volume Boot Record (VBR): 12 - 23
*** Backup Boot Sector (MBR): 12
** FAT alignment space: 24 - 127
* FAT 1: 128 - 255
* Data Area: 256 - 1048575
** Cluster Heap: 256 - 1048575
*** Root Directory: 384 - 447

METADATA INFORMATION
--------------------------------------------
Metadata Layout (in virtual inodes):
Range: 2 - 16773125
* Root Directory: 2

CONTENT INFORMATION
--------------------------------------------
Sector Size: 512
Cluster Size: 32768
Cluster Range: 2 - 16381
 	   

В Листинге 6.1 инструментарий fsstat считывает VBR для выработки показанных в нём сведений. Структура главного загрузочного сектора (Сектора 0) определяется в Таблице 6.1.

Таблица 6.1. Структура главного загрузочного сектора exFAT
Смещение Размер Название Описание

0x00

0x03

Jump

Инструкция безусловного перехода к коду загрузки

0x03

0x08

OEM Name

Название основного производителя, обычно EXFAT.

0x0B

0x35

Reserved

Заполнено нулями.

0x40

0x08

Sector Offset

Смещение первого сектора раздела, в случае удаляемого носителя ноль.

0x48

0x08

Volume Size

Общий размер тома в секторах.

0x50

0x04

FAT Offset

Смещение в секторах до первой FAT.

0x54

0x04

FAT Size

Размер FAT в секторах.

0x58

0x04

Data Region Offset

Смещение в секторах области данных.

0x5C

0x04

Data Region Size

Размер области данных в кластерах.

0x60

0x04

Root Directory

Адрес кластера корневого каталога.

0x64

0x04

Serial Number

Серийный номер данного тома.

0x68

0x02

Revision

Номер версии данной файловой системы.

0x6A

0x02

Flags

Значения бит полей флагов. Бит 0 -активная в данный момент FAT (0 - FAT 1; 1 - FAT 2); Бит 1 - флаг изменения (0 - clean; 1- dirty); Бит 2 - бит отказа носителя (0 - none; 1 - failure); Остальные биты зарезервированы.

0x6C

0x01

Bytes/Sector

Размер сектора в байтах находится возведением 2 в степень данного значения. Когда значение равно 0x09, тогда размер сектора равен 29 = 512d байт.

0x6D

0x01

Sectors/Cluster

Число секторов в кластере находится возведением 2 в степень данного значения. Когда значение равно 0x06, тогда кластер содержит 26 = 64d сектора.

0x6E

0x01

# FATS

Число имеющихся FAT.

0x70

0x01

Used Percentage

Процентное соотношение используемой области данных.

0x71

0x07

Reserved

Заполнено нулями.

Из Таблицы 6.1 очевидно, что основные отражённые в Листинге 6.1 сведения могут быть воссозданы из загрузочной записи тома. Заданы размеры и сектора и кластера, а также подлежащие вычислению адреса различных структур. Указывается смещение сектора для таблицы FAT, а также размер такой таблицы. Также предоставляется число FAT, хотя по умолчанию в exFAT это 0x01. Предоставляется номер кластера корневого каталога, который задаёт положение корневого каталога в области данных. Для получения реального смещения для корневого каталога его следует сочетать с размерами кластера и сектора. OEM Name, EXFAT, можно применять для определения типа данной файловой системы.

Таблица размещения файлов

В exFAT таблица FAT служит тем же самым целям, что и в файловой системе FAT. Она делает возможным построение цепочек FAT. Когда файлы занимают множество кластеров, в таблице FAT обнаруживается самое первое местоположение, которое затем указывает на следующий кластер в цепочке, а тот указывает на следующий.Этот процесс продолжается пока не обнаруживается маркер конца цепочки.

Каждый кластер в таблице FAT представлен значением из четырёх байт. Самым первым адресуемым кластером является кластер 2d, как и в файловой системе FAT. Самая первая запись в этой таблице (которую можно рассматривать как не существующий кластер 0) содержит тип носителя в самом последнем значащем байте, причём все остающиеся байты содержат 0xFFFFFF. Вторая запись в этой таблице FAT (аналог не существующего кластера 1) не обладает значением и обычно устанавливается в 0xFFFFFFFF. Последующие четыре байта ссылаются на кластер 2, ещё следующие четыре байта на кластер 3 и так далее.

Как правило, записи таблицы FAT предоставляют номера кластеров, позволяя определять местоположение следующего кластера в соответствующей цепочке. Для таких записей имеются два специальных значения. Первое, 0xFFFFFFF7, помечает кластер как плохой, а раз так, этот кластер не должен использоваться. Вторым выступает 0xFFFFFFFF, что отмечает значение конца своей цепочки FAT.

В отличии от файловой системы FAT, не все файлы из exFAT будут обладать некой записью в таблице FAT. В таблице FAT будут появляться только фрагментированные файлы. Хранящиеся последовательно файлы можно полностью обнаружить воспользовавшись соответствующей записью каталога для этого файла. Поскольку не все файлы будут содержать цепочки кластеров в таблице FAT, для записи используемых кластеров применяется структура распределения побитового отображения. Более подробно это поясняется в Разделе 6.1.3.

Записи каталога

Аналогичным для FAT образом, каталоги в exFAT составляются записями каталога. Всякая запись каталога состоит из 32d байт. Каждые файл/ каталог представлены неким числом записей каталога, которые совместно носят название набора записей каталога. В файловых системах exFAT (по сравнению всего с тремя для FAT) в сумме имеются девять типов записей каталога. Типы записей каталога можно классифицировать на первичные и вторичные и далее на критически важные и не критичные. Таблица 6.2 перечисляет записи каталога и предоставляет их разбиение на категории и коды.

Таблица 1-1. Права доступа
Название Pri. Crit. Code Type Описание

Побитовое отображение

Да

Да

1

0x81

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

Таблица верхнего регистра

Да

Да

2

0x82

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

Метка тома

Да

Да

3

0x83

При обнаружении в корневом каталоге содержит сведения относительно метки тома (как она приводится в fsstat).

Файл

Да

Нет

5

0x85

Основная структура метаданных файла.

GUID тома

Да

Да

0

0xA0

Значение GUID данного тома.

TexFAT

Да

Нет

1

0xA1

Относится к безопасной транзакции exFAT.

Win CE ACT

Да

Нет

2

0xA2

Относится к безопасной транзакции exFAT.

Расширение потока

Нет

Да

0

0xC0

Предоставляет значение местоположения содержимого данного файла.

Расширение имени файла

Нет

Да

1

0xC1

Собственно название файла.

Набор записей каталога обладает лишь единственной записью первичного каталога, однако способна иметь до 17d вторичных записей каталога. Значение типа каталога определяется самым первым байтом в её записи каталога. Обычные файлы обладают по крайней мере тремя записями каталога: первичной записью каталога файла, которая содержит метаданные файла, расширением потока, которое делает возможным определение местоположения содержимого файла и расширение имени файла, предоставляющего собственно название этого файла.

На самом деле тип записи каталога это поле бит. Биты 0-4 предоставляют значение кода из Таблицы 6.2. Бит 5 применяется для сигнализации критической важности записи. Установлен когда запись не является критически важной, если данный бит равен нулю, данная запись критически важная. Бит 6 используется для определения того что это первичная запись каталога. В случае первого значения этот бит ноль, во втором случае значением данного бита является 1. Наконец, бит 7 применяется для определения того, что данная запись каталога используется. Рассмотрим следующее значение типа записи каталога: 0x41. Оно не представляет собой тип записи, который представлен в Таблице 6.2; тем не менее, можно понять что оно собой представляет. Наш первый шаг состоит в его преобразовании в двоичный вид, что даёт 0b01000001. Последние пять из значимых бит представляют код, который равен 0b00001 или 1d. Это подразумевает, что они представляют либо побитовое отображение, либо texFAT, либо расширение имени файла. Бит 5 равен нулю, что означает что это критически важная запись каталога. При изучении этих трёх записей каталога, обладающих указанным в таблице 6.2 типом, критически важны только побитовое отображение и расширение имени файла. Тип 0x41 должен соответствовать одному из них. Рассмотрение значения бита 6 даёт 1. Это подразумевает, что это не основная запись каталога. Объединяя воедино эти сведения, получаем код 1, вторичной, критически важной записи каталога, означающий, что это запись каталога с расширением имени файла. Старший значащий бит равен нулю, что подразумевает, что она не выделена. Скорее всего, здесь содержится информация об имени удалённого файла! Следовательно, даже если в таблице 6.2 не указан код типа записи, можно определить её тип.

Прежде чем продолжать более подробное обсуждение всех типов кодов записей каталога, необходимо описать общие структуры записи каталога. Все первичные записи каталога следуют одной и той же структуре, которая отображена в Таблице 6.3, в то время как вторичные записи каталога следуют общей структуре, показанной в Таблице 6.4.

Таблица 6.3. Общая структура первичной записи каталога
Смещение Размер Название Описание

0x00

0x01

Тип записи

Значение идентификатора типа для данного каталога

0x01

0x01

Вторичный счётчик

Значение числа связанных с этой первичной записью вторичных записей каталога.

0x02

0x02

Набор контрольной суммы

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

0x04

0x02

Первичные флаги

Бит 0 - возможность размещения; бит 1 - нет цепочки FAT. Оставшиеся биты могут определяться конкретными типами записи каталога.

0x06

0x0E

Определяются пользователем

Данные этого раздела различны для каждого типа записи каталога.

0x14

0x04

Первый кластер

Самый первый кластер, котором размещаются относящиеся к этой записи каталога данные.

0x18

0x08

Длина данных

Размер связанных данных в байтах. Может быть переопределено определёнными типами записей каталога.


Таблица 6.4. Общая структура вторичной записи каталога
Смещение Размер Название Описание

0x00

0x01

Тип записи

Значение идентификатора типа для данного каталога

0x01

0x01

Вторичные флаги

Это поле идентично полю флагов первичной записи каталога.

0x02

0x12

Определяются пользователем

Данные этого раздела различны для каждого типа записи каталога.

0x14

0x04

Первый кластер

Самый первый кластер, котором размещаются относящиеся к этой записи каталога данные.

0x18

0x08

Длина данных

Размер связанных данных в байтах. Может быть переопределено определёнными типами записей каталога.

Общая структура первичной записи каталога содержит сведения о самом наборе каталога, к которому относится данная первичная запись, таких как значение числа вторичных записей в этом наборе и контрольную сумму множества записей каталога в целом. Обратите внимание на то, что подобное применение контрольных сумм в exFAT означает её большую надёжность чем у более ранних вариантов FAT , ибо допускает выявление несогласованности данных. Большинство данных в записи каталога может быть переопределено конкретным типом записи. Общая структура вторичной записи похожа, за исключением того что она обладает большей определяемой пользователем областью. Это обусловлено отсутствием необходимости записи сведений о вторичных записях. В случае как для первичных, так и для вторичных общих структур, они обе содержат первый кластер и длину данных. При хранении внешних данных они используются именно так, как указано, но в некоторых типах записей каталога они могут быть изменены. Это позволило бы применять до 26d байт пользовательских данных в основной записи каталога и до 30d байт во вторичной записи.

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

Карта бит размещения (Type: 0x81)

Побитовое отображение выделения (карта бит размещения) выступает первейшей критически важной записью каталога (Type: 0x81) и она пребывает в своём корневом каталоге. Для каждой копии FAT имеется по одному представителю. Побитовое отображение выделения ответственно за отслеживание используемых/ свободных кластеров. Именно это является основным отличием от прочих вариантов файловой системы FAT, которые для отслеживания состояния кластеров применяют таблицу FAT. В exFAT таблица FAT применяется только когда файлы фрагментарны. Листинг 6.2 предоставляет запись каталога карты размещения бит из предоставленного образа файловой системы (ExFAT_V1.E01). Собственно структура записи каталога побитового отображения находится в Таблице 6.5. Она содержит и реализацию записи из Листинга 6.2.

 

Листинг 6.2. Запись каталога побитового отображения выделения ExFAT_V1.dd.


0030020: 8100 0000 0000 0000 0000 0000 0000 0000 ................
0030030: 0000 0000 0200 0000 0008 0000 0000 0000 ................
 	   

Таблица 6.5. Структура записи каталога побитового отображения выделения. Значения приводятся для Листинга 6.2.
Смещение Размер Название Описание Значение

0x00

0x01

Тип записи

Идентификатор типа для конкретной записи. Для побитового отображения 0x81.

0x81

0x01

0x01

Флаги побитовой карты

Бит 0 описывает значение побитового отображения выделения на которое ссылается эта запись. 0 представляет FAT 1, 1 представляет FAT 2. Как правило, это ноль, ибо имеется лишь одна FAT. Остальные биты зарезервированы.

0x00

0x02

0x12

Зарезервировано

Зарезервировано.

0x00

0x14

0x04

Первый кластер

Первый кластер в данном побитовом отображении выделения.

0x02

0x18

0x08

Длина данных

Длина данного побитового отображения размещения (в байтах).

0x800

Каждый бит в побитовом отображении размещения представляет отдельный кластер. Самый первый бит представляет кластер 2, и так далее. Самый первый бит это самый младший бит в самом первом байте. Местоположение реального побитового отображения выделения определяется из соответствующей записи каталога.

Рассмотрим побитовое отображение выделения 0xEF36. Рисунок 6.2 показывает двоичное значение этого побитового отображения размещения и те кластеры, на которые ссылаются все конкретные биты.

 

Рисунок 6.2


Образец побитового отображения выделения (0xEF36), показывающий конкретные значения бит данного отображения бит и значения номеров кластеров каждого соответствующего бита.

Из Рисунка 6.2 просто понять, что кластер 15d в данный момент выделен. Тем не менее, в ситуации с побитовым размещением большего размера такой показ для всех кластеров невозможен. Вместо этого необходимо вычислять в точности тот бит, для которого требуется состояние кластера.

И снова, рассмотрим состояние кластера 15d для побитового отображения размещения 0xEF36. Необходимо определить тот номер байта, в котором будет пребывать этот кластер, а также значение номера бита внутри данного байта. Вот эти вычисления:


		byte = int((c − 2)/8)
		bit = (c − 2)%8
		

Следовательно, кластер 15d можно найти в байте 1d с положением бита 5d (исчисляемого от самого младшего бита; помните, что отсчёт начинается с 0!) Байт с положением 1 содержит значение 0x36, что в двоичном виде представляется как 0b00110110, выделенный подчёркиванием бит это бит с положением 5. Это отображает выделение кластера 15d.

Таблица в верхнем регистре (Type: 0x82)

Запись каталога таблицы верхнего регистра является основной, критически важной записью со значением типа кода 0x82. Эта запись таблицы верхнего регистра определяет местоположение таблицы верхнего регистра, которая применяется чтобы допускать не чувствительный к регистру поиск по именам файлов. Листинг 6.3 показывает такую запись из корневого каталога для поставляемого образа файловой системы. Таблица 6.6 представляет структуру записи каталога таблицы верхнего регистра и обработку значений из Листинга 6.3.

 

Листинг 6.3. Запись каталога таблицы верхнего регистра для ExFAT_V1.dd.


0030040: 8200 0000 0dd3 19e6 0000 0000 0000 0000 ................
0030050: 0000 0000 0300 0000 cc16 0000 0000 0000 ................
 	   

Таблица 6.6. Структура записи каталога таблицы верхнего регистра. Значения приводятся для Листинга 6.3.
Смещение Размер Название Описание Значение

0x00

0x01

Тип записи

Идентификатор типа (0x82).

0x82

0x01

0x03

Зарезервировано

Зарезервировано.

0x00

0x04

0x04

Контрольная сумма

Значение контрольной суммы для таблицы верхнего регистра.

0xE619D30D

0x08

0x0C

Зарезервировано

Зарезервировано.

0x00

0x14

0x04

Первый кластер

Местоположение первого кластера в байтах для таблицы верхнего регистра.

0x03

0x18

0x08

Длина данных

Размер таблицы верхнего регистра в байтах.

0x16CC

Метка тома (Type: 0x83)

Запись каталога метки тома является основной, критически важной записью с кодом типа 0x83. Её назначение аналогично записи каталога метки тома для FAT. Она хранит метку (то есть название) реальной файловой системы, которая назначается при создании файловой системы. Эта запись каталога находится только в корневом каталоге. Образец метки тома показан в Листинге 6.4. Её структура представлена в Таблице 6.7.

 

Листинг 6.4. Запись каталога метки тома для ExFAT_V1.dd.


0030000: 8307 4d00 7900 4500 7800 4600 4100 5400 ..M.y.E.x.F.A.T.
0030010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
 	   

Таблица 6.7. Структура записи каталога метки тома. Значения приводятся для Листинга 6.4.
Смещение Размер Название Описание Значение

0x00

0x01

Тип записи

Идентификатор типа (0x83).

0x83

0x01

0x01

Длина имени

Длина имени в символах unicode. Каждый символ представлен с размером в два байта.

0x07

0x02

0x16

Метка тома

Метка в unicode, в данном случае применимо лишь 0x0E (14d = 7 × 2) байт.

MyExFAT

0x18

0x08

Зарезервировано

Зарезервировано.

0x00

Файл (Type: 0x85)

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

Таблица 6.8. Структура записи каталога для файла.
Смещение Размер Название Описание

0x00

0x01

Тип

Тип записи каталога (0x85 для Файла).

0x01

0x01

Число вторичных записей

Счётчик числа вторичных записей для этого файла.

0x02

0x02

Контрольная сумма

Вычисляемая для множества записей каталога данного файла контрольная сумма.

0x04

0x02

Атрибуты

Атрибуты файла (Бит 0: Read-Only; Бит 1: Hidden; Бит 2: System; Бит 3: Reserved; Бит 4: Directory; Бит 5: Archive).

0x06

0x02

Зарезервировано

Зарезервировано.

0x08

0x04

Создание

Метка времени создания.

0x0C

0x04

Последнее изменение

Метка времени последнего изменения.

0x10

0x04

Последней доступ

Метка времени последнего доступа.

0x14

0x01

10 мс создания

Компонента 10 мс значения времени создания.

0x15

0x01

10 мс изменения

Компонента 10 мс значения времени изменения.

0x16

0x01

Зона времени создания

Смещение зоны времени для времени создания.

0x17

0x01

Зона времени изменения

Смещение зоны времени для времени изменения.

0x18

0x01

Зона времени доступа

Смещение зоны времени для времени доступа.

0x19

0x07

Зарезервировано

Зарезервировано.

Запись каталога для файла содержит метаданные этого файла. Зачастую наиболее интересные сведения для исследователя это время. Вспомним файловую систему FAT, она содержит структуру даты и времени FAT для временных меток создания и изменения, а также дату FAT для временной метки доступа. Детализация времени доступа, таким образом, один день, в то время как детализация для временных меток создания и изменения составляет две секунды (FAT 32 содержит компоненту 10мс для значения времени создания). Временные метки exFAT составлены из даты и времени FAT (см. Раздел 3.1 и Раздел 3.2). Самые первые два байта из четырёх представляют время FAT, а вторые два представляют дату FAT. Рассмотрим необработанное значение даты 0x2C783B48 (LE, прямой порядок байт). Компонентой даты FAT выступает 0x483B, а время это 0x782C. Эти значения могут преобразовываться, соответственно, как даты и времена FAT. И временные метки создания, и изменения к тому же обладают компонентой 10мс. Это значение может располагаться в пределах между 0x00 и 0xC7 (199d). Данное значение затем делится на 100d, чтобы получить добавляемые к значению времени секунды. Рассмотрим образец, в котором компонента 10мс равна 0x14. Это 20d, которое делится на 100d, предоставляя 0.2с.

В exFAT по сравнению с FAT также имеются доступными дополнительные сведения. FAT хранит локальное время безотносительно к реальной зоне времени. Большинство современных файловых систем хранят значения времени в UTC. ExFAT всё ещё пользуется локальным временем, но также запоминает значение зоны времени в которой было установлено значение локального времени. Это делает возможным сравнивать времена для разных устройств. Значение зоны времени хранится в отдельном байте. Самый старший бит сообщает об активности (1) или не активности (0) этой зоны времени. Остающиеся семь бит это номер из двух компонент (см. Раздел 3.2.7). А именно, это число 15d минутных интервалов от UTC. Рассмотрим значение 0x84 (0b1000 0100). Самый старший бит равен 1, что означает что эта зона времени активна. Число из двух компонентов равно 0b0000100 which is +4d. Это значит, что смещение UTC составляет 4 × 15 = +60d минут. Что подразумевает, что зона времени для значения времени это UTC+1.

GUID тома (Type: 0xA0)

Запись GUID тома (Type: 0xA0) это основная, но не являющаяся критически важной запись, которая содержит GUID (Globally Unique Identifier). Такой GUID делает возможным для приложений различать тома на основе данного значения. Сама структура записи каталога GUID тома отражена в Таблице 6.9. В том случае, когда запись каталога GUID тома присутствует в рассматриваемой файловой системе, должна иметься лишь единственная запись, находящаяся в корневом каталога. Многие файловые системы не обладают записью каталога GUID тома.

Таблица 6.9. Структура записи каталога для GUID тома.
Смещение Размер Название Описание

0x00

0x01

Тип записи

Идентификатор типа (0xA0).

0x01

0x01

Число вторичных записей

Счётчик числа вторичных записей каталога.

0x02

0x02

Контрольная сумма

Вычисляемая для множества записей каталога.

0x04

0x02

Флаги

Для этой записи все флаги равны нулю.

0x06

0x10

GUID тома

Значение GUID тома для данной файловой системы.

0x16

0x0A

Зарезервировано

Зарезервировано.

Расширение потока (Type: 0xC0)

Расширение потока это критически важная вторичная запись каталога. Расширение потока применяется для определения местоположения содержимого файла/ каталога. Структура расширения потока показана в Таблице 6.10.

Таблица 6.10. Структура записи каталога расширения потока.
Смещение Размер Название Описание

0x00

0x01

Тип

Идентификатор типа (0xC0).

0x01

0x01

Флаги

Вторичные флаги. Самый младший бит установлен когда эта запись активна. Бит 1 установлен установлен если содержимое непрерывно, что означает, что не требуется никакая цепочка FAT.

0x02

0x01

Зарезервировано

Зарезервировано.

0x03

0x01

Размер имени

Размер имени (в кодированных UCS-2 символах). Для получения числа байт удвойте это значение. Само название хранится в одной или более записей расширения имени (каждая запись содержит 0x0F символов).

0x04

0x02

Контрольная сумма

Контрольная сумма всего названия.

0x06

0x02

Зарезервировано

Зарезервировано.

0x08

0x08

Размер файла

Размер файла.

0x10

0x04

Зарезервировано

Зарезервировано.

0x14

0x04

Начальный кластер

Номер кластера, с которого начинается содержимое этого файла. Когда установлен бит непрерывности, тогда кластеры хранятся единым блоком и нет потребности в обращениях к таблице FAT; в противном случае файл фрагментарен и необходимо консультироваться с таблицей FAT..

0x18

0x08

Размер файла

Дублирующая запись для размера файла.

Расширение потока даёт аналитику сведения о том непрерывен ли данный файл или фрагментирован. Именно они содержатся в поле вторичных флагов. Когда бит в положении 1 обладает значением 1, содержимое непрерывно.

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

Расширение имени файла

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

Таблица 6.11. Структура записи каталога расширения имени файла.
Смещение Размер Название Описание

0x00

0x01

Тип

Идентификатор типа (0xC0).

0x01

0x01

Флаги

Вторичные флаги.

0x02

0x1E

Имя файла

Завершающееся нулём название файла, состоящее из не более 15d кодированных UCS-2 символов. Может применяться множество атрибутов расширения имени файла.

В ситуации, когда применяется множество записей расширения имени файла, название файла составляется из этих записей в порядке их появления. Все не используемые байты в названии файла обязаны быть нулями. Единичная запись каталога файла может обладать до 17d связанных с ним расширений имени файла, что подразумевает, что максимальная длина имени файла равна 255d (то есть 17d × 15d).

Прочие записи каталога

Существует ряд прочих типов записей в каталогах, но они вряд ли будут интересны для криминалистического анализа файловой системы. К ним относится запись в каталоге TexFAT, которая применяется как часть системы exFAT для обеспечения безопасности транзакций (Transaction Safe), и которая не нашла широкого применения настоящее время. Также есть две записи каталога, относящиеся к конкретному поставщику. Это запись vendor GUID, которая используется для идентификации фактического поставщика, и добавочное расширение поставщика, которое может содержать любые желаемые поставщиком данные. Они относятся к конкретному поставщику, а потому их определение зависит исключительно от конкретного поставщика.

Анализ ExFAT

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

Создание файловых систем ExFAT

Файловые системы exFAT, аналогично файловым системам FAT, могут создаваться во всех основных операционных системах. Листинг 6.5 определяет команду создания файловой системы exFAT в самом первом разделе второго жёсткого диска из терминала Linux. При помощи -n "MyExFAT" эта команда также определяет название этой файловой системы.

 

Листинг 6.5. Создание файловой системы exFAT в терминале Linux.


mkfs.exfat -n "MyExFAT" /dev/sdb1
 	   

Предлагаемые файлы образов ExFAT

На протяжении данной главы анализируется ряд образов диска. Они доступны с вебсайта книги и суммируются в Таблице 6.12.

Таблица 6.12. Предлагаемые файлы образов ExFAT с вебсайта книги.
Образ Описание

ExFAT_V1.E01

Базовая файловая система exFAT с четырьмя файлами в одном каталоге.

ExFAT_V1.E02

Это файловая систем ExFAT_V1.E01 с одним удалённым файлом и добавленным каталогом с 350d файлами. Этот каталог занимает два не являющихся последовательными кластера.

ExFAT_V1.E03

Файловая систем exFAT, применяемая в упражнениях этой главы.

Анализ ExFAT вручную

В данном разделе выполняется анализ вручную файловой системы exFAT. Это позволяет читателю полностью разобраться со структурой exFAT и увидеть как файловую систему анализируют инструменты цифровой криминалистики. На протяжении данного раздела для целей демонстрации применяется ExFAT_V1.E01.

На абстрактном уровне методы анализа для exFAT почти идентичны методам FAT. Вот необходимые этапы:

  1. Обработка VBR: VBR содержит относящиеся к самой файловой системе в целом сведения. Это те сведения, которые мы наблюдаем при использовании команды Sleuth Kit fsstat. Эти сведения жизненно важны для всего последующего анализа, ибо они делают возможным определять местоположение прочих структур файловой системы.

  2. Обработка корневого каталога: Второй этап анализа начинается со списка файлов. Это происходит при первой обработке самого корневого каталога. Дополнительно к стандартным создаваемым пользователем файлам/ каталогам, корневой каталог содержит некоторые сведения структуры файловой системы, такие как местоположение побитового отображения выделения и таблиц верхнего регистра совместно с названием этого тома.

  3. Обработка подкаталогов: После того как обработан каталог корня, далее происходит изучение всех подкаталогов. Это делает возможным перечисление всех файлов. Данный процесс продолжается вплоть до того, пока для обработки более не останется файлов. Это (в сочетании с шагом 2) эквивалентно команде fls Sleuth Kit.

  4. Восстановление метаданных: Обработка производится для каждого файла/ каталога, которые восстановлены как запись каталога для файла, для получения метаданных файла (размер, времена и т.д.).

  5. Восстановление содержимого: Окончательный этап состоит в восстановлении содержимого файла/ каталога при помощи расширения потока.

Оставшаяся часть этого раздела более подробно изучает эти этапы.

Шаг 1: Обработка VBR

Листинг 6.1 показывает вывод команды fsstat при её запуске над файлом образа ExFAT_V1.E01. Куча этих сведений находится при обработке его структуры VBR. Вспомните, что в exFAT эта структура VBR в размере равен 12d секторам, а также в этом устройстве находится резервная копия.

Листинг 6.6 отображает первые 0x80 байт из нулевого сектора ExFAT_V1.E01. Эта структура обрабатывается в Таблице 6.13.

 

Листинг 6.6. Часть загрузочного сектора из ExFAT_V1.E01.


000: eb76 9045 5846 4154 2020 2000 0000 0000 .v.EXFAT .....
010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
040: 0000 0000 0000 0000 0000 1000 0000 0000 ................
050: 8000 0000 8000 0000 0001 0000 fc3f 0000 .............?..
060: 0400 0000 18d5 2a21 0001 0000 0906 0180 ......*!........
070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
 	   

Таблица 6.13 показывает все доступные в Листинге 6.1 сведения (за исключением метки тома, которая будет произведена из соответствующего корневого каталога). Из загрузочного сектора могут быть установлены соответствия структур самой файловой системы, что делает возможной дальнейшую обработку.

Таблица 6.13. Обработка главного загрузочного сектора ExFAT_V1.E01.
Смещение Размер Название Описание

0x03

0x08

Название производителя

EXFAT

0x0B

0x35

Зарезервировано

0x00

0x48

0x08

Размер тома

0x100000 (1 048 576d)

0x50

0x04

Смещение FAT

0x80 (128d)

0x54

0x04

Размер FAT

0x80 (128d)

0x58

0x04

Смещение области Данных

0x100 (256d)

0x5C

0x04

Размер области Данных

0x3FFC (16 380d)

0x60

0x04

Корневой каталог

0x04 (4d)

0x64

0x04

Серийный номер

0x212AD518

0x68

0x02

Версия

0x100 (то есть 1.0)

0x6A

0x02

Флаги

0x00 (применяется FAT 1)

0x6C

0x01

Байт/ Сектор

0x09 (то есть 29 = 512d байт)

0x6D

0x01

Секторов/ Кластер

0x06 (то есть 26 = 64d секторов)

0x6E

0x01

Число FAT

0x01 (1d)

0x6F

0x01

# устройства

0x80 (128d)

0x70

0x01

Процент занятости

0x00

0x71

0x07

Зарезервировано

0x00

Шаг 2: Обработка каталога корня

По результатам обработки VBR определяется местоположение корневого каталога. Таблица 6.13 показывает, что положение корневого каталога можно найти в кластере 4d. Для определения местоположения номера сектора для конкретного кластера, n, применяется следующая формула:


		[(n − 2) × sectorsPerCluster] + dataRegionOffset                      (6.1)
 	   

Подставляя в эту формулу наши найденные в VBR значения, получаем, что кластер 4 располагается в секторе ((4 − 2) ∗ 64) + 256 = 384d. Выделяя отсюда 64d сектора (число секторов в кластере) мы получим содержимое корневого каталога (в предположении, что наш корневой каталог занимает только один сектор). Листинг 6.7 показывает содержимое этого сектора.

 

Листинг 6.7. Содержимое корневого каталога из ExFAT_V1.E01. Самые первые байты (тип записи) каждой конкретной записи каталога выделены подчёркиванием.


0030000: 8307 4d00 7900 4500 7800 4600 4100 5400 ..M.y.E.x.F.A.T.
0030010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0030020: 8100 0000 0000 0000 0000 0000 0000 0000 ................
0030030: 0000 0000 0200 0000 0008 0000 0000 0000 ................
0030040: 8200 0000 0dd3 19e6 0000 0000 0000 0000 ................
0030050: 0000 0000 0300 0000 cc16 0000 0000 0000 ................
0030060: 8502 351b 1000 0000 1780 5c57 4680 5c57 ..5.......\WF.\W
0030070: 1780 5c57 6400 0000 0000 0000 0000 0000 ..\Wd...........
0030080: c003 0005 3535 0000 0080 0000 0000 0000 ....55..........
0030090: 0000 0000 0500 0000 0080 0000 0000 0000 ................
00300a0: c100 4600 6900 6c00 6500 7300 0000 0000 ..F.i.l.e.s.....
00300b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00300c0: 8502 ba77 2000 0000 2580 5c57 6b7f 5c57 ...w ...%.\Wk.\W
00300d0: 6b7f 5c57 6464 0000 0000 0000 0000 0000 k.\Wdd..........
00300e0: c001 0009 4661 0000 299a 0800 0000 0000 ....Fa..).......
00300f0: 0000 0000 0600 0000 299a 0800 0000 0000 ........).......
0030100: c100 7400 7200 6500 6500 7300 2e00 6a00 ..t.r.e.e.s...j.
0030110: 7000 6700 0000 0000 0000 0000 0000 0000 p.g.............
0030120: 8504 fd33 2000 0000 3b80 5c57 3b80 5c57 ...3 ...;.\W;.\W
0030130: 3b80 5c57 0000 0000 0000 0000 0000 0000 ;.\W............
0030140: c003 0029 3691 0000 2500 0000 0000 0000 ...)6...%.......
0030150: 0000 0000 1800 0000 2500 0000 0000 0000 ........%.......
0030160: c100 4400 6500 6d00 6f00 6e00 7300 7400 ..D.e.m.o.n.s.t.
0030170: 7200 6100 7400 6900 6e00 6700 5600 6500 r.a.t.i.n.g.V.e.
0030180: c100 7200 7900 4c00 6f00 6e00 6700 4600 ..r.y.L.o.n.g.F.
0030190: 6900 6c00 6500 4e00 6100 6d00 6500 7300 i.l.e.N.a.m.e.s.
00301a0: c100 4900 6e00 4500 7800 4600 4100 5400 ..I.n.E.x.F.A.T.
00301b0: 2e00 7400 7800 7400 0000 0000 0000 0000 ..t.x.t.........
00301c0: 8502 c6a0 2000 0000 4480 5c57 4480 5c57 .... ...D.\WD.\W
00301d0: 4480 5c57 0000 0000 0000 0000 0000 0000 D.\W............
00301e0: c003 0008 7a2f 0000 c000 0000 0000 0000 ....z/..........
00301f0: 0000 0000 1900 0000 c000 0000 0000 0000 ................
0030200: c100 6900 6e00 6600 6f00 2e00 7400 7800 ..i.n.f.o...t.x.
0030210: 7400 0000 0000 0000 0000 0000 0000 0000 t...............
 	   

Первые три записи каталога это метка тома (тип 0x83), побитовая карта размещения (тип 0x81) и таблица верхнего регистра (тип 0x82). За ними следуют четыре записи файла (тип 0x85), причём каждая из них обладает расширением потока (тип 0xC0) и одним или более относящихся к нему расширениями имени файла (тип 0xC1).

Команда Sleuth Kit fsstat к тому же обрабатывает запись каталога метки тома. Из структуры Таблицы 6.7 можно определить эту метку тома. Такая структура очень проста, байт идентификатора типа (0x83), с последующим единственным байтом, предоставляющим длину имени (0x07 символов в данном случае) и следующим далее собственно значением метки тома, кодированными символами unicode UTF-16 (LE, прямой порядок байт). В примере Листинга 6.7 значением метки тома является MyExFAT. Это также можно видеть и из Листинга 6.1.

И в случае для карты размещения бит, и таблицы верхнего регистра, эти записи можно найти воспользовавшись содержимым их структур. Согласно Таблицам 6.5 и 6.6, первый кластер обеих находится по смещению 0x14, а длина данных по смещению 0x18. Для структуры битовой карты распределения памяти эти значения равны 0x02 и 0x800, соответственно, что означает, что битовая карта распределения памяти будет обладать размером 2 048d байт, начинающейся в кластере 2d. Соответствующими значениями для таблицы верхнего регистра будут 0x03 и 0x16CC.

Продолжим обрабатывать корневой каталог для остающихся записей файлов. Изначальный анализ включает перечисление файлов, что осуществляется при помощи fls. Для выполнения этого требуется выделить два элемента, имя файла и где он представлен в файле/ каталоге. Название файла можно получить из атрибутов расширения имени файла (тип: 0xC1). Изучение Листинга 6.7 показывает, что имеются представленными четыре "файла" с названиями Files, DemonstratingVeryLongFileNamesInExFAT.txt, trees.jpg и info.txt, соответственно. Чтобы определить представляет ли каждый из них файл или каталог, требуется обработать атрибуты из записи каталога файл (тип 0x85). Значение атрибутов находится в структуре двухбайтового поля бит по смещению 0x04. Бит 4 представляет каталог. Вот значения для четырёх выявленных "файлов": соответственно, 0x10, 0x20, 0x20 и 0x20. Значение 0x10 это 0b00010000. В ситуации установленного 4 бита это каталог. В остальных случаях 0x20 это 0b00100000, что означает, что бит 4 не установлен; следовательно, это файлы. Это подразумевает, что Files это каталог, в то время как DemonstratingVeryLongFileNamesInExFAT.txt, trees.jpg и info.txt являются файлами. Листинг 6.8 демонстрирует вывод fls, подтверждающий эти сведения.

 

Листинг 6.8. Перечисление файлов корневого каталога из ExFAT_V1.E01 при помощи fls.


$ fls mnt/ewf1
r/r 2051: MyExFAT (Volume Label Entry)
r/r 2052: $ALLOC_BITMAP
r/r 2053: $UPCASE_TABLE
d/d 2054: Files
r/r 2057: trees.jpg
r/r 2060: DemonstratingVeryLongFileNamesInExFAT.txt
r/r 2065: info.txt
v/v 16773123: $MBR
v/v 16773124: $FAT1
V/V 16773125: $OrphanFiles
 	   

Обращаем внимание на то, что fls обрабатывает все не относящиеся к файлам записи каталога, такие как записи метки тома, битовой карты размещения и таблицы верхнего регистра. Заметьте, что отметка виртуальных файлов/ каталогов (v/v и V/V) это простой способ, коим Sleuth Kit предоставляет восстановление прочих структур файловой системы.

Шаг 3: Обработка подкаталогов

Для перечисления всех файлов требуется обработать все выявленные каталоги. Для этого необходимо определить местоположение данных каталогов. На нашем предыдущем шаге мы определили только один каталог, Files. Для получения содержимого этого каталога обрабатывается расширение потока этого каталога. Расширение потока (тип 0XC0) предоставлено в Листинге 6.9.

 

Листинг 6.9. Запись каталога расширения потока для каталога Files, показывающая начальный кластер и размер файла.


0030080: c003 0005 3535 0000 0080 0000 0000 0000 ....55..........
0030090: 0000 0000 0500 0000 0080 0000 0000 0000 ................
 	   

Из Листинга 6.9 мы определяем, что начальный кластер это 0x05, а размер файла равен 0x8000 (32 768d) байт. Это подразумевает, что все записи каталога занимают один единственный кластер. Листинг 6.10 отражает содержимое этого кластера.

 

Листинг 6.10. Содержимое вложенного каталога Files.


0038000: 8502 3c31 2000 0000 4680 5c57 4680 5c57 ..<1 ...F.\WF.\W
0038010: 4680 5c57 0000 0000 0000 0000 0000 0000 F.\W............
0038020: c003 000a 232c 0000 4200 0000 0000 0000 ....#,..B.......
0038030: 0000 0000 1a00 0000 4200 0000 0000 0000 ........B.......
0038040: c100 6400 6500 6c00 6500 7400 6500 2e00 ..d.e.l.e.t.e...
0038050: 7400 7800 7400 0000 0000 0000 0000 0000 t.x.t...........
 	   

Согласно Листинга 6.10, подкаталог Files содержит единственный файл. Обработка значения имени файла показывает, что это delete.txt. Изучение его атрибутов указывает на то, что это обычный файл. На данном этапе, для этой файловой системы, были обработаны все каталоги (а следовательно, были перечислены все файлы). В более сложных файловых системах данный процесс продолжался бы пока не было бы выполнено перечисление содержимого всех каталогов.

Наш результат, полученный посредством анализа вручную можно сравнить с получаемым рекурсивно при помощи команды fls. Это отражается в Листинге 6.11.

 

Листинг 6.11. Вывод рекурсивного исполнения fls для ExFAT_V1.E01.


$ fls -r mnt/ewf1
r/r 2051: MyExFAT (Volume Label Entry)
r/r 2052: $ALLOC_BITMAP
r/r 2053: $UPCASE_TABLE
d/d 2054: Files
+ r/r 3075: delete.txt
r/r 2057: trees.jpg
r/r 2060: DemonstratingVeryLongFileNamesInExFAT.txt
r/r 2065: info.txt
v/v 16773123: $MBR
v/v 16773124: $FAT1
V/V 16773125: $OrphanFiles
 	   

Шаг 4: Восстановление метаданных

После того как необходимый перечень файлов определён, наш следующий шаг состоит в восстановлении метаданных в отношении каждого файла. Это достигается при помощи соответствующей записи каталога файла (тип 0x85). Листинг 6.12 отображает содержимое записи каталога файла для файла info.txt в корневом каталоге.

 

Листинг 6.12. Содержимое записи каталога файла для info.txt в ExFAT_V1.E01.


00301c0: 8502 c6a0 2000 0000 4480 5c57 4480 5c57 .... ...D.\WD.\W
00301d0: 4480 5c57 0000 0000 0000 0000 0000 0000 D.\W............
 	   

Таблица 6.14 предоставляет сведения относительно данного файла. К примеру, этот файл обладает двумя вторичными записями (а именно: расширение потока и имени файла, которые следуют непосредственно за записью каталога этого файла из Листинга 6.7). Значения времён создания, изменения и доступа являются структурами даты/ времени FAT. Все они указывают времена 28 октября 2023 после полудня. Значением зоны времени для всех этих структур является 0x00 (что означает отсутствие смещения, то есть, UTC).

Таблица 6.14. Запись каталога файла для info.txt из ExFAT_V1.E01.
Смещение Размер Название Значение

0x00

0x01

Тип

0x85<

0x01

0x01

Число вторичных записей

0x02<

0x02

0x02

Контрольная сумма

0xA0C6

0x04

0x02

Атрибуты

0x20 (Архив)

0x06

0x02

Зарезервировано

0x00

0x08

0x04

Создание

0x575C8044
2023-10-28 16:02:08

0x0C

0x04

Последнее изменение

0x575C8044
2023-10-28 16:02:08

0x10

0x04

Последний доступ

0x575C8044
2023-10-28 16:02:08

0x14

0x01

10 мс создания

0x00

0x15

0x02

10 мс изменения

0x00

0x16

0x01

Зона времени создания

0x00

0x17

0x01

Зона времени изменения

0x00

0x18

0x01

Зона времени доступа

0x00

0x19

0x07

Зарезервировано

0x00

Шаг 5: Восстановление содержимого

Наш окончательный шаг заключается в восстановлении всего содержимого файла. Это достигается посредством записи каталога расширения потока (тип 0xC0). Листинг 6.13 показывает расширение потока для info.txt. Обработанные значения отображены в Таблице 6.15.

 

Листинг 6.13. Содержимое записи каталога расширения потока для info.txt в ExFAT_V1.E01.


00301e0: c003 0008 7a2f 0000 c000 0000 0000 0000 ....z/..........
00301f0: 0000 0000 1900 0000 c000 0000 0000 0000 ................
 	   
Таблица 6.15. Запись каталога расширения потока для info.txt из ExFAT_V1.E01. Значения взяты из Листинга 6.13.
Смещение Размер Название Значение

0x00

0x01

Тип

0xC0<

0x01

0x01

Флаги

0x03<

0x02

0x01

Зарезервировано

0x00

0x03

0x01

Размер имени

0x08 (8d)

0x04

0x02

Контрольная сумма

0x2F7A

0x06

0x02

Зарезервировано

0x00
2023-10-28 16:02:08

0x08

0x08

Размер файла

0xC0 (192d)

0x10

0x04

Зарезервировано

0x00

0x14

0x04

Начальный кластер

0x19 (25d)

0x18

0x08

Размер файла

0xC0 (192d)

Согласно Таблице 6.15, начальный кластер определён как 0x1анной 9 (25d). Это транслируется в сектор при помощи задаваемой Выражением 6.1 формулой.


       [(25 − 2) × 64] + 256 = 1728
 	   

Установленный флаги сообщают нам что данный файл активный и непрерывный. Их значение 0x03 подразумевают что биты 0 и 1 установлены, следовательно, определяя что этот файл активен и непрерывен, соответственно. Тот факт, что файл непрерывен означает, что для восстановления содержимого такого файла нет необходимости в таблице FAT. Заключительная часть сведений требуется для размера файла, а именно 0xC0, в данном случае. Листинг 6.14 отражает 0xC0 байт из кластера 25d. Листинг 6.15 сопоставляет восстановление info.txt вручную с тем что выдаёт icat, показывая их идентичность.

 

Листинг 6.14. Содержимое файла info.txt в ExFAT_V1.E01.


00d8000: 5468 6973 2069 7320 616e 2045 7846 4154 This is an ExFAT
00d8010: 2066 696c 6520 7379 7374 656d 2074 6861 file system tha
00d8020: 7420 636f 6e74 6169 6e73 2034 2066 696c t contains 4 fil
00d8030: 6573 2061 6e64 2031 2064 6972 6563 746f es and 1 directo
00d8040: 7279 2e20 0a54 6865 2073 7472 7563 7475 ry..The structu
00d8050: 7265 206f 6620 7468 6973 2069 733a 0a0a re of this is:..
00d8060: 2f2d 2046 696c 6573 0a20 2020 2f2d 2064 /- Files. /- d
00d8070: 656c 6574 652e 7478 740a 2f2d 2069 6e66 elete.txt./- inf
00d8080: 6f2e 7478 740a 2f2d 2074 7265 6573 2e6a o.txt./- trees.j
00d8090: 7067 0a2f 2d20 4465 6d6f 6e73 7472 6174 pg./- Demonstrat
00d80a0: 696e 6756 6572 794c 6f6e 6746 696c 654e ingVeryLongFileN
00d80b0: 616d 6573 496e 4578 4641 542e 7478 740a amesInExFAT.txt.
 	   
 

Листинг 6.15. Сопоставление восстановления вручную при помощи dd и автоматического восстановления файла с применением icat. Получаемые в результате суммы MD5 равны.


$ dd if=mnt/ewf1 bs=1 skip=$((1728*512)) count=$((0xC0)) | md5sum
192+0 records in
192+0 records out
192 bytes copied, 0.000341334 s, 562 kB/s
4bbcb05d4c32617850d2db82244b84a3 -
$ icat mnt/ewf1 2065 | md5sum
4bbcb05d4c32617850d2db82244b84a3 -
 	   

Данная техника работает для непрерывных файлов. Позднее мы обсудим восстановление фрагментированных файлов (Раздел 6.3.3).

Расширенный анализ exFAT

Базовый анализ exFAT делает возможным восстановление множества метаданных и многих файлов. Тем не менее, имеются особые ситуации, требующие дополнительного изучения. В данном разделе разрешаются эти обстоятельства. А именно: длинные имена файлов, удалённые файлы, фрагментированные файлы и большие каталоги.

Длинные имена файлов

До этого момента все изучаемые файлы обладали короткими именами файлов. Иными словами, для хранения названия файла им требовалось лишь единственная запись каталога расширения имени файла. В поставляемом образе диска ExFAT_V1.E01 имеется файл, требующий множества расширений имени файла. Листинг 6.16 показывает этот файл из fls.

 

Листинг 6.16. Обнаруживаемое в ExFAT_V1.E01 множество записей каталога длинного имени файла.


r/r 2060: DemonstratingVeryLongFileNamesInExFAT.txt
 	   

В Листинге 6.17 показан набор записей каталога для такого файла. Это множество записей каталога содержит 4d вторичных записей. Согласно своему расширению потока, значение длины задаётся 0x29 (41d) символами. Раз каждое расширение имени файла способно хранить до 15d символов, для хранения такого названия файла требуется иметь 3d расширения имени файла. Подчёркиванием выделены байты типа записи каталога для каждого из них.

 

Листинг 6.17. Обнаруживаемое в ExFAT_V1.E01 длинное имя файла.


0030120: 8504 fd33 2000 0000 3b80 5c57 3b80 5c57 ...3 ...;.\W;.\W
0030130: 3b80 5c57 0000 0000 0000 0000 0000 0000 ;.\W............
0030140: c003 0029 3691 0000 2500 0000 0000 0000 ...)6...%.......
0030150: 0000 0000 1800 0000 2500 0000 0000 0000 ........%.......
0030160: c100 4400 6500 6d00 6f00 6e00 7300 7400 ..D.e.m.o.n.s.t.
0030170: 7200 6100 7400 6900 6e00 6700 5600 6500 r.a.t.i.n.g.V.e.
0030180: c100 7200 7900 4c00 6f00 6e00 6700 4600 ..r.y.L.o.n.g.F.
0030190: 6900 6c00 6500 4e00 6100 6d00 6500 7300 i.l.e.N.a.m.e.s.
00301a0: c100 4900 6e00 4500 7800 4600 4100 5400 ..I.n.E.x.F.A.T.
00301b0: 2e00 7400 7800 7400 0000 0000 0000 0000 ..t.x.t.........
 	   

Для восстановления этого названия файла требуется обработать все расширения имён файлов в порядке их появления в наборе записей каталога. Таким образом, первая запись содержит DemonstratingVe, вторая ryLongFileNames и заключительная запись содержит InExFAT.txt. Помещая их в одно целое, получаем искомое имя файла DemonstratingVeryLongFileNamesInExFAT.txt.

Удалённые файлы

Дисковый образ ExFAT_V2.E01 содержит некоторое число удалённых файлов, один из которых это Files/delete.txt и он присутствует в ExFAT_V1.E01. Изучение ExFAT_V1.E01 показывает, что этот файл был расположен в кластере 0x1A (26d) и имел 0x42 (66d) байт. Листинг 6.18 показывает содержимое кластера 26d в ExFAT_V2.E01, после того как этот файл был удалён. Очевидно, что он отражает содержимое этого файла. Таким образом, его данные не были немедленно перезаписаны после удаления файла.

 

Листинг 6.18. Выдержка из 26d кластера из ExFAT_V1.E01, показывающая, что содержимое удалённого файла всё ещё присутствует.


00e0000: 5468 6973 2066 696c 6520 7769 6c6c 2062 This file will b
00e0010: 6520 6465 6c65 7465 6420 696e 2061 206c e deleted in a l
00e0020: 6174 6572 2076 6572 7369 6f6e 206f 6620 ater version of
00e0030: 7468 6973 2066 696c 6520 7379 7374 656d this file system
00e0040: 2e0a 0000 0000 0000 0000 0000 0000 0000 ................
 	   

Знания того, что данные файла присутствуют после удаления, не достаточно. Необходимо также проверить сведения метаданных. Листинг 6.19 отображает относящееся к делу множество записей каталога для нашего файла delete.txt, находящегося в каталога Files.

 

Листинг 6.19. Набор записей каталога для файла delete.txt после его удаления в ExFAT_V1.E01.


0038000: 0502 3c31 2000 0000 4680 5c57 4680 5c57 ..<1 ...F.\WF.\W
0038010: 4680 5c57 0000 0000 0000 0000 0000 0000 F.\W............
0038020: 4003 000a 232c 0000 4200 0000 0000 0000 @...#,..B.......
0038030: 0000 0000 1a00 0000 4200 0000 0000 0000 ........B.......
0038040: 4100 6400 6500 6c00 6500 7400 6500 2e00 A.d.e.l.e.t.e...
0038050: 7400 7800 7400 0000 0000 0000 0000 0000 t.x.t...........
 	   

В этой записи каталога типы выделены подчёркиванием. Эти типы (0x05, 0x04 и 0x41) это не те типы, которые встречались ранее. Изучение их значений в двоичном виде (0b00000101, 0b01000000 и 0b01000001) показывает, что в каждом случае самый старший бит равен 0. Это означает, что эти записи не активны. Что подразумевает удаление данных записей. Тем не менее, во избежание нежелательных операций записи на диск драйверы файловой системы exFAT обычно оставляют такие старые записи до тех пор, пока не потребуется свободной пространство. Таким образом, часто имеет место ситуация, когда данные записи будут восстановимы. Содержимое удалённого файла можно восстановить точно так же, как если бы этот файл здравствовал, ибо записи каталога самого файла (тип: 0x05), расширения потока (тип: 0x40) и расширения имени файла (тип: 0x41) всё ещё присутствуют.

Как и в случае с файловой системой FAT, небольшие файлы и непрерывные файлы могут быть восстановлены. Фрагментированные файлы, требующие таблицы FAT, в exFAT не восстановимы, так как, как правило, цепочки FAT в таблице FAT перезаписаны.

Фрагментированные файлы и большие каталоги

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

В некоторых более ранних версиях файловой системы FAT каталоги были ограничены в размере единственным кластером. Это не так в ситуации с exFAT. До сих пор все изучавшиеся каталоги располагались в одном единственном кластере. В нашем файле образа ExFAT_V2.E01 в корне имеется каталог с названием LargeDir, который содержит 350d файлов. В предыдущем анализе данной файловой системы значение размера кластера было определено 64d секторами (то есть 32768d байтами). Каждому файлу необходимо, как минимум, три записи каталога (файла, расширения потока и расширения имени файла). Это подразумевает, что всякий набор записей каталога будет занимать, как минимум, 96d байт. Делимое размера кластера на эту величину означает, что один кластер мошет содержать не более 341dфайла. Следовательно, создание 350d файлов гарантирует что для хранения содержимого такого каталога будет задействовано более одного кластера.

Листинг 6.20 отображает набор записей каталога для LargeDir. В данной ситуации его расширение потока отмечает, что такой файл был фрагментирован, ибо его значения флага это 0x01 (что означает отсутствие взведения бита 1). Таким образом, содержимое первого кластера можно обнаружить в кластере 0x1B (27d), однако для определения остающегося содержимого необходимо сверяться с таблицей FAT. Именно так определяется местоположение фрагментов любого файла, не только некого каталога. Относящиеся к делу кластеры из таблицы FAT отображены в Листинге 6.21.

 

Листинг 6.20. Набор записей каталога для каталога LargeDir из ExFAT_V2.E01.


0030220: 8502 edae 1000 0000 ba83 5c57 c283 5c57 ..........\W..\W
0030230: ba83 5c57 6464 0000 0000 0000 0000 0000 ..\Wdd..........
0030240: c001 0008 94fa 0000 0000 0100 0000 0000 ................
0030250: 0000 0000 1b00 0000 0000 0100 0000 0000 ................
0030260: c100 4c00 6100 7200 6700 6500 4400 6900 ..L.a.r.g.e.D.i.
0030270: 7200 0000 0000 0000 0000 0000 0000 0000 r...............
 	   

 

Листинг 6.21. Фрагмент таблицы FAT, отображающий те кластеры, которые задействованы в каталоге LargeDir из после его удаления в ExFAT_V2.E01. Были удалены некоторые не применяемые записи.


...[SNIP]...
0010050: 1500 0000 1600 0000 1700 0000 ffff ffff ................
0010060: 0000 0000 0000 0000 0000 0000 7101 0000 ............q...
0010070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
...[SNIP]...
00105b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00105c0: 0000 0000 ffff ffff 0000 0000 0000 0000 ................
00105d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
 	   

В кластере 27d) находится значение 0x171 (369d). Изучение сведения данного кластера показывает, что обнаружен маркер конца цепочки. Следовательно, наш каталог LargeDir представлен кластерами 27d) и 369d). Листинг 6.22 отображает самые первые записи каталога из кластеров 27d) и 369d). Значения смещения байт в общей таблице FAT вычисляются простым умножением номера кластера на четыре. Таким образом, запись таблицы FAT кластера 27d) находится по смещению в байтах 27 × 4 = 108d (0x6C) , а запись кластера 369d) пребывает по смещению в байтах 369 × 4 = 1, 476d (0x5C4).

 

Листинг 6.22. Самые первые записи каталога из кластеров 27d) и 369d), которые вместе предоставляют полное содержимое каталога LargeDir из ExFAT_V2.E01.


00e8000: 8502 f21d 2000 0000 c283 5c57 c283 5c57 .... .....\W..\W
00e8010: c283 5c57 6464 0000 0000 0000 0000 0000 ..\Wdd..........
...[snip]...
0b98000: c003 0009 561d 0000 0a00 0000 0000 0000 ....V...........
0b98010: 0000 0000 7201 0000 0a00 0000 0000 0000 ....r...........
 	   

Выводы

В этой главе была изучена файловая система exFAT которая, при большой простоте семейства файловых систем FAT, в действительности предоставляет бо́льшие функциональные возможности. В целом, это достигается использованием большего числа записей каталога, в которых файлы представлены не просто единственной записью каталога, набором записей каталога (составленными, по крайней мере, одной записью файла, одной записью расширения потока и одной записью расширения имени файла). Хотя общая структура FAT и exFAT аналогичны, их использование отличается. Например, таблица FAT по разному применяется в exFAT и FAT. В FAT все файлы восстанавливались через обращение к таблице FAT. В exFAT, помеченные как непрерывные (то есть без фрагментов) файлы можно восстанавливать не обращаясь к общей таблице FAT. Таблица FAT применяется только в ситуации фрагментированных файлов. Это означает, что таблица FAT может более не применяться для определения местоположения каждого кластера. Раз так, в корневом каталоге также можно обнаружить структуру побитовой карты. Данная структура предоставляет значение состояния выделения каждого кластера.

С точки зрения расследования exFAT предоставляет множество преимуществ по сравнению с базовой файловой системой FAT. Тем не менее, эти преимущества достигаются за счёт стоимости большего усложнения файловой системы для анализа. Данные преимуществ включают:

  • Расширенные метаданные: Файловая система exFAT содержит больше сведений метаданных, нежели их можно обнаружить в традиционной файловой системе FAT.

  • Улучшенные временные отметки: Файловая система exFAT содержит значение времени доступа, которого нельзя обнаружить в обычной файловой системе FAT.

  • Более подробные временные отметки: Все временные отметки exFAT работают со степенью детализации 10-1с. Это обеспечивает более точное указание порядка во времени событий, нежели это было возможно в FAT, которая для значений времени предоставляла лишь степень детализации в две секунды.

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

Упражнения

  1. Таблица 6.2 предоставляет коды типа записи для выделения записей каталога различного типа. Для каждого из таких типов записи каково соответствующее значение типа удалённой записи?

  2. Следующие вопросы требуют доступ к ExFAT_V3.E01, доступной на вебсайте этой книги. В каждом случае вы должны решить задачу применяя ручной анализ и сверяя свои результаты, применяя инструменты автоматизированного расследования.

    1. Где начинается область данных?

    2. Сколько структур FAT присутствует в данном устройстве?

    3. Определите метку тома

    4. По какому смещению байт расположен корневой каталог?

    5. Корневой каталог содержит запись каталога для элемента с названием Files. Это каталог или обычный файл?

    6. Корневой каталог содержит файл с названием cove.jpg. Каково значение суммы MD5 этого файла?

    7. Относительно cove.jpg, когда он был изменён в последний раз?

Библиография

ExFAT Filesystem (2025). ExFAT Filesystem [Internet]. elm-chan.org. [updated 2017; cited 2025 March 31]. http://elm-chan.org/docs/exfat_e.html (последний доступ 17 August 2025).

Hamm, J. (2009). Paradigm Solutions Extended FAT File System ExFAT. J Hamm [Internet]. 2009 January. https://paradigmsolutions.files.wordpress.com/2009/12/exfat-excerpt-1-4.pdf (последний доступ 17 August 2025).

An introduction to the ExFAT file system and how to hide data within. Heeger, J., Yannikos, Y., and Steinebach, M. (2022). Journal of Cyber Security and Mobility 11 (02): 239–264. (последний доступ 17 August 2025).

Directory compaction techniques for space optimizations in ExFAT and FAT file systems for embedded storage devices. Munegowda, K., Raju, G.T., and Raju, V.M. (2014a). International Journal of Computer Science Issues (IJCSI) 11 (1): 144. (последний доступ 17 August 2025).

Design and implementation of log structured fat and ExFAT file systems. Munegowda, K., Raju, G.T., and Maninkandanraju, V. (2014b). International Journal of Engineering and Technology 6 (4): 1708–1727. (последний доступ 17 August 2025).

Adapting Endurance and Performance Optimization Strategies of ExFAT file system to FAT file system for embedded storage devices. Munegowda, K., Raju, G.T., and Maninkandanraju, V. (2014c). International Journal of Engineering and Technology 6 (1): 204–211. (последний доступ 17 August 2025).

Interpretation of file system metadata in a criminal investigation context. Nordvik, R. (2024). PhD Dissertation. Norway: Norwegian University of Science and Technology. (последний доступ 17 August 2025).

It is about time–do exFAT implementations handle timestamps correctly? Nordvik, R. and Axelsson, S. (2022). Forensic Science International Digital Investigation 42-43: 301476–301476. (последний доступ 17 August 2025).

FAT and FAT Directory Entries. SANS (2024). Digital Forensics and Incident Response Blog SANS Institute [Internet]. www.sans.org. [cited 2024 March 31]. https://www.sans.org/blog/fat-and-fat-directory-entries/ (последний доступ 17 August 2025).

Reverse Engineering the Microsoft ExFAT File System. Shullich, R. (2010). The SANS Institute. (последний доступ 17 August 2025).

Forensic analysis of the ExFAT artefacts. Vandermeer, Y., Le-Khac, N.A., Carthy, J., and Kechadi, T. (2018). arXiv preprint arXiv:1804.08653. (последний доступ 17 August 2025).

ExFAT file system specification - Win32 apps. Windows App Development (2024). [Internet]. docs.microsoft.com. [cited 2024 May 23]. https://docs.microsoft.com/en-us/windows/win32/fileio/exfat-specification (последний доступ 17 August 2025).