Россия, Москва, Московский Государственный Открытый Университет, 2007 |
Создание и использование комплекта инструментов "живого ответа" для Unix
Маркер <var> может представлять любой из параметров, перечисленных далее. Столбец "код" содержит код, который вы вводите как <var1>, <var2> и так далее; столбец "заголовок" содержит название заголовка, который появляется в выводе команды ps. С помощью этих кодов можно инвентаризировать почти любой аспект таблицы процессов, который может потребоваться.
Многие из этих полей могут быть вам не интересны. Тем не менее, некоторые из них могут оказаться полезными. Например, если вы хотели посмотреть только идентификаторы процессов ID (PID), пользователей, которые создали процессы, время их запуска и полную командную строку, понадобится следующая команда:
victim# ./ps-axo pid,uid,start,command
Эта командная строка вывела бы больше синтаксиса командных строк, перечисленных процессов, чем выводит версия ps -aux.
kill
Если начальство просит нас немедленно исправить ситуацию, мы можем уничтожить подозрительный процесс, запущенный взломщиком (ID 721). Это можно сделать с помощью команды kill. Команда kill установлена по умолчанию в операционных системах Unix и может быть найдена в каталоге /bin.
Реализация
Следующая команда уничтожит процесс с идентификатором <PID>:
victim# ./kill-9 <PID>
Md5sum
После того как вся информация была передана на компьютер, используемый для расследования (судебный), неплохо получить контрольную сумму MD5-вывода. Поскольку на судебном компьютере может быть установлена система Unix (вместо системы Windows, которая демонстрируется в лекции "Компоновка и использование набора инструментов для расследования хакерских атак, то есть для "живого ответа" в системе Windows" ), то в этом разделе мы предлагаем правильную нотацию команд для Unix.
Версия Md5sum распространяется с основной операционной системой Linux, и подобная ей версия, md5, распространяется с системой FreeBSD. Инструментальные средства вычисления контрольной суммы MD5 будут обсуждаться снова в лекции "Некоммерческие наборы инструментов, предназначенные для судебного дублирования" .
Реализация
Следующая команда вычислит контрольную сумму MD5-файлов вывода и сохранит их в файле с именем md5sums.txt.
forensic# md5sum-b * > md5sums.txt
В любой момент утилита Md5sum может проверять контрольные суммы MD5 любых файлов, если вы снабдите ее списком этих файлов. Следующая команда проверит контрольные суммы MD5 для списка файлов и сообщит о любом изменении в их содержании.
forensic# md5sum-c md5sums.txt
Carbonite
Инструмент Carbonite был разработан Кейтом Джонсом (Keith J. Jones) и Кевином Мандиа (Kevin Mandia) в компании Foundstone, Inc. в качестве ответа на комплекты привилегированного доступа к ядру системы -LKM root (loadable kernel module root kit), а конкретнее - на комплект Knark (см. лекцию "Черный ход и средства удаленного доступа" ). Его можно загрузить с сайта http://www.foundstone.com и выполнять на большинстве систем с ядром Linux v2.2 (хотя он был разработан на RedHat и наилучшие результаты показал на подобной системе).
Поскольку процессы могут выполняться без связанных с ними двоичных файлов в файловой системе, традиционное силовое выключение машины уничтожило бы улики. Следовательно, процессы, скрытые с помощью команды kill -31 инструмента Knark, могли бы быть найдены, если бы было возможно проникнуть в ядро и исследовать таблицу процессов. Поэтому один из возможных способов бороться с комплектами LKM root состоит в использовании LKM-решений, в связи с чем и был создан инструмент Carbonite.
Реализация
Инструмент Carbonite должен компилироваться на системе, имеющей то же ядро, что и машина-жертва. Версию ядра можно, обычно, посмотреть с помощью следующей команды:
victim# uname-a
После того как надежная машина с такой же самой версией ядра, как у вашей машины-жертвы, найдена, разархивируйте содержимое пакета Carbonite и измените каталог в ней. Введите следующую команду, чтобы создать пакет:
forensic# make
Пакет компилируется, и создается файл carbonite.o. Скопируйте этот каталог на машину-жертву надежным способом (через диск или компакт диск). Затем Carbonite нужно установить в ядро, используя команду
victim# ./carbonite.sh
Когда Carbonite внесен в ядро, он временно замораживает систему, пока не выполнит свою миссию. Он создает каталог /tmp/CARBONITE, который будет содержать копию каждого процесса, выполняющегося на машине. Имена копий процессов будут CARBONITE.< Команда> < PID >, где < команда > - имя процесса и < PID > - ID процесса.
Создается дополнительный файл, CARBONITE.html, который может быть загружен в Web-браузер. Этот файл подобен файлу, созданному с помощью команды ps (рассматривался ранее), но поскольку он получен в результате прямого входа в ядро, то он более надежен и показывает все процессы, даже если они скрыты с помощью инструмента Knark.
Execve_Sniffer
Этот инструмент еще не выпущен публично; его дебют состоится в этой книге. Написанный Кейтом Джонсом (Keith J. Jones) инструмент execve_sniffer в большей степени является программой "доказательства-концепции", чем инструментом, "пригодным для часа пик", но его можно изменить так, чтобы удовлетворить определенные потребности. Инструмент execve_sniffer загружается как модуль ядра. Он "обертывает" системный вызов execve. После того как системный вызов запакован, все запросы к этой функции будут полностью зарегистрированы в виде сообщений ядра.
Чтобы понять, почему это действие важно, вы должны понять системный вызов execve. Каждый раз, когда в системе выполняется команда, командная строка передается в системный вызов execve для выполнения. Когда мы обертываем этот системный вызов, то можем сделать с информацией, которая передается в этот вызов, что захотим (подобно тому, что делает инструмент Knark, описанный в лекции "Черный ход и средства удаленного доступа" ). Поскольку мы ребята хорошие, то хотим лишь сообщать о том, какая команда была выполнена, а затем передавать саму команду оригинальному системному вызову execve.
Вся эта работа может показаться неважной, если вы можете поместить в сеть анализатор сетевых потоков (sniffer) и видеть ту же самую информацию, но этот инструмент был разработан в ответ на все увеличивающееся использование Secure Shell (SSH) для шифрования связи. Поэтому запись каждой команды, выполненной в системе, может быть единственной возможностью справиться с шифрованием. Кроме того, мы рекомендуем после установления execve_sniffer скрыть его с помощью инструмента modhide.o, имеющегося в Knark, чтобы преступник его не обнаружил и не попытался выгрузить.
Следующий текст дает пример вывода инструмента execve_sniffer из системы RedHat v6.2 Linux.
Execve Sniffer Inserted execve - user: 0 pid: 769 filename: /sbin/lsmod args: lsmod execve - user: 0 pid: 770 filename: /usr/bin/w args: w execve - user: 0 pid: 771 filename: /usr/sbin/tcpdump args: tcpdump -s 65535 -n -w /tmp/.net execve - user: 0 pid: 772 filename: /bin/dmesg args: dmesg
Как уже упоминалось, этот инструмент борется против команд взломщика, выполняющихся по зашифрованному каналу. Даже если взломщик выполняет команды, и нам не видно, что он набирает (через контроль сети), теперь мы можем видеть полное содержание того, что он выполняет.