Лечим инфицированный сайт/сервер


Раз Вы читаете эту статью, значит Ваш сайт взломали. Вы увидели, что с с Вашего сервера рассылается спам(spam) и никак не можете определить что же с ним делать.

everything_is_horrible

Важно не паниковать, а строго следовать инструкциям:

  1. Просканировать Ваш сервер с помощью следующих утилит:
  2. Удостовериться что с вашего сервера разлетается спам

Удалить пару десятков файлов не означает, что уже все закончилось, поскольку утилиты найдут только то, о чем знают, а знают они далеко не все.

Нужно немного поковыряться руками. Переходим в папку с файлами сайта и ставим все в режим "только чтение":

find . -type f -exec chmod 444 {} \;
find . -type d -exec chmod 555 {} \;

Дальше начинаем искать использование функции eval:

grep "eval(\|assert(\|gzinflate(" * -RI |cut -d ":" -f 1|grep --color "\.php" |sort -u
grep "eval (\|assert (\|gzinflate (" * -RI |cut -d ":" -f 1|grep --color "\.php" |sort -u
grep "@.*\$GLOBALS\['" * -RI |cut -d ":" -f 1 |sort -u

А вот с реверсом функций eval и base64_encode столкнулся буквально сегодня:

grep "edoced_46esab\|lave" * -RI |grep "strrev" |sort -u

В результате Вы получаете список файлов. Нужно открыть каждый и посмотреть что в нем.

Даже не являясь бывалым админом или кодером Вы сможете отличить нормальный код от вредоносного.
Вот первый пример:
Screenshot from 2015-08-24 16:36:53

Вот второй пример:
Screenshot from 2015-08-24 16:39:07

Самым тяжелым является поиск так называемого 'backdoor' или черного хода. Как правило он прячется к каком-то огромном файле в виде совсем обычного кода, поэтому его трудно найти.

Чтобы поймать преступника, нужно думать, как преступник.

136187719736

Если бы я писал бэкдор, то не хотел бы что бы мой скрипт писал какие-либо ошибки в логи. В противном случае умный админ его быстро увидит их. Для этого я выключил бы логирование с помощью php функции error_reporting

Её и можно поискать:

grep "error_reporting *(.*0.*)" * -RI |cut -d ":" -f 1 |grep php

На всякий случай убрал бы значение error_log с помощью ini_set:

grep "\@ini_set('error_log'" * -RI |cut -d ":" -f 1 |grep php

Для того что бы получить путь к текущему каталогу, я бы воспользовался функцией getcwd():

grep "\@getcwd\(\)" * -RI |cut -d ":" -f 1 |grep php

В результате выполнения каждой из команды Вы получаете список файлов, каждый из которых нужно открыть и посмотреть содержимое.
Вредоносный код удаляем, файлы переименуем. Создаем новый пустой файл с тем же именем и запрещаем его редактирование. Надежнее всего это делать с помощью утилиты chattr:

chattr +i /путь/к/файлу.php

Рекомендуется запретить следующие функции в php.ini:

  • passthru
  • system
  • shell_exec
  • exec
  • popen
  • proc_open
  • curl_multi_exec
  • parse_ini_file
  • show_source
  • pcntl_exec
  • getenv
  • getmygid
  • extract
  • parse_str

Находим в файле php.ini строку disable_functions и перечисляем их через запятую. После применения изменений не забудьте перезапустить apache.

В случае с 'Shared Hosting', как правило, можно подредактировать php.ini прямо в панели управления. К сожалению отключить функции можно только в php.ini. В .htaccess их засунуть не удастся.

Внимание : После таких изменений с Вашим сайтом могут начаться проблемы. Внимательно протестируйте его и убедитесь, что отключение функций не вызвало проблем. Что бы устранить проблемы ищите патчи и обновления для модулей Вашего сайта. Поищите замену функций на php.net. Чем меньше функций Вы включите назад, тем меньше вероятность повторения проблем.

Сразу же в папке, в которую загружаются файлы (uploads, media, files) , рекомендую создать .htaccess со следующим содержанием:

<FilesMatch ”\.php$”>
    Deny from all
</FilesMatch>

В результате доступ к php файлам в папке будет запрещен. Даже если Вы сделаете папку загрузок доступной для записи, из нее нельзя будет запустить ничего вредоносного.

Дальше наблюдаем за сервером несколько дней/ночей/недель. В случае возобновления проблем - читаем логи, пытаемся определить каким образом новая бяка появилась в папках сайта. Ищем ее заново и удаляем.

Сразу же рассматриваем варианты переезда на новый сервер и обновления всего чего только можно (php, apache, nginx, плагины, CMS сайта).

На всякий случай можно поганять сайт следующими утилитами:

Share Button
(Visited 603 times, 1 visits today)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.