URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6659
[ Назад ]

Исходное сообщение
"Perl от nobody - как отследить кто запускает?"

Отправлено Mitya3003 , 06-Авг-07 11:57 
Здравствуйте.

Недавно на своем хостинг сервере столкнулся с очень неприятной проблемой:

nobody юзер периодически запускает процессы одобного вида:

3693 nobody          1 139    0 13900K  6096K RUN    0  93:12 81.93% perl
3690 nobody          1 139    0 13900K  6100K CPU1   0  93:07 80.42% perl

И со временем каждый час их число растет. В результате сервер ложится из-за переполненного свапа.

kill 3693 - процесс не убивает, killall perl - тоже не убивает. помогает только reboot. но процессы периодически возникают вновь.

перл процесс от юзера рут выглядит так:

  557 root            1  76    0 69936K 44024K select 0   0:02  0.00% perl5.8.8


ps 3693
  PID  TT  STAT      TIME COMMAND
3693  ??  R     95:40.54 httpd -DSL -DSL\n (perl)

ps 3690
  PID  TT  STAT      TIME COMMAND
3690  ??  R     95:45.15 httpd -DSL -DSL\n (perl)


Подскажите каким образом можно вычислить того кто запускает данные скрипты, адрес скрипта, как можно поставить лимит на выполнение perl скриптов.

Благодарю за ответ.



Содержание

Сообщения в этом обсуждении
"Perl от nobody - как отследить кто запускает?"
Отправлено NuINu , 06-Авг-07 12:12 
>[оверквотинг удален]
>  PID  TT  STAT      
>TIME COMMAND
> 3690  ??  R     95:45.15 httpd
>-DSL -DSL\n (perl)
>
>
>Подскажите каким образом можно вычислить того кто запускает данные скрипты, адрес скрипта,
>как можно поставить лимит на выполнение perl скриптов.
>
>Благодарю за ответ.

смотри /var/log/apache/*


"Perl от nobody - как отследить кто запускает?"
Отправлено Mitya3003 , 06-Авг-07 12:53 

>смотри /var/log/apache/*

в логах апача access_log запуска скритпов perl не наблюдается.



"Perl от nobody - как отследить кто запускает?"
Отправлено NuINu , 06-Авг-07 13:37 
>
>>смотри /var/log/apache/*
>
>в логах апача access_log запуска скритпов perl не наблюдается.

ну посмотри тогда для начала PPID процессов ps axl и пройдись по цепочке pid-ppid
по крайней мере узнаешь кто.


"Perl от nobody - как отследить кто запускает?"
Отправлено Mitya3003 , 07-Авг-07 01:38 
>>
>>>смотри /var/log/apache/*
>>
>>в логах апача access_log запуска скритпов perl не наблюдается.
>
>ну посмотри тогда для начала PPID процессов ps axl и пройдись по
>цепочке pid-ppid
>по крайней мере узнаешь кто.

Вот сейчас

s8# ps 85391
  PID  TT  STAT      TIME COMMAND
85391  ??  R     92:53.15 [httpd] (perl)
s8# ps axl 85391
  UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
65534 85391     1   0 139  0 12464  4600 -      R     ??   92:58.89 [httpd] (perl)



"Perl от nobody - как отследить кто запускает?"
Отправлено NuINu , 07-Авг-07 09:54 

>s8# ps axl 85391
>  UID   PID  PPID CPU PRI NI  
> VSZ   RSS MWCHAN STAT  TT  
>    TIME COMMAND
>65534 85391     1   0 139  
>0 12464  4600 -      R
>    ??   92:58.89 [httpd] (perl)

похоже эта штука демонизировалась, и родителя мы не найдем(ну какая фиг разница все равно ведь видно что это httpd)
ну и фиг с ним, попробуй найти этот процесс в файловой системе /proc
и просто посмотри cmdline

да если найдешь скрипт не удаляй его! вставь команду вывода, ну хотябы времени запуска, а потом в лог файле нттп ищи был ли какой запрос в это время.

можно еще поискать через lsof может чего интересное напишет.


"Perl от nobody - как отследить кто запускает?"
Отправлено Mitya3003 , 07-Авг-07 01:39 
>>
>>>смотри /var/log/apache/*
>>
>>в логах апача access_log запуска скритпов perl не наблюдается.
>
>ну посмотри тогда для начала PPID процессов ps axl и пройдись по
>цепочке pid-ppid
>по крайней мере узнаешь кто.

Вот сейчас
85391 nobody          1 139    0 12464K  4600K RUN    0  92:43  3.71% perl

ps 85391
  PID  TT  STAT      TIME COMMAND
85391  ??  R     92:53.15 [httpd] (perl)

ps axl 85391
  UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
65534 85391     1   0 139  0 12464  4600 -      R     ??   92:58.89 [httpd] (perl)


UID 65534 - это естессно юзер нободи. Хоть убейте не пойму куда дальше копать..



"Perl от nobody - как отследить кто запускает?"
Отправлено anonymous , 07-Авг-07 02:15 
>>>
>>>>смотри /var/log/apache/*
>>>
>>>в логах апача access_log запуска скритпов perl не наблюдается.

[...]
>UID 65534 - это естессно юзер нободи. Хоть убейте не пойму куда
>дальше копать..

Ещё раз говорю: смотри в логах попытки взлома сайтов.  Какая-то из них была успешной и в результате загрузились куда-то на сервер эти скрипты (возможно в /tmp, хотя может и в каталог с файлами сайтов, если они были доступны для записи с правами сервера)

Как его убить: kill -9 85391



"Perl от nobody - как отследить кто запускает?"
Отправлено anonymous , 06-Авг-07 20:26 
>Здравствуйте.
>
>Недавно на своем хостинг сервере столкнулся с очень неприятной проблемой:
>
>nobody юзер периодически запускает процессы одобного вида:

99% что эти скрипты запускаются через дырку в одном из скриптов на веб-сервере.  Сейчас нужно действительно выяснить масштабы взлома, возможно даже приостановить работу сайта проблемного клиента до решения проблемы (сам сталкивался -- атакующие довольно часто повторяют атаку чтобы скрипты не убивали)

А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого клиента.  Тогда сразу будет видно, чей сайт поломали.


"Perl от nobody - как отследить кто запускает?"
Отправлено Mitya3003 , 07-Авг-07 09:35 

>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>клиента.  Тогда сразу будет видно, чей сайт поломали.

Если подскажите как это реализовать (сервер с cPanlel) - буду признателен.


"Perl от nobody - как отследить кто запускает?"
Отправлено NuINu , 07-Авг-07 14:12 
>
>>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>>клиента.  Тогда сразу будет видно, чей сайт поломали.
>
>Если подскажите как это реализовать (сервер с cPanlel) - буду признателен.

кстати! переименуй программу perl в perl_old

и создай файлик выполняемый perl :)
#!/bin/sh
O1=/you_nobody_access_write/hack.log
echo `pwd` >>$O1
echo "cmd \$1 $1" >>$O1
cat $1 >>$O1


"Perl от nobody - как отследить кто запускает?"
Отправлено phpcoder , 07-Авг-07 14:20 
[...]
>и создай файлик выполняемый perl :)
>#!/bin/sh
>O1=/you_nobody_access_write/hack.log
>echo `pwd` >>$O1
>echo "cmd \$1 $1" >>$O1
>cat $1 >>$O1

Чтобы хакер ничего не заметил, и другие программы, которые могут использовать perl не перестали работать неплохо было бы добавить последнюю строку:

exec perl "$@"


"Perl от nobody - как отследить кто запускает?"
Отправлено NuINu , 07-Авг-07 14:27 
>[оверквотинг удален]
>>#!/bin/sh
>>O1=/you_nobody_access_write/hack.log
>>echo `pwd` >>$O1
>>echo "cmd \$1 $1" >>$O1
>>cat $1 >>$O1
>
>Чтобы хакер ничего не заметил, и другие программы, которые могут использовать perl
>не перестали работать неплохо было бы добавить последнюю строку:
>
>exec perl "$@"

!!! точно, эт я не догадался!
ну только perl_old  соответственно!


"Perl от nobody - как отследить кто запускает?"
Отправлено Mitya3003 , 07-Авг-07 23:35 
>[оверквотинг удален]
>>>echo "cmd \$1 $1" >>$O1
>>>cat $1 >>$O1
>>
>>Чтобы хакер ничего не заметил, и другие программы, которые могут использовать perl
>>не перестали работать неплохо было бы добавить последнюю строку:
>>
>>exec perl "$@"
>
>!!! точно, эт я не догадался!
>ну только perl_old  соответственно!

Сделал все как вы сказали: но теперь все скрипты выдают еррор 500 - Premature End of script headers.

в чем может быть проблема? На файлах perl и perl_old права 755, в лог разрешена запись всем.


"Perl от nobody - как отследить кто запускает?"
Отправлено NuINu , 08-Авг-07 09:23 
>[оверквотинг удален]
>>>exec perl "$@"
>>
>>!!! точно, эт я не догадался!
>>ну только perl_old  соответственно!
>
>Сделал все как вы сказали: но теперь все скрипты выдают еррор 500
>- Premature End of script headers.
>
>в чем может быть проблема? На файлах perl и perl_old права 755,
>в лог разрешена запись всем.

чужая машина потемки :)
смотри сюда, чел уже решал подобные проблемы:
http://www.next-step.ru/blog/premature-end-of-script-headers...


"Perl от nobody - как отследить кто запускает?"
Отправлено NuINu , 08-Авг-07 09:30 

>Сделал все как вы сказали: но теперь все скрипты выдают еррор 500
>- Premature End of script headers.
>
>в чем может быть проблема? На файлах perl и perl_old права 755,
>в лог разрешена запись всем.

или вот еще:
---------------------------------------------------------------------------
David Mcguire wrote:

>[оверквотинг удален]
>Linux: Mandrake 9.1 (I'm a newbie, I apologize)
>DB: PostgreSQL 7.3.2
>Perl: 5.80
>Other info:
>Freeradius 0.81 is using PostgreSQL for it's
>authentication and that is working fine.
>Nothing else is being run on this box. Not even a mail
>server... yet.
>  
>

I too had initial problems getting past the Premature end of script
headers error on Mandrake 9.1

Once I found the cause, it all came together.

Mandrake runs both the Httpd and httpd-perl daemons.  The trick is
getting the proper daemon to recognize the configuration data.  I was
using the HTML::Mason (the urpmi installation is not suitable, you
should install with the perl -MCPAN -e  shell command).  In order to get
the httpd-perl daemon to recognize the Directory Path for the ASP or
MASON configuration, you need to define the Directory in the PERLPROXIED
configuration settings of /etc/httpd/conf/httpd.conf (I chose to install
the apache-1.3.28 server).

Good Luck.

--
Albert E. Whale, CISSP - Sr. Security, Network, and Systems Consultant


"Perl от nobody - как отследить кто запускает?"
Отправлено anonymous , 08-Авг-07 10:13 
>[оверквотинг удален]
>>>exec perl "$@"
>>
>>!!! точно, эт я не догадался!
>>ну только perl_old  соответственно!
>
>Сделал все как вы сказали: но теперь все скрипты выдают еррор 500
>- Premature End of script headers.
>
>в чем может быть проблема? На файлах perl и perl_old права 755,
>в лог разрешена запись всем.

Попробуйте запустить любой (лучше что-то попроще) скрипт на перле из консоли, и проверить, что он работает и не выводит никакого "мусора" перед заголовками.


"Perl от nobody - как отследить кто запускает?"
Отправлено anonymous , 08-Авг-07 01:11 
>
>>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>>клиента.  Тогда сразу будет видно, чей сайт поломали.
>
>Если подскажите как это реализовать (сервер с cPanlel) - буду признателен.

Я не знаю, как к этому отнесётся cPanel, но для начала нужно попробовать.

Называется это suexec.  Вот тут объяснено как настроить: http://wiki.archlinux.org/index.php/Apache,_SuExec_and_virtual_Hosts


"Perl от nobody - как отследить кто запускает?"
Отправлено Mitya3003 , 08-Авг-07 20:35 
>>
>>>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>>>клиента.  Тогда сразу будет видно, чей сайт поломали.
>>
>>Если подскажите как это реализовать (сервер с cPanlel) - буду признателен.
>
>Я не знаю, как к этому отнесётся cPanel, но для начала нужно
>попробовать.
>
>Называется это suexec.  Вот тут объяснено как настроить: http://wiki.archlinux.org/index.php/Apache,_SuExec_and_virtual_Hosts

Что самое интересное - suexec стоит на сервере, уcтановлен средствами cpanel



"Perl от nobody - как отследить кто запускает?"
Отправлено anonymous , 08-Авг-07 23:11 
>>Называется это suexec.  Вот тут объяснено как настроить: http://wiki.archlinux.org/index.php/Apache,_SuExec_and_virtual_Hosts
>
>Что самое интересное - suexec стоит на сервере, уcтановлен средствами cpanel

Значит не активирован/не настроен.  Иначе владельцем процесса был бы не nobody.


"Perl от nobody - как отследить кто запускает?"
Отправлено Mitya3003 , 22-Авг-07 09:34 
suexec стоял и работал.

кто-то через веб шелл запускал подобные скрипты. проблема решилась после запрета в php.ini функций exec, shell_exec


"Perl от nobody - как отследить кто запускает?"
Отправлено anonymous , 23-Авг-07 06:33 
>suexec стоял и работал.
>
>кто-то через веб шелл запускал подобные скрипты. проблема решилась после запрета в
>php.ini функций exec, shell_exec

Значит php стоит модулем для Apache и соответственно выполняется в его адресном пространстве.  Тут suexec не помогает, нужно php выносить как cgi или fastcgi.  Ну конечно же, если после запрета exec ни один скрипт не сломался, значит всё прекрасно и это хорошее решение в данной ситуации.