phpshell и защита от него!

babiy
На сайте с 06.06.2009
Offline
56
13340

Здравствуйте Уважаемые админы!

Столкнулся с такой проблемой, на шеред сервере (ОС Centos 5.5 , Apache2 как mod-itk, php5) начали периодически появлятся дорвеи в папках сайтов клиентов, а в некоторых папках проявлялись саповские ссылки, начал копаться в логах фтп и как не странно выяснил что лилось всё это добро по фтп и как правило с апи адреса того же провайдера что и клиента , насторожила информация одного клиента который запросил данные у своего провайдера и выяснил что в указанное в логах время данный апи адрес не использовался ни у кого из пользователей, ну и тут же случился казус с падением нескольких сервисов (причина банальна , полностью вычищен каталог /var/log)кроме нескольких файлов которые были чем то заняты в тот момент, ну сразу же я фаерволом закрыл 22 порт оставив вход под один апи (свой) сменил рут пароль и восстановил из бекапа логи, ну и начал копать на предмет чегото постороннего, проверил на рекруты , слава богу никого, и тут человечек один (клиент пожаловался на посторонние файлы у себя в папках ну и дал данный файлик (в заголовке которого красовалась надпись <?php # Web Shell by oRb ) не долго думая запустил команду

find /var/www/ \( -regex '.*\.php$' -o -regex '.*\.cgi$' \) -print0 | xargs -0 egrep -il "r0nin|m0rtix|r57shell|c99shell|phpshell|void\.ru|phpremoteview|directmail|bash_history|brute *force"

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

Придвижу сразу массу упрёков на школнастройку сервера, и отвечу я конечно не спец в этом деле , но в php.ini все шелловские функции и некоторые другие внесены в disabled_function , cgi-bin в следствии не использования отключён для алиаса стандартного в апаче прописано deny from all как бы то что нарыл всё применил (в рамках разумного) но увы не спасло.... вобщем кто как посоветует бороться с подобным г..... напастью ?

и после бессоной ночи никак не соображу как эту команду

find /var/www/ \( -regex '.*\.php$' -o -regex '.*\.cgi$' \) -print0 | xargs -0 egrep -il "r0nin|m0rtix|r57shell|c99shell|phpshell|void\.ru|phpremoteview|directmail|bash_history|brute *force"

заставить удалять то что она находит (я сделал это через mc) но хочется всунуть в крон это дело и сканить периодически такие шеллы и при нахождении удалять

ну и в мыслях поставить антивирь , вроде как говорят они ловят вэб шеллы?

вобщем прошу Вашего профессионального совета :)

P.S. панелька на сервере ISP Manager

Globatel.ru (http://globatel.ru) - надежные услуги на базе собственного ДЦ. Хостинг (http://globatel.ru/hosting/), VDS на базе KVM (http://globatel.ru/vps/), Dedicated (http://globatel.ru/dedicated/) ICQ 6485890, т. 8 (495) 706-49-49
zexis
На сайте с 09.08.2005
Offline
388
#1

1) пользователю WWW, от которого выполняется apache, запретить писать в папках в которых могут выполнятся скрипты PHP.

2) Если на сайте есть возможность загрузки файлов на сервер в какие то папки, то запретить в этих папках выполнение скриптов PHP

3) Кроме тех папок, в которые разрешено закачивать файлы, пользователь www не должен быть владельцем папок и файлов.

4) Для всех папок выставить права 701. Владелец папок не WWW.

То есть если шел зальют, хакер не сможет получить список файлов и записать что либо.

Записать он сможет только в определенную папку, в которой скрипты PHP не выполняются.

Поставить автоматический анализ логов ACCESS.LOG, который будет находить в них строки

union

mysql

select

../../../

/etc

passwd

и так далее

При обнаружении таких запросов IP можно блокировать фаерволом и отправлять сообщение админу о попытке взлома.

Разумеется файлов с такими названиями на сайте быть не должно.

в mysql запретить создание файлов

babiy
На сайте с 06.06.2009
Offline
56
#2

Apache-mpm-itk работает под владельцем аккаунта.

zexis
На сайте с 09.08.2005
Offline
388
#3

Искать дырки в скриптах PHP

Основной способ заливки шела – mysql иньекция.

Когда данные принятые от пользователя, не проверяются на корректность и передаются на исполнение Mysql

Проверить, что бы все числовые данные, принимаемые от пользователя приводились явно к числу командой

$val=intval($_GET[‘val’]);

Для строковых данных использовать addslashes() для удаления спец символов

KU
На сайте с 17.07.2008
Offline
251
#4

zexis, вы тупите. Речь о шаред хостинге.

Хостинг ( https://good-host.net ) / Linux VPS ( https://good-host.net/vps ) / Windows VPS ( https://good-host.net/windows-vps ) / Выделенные серверы ( https://good-host.net/dedicated ) 14 лет онлайн!
babiy
На сайте с 06.06.2009
Offline
56
#5

Проблема в том что это шеред сервер и проверять тем более заставлять что то менять в скриптах юзеров я думаю нереально, а вот решения делать это глобально (типа парсить запросы к БД) как то я особо не встречал. Может есть рекомендации применительно к шеред хостингу, скажем так малой кровью....

KU
На сайте с 17.07.2008
Offline
251
#6

babiy, /tmp в отдельный раздел, и в noexec, для начала.

phpMyAdmin обновлен?

babiy
На сайте с 06.06.2009
Offline
56
#7
KM.UA:
babiy, /tmp в отдельный раздел, и в noexec, для начала.
phpMyAdmin обновлен?

раздел отдельный, по поводу noexec неуверен, phpmyadmin обновлял

Стопс соврал, нефига он у меня не отдельный раздел, завтра перемонтирую, у меня лвм думаю проблем не будет.

V
На сайте с 05.08.2007
Offline
87
#8

Еще рецепт: просить Андрейку настроить мод_секурити. Или же разбираться с ним самому. :)

Мод_секурити имею ввиду.

С уважением, Victor (http://adm-lib.ru)
M
На сайте с 01.12.2009
Offline
235
#9

Надо найти источник загрузки шела, и устранить его, перевести php как php-cgi что бы ограничить круг заливки шелла, так как через mod_php через разные "щели" можно залазить. ну а дальше стнадртная схема, нашли дырку и залатали.

Администратор Linux,Freebsd. построения крупных проектов.
N
На сайте с 17.08.2008
Offline
67
#10

find /var/www/ \( -regex '.*\.php$' -o -regex '.*\.cgi$' \) -print0 | xargs -0 egrep -il "r0nin|m0rtix|r57shell|c99shell|phpshell|void\.ru|phpremoteview|directmail|bash_history|brute *force" | awk '{print "rm -f "$1""}' | sh

+ в php.ini

disable_functions = exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий