Здравствуйте.Недавно на своем хостинг сервере столкнулся с очень неприятной проблемой:
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 скриптов.Благодарю за ответ.
>[оверквотинг удален]
> PID TT STAT
>TIME COMMAND
> 3690 ?? R 95:45.15 httpd
>-DSL -DSL\n (perl)
>
>
>Подскажите каким образом можно вычислить того кто запускает данные скрипты, адрес скрипта,
>как можно поставить лимит на выполнение perl скриптов.
>
>Благодарю за ответ.смотри /var/log/apache/*
>смотри /var/log/apache/*в логах апача access_log запуска скритпов perl не наблюдается.
>
>>смотри /var/log/apache/*
>
>в логах апача access_log запуска скритпов perl не наблюдается.ну посмотри тогда для начала PPID процессов ps axl и пройдись по цепочке pid-ppid
по крайней мере узнаешь кто.
>>
>>>смотри /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)
>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 может чего интересное напишет.
>>
>>>смотри /var/log/apache/*
>>
>>в логах апача access_log запуска скритпов perl не наблюдается.
>
>ну посмотри тогда для начала PPID процессов ps axl и пройдись по
>цепочке pid-ppid
>по крайней мере узнаешь кто.Вот сейчас
85391 nobody 1 139 0 12464K 4600K RUN 0 92:43 3.71% perlps 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 - это естессно юзер нободи. Хоть убейте не пойму куда дальше копать..
>>>
>>>>смотри /var/log/apache/*
>>>
>>>в логах апача access_log запуска скритпов perl не наблюдается.[...]
>UID 65534 - это естессно юзер нободи. Хоть убейте не пойму куда
>дальше копать..Ещё раз говорю: смотри в логах попытки взлома сайтов. Какая-то из них была успешной и в результате загрузились куда-то на сервер эти скрипты (возможно в /tmp, хотя может и в каталог с файлами сайтов, если они были доступны для записи с правами сервера)
Как его убить: kill -9 85391
>Здравствуйте.
>
>Недавно на своем хостинг сервере столкнулся с очень неприятной проблемой:
>
>nobody юзер периодически запускает процессы одобного вида:99% что эти скрипты запускаются через дырку в одном из скриптов на веб-сервере. Сейчас нужно действительно выяснить масштабы взлома, возможно даже приостановить работу сайта проблемного клиента до решения проблемы (сам сталкивался -- атакующие довольно часто повторяют атаку чтобы скрипты не убивали)
А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого клиента. Тогда сразу будет видно, чей сайт поломали.
>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>клиента. Тогда сразу будет видно, чей сайт поломали.Если подскажите как это реализовать (сервер с cPanlel) - буду признателен.
>
>>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>>клиента. Тогда сразу будет видно, чей сайт поломали.
>
>Если подскажите как это реализовать (сервер с 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 :)
>#!/bin/sh
>O1=/you_nobody_access_write/hack.log
>echo `pwd` >>$O1
>echo "cmd \$1 $1" >>$O1
>cat $1 >>$O1Чтобы хакер ничего не заметил, и другие программы, которые могут использовать perl не перестали работать неплохо было бы добавить последнюю строку:
exec 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_old соответственно!
>[оверквотинг удален]
>>>echo "cmd \$1 $1" >>$O1
>>>cat $1 >>$O1
>>
>>Чтобы хакер ничего не заметил, и другие программы, которые могут использовать perl
>>не перестали работать неплохо было бы добавить последнюю строку:
>>
>>exec perl "$@"
>
>!!! точно, эт я не догадался!
>ну только perl_old соответственно!Сделал все как вы сказали: но теперь все скрипты выдают еррор 500 - Premature End of script headers.
в чем может быть проблема? На файлах perl и perl_old права 755, в лог разрешена запись всем.
>[оверквотинг удален]
>>>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...
>Сделал все как вы сказали: но теперь все скрипты выдают еррор 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.1Once 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
>[оверквотинг удален]
>>>exec perl "$@"
>>
>>!!! точно, эт я не догадался!
>>ну только perl_old соответственно!
>
>Сделал все как вы сказали: но теперь все скрипты выдают еррор 500
>- Premature End of script headers.
>
>в чем может быть проблема? На файлах perl и perl_old права 755,
>в лог разрешена запись всем.Попробуйте запустить любой (лучше что-то попроще) скрипт на перле из консоли, и проверить, что он работает и не выводит никакого "мусора" перед заголовками.
>
>>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>>клиента. Тогда сразу будет видно, чей сайт поломали.
>
>Если подскажите как это реализовать (сервер с cPanlel) - буду признателен.Я не знаю, как к этому отнесётся cPanel, но для начала нужно попробовать.
Называется это suexec. Вот тут объяснено как настроить: http://wiki.archlinux.org/index.php/Apache,_SuExec_and_virtual_Hosts
>>
>>>А настоящим решением будет запуск процессов каждого клиента от отдельного пользователя самого
>>>клиента. Тогда сразу будет видно, чей сайт поломали.
>>
>>Если подскажите как это реализовать (сервер с cPanlel) - буду признателен.
>
>Я не знаю, как к этому отнесётся cPanel, но для начала нужно
>попробовать.
>
>Называется это suexec. Вот тут объяснено как настроить: http://wiki.archlinux.org/index.php/Apache,_SuExec_and_virtual_HostsЧто самое интересное - suexec стоит на сервере, уcтановлен средствами cpanel
>>Называется это suexec. Вот тут объяснено как настроить: http://wiki.archlinux.org/index.php/Apache,_SuExec_and_virtual_Hosts
>
>Что самое интересное - suexec стоит на сервере, уcтановлен средствами cpanelЗначит не активирован/не настроен. Иначе владельцем процесса был бы не nobody.
suexec стоял и работал.кто-то через веб шелл запускал подобные скрипты. проблема решилась после запрета в php.ini функций exec, shell_exec
>suexec стоял и работал.
>
>кто-то через веб шелл запускал подобные скрипты. проблема решилась после запрета в
>php.ini функций exec, shell_execЗначит php стоит модулем для Apache и соответственно выполняется в его адресном пространстве. Тут suexec не помогает, нужно php выносить как cgi или fastcgi. Ну конечно же, если после запрета exec ни один скрипт не сломался, значит всё прекрасно и это хорошее решение в данной ситуации.