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

Файл журнала NTFS представлен записью MFT 2; ему присвоено имя $LogFile. Эта запись MFT не имеет специальных атрибутов, а содержимое журнала хранится в атрибуте $DATA. Я обнаружил, что размер файла журнала составляет около 1-2 % общего размера файловой системы. О содержимом журнала известно очень мало, хотя компания Microsoft опубликовала кое-какую высокоуровневую информацию в своих руководствах и в книге «Inside Windows 2000».

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

Рис. 12.11. Структура атрибута $DATA файла $LogFile, содержащего журнал NTFS

Протокольная область содержит серию записей. Каждой записи соответствует логический порядковый номер (Ё8Ы), который представляет собой уникальное 64-разрядное значение. Номера ЦЗЫ назначаются в порядке возрастания. Протокольная область имеет конечный размер, и когда в конце файла не остается места для создания новой записи, она помещается в начало файла. В этой ситуации запись в конце файла журнала будет обладать большим номером Ь8Ы, чем у записи в начале файла. Другими словами, номера назначаются записям на основании времени их создания, а не расположения в файле. Записи, ставшие ненужными, заменяются при повторном заполнении журнала.

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

• создание файла или каталога;

• изменение содержимого файла или каталога;

• переименование файла или каталога;

• изменение любых данных, хранящихся в записи MFT файла или каталога

(идентификатор пользователя, параметры безопасности и т. д.).

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

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

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

На рис. 12.12 показан указатель из области рестарта к местонахождению последней записи контрольной точки. Дальнейший перебор обнаруживает две транзакции. У транзакции 1 имеется запись закрепления, поэтому система по содержимому поля возврата проверяет правильность состояния диска. Транзакция 2 не имеет записи закрепления, поэтому система по содержимому поля отмены убеждается в том, что ни одно из предполагаемых изменений не существует.

Журнал не содержит пользовательских данных, которые являются нерезидентными и хранятся во внешних кластерах, поэтому он не может использоваться для восстановления файлов. В нем хранится содержимое резидентных атрибутов для отмены недавних изменений. На момент написания книги мне неизвестна ни одна программа анализа, которая бы умела использовать данные в файле журнала, потому что не все структуры данных документированы. Впрочем, кое-какую информацию можно найти простым просмотром строк ASCII или Unicode в файле (см. раздел «Файл SLogFile» главы 13).

В заголовке каждой записи MFT хранится последний номер LSN для файла. В частности, его значение приводилось в выходных данных istat в приведенных ранее примерах. По этому значению можно определить относительный порядок изменения двух файлов.

Рис. 12.12. Пример $LogFile с двумя транзакциями за последней записью контрольной точки. Одна из транзакций не была закреплена

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

Журнал может предоставить информацию о последних изменениях в файловой системе. Тем не менее невозможно предсказать, как долго будут существовать файлы до их перезаписи, но самое худшее - неизвестна структура этого файла. Следовательно, даже если вы найдете улики, возможно, их будет трудно интерпретировать. Значение LSN в заголовке записи MFT файла позволяет восстановить порядок редактирования. Чем больше число, тем позднее редактировался файл.

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


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



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

  • Апрель
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31