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

Создание и использование комплекта инструментов "живого ответа" для Unix

< Лекция 18 || Лекция 19: 12345 || Лекция 20 >

Маркер <var> может представлять любой из параметров, перечисленных далее. Столбец "код" содержит код, который вы вводите как <var1>, <var2> и так далее; столбец "заголовок" содержит название заголовка, который появляется в выводе команды ps. С помощью этих кодов можно инвентаризировать почти любой аспект таблицы процессов, который может потребоваться.

Код Заголовок
%cpu %CPU
%mem %MEM
alarm ALARM
args COMMAND
blocked BLOCKED
bsdstart START
bsdtime TIME
c C
caught CAUGHT
cmd CMD
comm. COMMAND
command COMMAND
cputime TIME
drs DRS
dsiz DSIZ
egid EGID
egroup EGROUP
eip EIP
esp ESP
etime ELAPSED
euid EUID
euser EUSER
f F
fgid FGID
fgroup FGROUP
flag F
flags F
fname COMMAND
fsgid FSGID
fsgroup FSGROUP
fsuid FSUID
fsuser FSUSER
fuid FUID
fuser FUSER
gid GID
group GROUP
ignored IGNORED
intpri PRI
lim LIM
longtname TTY
lstart STARTED
m_drs DRS
m_trs TRS
maj_flt MAJFL
majflt MAJFLT
min_flt MINFL
minflt MINFLT
ni NI
nice NI
nwchan WCHAN
opri PRI
pagein PAGEIN
pcpu %CPU
pending PENDING
pgid PGID
pgrp PGRP
pid PID
pmem %MEM
ppid PPID
pri PRI
rgid RGID
rgroup RGROUP
rss RSS
rssize RSS
rsz RSZ
ruid RUID
ruser RUSER
s S
sess SESS
session SESS
sgi_p P
sgi_rss RSS
sgid SGID
sgroup SGROUP
sid SID
sig PENDING
sig_block BLOCKED
sig_catch CATCHED
sig_ignore IGNORED
sig_pend SIGNAL
sigcatch CAUGHT
sigignore IGNORED
sigmask BLOCKED
stackp STACKP
start STARTED
start_stack STACKP
start_time START
stat STAT
state S
stime STIME
suid SUID
suser SUSER
svgid SVGID
svgroup SVGROUP
svuid SVUID
svuser SVUSER
sz SZ
time TIME
timeout TMOUT
tmout TMOUT
tname TTY
tpgid TPGID
trs TRS
trss TRSS
tsiz TSIZ
tt TT
tty TT
tty4 TTY
tty8 TTY
ucomm COMMAND
uid UID
uid_hack UID
uname USER
user USER
vsize VSZ
vsz VSZ
wchan WCHAN

Многие из этих полей могут быть вам не интересны. Тем не менее, некоторые из них могут оказаться полезными. Например, если вы хотели посмотреть только идентификаторы процессов 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 будут обсуждаться снова в лекции "Некоммерческие наборы инструментов, предназначенные для судебного дублирования" .

Примечание. Файл "md5sums.txt" не будет иметь правильную контрольную сумму MD5, объявленную в нем самом, и всегда будет давать контрольную сумму MD5, отличную от истинной. Это происходит потому, что в этот файл ведется запись в то время, когда Md5sum вычисляет контрольную сумму.
Реализация

Следующая команда вычислит контрольную сумму MD5-файлов вывода и сохранит их в файле с именем md5sums.txt.

forensic# md5sum-b * > md5sums.txt

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

forensic# md5sum-c md5sums.txt
Примечание. В системах *BSD используется команда не md5sum, а md5, и она не требует ключа -b.

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.sh потребуется отредактировать, чтобы удовлетворить ваши определенные потребности. Например, если вы используете Carbonite в живом ответе, вы захотите указать скрипт в надежной версии загрузчика модуля (insmod) так, чтобы не использовать копию, принадлежащую взломанной машине.

Когда Carbonite внесен в ядро, он временно замораживает систему, пока не выполнит свою миссию. Он создает каталог /tmp/CARBONITE, который будет содержать копию каждого процесса, выполняющегося на машине. Имена копий процессов будут CARBONITE.< Команда> < PID >, где < команда > - имя процесса и < PID > - ID процесса.

Создается дополнительный файл, CARBONITE.html, который может быть загружен в Web-браузер. Этот файл подобен файлу, созданному с помощью команды ps (рассматривался ранее), но поскольку он получен в результате прямого входа в ядро, то он более надежен и показывает все процессы, даже если они скрыты с помощью инструмента Knark.

Внимание. Carbonite будет вести запись в среде хоста. Учтите это, если планируете оставить открытой возможность судебного дублирования!

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

Как уже упоминалось, этот инструмент борется против команд взломщика, выполняющихся по зашифрованному каналу. Даже если взломщик выполняет команды, и нам не видно, что он набирает (через контроль сети), теперь мы можем видеть полное содержание того, что он выполняет.

< Лекция 18 || Лекция 19: 12345 || Лекция 20 >
Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва