Расследуя взлом системы можно столкнутся
с ситуацией, когда скомпрометированная
система еще не выключена пользователем или
администратором. На самом деле это
уникальный шанс собрать много важной
информации, которая после перезагрузки
будет потеряна. Можно узнать о запущенных
процессах, открытых ТСР/UDP портах,
содержание буферов, определить
установленные соединения, модули ядра и так
далее. Вся эта информация может помочь в
оффлайновом исследовании процедуры взлома
системы. Более того, если взлом произошел
относительно недавно, то можно определить
как и что делал хакер.
Иногда исследование "живой" ОС -
единственный способ собрать данные о
взломе, например некоторые LKM руткиты
загружаются только в память и не изменяют
никаких файлов. С другой стороны, методы
представленные ниже имеют много
ограничений и нарушают главное правило
исследования происшествия - не изменять состояния системы. Запуская тот или иной
инструмент на живой системе, создавая еще
один процесс, мы можем уничтожить следы
пребывания взломщика. К тому же возникает
проблема с достоверностью полученных
данных, ну да это в нашем случае не так важно.
Идеальным был бы вариант дампа памяти на
внешний носитель без участия ОС (неким hardware
девайсом, такая система существует на Sparc
машинах), однако для Intel и AMD пока это не
реализовано.
Окружение средой
Перед отбором данных от живой системы мы
должны подготовить почву для этого. Прежде
всего - запустить сетевой снифер, который
должен видеть потоки от и к взломанной
системе. Таким образом можно будет будет
обнаружить некоторые виды "неправильной"
активности, анализом сетевого трафика. Я
предлагаю использовать tcpdump, причем
записывать пакеты в raw формате, для
ускорения быстродействия. Дальше я рекомендую
иметь бумажный список в котором были бы
перечислены все предпринимаемые шаги. Это
поможет избежать ошибок и вообще поможет с
пониманием если что-то пойдет не так.
Следующее - запись всех команд и собранных
данных, получаемых в процессе работы. Необходимо
присоединиться к хосту, однако писать в
него ничего не следует, как уже было сказано
это может уничтожить оставленные следы. Для
уменьшения воздействия данные нужно
сливать на другую машину. Это одно из самых
важных правил, хотя, наверное, и самое
трудное в выполнении. Если на взломанной
машине нет набора утилит для анализа, то
необходимо его подготовить.
Набор
Необходимо помнить, что в процессе сбора
данных необходимо придерживаться следующих
критериев:
- Постараться не запускать программ на
подопытной системе. Почему? Потому что
хакер мог модифицировать системные
утилиты (такие как netstat) и библиотеки (libproc),
что сводит ценность полученных от них
данных к нулю. необходимо заранее
запастись уже откомпиленными
инструментами. - Постараться не запускать программ,
которые могут изменить мета-данные
файлов и директорий. - Все результаты надо писать на удаленный
компьютер. Можно использовать для этого
netcat. - Для полной достоверности можно
подсчитывать контрольные данные данных.
Это гарантия того, что их не подменят.
Лучше конечно делать это и на источнике
данных, и на получателе. Иногда это
невозможно, как в случае с /dev/mem. - Исходя из всего перечисленного можно
понять, что утилиты не могут писать на
диск или в свап-файл, однако это не всегда
выполнимо. Об этом поговорим позже.
А сейчас могу привести пример
оптимального набора инструментов для
работы:
Программа | Исходники и примечания |
nc | http://www.atstake.com/research/tools/network_utilities/nc110.tgz Как делать: $tar zxvf nc110.tgz; make linux Как проверить: file nc или ldd nc |
dd | http://www.gnu.org/software/fileutils/fileutils.html |
datecat | http://www.gnu.org/software/coreutils/ Как билдить: $ tar zxvf coreutils-5.0.tar.gz; configure CC="gcc -static", make Как првоерить: file date cat или ldd date cat |
pcat | http://www.porcupine.org/forensics/tct Билд: $tar zxvf tct-1.14.tgz; make CC="gcc -static" Проверка: file pcat или ldd pcat |
Hunter.o | http://www.phrack.org/phrack/61/p61-0x03_Linenoise.txt Для большей "независимости" модуля из исходников надо удалить следующее: #ifdef CONFIG_MODVERSIONS #define MODVERSIONS #include <linux/modversions.h> #endif Мы можем подгрузить модуль к другим ядрам удалив MODVERSIONS. Билд: $ gcc -c hunter.c -I/usr/src/linux/include/ |
insmod | http://www.kernel.org/pub/linux/utils/kernel/modutils/ для ядра 2.4 Билд: $./configure-enable-insmod_static; make Проверка: file insmod.static или ldd insmod.static |
NetstatArproute | http://freshmeat.net/projects/net-tools/ Билд: $bzip2 -d net-tools-1.60.tar.bz2; tar xvf net-tools-1.60.tar.bz2; make config; make CC="gcc -static" Проверка: file netstat arp route или ldd netstat arp route |
dmesg | http://ftp.cwi.nl/aeb/util-linux/util-linux-2.12.tar.gz Билд: $./configure; make CC="gcc -static" Проверка: file dmesg или ldd dmesg |
Собрав все инструменты пишем их на CD.