Sleuth Kit

Описание Sleuth Kit

The Sleuth Kit (TSK) — это библиотека на языке C и коллекция инструментов командной строки, которые позволяют исследовать образы дисков. Ключевая функциональность TSK позволяет анализировать тома и данные файловой системы в компьютере подозреваемого. Фреймворк плагинов позволяет инкорпорировать дополнительные модули для анализа содержимого файлов и строить автоматизированные системы. Библиотека может быть инкорпорирована в большое количество инструментов цифровой криминалистики, а инструменты командной строки могут использоваться напрямую для поиска доказательств.

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

Инструменты системных томов (управление носителями) позволяют вам исследовать разметку дисков и других носителей. Sleuth Kit поддерживает DOS разделы, BSD разделы (дисковые ярлыки), Mac разделы, Sun slices (Volume Table of Contents) и диски GPT. С этими инструментами вы можете идентифицировать, где размещены разделы и извлечь их для анализа другими инструментами по исследованию файловой системы.

При выполнении полного анализа системы, все мы знаем, что инструменты командной строки могут стать утомительными. Autopsy — это графический интерфейс для инструментов Sleuth Kit, который позволит вам с большей лёгкостью проводить расследование. Autopsy обеспечивает управление кейсами, целостность образов, поиск по ключевым словам и другим автоматизированные операции.

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

Данные для ввода

  • Анализирует сырые (т.е. dd), Expert Witness (т.е. EnCase) и AFF файловые системы и образы дисков.
  • Поддерживает файловые системы NTFS, FAT, ExFAT, UFS 1, UFS 2, EXT2FS, EXT3FS, Ext4, HFS, ISO 9660 и YAFFS2 (даже если на хостовой операционной системе отсутствует или имеется отличный порядок младших байтов).
  • Инструменты могут быть запущены на живой Windows или UNIX системах во время регистрации инцидента. Эти инструменты покажут файлы, которые были «спрятаны» руткитами и не будет модифицировать A-Time (время доступа) просмотренных файлов.

Техники поиска

  • Составление списка распределённых и удалённых имён файлов в ASCII и Unicode.
  • Отображение подробностей и содержимого всех NTFS атрибутов.
  • Показ подробностей о файловой системе и структуре метаданных.
  • Составление временных линий, которые могут быть импортирован в таблицы для создания графиков и отчётов.
  • Поиск хешей файлов в базах данных хешей, таких как NIST NSRL, Hash Keeper и пользовательских базах данных, которые созданы с инструментом 'md5sum'.
  • Организация файлов на основе их типа (например, все исполнимые, jpeg и документы по отдельности). Для быстрого анализа могут быть созданы страницы с миниатюрами.

Sleuth Kit написан на C и Perl и использует некоторый код и разработки из Coroner's Toolkit (TCT). Sleuth Kit протестировался на:

  • Linux
  • Mac OS X
  • Windows (Visual Studio и mingw)
  • CYGWIN
  • Open и FreeBSD
  • Solaris

У программы имеется графический интерфейс для Linux и Windows, который называется Autopsy. Точнее Autopsy это не только графический интерфейс, а целый фреймворк, который автоматизирует работы со библиотекой и инструментами Sleuth Kit, а также содержит дополнительные модули, расширяющие его возможности.

Домашняя страница: http://www.sleuthkit.org/sleuthkit/

Автор: Brian Carrier

Лицензия: Apache License Version 2.0

Справка по Sleuth Kit

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

Руководство по Sleuth Kit

У каждой программы имеется своя страница man.

Краткий обзор инструментов TSK

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

Инструменты файловой системы

Полностью автоматизированные инструменты

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

  • tsk_comparedir: Иерархически сравнивает локальные директории с содержимым сырого диска (или сырого образа). Это может использоваться для выявления руткитов.
  • tsk_gettimes: Извлекает все временные данные с диска для построения графика активности по времени. Эквивалент запуска fls с опцией '-m'.
  • tsk_loaddb: Загружает метаданные из образа в базу данных SQLite. Это позволяет с лёгкостью написать другие инструменты на любом языке и дать им доступ к содержимому образа.
  • tsk_recover: Извлекает не распределённые (или распределённые) файлы из образа диска в локальную директорию.

Инструменты уровня файловой системы

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

  • fsstat: Показывает подробности о файловой системе и статистику, включая расположение, размер и ярлыки.

Инструменты слоя имён файлов

Эти инструменты файловой системы обрабатывают структуры имён файлов, которые обычно размещены в родительской директории.

  • ffind: Находит распределённые и не распределённые имена файлов, которые указывают на данную структуру метаданных.
  • fls: Списки выделенных и удалённых имён файлов в директории.

Инструменты слоя метаданных

Эти инструменты файловой системы работают со структурами метаданных, которые хранят подробности о файле. Примеры этой структуры включают записи директории в FAT, MFT записях в NTFS и узлы в ExtX и UFS.

  • icat: Извлекает блоки данных файла, который указан посредством адреса метаданных (вместо имени файла).
  • ifind: Находит структуру метаданных, которые имеют заданный указатель имени файлов на неё, или структуру метаданных, которая указывает на заданный блок данных.
  • ils: Составляет список структур метаданных и их содержимого в формате, где разделителем является труда (|).
  • istat: Отображает статистику и подробности о данной структуре метаданных в простом для чтения формате.

Инструменты слоя единиц данных

Эти инструменты файловой системы работают с единицами данных, где хранится содержимое файлов. Примеры этих слоёв включают кластеры в FAT и NTFS и блоки и фрагменты в ExtX и UFS.

  • blkcat: Извлекает содержимое данной единицы данных.
  • blkls: Составляет список подробностей о единице данных и извлекает не распределённое пространство файловой системы.
  • blkstat: Отображает статистику о данной единице данных в простом для чтения формате.
  • blkcalc: Рассчитывает, где данные в не распределённом пространстве образа (из blkls) существуют в оригинальном образе. Это используется, когда доказательства найдены в неразмеченной области.

Инструменты журнала файловой системы

Эти инструменты файловой системы работают с журналом, который имеется у некоторых файловых систем. Журнал записывает сделанные обновления метаданных (и иногда содержимого). Это может помочь восстановить недавно удалённые данные. Примеры журналируемых файловых систем: Ext3 и NTFS.

  • jcat: Отображает содержимое указанного блока журнала.
  • jls: Выводит список записей в журнале файловой системы.

Инструменты системных томов

Эти инструменты на вход принимают образ диска (или другого носителя) и анализируют структуру раздела. Примеры включают DOS разделы, дисковые ярлыки BSD и Sun Volume Table of Contents (VTOC). Это может использоваться для поиска спрятанных данных между разделами и идентификации сдвига файловой системы для инструментов Sleuth Kit. Инструменты управления носителями поддерживают DOS разделы, ярлыки дисков BSD, Sun VTOC и Mac разделы.

  • mmls: Отображает разметку диска, включая не распределённые области.
  • mmstat: Отображает подробности о системном томе (обычно только тип).
  • mmcat: Извлекает содержимое из указанного тома в STDOUT (стандартный вывод).

Инструменты файлов образов

Этот слой содержит инструменты для файлового формата образа. Например, является ли формат образа расделённым образом или сжатым образом.

  • img_stat: Инструмент покажет подробности о формате образа
  • img_cat: Этот инструмент покажет сырое содержимое файла образа.

Дисковые инструменты

Эти инструменты могут использоваться для выявления и удаления Host Protected Area (HPA) в дисках ATA. HPA может использоваться для сокрытия данных, при этом они не будут скопированы во время сбора. В настоящее время этот инструмент только для Linux.

  • disk_sreset: Этот диск на время удаляет HPA, если он присутствует. После сброса диска, HPA будет возвращено.
  • disk_stat: Этот инструмент показывает, существует ли HPA.

Другие инструменты

  • hfind: Использует алгоритм сортировки двоичных данных для поиска хешей в NIST NSRL, Hashkeeper и пользовательских базах данных хешей, созданных в md5sum.
  • mactime: Принимает ввод из инструментов fls и ils для создания графика активности по времени.
  • sorter: Сортирует файлы на основе типов файла и выполняет проверку расширений и поиск по базе данных хешей.
  • sigfind: Поиски двоичного значения по заданному смещению. Полезно для восстановления утраченных структур данных.

Примеры запуска Sleuth Kit

Временные линии

Отображает содержимое указанного блока журнала (5035) для образа диска images/c_drive.dd:

icat images/c_drive.dd 5035 | less

ПРИМЕЧАНИЕ: Для упорядочивания отображения передавайте весь вывод по трубе в программу вроде "less".

Поиск

В этом сценарии мы будем искать в не распределённой области образа "wd0e.dd" строку "abcdefg". Первый шаг — это извлечение не распределённых блоков диска используя инструмент blkls (поскольку это FFS образ, адресные блоки фрагментированы).

blkls images/wd0e.dd > output/wd0e.blkls

Далее, используйте утилиту UNIX strings(1) для извлечения всех ASCII строк в файле не распределённых данных. Если мы собираемся искать только одну строку, может быть, нам не нужно делать это. Если мы собираемся искать много строк, тогда это быстрее. Используйте флаги '-t d' с командой "strings" для вывода байтового сдвига, на котором была найдена строка.

strings -t d output/wd0e.blkls > output/wd0e.blkls.str

Использование утилиты UNIX grep(1) для поиска строки в файле.

grep "abcdefg" output/wd0e.blkls.str | less
10389739: abcdefg

Мы заметили, что строка размещена на байте 10389739. Далее определяем, что за фрагмент. Чтобы сделать это используйте инструмент fsstat:

fsstat -t ufs images/wd0e.dd
	<...>
    CONTENT-DATA INFORMATION
    --------------------------------------------
    Fragment Range: 0 - 266079
    Block Size: 8192
    Fragment Size: 1024

Это показывает нам, что каждый фрагмент имеет длину в 1024 байта. Используя калькулятор, мы находим, что 10389739 байт поделить на 1024 — это 10146 (с остатком). Это означает, что строка "abcdefg" размещена во фрагменте 10146 сгенерированного в blkls файла. На самом деле, это не особо нам помогло, т. к. образ blkls это не настоящая файловая система. Для просмотра полного фрагмента из образа blkls мы можем использовать dd:

dd if=images/wd0e.dd bs=1024 skip=10146 count=1 | less

Далее мы найдём где этот фрагмент в оригинальном образе. Для этого будет использоваться инструмент blkcalc. "blkcalc" вернёт "адрес" в оригинальном образе, где данный "адрес" в сгенерированном образе blkls. (ПОМНИТЕ, в настоящее время это довольно медленно). Использование флага '-u' покажет, что мы передаём программе адрес blkls. Если указан флаг '-d', это значит что мы передаём программе dd адрес и это будет идентифицировать адрес blkls.

blkcalc -u 10146 images/wd0e.dd
59382

Следовательно, строка "abcdefg" размещена во фрагменте 59382. Для просмотра контекста этого фрагмента, мы можем использовать "blkcat".

blkcat images/wd0e.dd 59382 | less

Чтобы придать этому больше смысла, давайте выясним, есть ли структура метаданных, которая всё ещё указывает на этот фрагмент. Это достигается использованием ifind. Аргумент '-a' означает найти все вхождения.

ifind -a images/wd0e.dd 59382
493

Индексный дескриптор файла 493 имеет указатель на фрагмент 59382. Давайте получим больше информации о 493 используя istat.

istat images/wd0e.dd 493
	inode: 493
	Not Allocated
	uid / gid: 1000 / 1000
	mode: rw-------
	size: 92
	num of links: 1
	Modified:       08.10.2001 17:09:49     (GMT+0)
	Accessed:       08.10.2001 17:09:58     (GMT+0)
	Changed:        08.10.2001 17:09:49     (GMT+0)
	Direct Blocks:
	  59382

Далее давайте узнаем, имеется ли файл, который всё ещё ассоциирован с этим (не распределённым) индексным дескриптором файла. Это делается с использованием ffind.

ffind -a images/wd0e.dd 493
	* /dev/.123456

'*' в начале говорит о том, что файл удалён. Следовательно, с одной стороны, файл '/dev/.123456' выделил индексный дескриптор файлов 493, который выделил фрагмент 59382, содержащий строку "abcdefg".

If "ffind" вернулась с более чем одним файлом, который выделил индексный дескриптор файла 493, это означает, что, либо оба имели жёсткие ссылки к одному файлу, или что один файл (курица), выделивший индексный дескриптор файлов, был удалён, второй файл (яйцо), выделило его, а затем он был удалён. Строка принадлежит второму файлу, но трудно выяснить, который пришёл первым. С другой стороны, если "ffind" вернулась с двумя записями, где одна удалена, а одна — нет, то строка принадлежит не удалённому файлу.

Как упоминалось ранее, Autopsy сделает это всё для вас, когда вы выполняете поиск по колючевым словам по незанятому пространству.

Удалённое содержимое

Для просмотра всех удалённых файлов в образе, используйте инструмент fls. Для все удалённых файлов используйте флаг '-r' для рекурсии и флаг '-d' для удалённых.

fls -rd images/hda9.dd | less
    d/d * 232: 	/TEMP-823450
    r/d * 293: 	/TEMP-131100

Это показывает нам полный путь, по которым были размещены удалённые файлы. На некоторых системах, таких как Windows NTFS, файл ещё может быть восстановлен (зависит от системной активности после удаления файла). На других системах, таких как Solaris UFS and Linux Ext3, удалённые файлы не могут быть легко восстановлены. Номер в начале строк — это номер индексного дескриптора файлов. Символ '*' показывает, что это удалённый, а 'd' и 'r' показывают тип (директория и файл). Первая буква показывает значение типа записи директории (который не существует во всех типах файловой системы), а вторая буква — это тип в соответствии с индексным дескриптором файла. В большинстве случаев они должны быть одинаковыми, но могут быть разными для удалённых файлов, если индексный дескриптор файлов был переназначен файл другого типа. Если мы делаем "istat" на директорию (232) мы заметим, что её размер равен 0.

istat images/hda9.dd 232
	inode: 232
	Not Allocated
	uid / gid: 0 / 0
	mode: rwxr-xr-x
	size: 0
	num of links: 0
	Modified:       08.23.2001 21:52:33     (GMT+0)
	Accessed:       08.23.2001 23:05:39     (GMT+0)
	Changed:        08.23.2001 21:52:33     (GMT+0)
	Deleted:        08.23.2001 23:05:39     (GMT+0)
	Direct Blocks:

Linux делает это со всеми удалёнными директориями. Также следует обратить внимание, что в выводе "istat" не показаны блоки адресов. Это от того, что размер равен нулю 0, и программа думает, что является фиктивным. Используя опцию '-b' для "istat", мы можем принудить программу вывести адрес блока. С Linux Ext3, указатели должны быть 0, но Linux Ext2 хранит старый адрес.

istat -b 2 images/hda9.dd 232
	inode: 232
	Not Allocated
	uid / gid: 0 / 0
	mode: rwxr-xr-x
	size: 0
	num of links: 0
	Modified:       08.23.2001 21:52:33     (GMT+0)
	Accessed:       08.23.2001 23:05:39     (GMT+0)
	Changed:        08.23.2001 21:52:33     (GMT+0)
	Deleted:        08.23.2001 23:05:39     (GMT+0)
	Direct Blocks:
	  388 0

Мы можем исследовать содержимое блока 388 и увидеть имена файлов, которые были в этой директории:

blkcat -h images/hda9.dd 388 | less

Инструкция по восстановлению удалённых файлов

Файловые системы UFS/FFS или EXT2FS/EXT3FS организованы в группы. Каждая группа имеет её собственные индексы файловых дескрипторов для хранимых в них данных. При создании нового файла, ему даётся индексный дескриптор файлов в той же группе, в какой индексный дескриптор файлов родительской директории (если там ещё доступны индексные дескрипторы файлов). При создании новой директории, ей даётся индексный дескриптор файлов новой группы. Индексный дескриптор файлов выделяет блоки из той же группы, в которой сам.

При восстановлении файлов из UFS или EXTxFS, может использоваться разметка группы. Когда удалённый файл найден с 'fls', обратите внимание на индексный дескриптор файлов родительской директории:

fls -r images/hda1.dd
	d/d 30789:      doc
    + r/r * 0:    doc/.a/ssh.tar
    + r/r 30792:    doc/.a/install
	<...>

Мы хотим восстановить файл 'ssh.tar' и обратили внимание, что родительская директория это 30789, а удалённый файл имеет очищенный указатель индексного дескриптора файлов. Для идентификации группы, в которой он, используется инструмент 'fsstat':

fsstat images/hda1.dd
    FILE SYSTEM INFORMATION
    --------------------------------------------
    File System Type: EXT3FS
	<...>

    Group: 0:
      Inode Range: 1 - 15392
      Block Range: 0 - 32767
        Super Block: 0 - 0
        Group Descriptor Table: 1 - 1
        Data bitmap: 2 - 2
        Inode bitmap: 3 - 3
        Inode Table: 4 - 484
        Data Blocks: 485 - 32767

    Group: 1:
      Inode Range: 15393 - 30784
      Block Range: 32768 - 65535
        Super Block: 32768 - 32768
        Group Descriptor Table: 32769 - 32769
        Data bitmap: 32770 - 32770
        Inode bitmap: 32771 - 32771
        Inode Table: 32772 - 33252
        Data Blocks: 33253 - 65535

    Group: 2:
      Inode Range: 30785 - 46176
      Block Range: 65536 - 98303
        Data bitmap: 65536 - 65536
        Inode bitmap: 65537 - 65537
        Inode Table: 65540 - 66020
        Data Blocks: 65538 - 65539, 66021 - 98303

    <...>

Этот индексный дескриптор файлов — это диапазон адресов индексных дескрипторов файлы для группы 1. Для поиска удалённого файла мы извлекаем не распределённое пространство используя 'blkls':

blkls images/hda1.dd 32768-65535 > output/hda1-grp1.blkls

Если мы хотим извлечь все данные из этой группы, мы можем использовать 'dd':

dd if=images/hda1.dd of=output/hda1-grp1.dd bs=4096 skip=32768 \
count=32767

Где размер фрагмента 4096 (который также можно найти в выводе 'fsstat'). Любой из этих образов может быть проанализирован на ключевые слова или с использованием других инструментов по вырезанию данных, таких как 'foremost'. Этот процесс позволяет уменьшить количество данных, которые должны быть проанализированы.

Установка Sleuth Kit

Программа предустановлена в Kali Linux.

Установка в BlackArch

Программа предустановлена в BlackArch.

Информация об установке в другие операционные системы будет добавлена позже.

Скриншоты Sleuth Kit

Это утилита командной строки.

Инструкции по Sleuth Kit

Ссылки на инструкции будут добавлены позже.

Близкие программы:

Рекомендуемые статьи: