Стоп зловред

dihlofos-hew

Стоп зловред

Реально за последние пару месяцев очень много нестандартных ситуаций.
То человек все файлы магазина удалит, то дебилы-паранойики попадаются, то вирусня атакует.

Что делать с дебилами — я не знаю. Чтобы не боятся случайного удаления магазина — надо делать бекапы и бекапы бекапов. А вот что делать с вирусней, я вам сейчас в очередной раз попробую рассказать и у нас выйдут почти звездные войны.

Новая надежда.

Вам заразили магазин, с ваших почтовых ящиков рассылается спам, хостер вас блокирует, шлет гневные письма, происходят переадресации на порно-ресурсы, повышенная нагрузка на ресурсы хостинга и так далее… Бизнес страдает, деньги уходят мимо, нервы ни к черту, вы гадаете на кофейной гуще, кто из ваших конкурентов вас заказал и пьете узбагоин. Не все так плохо! 99% ситуаций поправимы и достаточно быстро. Пытаться выявить первичный источник заражения, найти и залатать дыры — это хорошо, но не всегда представляется возможным, так как это ревизия большого объема кода, а еще и закодированного ионкубом, да и когда злодремучий код рассеялся по всему движку это уже бесполезно, так как дыра везде. Зачастую пересобирать магазин это очень дорого и надо выходить как то из ситуации.

Давайте разберемся с источниками появления заразы. Их несколько:

  • слабые пароли типа admin/admin;
  • дополнения, скачанные неизвестно с каких помоек, а не купленные легально на официальных площадках;
  • слабый дырявый код, написанный профанами, которые не понимают что такое банальное экранирование get-запросов;
  • известные незакрытые уязвимости в самом opencart древних версий,;
  • соседние дырявые проекты на каком нибудь wordpress от 2010 года;
  • ну и нечистые на руку фрилансеры, которые заливают шеллы для страховки, а потом забывают их удалить.

Кому это все надо?
В сети есть масса хакерских группировок и одиночек, ботнеты которых сутками захватывают ресурсы пачками. И мощности этих ресурсов используются как угодно, от скрытого майнинга до рассылки спама. Все это происходит в автоматическом режиме. Пауки злоумышленников нон-стоп сканируют сайты так же как это делает гугл, только гугл не пытается найти в ваших проектах уязвимости и захватить проект на темную сторону ).
Заражение магазина по сути — это болезнь. А лучшее лекарство от болезней — профилактика. Про профилактику поговорим позже, а теперь про лечение…

Империя наносит ответный удар.

Первое что необходимо сделать — изолировать проект в чистое окружение, сменив все-все пароли, фтп, базу, пользователей магазина.

Смотрим и убираем всякий хлам в корне магазина — там должны быть index.php и config.php и все! Никаких info.php! Никаких adminer.php — ничего.

Дальше надо понимать как работает вирусня и каким образом ей подрезать крылья.
Просто так, само по себе, ничего выполнится не может! Вирусня явно где то должна цеплять свой исполняемый код, как правило кроме рассеивания по папкам и файлам доступным на запись происходит внедрение в Index.php и файл .htaccess  — проверяем, чистим.

Запускаем ай-болит, находим все что он нашел в отчете, смотрим и тоже чистим.
Этих манипуляций достаточно для того чтобы восстановить работоспособность магазина и заняться превентивными мерами. Вы же помните, мы не искали особо источник уязвимости. Поздно его искать да и бесполезно. Наша задача ограничить возможность вирусни исполнять какой либо код, внедряемый извне.

Т.е. для того чтобы часть вашего движка начала делать, то что не должна, необходимо сначала залить сторонний зловредный код, а потом его еще и исполнить. А еще это все необходимо сделать в скрытом виде. А для того чтобы запустить какой-либо странный сторонний обфусцированный код в php есть функция eval(). Ваще в php есть масса не очень приятных функций и если вот это вот все:

disable_functions = exec,ini_get,ini_get_all,parse_ini_file,passthru,php_uname,popen,proc_open,shell_exec,show_source,system

Мы можем отключить в php.ini, eval в нем не отключается, для этого нам на помощь приходит suhosin. Это патч к php, который по хорошему вам должен поставить настроить хостер.  У него есть масса полезных фич и кроме отключения eval(), он отлично фильтрует и ограничивает количество post-get данных, шифрует сессии, экранирует все что можно заэкранировать. Вобщем дичайший полезняк. Правда для того чтобы он нормально завелся, надо либо отказаться от части его фукнций, либо долго покурить конфиг.
На самом деле нам достаточно одного disable.eval — все остальное можно выключить, но для паранойиков покопайте. Вобщем пишем хостеру — чтобы вам поставили php с suhosin и включенным disable.eval. Также просим хостера проверить параметры suhosin.post.max_vars и suhosin.get.max_vars, если там будет дефолт — ни одна форма в магазине не сохранится, там должно быть хотя бы 1000.

Проверяем это каким-нибудь тестовым скриптом типа

Если вы все правильно сделали — эта конструкция должна вывалиться в ошибку.
Считайте полдела сделано. Теперь ни одна обфусцированная зараза не сможет выполниться неявным образом.

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

Для того, чтобы найти PHP скрипт, который шлет письма необходимо воспользоваться логированием использования функции mail(). По-умолчанию эта функция отключена, включить её можно добавив в php.ini две строки:

mail.add_x_header = On
mail.log = /var/log/phpmail.log

После внесения изменений в php.ini необходимо перезапустить веб-сервер.
Теперь использование функции mail() скриптами будет логироваться и в /var/log/phpmail.log можно будет узнать какие скрипты отправляют почту.
Также в заголовке письма будет указан отправляющий скрипт.
Пример заголовка:
X-PHP-Originating-Script: 33:ok.php

Даже, если где-то останется лазейка или маленькая дырочка, которую не увидит Ай-Болит, мы будем знать где собака порылась.

Немного магии:

Идем в конфиг nginx и запрещаем выполнятся всему кроме index.php на морде и в admin.php. Тем самым, опять же если мы чего то не заметили и не удалили, какой-нибудь типа config.inc.php где-нибудь в папках с картинками.
По рекомендациям господина savage4pro — делается это как то так:

Также немножко буфферов и сесурити не помешает:

Ну и почти спокойно спим. Смотрим в логи и радуемся, как пропадают левые post-запросы.

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

Ну а теперь еще раз о профилактике:

  • Не работаем из под рута — никогда, все файлы в виртуалхосте должны быть от локального пользователя.
  • Права на файлы/папки — старайтесь пихнуть в минимально возможные.
  • Пароли, пароли и еще раз пароли. Меняем все и постоянно.
  • Логи. Лог ошибок php, лог магазина — должны быть выключенны все.
  • В идеале магазин в принципе должен работать с чистым логом ошибок.
  • Старайтесь не использовать скрипты и дополнения, которые работают не через единую точку входа index.php.
  • Не качаем ничего с вареза.
  • Со всех разработчиков — требуем отчеты о покупках дополнений, а лучше все покупайте на свои аккаунты. Чтобы не рассказывать лупая глазами «а мне поставили, я не знаю откуда это».
  • На серванте убираем phpmyadmin, ftp, меняем порт ssh, ставим двухфакторную авторизацию в панель.
  • Время выполнения скрипта — 30 сек и баста. Все что хотите выполнить долго — запускайте из консоли.
  • Если открыли базу в мир — позаботьтесь о смене порта mysql, который смотрит в мир.
  • Проверяем открытые порты в мир, у вас их должно быть только почта, 80, и ssh.
  • Бекапы. Бекапы всегда и везде. Товар даже если собираетесь редактировать — бекапните базу. SXD вам в зубы.

Врядли в итоге это вас спасет от всех трипперов и геммороев, но спать спокойней станете!

Ну и по этой теме полезно почитать предыдущие посты: как мы защищались от вируса и безопасность opencart.

P.S. У большинства из вас возникнет куча вопросов: что и как и где это все сделать… К сожалению, в рамках одной статьи невозможно рассказать  и описать про все приемы настройки сервера, про настройки конфигов nginx, в которых скажем честно я и сам иногда плаваю. Некоторые рекомендации в состоянии реализовать не только лишь все и понадобится скилл или грамотный саппорт хостинга. Так что если у вас нет скилла, грамотный саппорт хостинга есть у AdminVPS!

 

Хуйнаныр(18)Очко(1)

Запостить высер

Оставьте первый комментарий!

Стучать мне на мыло
avatar

wpDiscuz