Помимо информации о структуре системы в загрузочном секторе хранится много вспомогательных данных. Эти данные не являются необходимыми для сохранения и чтения файлов, существуют исключительно для удобства и могут содержать неверную информацию. Одно из таких значений - строка из 8 символов, называемая меткой OEM. В ней может храниться обозначение системы, создавшей экземпляр FAT, но это значение не является обязательным. Например, система Windows 95 заносит в это поле строку «MSWIN4.0», Windows 98 - строку «MSWIN4.1», a Windows ХР и 2000 - «MSDOS5.0». Я выяснил, что команда Linux mkfs.msdos заполняет его строкой mkdosfs, некоторые флэш-диски USB записывают случайные данные, а некоторые карты памяти цифровых фотоаппаратов используют имена, напоминающие модель камеры. Значение можно легко изменить в шестнадцатеричном редакторе, но оно поможет определить, на каком типе компьютера была отформатирована дискета. Некоторые версии Windows требуют, чтобы значение было обязательно задано.

Файловым системам FAT назначается 4-байтовый серийный номер тома, который в соответствии со спецификацией Microsoft определяется временем создания файловой системы с использованием текущего времени, хотя операционная система, создающая файловую систему, может задать любое значение. Тестирование показало, что разные версии Windows ведут себя по-разному. Так, система Windows 98 вела себя так, как сообщает Крейг Уилсон (Craig Wilson) [Wilson, 2003]: серийный номер представлял собой результат сложения полей даты и времени в определенном порядке. Формула приводится в разделе «Загрузочный сектор» главы 10. В Windows ХР этот алгоритм не использовался. Windows использует серийный номер тома при работе со съемными носителями и определяет факт замены диска.

Также в загрузочном секторе присутствует поле из 8 символов, содержащее строку «FAT12», «FAT16», «FAT32» или «FAT». Большинство систем, создающих экземпляры FAT, корректно заполняют эту строку, но это не обязательно. Существует только один способ определения фактического типа системы - вычисление по формуле, к которой мы придем позже. Последним идентификационным маркером является 11-символьная метка тома, которую вводит пользователь при создании файловой системы. Метка тома также хранится в корневом каталоге файловой системы. Я заметил, что при добавлении метки тома в ХР она записывается только в корневой каталог, но не в загрузочный сектор.

Загрузочный код

Загрузочный код в файловой системе FAT чередуется со структурами данных файловой системы [Microsoft, 2003е]. В этом FAT отличается от файловых систем UNIX, где используется полностью изолированный загрузочный код. Первые три байта загрузочного сектора содержат машинный код команды перехода, которая заставляет процессор обойти конфигурационные данные и передать управление основному загрузочному коду. Как будет видно из структуры данных в следующей главе, загрузочный сектор занимает 512 байт, причем байты 62-509 в FAT12/16 и байты 90-509 в FAT32 не используются. Эти байты содержат загрузочный код, а в FAT32 дополнительный загрузочный код может находиться в секторах, следующих за загрузочным сектором.

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

Пример образа

В этом разделе я воспользуюсь данными из тестового образа FAT32. В пакет TSK (The Sleuth Toolkit) входит программа fsstat, которая выводит большую часть данных из категории файловой системы. Пример результата, выданного программой fsstat для тестового образа:

# fsstat -f fat fat-4.dd FILE SYSTEM INFORMATION

File System Type: FAT OEM Name: MSD0S5.C)

Volume ID: 0x4cl94603

Volume Label (Boot Sector): NO NAME Volume Label (Root Directory): FAT DISK File System Type Label: FAT32

Backup Boot Sector Location: 6 FS Info Sector Location: 1 Next Free Sector (FS Info): 1778 Free Sector Count (FS Info): 203836 Sectors before file system: 100800

File System Layout (in sectors)

Total Range: 0 - 205631

* Reserved: 0 - 37 ** Boot Sector: 0

** FS Info Sector: 1 ** Backup Boot Sector: 6

* FAT 0: 38 - 834

* FAT 1: 835 - 1631

* Data Area: 1632 - 205631

** Cluster Area: 1632 - 205631 *** Root Directory: 1632 - 1635

CONTENT-DATA INFORMATION

Sector Size: 512

Cluster Size: 1024

Total Cluster Range: 2 - 102001

[REMOVED]

Из листинга видно, что первой копии FAT предшествуют 38 зарезервированных секторов. В зарезервированной области находится резервная копия загрузочного сектора и структура данных FSINFO. В файловой системе находится две структуры FAT, расположенные в секторах 38-834 и 835-1631. Область данных начинается в секторе 1632 и состоит из 1024-байтовых кластеров.

Методы анализа

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

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

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

Факторы анализа

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

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

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

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

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

Сценарий анализа

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

Чтобы найти начало файловой системы FAT, мы проведем поиск по сигнатурам 0x55 и ОхАА в последних двух байтах загрузочного сектора. При проведении только одного поиска следует ожидать большого количества ложных совпадений. Если диск заполнен случайными данными, можно ожидать, что сигнатура будет встречаться каждые 65 536 секторов. Для уменьшения количества ложных совпадений можно увеличить сигнатуру или использовать другие данные. Сценарий показывает, что второй способ хорошо подходит для FAT32, потому что шаблон сигнатур хранится в зарезервированной области файловой системы. Конечно, программы автоматизированного поиска сделали бы то же самое быстрее, но мы выполним поиск вручную.

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

# sigfind -о 510 55АА disk-9.dd Block size: 512 Offset: 510 Block: 63 (-)

Block: 64 (+1)

Block: 65 (+1)

Block: 69 (+4)

Block: 70 (+1)

Block: 71 (+1)

Block: 75 (+4)

Block: 128504 (+128429)

Block: 293258 (+164754)

[...]

Первый экземпляр сигнатуры найден в секторе 63; это логично, потому что первый раздел обычно начинается в секторе 63. Мы читаем содержимое сектора и отображаем его на структуру данных загрузочного сектора. Выясняется, что в секторе 6 хранится резервная копия загрузочного сектора, а в секторе 1 файловой системы - структура FSINFO. Также мы узнаем, что файловая система содержит 20 482 812 секторов. Структура данных FSINFO имеет такую же сигнатуру, как и загрузочный сектор, поэтому в секторе 64 тоже найдено совпадение.

Совпадения также обнаруживаются в секторах 69 и 70, содержащих резервные копии загрузочного сектора и FSINFO на расстоянии шести секторов от оригинала. Блоки 65 и 71 заполнены нулями (кроме сигнатур). Совпадение в блоке 128 504 оказывается ложным; при просмотре мы видим случайные данные. Таким образом, на основании информации о расположении загрузочного сектора и относительного местонахождения резервных копий можно сделать вывод, что файловая система занимает на диске секторы с 63 по 20 482 874. Теперь можно просмотреть остальные совпадения в выходных данных sigfind:

[...]

Block: 20112453 (+27031)

Block: 20482875 (+370422)

Block: 20482938 (+63)

Block: 20482939 (+1)

Block: 20482940 (+1)

Block: 20482944 (+4)

Block: 20482945 (+1)

Block: 20482946 (+1)

Block: 20482950 (+4)

Block: 20513168 (+30218)

В пропущенной части были многочисленные ложные совпадения. Мы видим, что в секторе 20 482 875 обнаружено совпадение. Этот сектор находится за концом предыдущей файловой системы, которая завершается в секторе 20 482 874. Однако закономерность совпадений, начиная с сектора 20 482 875, отличается от предыдущих: следующее совпадение найдено со смещением 63 сектора, а потом следуют несколько близких совпадений. Просматриваем сектор 20 482 875 и выясняем, является ли совпадение ложным:

# dd if=disk-9.dd bs=512 skiр=20482875 count=l xxd

0000000: 088c 039a 5f78 7694 8f45 bf49 e396 OOcO ...._xv..E.I....

0000016: 889d ddcO 6d36 60df 485d adf7 46dl 3224 ....m64.Н]..F.2$

0000032: 3829 95cd ad28 d2a2 dc89 f357 d921 cfde 8)...(.....W.!..

0000048: df8e lfd3 303e 8619 641e 9c2f 95b4 d836 ....0>..d6

[...]

0000416: 3607 e7be 1177 db5f llc9 fbal c913 la3d 6....w._.......=

0000432: da81 143d 00c7 7083 9d42 330c 0287 0001 ......p..B3.....

0000448: clff Obfe ffff 3f00 0000 fc8a 3801 0000 ......?.....8...

0000464: clff 05fe ffff 3b8b 3801 7616 7102 0000 ......;.8.v.q...

0000480: 0000 0000 0000 0000 0000 0000 0000 0000 ................

0000496: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.

Совпадение легко принять за ложное, но обратите внимание на четыре завершающие строки и вспомните, о чем говорилось в главе 5 при обсуждении разделов DOS. Этот сектор содержит расширенную таблицу разделов, а таблица начинается с сектора 446. В таблицах разделов DOS используется та же сигнатура, что и в загрузочных секторах FAT. Обработав две ненулевые записи таблицы, мы узнали бы, что раздел FAT32 находится в секторах 20 482 938-40 965 749, а расширенный раздел - в секторах 40 965 750-81 931 499. Это подтверждает результаты sigfind: совпадение было найдено в секторе 20 482 938, а затем еще несколько совпадений со смещениями 1, 6 и 7 секторов для структуры данных FSINFO и резервных копий. На рис. 9.4 показано графическое представление этого примера. На нем изображены две файловые системы, обнаруженные нами, а также некоторые ложные совпадения и расширенные таблицы разделов.

Рис. 9.4. Результаты поиска сигнатуры загрузочного сектора FAT на диске, не содержащем таблицы разделов

Этот пример показывает, что файловую систему FAT32 можно найти при наличии загрузочного сектора. Поиск 2-байтовой сигнатуры выдает много ложных совпадений, но FAT32 несколько упрощает задачу, потому что мы ожидаем найти совпадения со смещением 1,6 и 7 секторов от структуры данных FSINFO и резервных копий. С FAT12/16 дело обстоит сложнее; резервные структуры в этих системах отсутствуют, но все, что потребуется, - это найти первое совпадение. Можно начать поиск с сектора 63. После того как файловая система будет найдена, ее размер используется для перехода вперед, после чего поиск продолжается. В поиске файловых систем также могут помочь структуры расширенных таблиц разделов БОБ.

Необходимые данные загрузочного сектора | Криминалистический анализ файловых систем | Категория, содержимого


Криминалистический анализ файловых систем



Новости за месяц

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс