Обнаружил поздним вечером на одном своём сайте вирусы. Сразу зашёл и проверил все сайты, расположенные на том же хостинге. Вирусы обнаружились ещё на одном сайте. Вместо сна до поздней ночи боролся с вирусами. Советов в сети много. И каждый совет заточен под какой-то конкретный вирус. Опишу свою ситуацию. Пусть в сети будет на один вариант решения проблемы больше.
Проявление вируса. При посещении моего сайта антивирус Касперский ругался и запрещал переадресацию и передачу информации на какие-то непонятные сайты.
Поиск вируса. Вредоносный код мог быть в базе или в файлах.
Первым делом я поменял пароли в админку WordPress, на доступ к хостингу и к базам данных.
Зашёл через файловый менеджер (я использую Filezilla) в файловую систему сайта, упорядочил файлы по убыванию даты создания/изменения файла и начал ходить по всем папкам подряд. Быстро обнаружил, что все файлы WordPress с расширением .js и файлы моей темы с расширением .js изменены буквально 2 часа назад.
Простые сайты, в темах которых не использовался javascript, вирус не затронул. Но когда я зашёл в админку WordPress такого простенького сайта, то началась немыслимая свистопляска с обильными ругательствами Касперского. Я чуть не обосрался от страха за судьбу своих сайтов. В сборке Вордпресс достаточно файлов с расширением .js, и все они были заражены.
По-быстрому разыскал вчерашние бекапы файлов и баз данных (спасибо хостеру) и быстро заменил их.
Пароль и имя пользователя к админке WordPress хранятся в базе данных. Если вы поменяли пароль, затем импортировали старые данные из бекапа, то пароль снова изменится на старый.
Если вы поменяли пароль к базе данных, не забудьте прописать его в файле wp-config.php
Далее я захотел понять, как вредоносный код попал на мои сайты и где он находился. Зараженные файлы сохранил на компьютер и сравнил их с нормальными. В каждый из файлов с расширением .js в самый конец была дописана функция с кучей конструкций evil. По большому счёту, если бы у меня не было бекапов, то я мог бы исправить несколько js-файлов темы и полностью обновить WordPress. Но восстанавливаться из бекапа всегда надёжнее. Да и вирусы бывают разнообразные, не всегда так быстро их найдёшь.
Также мой хостер хранит логи заходов в файловую систему. Изучил логи и увидел (по времени захода и по IP), что кроме меня никто к файлам доступа не имел. Значит, мои пароли никто не подбирал. А вредоносный код скорее всего (это предположение) попал через дырки WordPress или темы.
Этот случай поспособствовал переосмыслению своих привычек по ведению сайтов.
- Чаще делать бекапы (плагин WordPress Backup вам в помощь). На моём хостинге автоматически настроено копирование файлов и баз раз в неделю. В этом случае мне крупно повезло, что бекапы были сделаны за день до появления вирусов. Поправил код в теме сайта – сделай бекап, поставил и настроил новый плагин – сделай бекап, разместил несколько постов – сделай бекап. Вообще после любого существенного изменения делай бекап. Тогда в случае появления вирусов или другого форсмажора не придётся заново делать последние изменения.
- Поставить и настроить плагин WordPress File Monitor. Он отправляет на указанный e-mail информацию об изменённых файлах. Мне этот плагин понравился. В его настройках можно задать частоту проверки, указать папки, которые не нужно проверять. Я указал папку upload с картинками (иначе сообщение приходит при каждой публикации поста с картинкой) и папку, где хранятся файлы кеширования при установленном плагине кеширования (вообще постоянно идут письма). Также я установил плагин всего лишь на один сайт хостинга и указал путь проверки начиная с корневой директории, в итоге проверяются все сайты. При обновлении версии вордпресс, версии плагина, изменения файлов темы к вам на почту приходит информация об этих изменениях. Точно также вы получите изменения, сделанные злоумышленником и точно будете знать о заражённых файлах.
- Поставил до кучи плагин Antivirus. Этот плагин с заданной в настройках периодичностью сигнализирует об обнаружении подозрительного на его взгляд кода, отправляет результаты на почту и показывает в админке. Здесь надо немного знать php и понимать, что плагин может отреагировать на нормальный код. Например, он ругается на конструкции include. В этом случае помечаешь, что этот код нормальный. Плагин запоминает и больше не ругается.
Если мы бессильны противостоять вирусам, надо иметь возможность сразу их обнаружить и быстро их победить, полностью обновив файлы и данные.
В общем-то Вы не совсем правы. Вирус пролез не через дыры. Сегодня звонит один из заказчиков, жалуется на сообщения касперского, совпавшие с подозрительным спадом активности его клиентов в последние несколько дней.
Мой AVG молчит, но скрипты, о к-рых говорит Каспер, явно не работают.
Захожу по ФТП, открываю в блокноте, чищу. CMS самописная, дыры не предусмотрены:). Права доступа у папок в порядке. На этой же площадке ещё два его СТАТИЧНЫХ сайта поймали то же самое. Чищу их. Т.е. ЦМС вообще не причём. Было подозрение на вредительство со стороны одного из сотрудников, но там мозгов не хватило бы. Начал заходить на все сайты разных клиентов подряд, на одном (статичном, опять же) — всё аналогично. Хостер другой. Доступа к нему ни у кого, кроме меня нет. По словам поднявшего тревогу клиента неделю назад у его хостера была внеплановая перезагрузка. Вывод один — болели сами серваки.