Один из моих серверов начал рассылать спам в больших количествах. Сервер использует ISPConfig 3, и у одного из веб-пользователей, скорее всего, есть нарушение безопасности.
Я идентифицировал пользователя, и один файл каким-то образом запускает Perl-скрипт, который рассылает спам.
Однако я не могу найти затронутые файлы, так как, скорее всего, все работает в памяти.
По-видимому, этот файл каким-то образом создает службу с именем «mail», которая работает на сервере и привязывается к основным IP-адресам.
Ниже я опубликую некоторую информацию о своих выводах, так как у меня нет идей, как отследить проблему.
ps aux | grep mail
web24 5101 1.8 0.3 35580 7944 ? Ss 10:45 6:01 mail
web24 5102 1.6 0.2 34628 5160 ? Ss 10:45 5:28 mail
netstat -nalp | grep :25
tcp 0 1 x.x.x.x:50774 194.54.81.164:25 SYN_SENT 5102/mail
tcp 0 1 x.x.x.x:47849 194.54.81.163:25 SYN_SENT 5101/mail
Скорее всего, скрипт запускается вручную, так как после закрытия запускается случайным образом.
Я хотел бы знать, как отследить, какой файл запустил этот процесс (скорее всего, мне придется проанализировать дампы памяти).
После запуска lsof на PID я получаю следующее:
lsof -p 31459
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
perl 31459 web24 cwd DIR 0,34 4096 18735409 /
perl 31459 web24 rtd DIR 0,34 4096 18735409 /
perl 31459 web24 txt REG 0,34 7360 19644668 /usr/bin/perl
perl 31459 web24 mem REG 253,0 19644668 /usr/bin/perl (path dev=0,34)
perl 31459 web24 mem REG 253,0 20621055 /usr/lib/perl/5.10.1/auto/File/Glob/Glob.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20620896 /usr/lib/perl/5.10.1/auto/POSIX/POSIX.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20621014 /usr/lib/perl/5.10.1/auto/Fcntl/Fcntl.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20627464 /usr/lib/perl/5.10.1/auto/Socket/Socket.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 20621012 /usr/lib/perl/5.10.1/auto/IO/IO.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628140 /lib/libcrypt-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628224 /lib/libc-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628216 /lib/libpthread-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628144 /lib/libm-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628220 /lib/libdl-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 19644608 /usr/lib/libperl.so.5.10.1 (path dev=0,34)
perl 31459 web24 mem REG 253,0 19628132 /lib/ld-2.11.3.so (path dev=0,34)
perl 31459 web24 mem REG 253,0 5857281 /usr/lib/locale/locale-archive (path dev=0,34)
perl 31459 web24 0r CHR 1,3 0t0 19220558 /dev/null
perl 31459 web24 1w CHR 1,3 0t0 19220558 /dev/null
perl 31459 web24 2w CHR 1,3 0t0 19220558 /dev/null
perl 31459 web24 3u IPv4 5906021 0t0 TCP my.hostname.ro:46504->164.81.54.194.static.server.ua:smtp (SYN_SENT)
perl 31459 web24 4w FIFO 0,8 0t0 3061201 pipe
perl 31459 web24 5r FIFO 0,8 0t0 3061202 pipe
perl 31459 web24 6w FIFO 0,8 0t0 3061548 pipe
perl 31459 web24 7r FIFO 0,8 0t0 3061549 pipe
Я должен упомянуть, что нет никаких подозрительных задач cron, и я уверен, что скрипт запускается вручную, так как теперь он имеет имя «httpd» вместо «mail», как я упоминал ранее.
Я мог бы решить проблему очень легко, просто закройте учетную запись клиента и двигайтесь дальше, но, поскольку такого рода нарушение безопасности является моим первым, я не могу исправить, я хотел бы решить его для использования в будущем.
Я согласен с бегом lsof -p 5101
и lsof -p 5102
чтобы увидеть, какие файлы на самом деле открываются этим процессом. Вы также сможете получить дополнительную информацию, запустив cat /proc/5101/environ
и cat /proc/5102/environ
. Найдите переменную SCRIPT_FILENAME, и она покажет ваше местоположение. Я много раз видел это cat /proc/PID/environ
не будет возвращать никаких результатов - это потому, что злоумышленники подделывают среду. Итак, можно с уверенностью сказать, что lsof -p PID
это ваша самая безопасная ставка при поиске местоположения. Как только вы найдете местоположение сценария, перед его удалением вам следует запустить stat script.pl
или как бы там ни было, чтобы увидеть КОГДА скрипт был размещен на вашем сервере. Эта отметка времени поможет найти запись в журнале, чтобы увидеть, как именно это произошло.
Вы можете посмотреть, что показывает lsof.
lsof | grep mail
Проверьте, какие файлы открываются процессом:
lsof -p PID
и, возможно, strace также может вам кое-что показать:
strace -p PID
Я бы также проверил, не добавлены ли в cron подозрительные скрипты.