На высоком уровне процесс создания файла /dirlZfilel.dat сводится к поиску каталога dirl, созданию записи каталога, выделению индексного узла и последующему выделению блоков для содержимого файла. Точный порядок выделения структур данных зависит от ОС; описанная далее процедура может отличаться от той, что используется в вашей конкретной системе.

1. Создание файла начинается с чтения 1024-байтовой структуры данных суперблока, которая находится в файловой системе со смещением 1024 байта. Из суперблока мы узнаем, что размеры блока и фрагмента равны 1024 байтам. Каждая группа блоков состоит из 8192 блоков и 2016 индексных узлов. Зарезервированные блоки перед началом первой группы блоков отсутствуют.

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

3. Далее необходимо обработать индексный узел 2, чтобы найти каталог diг1 в корневом каталоге. Используя информацию о количестве индексных узлов в группе, мы определяем, что индексный узел 2 находится в группе блоков 0. Из записи таблицы дескрипторов для группы 0 мы определяем, что таблица индексных узлов начинается в блоке 6.

4. Из блока 6 читается таблица индексных узлов, в которой обрабатывается вторая запись. Индексный узел 2 показывает, что структуры записей каталогов для корневого каталога находятся в блоке 258.

5. Мы читаем содержимое корневого каталога из блока 258 и обрабатываем его как список записей каталогов. В первых двух записях хранится информация о записях «.» и «..». Последовательно перемещаясь вперед по указанным длинам записей (удаленные файлы нас не интересуют), мы в конечном счете приходим к записи, в которой указано имя dirl. В записи указан номер индексного узла 5033. А-время корневого каталога обновляется временем открытия каталога.

6. Местонахождение индексного узла 5033 определяется делением числа на количество индексных узлов в группе. Так мы определяем, что узел находится в группе блоков 2. Используя запись дескриптора для группы 2, мы определяем, что его таблица индексных узлов начинается в блоке 16 390.

7. Из блока 16 390 читается таблица индексных узлов, в которой обрабатывается запись 1001 - относительным номером индексного узла 5 033. Содержимое индексного узла показывает, что содержимое dirl находится в блоке 18 431.

8. Мы читаем содержимое dirl из блока 18 431 и обрабатываем его как список записей каталогов. Нас интересует неиспользуемое пространство в каталоге. Имя filel.dat состоит из 8 символов, поэтому для хранения записи каталога потребуется 16 байт. Имя нового файла включается между двумя существующими именами, для каталога обновляется М- и С-время. Изменения содержимого каталога фиксируются в журнале.

9. Для создаваемого файла необходимо выделить индексный узел, причем этот узел должен принадлежать группе своего родительского каталога, то есть группе блоков 2. Битовая карта индексных узлов для группы 2 отыскивается в блоке 16 386 по дескриптору группы. Методом поиска первого доступного узла мы определяем, что индексный узел 5 110 свободен. Соответствующий бит в битовой карте устанавливается равным 1, счетчик свободных индексных узлов в таблице дескрипторов уменьшается, как и счетчик свободных индексных узлов в суперблоке. Адрес индексного узла заносится в запись каталога filel.dat. Изменения битовой карты, дескриптора группы и суперблока регистрируются в журнале.

Рис. 14.14. Итоговое состояние системы после добавления файла dirlZfilel.dat

10. На следующем этапе заполняется содержимое индексного узла 5110: для этого мы находим его в таблице индексных узлов группы 2 и инициализируем основные параметры индексного узла. Временные штампы инициализируются текущим временем, а счетчик ссылок задается равным 1. Изменения таблицы индексных узлов регистрируются в журнале.

11. Для хранения содержимого файла требуется выделить шесть блоков. Мы переходим к обработке битовой карты блоков, расположенной в блоке 16 385. По алгоритму поиска первого доступного блока в группе находятся блоки 20 002-20 003 и 20 114-20 117. Биты этих блоков в карте устанавливаются, а их адреса включаются в прямые указатели, хранящиеся в узле 5110. Счетчики свободных блоков в дескрипторе групп и суперблоке также обновляются. М-и С-времена индексного узла обновляются в соответствии с внесенными изменениями. Изменения индексного узла, дескриптора группы, суперблока и битовой карты регистрируются в журнале.

12. Содержимое файла filel.dat записывается в выделенные блоки.

Итоговое состояние системы показано на рис. 14.14.

Пример удаления файла

Перейдем к процедуре удаления файла /dirl7fi4el.dat. Как упоминалось в предыдущем разделе, порядок освобождения структур данных зависит от ОС, и описанная далее процедура может отличаться от той, что используется в вашей конкретной системе.

1. Удаление файла начинается с чтения 1024-байтовой структуры данных суперблока, которая находится в файловой системе со смещением 1024 байта. Из суперблока мы узнаем, что размеры блока и фрагмента равны 1024 байтам. Каждая группа блоков состоит из 8192 блоков и 2016 индексных узлов. Зарезервированные блоки перед началом первой группы блоков отсутствуют.

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

3. Далее необходимо обработать индексный узел 2, чтобы найти каталог di г1 в корневом каталоге. Используя информацию о количестве индексных узлов в группе, мы определяем, что индексный узел 2 находится в группе блоков 0. Из записи таблицы дескрипторов для группы 0 мы определяем, что таблица индексных узлов начинается в блоке 6.

4. Из блока 6 читается таблица индексных узлов, в которой обрабатывается вторая запись. Индексный узел 2 показывает, что структуры записей каталогов для корневого каталога находятся в блоке 258.

5. Мы читаем содержимое корневого каталога из блока 258 и обрабатываем его как список записей каталогов. В первых двух записях хранится информация о записях «.» и «..». Последовательно перемещаясь вперед по указанным длинам записей (удаленные файлы нас не интересуют), мы в конечном счете приходим к записи, в которой указано имя d^rl. В записи указан номер индексного узла 5033. А-время корневого каталога обновляется временем открытия каталога.

6. Местонахождение индексного узла 5033 определяется делением числа на количество индексных узлов в группе. Так мы определяем, что узел находится в группе блоков 2. Используя запись дескриптора для группы 2, мы определяем, что его таблица индексных узлов начинается в блоке 16 390.

7. Из блока 16 390 читается таблица индексных узлов, в которой обрабатывается запись 1001 - относительным номером индексного узла 5 033. Содержимое индексного узла показывает, что содержимое dirl находится в блоке 18 431.

8. Мы читаем содержимое dirl из блока 18 431 и обрабатываем его как список записей каталогов. Нас интересует запись файла filel.dat. Мы находим эту запись и узнаем, что ей выделен индексный узел 5110. Чтобы освободить запись каталога, ее длина прибавляется к длине предыдущей записи каталога, относящейся к файлу 12.jpg. В результате операций обновляется М-, А- и С-время. Изменения регистрируются в журнале.

Рис. 14.15. Итоговое состояние системы после удаления файла dirl7filel.dat

9. В результате удаления имени файла счетчик ссылок в индексном узле 5110 таблицы индексных узлов группы 2 уменьшается на 1. Значение счетчика становится равным 0; это означает, что индексный узел необходимо освободить. Для этого соответствующий разряд битовой карты индексных узлов обнуляется, а в дескрипторе группы и суперблоке обновляются счетчики свободных индексных узлов. Изменения регистрируются в журнале.

10. Также необходимо освободить шесть блоков, выделенных для хранения содержимого файла. Для каждого блока обнуляется соответствующий разряд битовой карты и стирается указатель на блок в индексном узле. Размер файла уменьшается при каждом освобождении блока, и в конечном счете он уменьшается до 0. М-, С- и Б-время индексного узла обновляется в соответствии с внесенными изменениями. В дескрипторе группы и суперблоке обновляются счетчики свободных блоков. Изменения регистрируются в журнале.

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

Разное

Этот раздел посвящен восстановлению удаленных файлов в ExtX и проверке целостности файловой системы. Обе темы выходят за рамки какой-либо конкретной категории данных.

Восстановление файлов

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

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

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

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

Проверка целостности данных

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

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

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

Большая часть данных каждого индексного узла используется, и возможности хранения скрытых данных в них ограничены, хотя в конце каждой таблицы индексных узлов могут следовать неиспользуемые байты. Все блоки, указанные в указателях выделенной индексной записи, также должны быть выделенными. Индексные узлы файлов специальных типов не должны ассоциироваться с выделенными блоками. Первые 10 индексных узлов зарезервированы, но многие из них остаются неиспользованными и могут содержать скрытые данные 2002]. Кроме того, скрытые данные могут присутствовать в неиспользуемом пространстве расширенных атрибутов.

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

Итоги

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

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

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

• Card, Remy, Theodore Ts’o, and Stephen Tweedie. «Design and Implementation of the Second Extended Filesystem». In Proceeding of the First Dutch International Symposium on Linux, ed. Frank B. Brokken etal, Amsterdam, December 1994. http:/ /www.mit.edu/tytso/www/linux/ext2intro.html.

• Carrier, Brian, «EXT3FS Keyword Search Test #1». Digital Forensic Tool Testing, November 2003. http://dftt.sourceforge.net.

• Dubeau, Louis-Dominique. «Analysis of the Ext2fs Structure». The Operating System Resource Center, 1994. http://www.nondot.org/sabre/os/files/FileSystem/ext2fs/.

• Red Hat, Inc. Ext3 User Mailing List, n.d. https://listman.redhat.com/mailman/listinfo/ ext3-users/.

• Heavner, Scott D. Linux Disk Editor, n.d. http://lde.sourceforge.net/.

• Garfinkel, Simson, Gene Spafford, and Alan Schwartz. Practical Unix and Internet Security. 3rd ed. Sebastopol: O’Reilly, 2003.

• Gleditsch, Arne Georg, and Per Kristjan Gjermshus. Linux Source Code, n.d. http:/ /bcr.linux.no/source/.

• grugq. «Defeating Forensic Analysis on Unix». Phrack, Issue 15, July 28,2002. http:/ /www.phrack.org/show.php?p=59&a=6.

• Honeynet Project. «The Forensic Challenge». January 15, 2001. http://www.honey-net.org/challenge/index.html.

• McKusick, Marshall, Keith Bostic, Michael Karels, and John Quarterman. The Design and Implementation of the 4.4 BSD Operating System. Boston: Addison-Wesley, 1996.

• Philips, Daniel. «A Directory Index for Ext2». Proceeding of the Usenix Fifth Annual Linux Showcase and Conference, 2001.

• Poirier, Dave. «Second Extended File System: Internal Layout». 2002. http:// www.nongnu.org/ext2-doc/.

• Ts’o, Theodore. «E2fsprogs». Sourceforge, n.d. http://e2fsprogs.sourceforge.net/.

• Ts’o, Theodore, and Stephen Tweedie. «Planned Extensions to the Linux Ext2/ Ext3 Filesystem». Proceeding of the 2002 Usenix Technical Conference FREENIX Track, 2002.

• Tweedie, Stephen. «EXT, Journaling Filesystem». Sourceforge, July 20, 2000. http:/ /olstrans.sourceforge.net/release/0LS2000-ext3/0LS2000-ext3.htmL

Порядок удаления файлов | Криминалистический анализ файловых систем | Структуры данных ext2 и ext3


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



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

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