Когда для хранения файла или каталога требуется выделить новый индексный узел, Linux прежде всего учитывает группу блоков, в которой должен находиться индексный узел. Если индексный узел не относится к каталогу, Linux выделяет его в той же группе блоков, в которой находится родительский каталог. Это делается для того, чтобы вся информация каталога находилась более или менее в одной зоне. Если группа не содержит свободных индексных узлов или свободных блоков, поиск производится в другой группе. Для выбора случайной группы Linux использует квадратичное хеширование: этот алгоритм начинает с текущей группы блоков и последовательно прибавляет к ней степени 2 (1, 2, 4, 8, 16 и т. д.). Если в полученной таким образом группе присутствует свободный индексный узел, он используется системой. Если алгоритм не находит группу со свободным индексным узлом, проводится линейный поиск, начиная с текущей группы. В обоих случаях применяется поиск первого свободного индексного узла.

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

При выделении индексного узла его содержимое стирается, а М-, А- и С-время приводятся в соответствие с текущим временем; О-время обнуляется. Счетчик ссылок (количество имен файлов, содержащих ссылки на данный индексный узел) задается равным 1 для файлов. Для каталогов счетчик ссылок задается равным 2 из-за присутствия псевдоссылки «.» в данном каталоге. 1лпих также обновляет поле поколения текущим значением счетчика.

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

В Ext2 и ExtЗ используются разные реализации удаления файлов. ExtЗ обнуляет размер файла и стирает указатели на блоки в индексном узле и косвенных блоках. С другой стороны, Ext2 не стирает эти данные, что упрощает восстановление. М-, А- и С-время приводятся в соответствие с моментом удаления. Если файл был удален из-за перемещения на другой том, его А-время приводится в соответствие с моментом чтения содержимого. Данное обстоятельство помогает отличить удаленные файлы от перемещенных.

Обновление временных штампов

В индексных узлах ExtX хранятся четыре временных штампа, и мы должны выяснить, когда обновляются их значения. В моих экспериментах система 1лпих обновляла А-время при чтении содержимого файла или каталога. Для файла это происходило при чтении содержимого, при копировании файла и его перемещении на другой том. Если перемещение производится в пределах тома, то содержимое остается на прежнем месте, поэтому временной штамп не изменяется. Для каталогов А-время обновляется при чтении содержимого, при открытии файлов и подкаталогов. Как будет показано позднее, содержимым блоков каталога считаются имена файлов в каталоге.

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

С-время описывает момент последнего изменения индексного узла; это происходит при изменении метаданных файлов или каталогов - в частности, при создании файлов и каталогов, смене разрешений или владельца файла. При перемещении файла С-время обновляется. Э-время задается только при удалении файла и стирается при повторном выделении индексного узла. Во многих удаленных файлах М- и С-время совпадает с Б-временем.

Подведем итоге: при создании файла М-, А- и С-время обновляется текущим временем создания, Б-время обнуляется, а у родительского каталога обновляется М- и С-время. При копировании файла А-время обновляется для исходного файла и родительского каталога; у приемного файла обновляется М-, А- и С-время; а у приемного родительского каталога обновляется М- и С-время. При перемещении файла у родительского каталога исходного файла обновляется М-, А- и С-время, у родительского каталога приемного файла - М- и С-время, а приемный файл сохраняет М- и А-время оригинала с обновлением С-времени. Если перемещение происходит в пределах тома, то для приемника используется тот же индексный узел, но при перемещении на другой том исходный индексный узел освобождается с обновлением М-, А-, С- и Б-времени.

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

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

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

Чтобы проверить состояние выделения индексного узла, следует проанализировать битовую карту индексных узлов группы. Адрес битовой карты задается в дескрипторе группы. Если соответствующий бит равен 1, индексный узел выделен.

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

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

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

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

В Linux и в большинстве версий UNIX пользователь может легко менять М-и A-время файла командой touch, поэтому при оценке надежности временных штампов существующих файлов желательно найти независимые источники информации (такие, как журналы или сетевые пакеты). Кроме того, временные штампы хранятся в формате UTC, поэтому для точного вывода значений программе анализа должен быть известен часовой пояс, в котором находится компьютер.

Резервное пространство относится к числу функций, зависящих от операционной системы, но Linux заполняет неиспользуемые байты блоков нулями. Таким образом, данные из удаленных файлов могут существовать только в свободных блоках. Чтобы узнать, просматривает ли ваша программа резервное пространство файловой системы Ext3, можно воспользоваться тестовыми образами с сайта DFTT (Digital Forensic Tool Testing).

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

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

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

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

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

В процессе расследования инцидента в Linux обнаружен каталог с подозрительным именем. Наша задача - определить, какая учетная запись пользователя использовалась для создания находящихся в нем файлов. Идентификатор пользователя хранится в индексном узле файла, а информация о соответствии идентификатора и имени хранится в файле /etc/passwd.

Во время преобразования выясняется, что некоторые идентификаторы отсутствуют в файле passwd. Это могло произойти в двух ситуациях. Первая - учетная запись пользователя была создана во время инцидента, использована для создания файла, после чего удалена. Вторая ситуация - файлы были взяты из архивного файла (скажем, tar), и в них сохранился идентификатор пользователя с того компьютера, на котором был создан архивный файл. В этом случае на анализируемом компьютере вообще не существовало пользователя с указанным идентификатором.

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

Для проверки второй теории мы попробуем найти в файловой системе tar-файлы, в которых могли бы находиться подозрительные файлы. Описание системы, в которой реализован второй сценарий, приводится в документе Forensic Challenge [Honeynet Project, 2001], опубликованном Honeynet Project в 2001 г. При построении временного профиля в TSK был получен следующий результат:

[...]

Wed Nov 08 2000 08:51:56

..с -/-rwrx-xr-x 1010 users /usr/man/.Ci/ /Anap

..c -/-rwrx-xr-x 1010 users /usr/тап/.Ci/bx

Wed Nov 08 2000 08:52:09

m.c 1/lrwxrwxrwx root root /.bash_history -> /dev/null

m.c 1/lrwxrwxrwx root root /root/.bash_history -> /dev/null

[...]

У двух файлов в каталоге /usr/man/.Ci зарегистрировано время изменения 08:51:56, при этом указан идентификатор пользователя 1010. Обычно программа построения временной диаграммы преобразует идентификатор в имя пользователя, как в двух нижних строках, где идентификатор 0 преобразован в строку root. В процессе поиска в системе обнаруживается tar-файл с подозрительным каталогом. Идентификатор пользователя, ассоциированный с файлом, может быть сменен командой chown; впрочем, даже если идентификатор пользователя присутствует в файле паролей, это еще не доказывает, что файл был создан именно этим пользователем. Если мы хотим знать, кто создал подозрительный каталог, следует проанализировать разрешения родительского каталога. В данном случае родительским каталогом является каталог /usr/local/, принадлежащий привилегированному пользователю root; только ему разрешена запись. Такая конфигурация считается стандартной, поэтому можно предположить, что злоумышленник не изменял разрешения после создания каталога. А это означает, что злоумышленник с большой вероятностью получил доступ к учетной записи root.

Категория данных имен файлов

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

Общие сведения

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

Атрибуты | Криминалистический анализ файловых систем | Записи каталогов


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



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

  • Апрель
    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