Россия, Москва, Московский Государственный Открытый Университет, 2007 |
Наборы инструментов, помогающие при судебном анализе
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 сведется к одной команде. Команда, которая нас интересует, предназначенная для сбора данных с функционирующей "живой" системы (обработка каталога /), выглядит следующим образом:
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_vault22.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.md522.3.
Так как невозможно вычислить контрольную сумму 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|7222.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 ipcs22.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.md522.6.
Каталог removed_but_running содержит файлы, которые были удалены, но все еще были открыты во время выполнения утилиты graverobber. Эта ситуация может возникать в тех случаях, когда атакующий загрузил исполняемый файл (например, анализатор сетевого потока), а затем удалил все еще открытый файл. Поскольку файл не был полностью удален из физической файловой системы, мы можем найти его копию. Обратите внимание, однако, что файл удален из логической файловой системы. Название каждого файла в каталоге removed_but_running указывает на то, когда данные были собраны, подобно именам изображений процессов, которые обсуждались ранее.
Следующий каталог, который мы видим в уликах - это каталог trust. Каталог trust содержит файлы, которые устанавливают любой тип доверия между этой системой и другими. В нашем примере в этом каталоге не было установлено никаких доверительных отношений.
Последний каталог, user_vault, содержит файлы из каждого пользовательского каталога, которые могут помочь нашему расследованию. Некоторые из собранных в нем данных, являются файлами .bash_history из всех пользовательских каталогов. Файлы .bash_history содержат список последних команд, которые пользователь попытался выполнять. По нашему опыту, если эти файлы найдены, то они или позволят вам поймать неопытного хакера, из тех, кто не знаком с системой Unix, или не содержат ничего полезного для нашего расследования.