sleuthkit


|

Описание 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 позволяет очень просто инкорпорировать модули файлового анализа написанные другими разработчиками.

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

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

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

У программы имеется графический интерфейс для 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 организованы по слоям. Обычно следующие инструменты в качестве ввода принимают диск или образ файловой системы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

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

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

1
icat images/c_drive.dd 5035 | less

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

Поиск

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

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

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

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

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

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

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

1
2
3
4
5
6
7
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:

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

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

1
2
blkcalc -u 10146 images/wd0e.dd
59382

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

1
blkcat images/wd0e.dd 59382 | less

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

1
2
ifind -a images/wd0e.dd 59382
493

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

1
2
3
4
5
6
7
8
9
10
11
12
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.

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

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

 

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

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

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

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

1
2
3
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.

1
2
3
4
5
6
7
8
9
10
11
12
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 хранит старый адрес.

1
2
3
4
5
6
7
8
9
10
11
12
13
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 и увидеть имена файлов, которые были в этой директории:

1
blkcat -h images/hda9.dd 388 | less

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

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

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

1
2
3
4
5
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':

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
32
33
34
35
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':

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

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

1
2
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

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