Опубликован: 20.02.2007 | Уровень: специалист | Доступ: платный
Лекция 22:

Наборы инструментов, помогающие при судебном анализе

Graverobber

Утилита graverobber собирает важную, не удаленную информацию с нужной системы. Ее можно вызвать в двух различных состояниях: для сбора информации с "живой" системы (системы, которая в настоящее время запущена) и для сбора информации с автономной системы. Для анализа автономной системы вам необходимо иметь доступ к интересующему вас жесткому диску или его представлению, сделанному с помощью dd. Мы начнем с рассмотрения состояния, в котором собираются "живые" данные, а затем рассмотрим анализ автономной системы.

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

Использование: grave-robber [-filmnpstvDEFIMOPVS] [-b body_file] [-c corpse_dir]
[-d data_directory] [-e error_file] [-o os_type]
[directory_name(s)]
Общие: 
        -b body bodyfile.   Используйте "-" для стандартного вывода stdout.
        -c corpse_dir       каталог, в котором будет выполнен анализ 
                            выключенной системы. Как правило, это смонтированный диск.    
        -d dir              Каталог для выходных данных.    
        -e file             Перенаправляет стандартный поток ошибок в этот файл.
        -o os_type          Спецификация типа автономной OC. В версии TCT-1.09 поддерживаются 
                            следующие операционные системы: FREEBSD2, FREEBSD3, FREEBSD4, 
                            OPENBSD2, BSDI2, BSDI3, BSDI4, SUNOS4, SUNOS5, LINUX2.
        -v                  Обеспечивает подробный вывод.   
        
Сбор микро-данных.      
        -F                  Собирает файлы из файловой системы по мере их прохождения. 
                            Копирует объекты из переменной $conf_pattern, установленной 
                            в coroner.cf, обычно включающей стандартные выражения, 
                            подобные "*.cf", "*.conf", и т.д. Подразумевает -m. 
        -i                  Собирает пассивные данные Inode.    
        -I                  Перехватывает выполняющиеся процессы. Пробуйте вначале копировать 
                            с процессора, а затем извлекайте изображение прямо с диска. Требует 
                            "живой" функционирующей системы.    
        -l                  Выполняет действия, касающиеся материалов "look@first" (обрабатывать 
                            в первую очередь) - обрабатывает путь, ищет файлы в каталоге look@first. 
                            Требует "живой" системы. 
        -m                  Перехватывает данные MACtime.   
        -M                  Вычисляет контрольные суммы MD5файлов. 
                            Подразумевает ключ -m.  
        -O                  Сохраняет файлы, которые открыты, но были удалены с диска (зачастую 
                            это файлы конфигурации, исполняемые файлы и т.д.). Требует "живой системы".
        -p                  Копирует задействованную память в файл с помощью команды pcat. В некоторых 
                            системах с этой командой возникают проблемы, так что будьте осторожны! 
                            Требует "живой" системы. 
        -P                  Выполняет действующие команды - ps, lsof, и т.д. Требует "живой" системы.
        -s                  Выполняет общие команды Shell на хосте; это включает сбор информации в сети и 
                            на хосте типа netstat, df и т.д. Этот ключ не включает действующие команды (ps/lsof) 
                            (смотрите ключ -P).
        -S                  Сохраняет файлы, перечисленные в "save_these_files" (conf dir).
        -t                  Собирает надежную информацию.
        -V                  Собирает информацию из каталога dev.
        
Сбор макро-данных
        -f                  Быстрый сбор данных. Избегает операций с файловой системой. 
                            Не используется вместе с опцией -m. Эта опция подразумевает ключи -P, -s и -O. 
        -n                  Сбор данных, заданный по умолчанию. Устанавливает 
                            ключи -i, -I, -m, -M, -P, -s, -t, -l, -O, -F, -S, -V.
        -E                  Выполняет все, что можно, включая опасные опции. В настоящее время в 
                            версии 1.09 этот ключ добавляет только -p к ключам, заданным по умолчанию.
Листинг 22.1.
Примечание. Если никаких имен каталогов не задано, то graverobber подразумевает корневой каталог ( / ).

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

victim# cd tct-1.09/bin
victim# mkdir /mnt/storage/evid
victim# ./grave-robber -v -d /mnt/storage/evid/

С параметром -v graverobber выполняется в подробном режиме. С помощью параметра -d каталог /mnt/storage/evid задается, как область хранения вывода.

Имеется несколько пояснений, касающихся предыдущей команды, которые стоит упомянуть. Во-первых, набор инструментов должен быть установлен и скомпилирован на системе-жертве. Потенциально это может уничтожить часть улик, если вы захотите в будущем выполнить судебное дублирование этого жесткого диска (для автономного анализа с использованием TCT ). Во-вторых, количество данных, произведенных этим процессом, может быть огромно и обычно оно не помещается на гибком диске. Поэтому, приведенная здесь команда использовала каталог /mnt/storage/evid, который может находиться на внешнем жестком диске, смонтированном через сетевую файловую систему (NFS). Монтирование каталога-хранилища через NFS поможет уменьшить деятельность на жестком диске жертвы, если вам потребуется выполнять судебное дублирование в будущем. Возможно, что вы захотите скопировать и скомпилировать TCT на том же жестком диске по той же самой причине. Когда graverobber закончит работу, вы получите каталог /mnt/storage/evid, заполненный уликами, предназначенными для дальнейшего анализа.

Для примера, рассматриваемого в этой лекции, предположим, что мы экспортировали каталог /mnt/storage с нашего судебного компьютера и установили его на машине-жертве через NFS. Теперь весь дополнительный анализ мы выполним на судебной рабочей станции. Чтобы ограничить возможное изменение состояния машины-жертвы, на ней будут собраны только те данные, которые очевидно являются уликами. Мы будем придерживаться этого фундаментального судебного принципа на случай, если позже мы захотим выполнить дублирование.

forensic# pwd
/mnt/storage/evid
forensic# ls -al
total 4460
drwxr-xr-x  9   root    wheel      4096  Apr 19 12:23    .   
drwxr-xr-x  3   root    wheel      4096  Apr 19 12:23    ..  
-rw-r--r--  1   root    wheel     81342  Apr 19 12:23    MD5_all 
-rw-r--r--  1   root    wheel        54  Apr 19 12:23    MD5_all.md5 
-rw-r--r--  1   root    wheel   4414968  Apr 19 12:23    body
-rw-r--r--  1   root    wheel      8282  Apr 19 12:23    body.S
drwx------  2   root    wheel      4096  Apr 19 12:23    command_out
drwx------  8   root    wheel      4096  Apr 19 12:23    conf_vault
drwx------  2   root    wheel      4096  Apr 19 12:23    icat
drwx------  2   root    wheel      4096  Apr 19 12:23    proc
drwx------  2   root    wheel      4096  Apr 19 12:23    removed_but_running
drwx------  2   root    wheel      4096  Apr 19 12:23    trust
drwx------  2   root    wheel      4096  Apr 19 12:23    user_vault
22.2.

Файл MD5_all будет содержать все контрольные суммы MD5 -вывода, произведенного утилитой graverobber. Фрагмент этого файла показан ниже.

Fri Apr 19 14:45:00 EDT 2002
d41d8cd98f00b204e9800998ecf8427e    /root/evid//    
c213baacdb82f1b4b7b017e64bb7f9e9    /root/evid//body.S  
121eb60b8a0a74045fefe3e3c445a766    /root/evid//body    
d41d8cd98f00b204e9800998ecf8427e    /root/evid//command_out 
f2e21b93a776dbd2bf8e2c180bbf0d2b    /mnt/storage/evid//command_out/lsof0    
1977905a8c61187e98a3ed83a04d337f    /mnt/storage/evid//command_out/lsof0.md5    
3f75c98c1c0722e4fe2f473f61084c5d    /mnt/storage/evid//command_out/lsof 
688d73a46ffd897436c08519108fd1e8    /mnt/storage/evid//command_out/lsof.md5 
1a42658e1680864aa41ce65f14a44a7d    /mnt/storage/evid//command_out/ps   
76df89b0b72d90d18e6d04184d4660b3    /mnt/storage/evid//command_out/ps.md5
22.3.
Примечание. Может показаться странным получение контрольной суммы MD5 -каталога, но если вы представите себе каталог, как специальный файл на диске, который указывает на содержащиеся в нем файлы и каталоги, то вычисление контрольной суммы MD5 станет возможным.

Так как невозможно вычислить контрольную сумму MD5 -файла MD5_all, когда вычисляются другие суммы (потому что результат добавляется к файлу), существует файл MD5_all.md5. Он содержит контрольную сумму MD5 -файла MD5_all. Содержание этого файла следующее.

c185ae9291fda9365ac87193d437b01b    /mnt/storage/evid // MD5_all

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

class|host|start_time
body|redhat62|1018203800
md5|file|st_dev|st_ino|st_mode|st_ls|st_nlink|st_uid|st_gid|st_rdev|st_size
|st_atime|st_mtime|st_ctime|st_blksize|st_blocks
cc6a0e39ec990af13cc6406bbc0ff333|/sbin/arp|770|100477|33261|
-rwxr-xr-x|1|0|0|0|36272|1018203746|952425102|1016710670|4096|72
d73b4aa0d067479b7b80555fbca64f99|/usr/bin/at|770|16748|35309
|-rwsr-xr-x|1|0|0|0|33288|1018203769|951940087|1016710377|4096|72
93287edbf19f164bb81b188b6475d756|/bin/cat|770|81832|33261
|-rwxr-xr-x|1|0|0|0|9528|1018203746|949931427|1016710371|4096|24
023915f5fd17489a0595277e1051eac0|/bin/cp|770|81820|33261
|-rwxr-xr-x|1|0|0|0|33392|1018203754|952479772|1016710370|4096|72
22.4.

Строки, записанные курсивом, очевидно, показывают названия полей. Большая часть этой информации может показаться вам бессмысленной, и мы не будем обременять вас излишними деталями. Однако вы должны помнить, что утилита graverobber (и другие инструментальные средства из пакета TCT ) может использовать эту информацию, чтобы вывести более значащие сообщения. Мы возвратимся к этой теме после того, как обсудим остальную часть структуры файла улик, произведенного инструментом TCT.

Файл body.S имеет ту же самую структуру, что и основной файл, обсуждавшийся ранее, за исключением того, что он содержит все программы SUID с машины-жертвы. Если вы плохо знакомы с системой Unix, то все программы SUID должны быть интересны вам как следователю. Причина здесь в том, что когда эти файлы выполняются, результирующий процесс изменяет текущего пользователя на владельца файла. Скорее, мы заинтересовались бы SUID-файлами, которые принадлежат привилегированному пользователю (root).

Каталог command_out содержит выводы, сделанные командами, выполненными в системе инструментом TCT. Так как мы решили выполнить утилиту graverobber на "живой" системе, то это как раз та информация, которую мы ищем! Мы будем иметь вывод каждой выполненной команды, такой как arp, перенаправленный в файл с названием, совпадающим с именем команды. Для файла вывода также будет вычислена контрольная сумма MD5 и сохранена в файле с тем же самым именем и расширением .md5. Если вы хотите обратиться к файлу регистрации команд, выполненных в системе, можете прочитать файл coroner.log, находящийся в вершине каталога данных.

forensic# ls -al
total 428
drwx------  2   root    wheel   4096  Apr 19 12:23    .   
drwxr-xr-x  9   root    wheel   4096  Apr 19 12:23    ..  
-rw-r--r--  1   root    wheel     29  Apr 19 12:23    arp 
-rw-r--r--  1   root    wheel     62  Apr 19 12:23    arp.md5 
-rw-r--r--  1   root    wheel    154  Apr 19 12:23    df  
-rw-r--r--  1   root    wheel     61  Apr 19 12:23    df.md5  
-rw-r--r--  1   root    wheel   4291  Apr 19 12:23    dmesg   
-rw-r--r--  1   root    wheel     64  Apr 19 12:23    dmesg.md5   
-rw-r--r--  1   root    wheel    401  Apr 19 12:23    finger  
-rw-r--r--  1   root    wheel     65  Apr 19 12:23    finger.md5  
-rw-r--r--  1   root    wheel   1147  Apr 19 12:23    free_inode_info._dev_hda2
-rw-r--r--  1   root    wheel     84  Apr 19 12:23    free_inode_info._dev_hda2.md5
-rw-r--r--  1   root    wheel    732  Apr 19 12:23    ifconfig    
-rw-r--r--  1   root    wheel     67  Apr 19 12:23    ifconfig.md5    
-rw-r--r--  1   root    wheel    337  Apr 19 12:23    ipcs
22.5.

Чтобы яснее видеть то, что мы здесь описываем, исследуем файл ifconfig. Так как команда ifconfig в системе Unix дает информацию о плате сетевого интерфейса, мы ожидаем увидеть IP-адреса и доступные интерфейсы. Следующая информация была собрана с нашей системы.

forensic# cat ifconfig
Sun Apr 7 14:25:37 EDT 2002
eth0    Link encap:Ethernet HWaddr 00:BD:73:9E:00:01
        inet addr:192.168.1.104 Bcast:192.168.1.255 Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
        RX packets:851 errors:0 dropped:0 overruns:0 frame:0
        TX packets:725 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:100
        Interrupt:9 Base address:0x1000

Lo      Link encap:Local Loopback
        inet addr:127.0.0.1 Mask:255.0.0.0
        UP LOOPBACK RUNNING MTU:3924 Metric:1
        RX packets:89 errors:0 dropped:0 overruns:0 frame:0
        TX packets:89 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0

forensic# cat ifconfig.md5
cae275f055428cdaa505f81970b29662 /mnt/storage/evid//command_out/ifconfig

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

Каталог conf_vault содержит все интересные системные файлы конфигурации. Он также записывает большинство основных (home) каталогов пользователей в системе. Файлы в этом каталоге сохраняются с той же структурой каталога, как и в первоначальной системе-жертве. Кроме того, утилита graverobber создает файл с именем index.html, который может быть загружен в Web-броузере. Это позволяет выбирать папки обычным образом в пределах этого каталога.

Каталоги icat и proc содержат изображения выполняющихся процессов. Эти каталоги очень важны для исследования системы Unix, потому что исполняемый файл может быть отмечен, как удаленный в файловой системе, но все еще выполняться в памяти. Как вы, наверное, догадываетесь, большинство взломщиков запускают инструменты типа программ черного хода (backdoor) или анализаторы сетевых потоков (sniffer) и удаляют исполняемый файл. Эти каталоги дают единственный способ найти изображения процессов так, чтобы вы затем могли проанализировать их с помощью инструментов. В этом каталоге файлы названы в соответствии с первоначальным ID процесса (PID). Они имеют временную метку (timestamp), содержащую время, когда они были зафиксированы. Утилита graverobber также создает файл .md5, который содержит контрольную сумму MD5 -изображения исполняемого файла. Следующая выборка, сделанная из каталога proc, поможет проиллюстрировать нашу точку зрения:

forensic# ls -al
total 3312
drwx------  2   root    wheel    4096    Apr 19 12:23    .   
drwxr-xr-x  9   root    wheel    4096    Apr 19 12:23    ..  
-rw-r--r--  1   root    wheel   25968    Apr 19 14:23    1.out_2002_04_19_14:23:20_-0400
-rw-r--r--  1   root    wheel      83    Apr 19 14:23    1.out_2002_04_19_14:23:20_-0400.md5
22.6.

Каталог removed_but_running содержит файлы, которые были удалены, но все еще были открыты во время выполнения утилиты graverobber. Эта ситуация может возникать в тех случаях, когда атакующий загрузил исполняемый файл (например, анализатор сетевого потока), а затем удалил все еще открытый файл. Поскольку файл не был полностью удален из физической файловой системы, мы можем найти его копию. Обратите внимание, однако, что файл удален из логической файловой системы. Название каждого файла в каталоге removed_but_running указывает на то, когда данные были собраны, подобно именам изображений процессов, которые обсуждались ранее.

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

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

Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва