Назад | Перейти на главную страницу

Посмотреть, какой файл запустил процесс в linux

Один из моих серверов начал рассылать спам в больших количествах. Сервер использует 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 подозрительные скрипты.