Взломанный сайт лечится не в том порядке, в котором подсказывает паника. Самая частая ошибка - сразу броситься удалять подозрительные файлы. После этого сайт перестаёт работать, следов больше нет, а злоумышленник по-прежнему внутри.
Шаг 0. Зафиксировать состояние
До того, как что-то удалять, сделайте полную копию: файлы и база. Да, заражённую.
Она нужна по двум причинам. Если во время чистки сломается что-то нужное, будет куда вернуться. И именно по этой копии потом видно, куда зашли и что успели сделать.
Шаг 1. Понять, что именно случилось
- Спам в выдаче - в Google на вашем домене чужие страницы. Классический вариант japanese keyword hack.
- Редирект посетителей - сайт перебрасывает людей на сторонний ресурс, часто только с мобильных.
- Дефейс - вместо главной чужая страница. Заметно сразу, лечится проще всего.
- Рассылка спама - хостинг блокирует почту, домен попадает в чёрные списки.
- Скрытый майнер или бэкдор - сайт вроде работает, но нагрузка выросла.
Полезные места: Search Console в разделе Проблемы безопасности, логи доступа на хостинге и даты изменения файлов.
Шаг 2. Закрыть вход
Это важнейший шаг, и именно его обычно пропускают. Пока доступ у злоумышленника есть, чистить бесполезно.
- Сменить пароли: все администраторы WordPress, панель хостинга, FTP и SFTP, пользователь базы.
- Обновить ключи безопасности в
wp-config.php. Это разлогинит всех, включая того, кто сейчас сидит в вашей админке. - Удалить неизвестных пользователей в WordPress.
- Проверить владельцев ресурса в Search Console и убрать чужих.
Шаг 3. Заменить то, что можно заменить
Ядро WordPress, плагины и темы всегда можно взять заново из официального источника. Поэтому их не чистят, а переустанавливают.
- Ядро WordPress: переустановить ту же версию поверх.
- Плагины: удалить и поставить заново из каталога. Те, что больше не обновляются, - заменить.
- Тему: стандартную переустановить, кастомную придётся смотреть руками.
Шаг 4. Вычистить то, что заменить нельзя
wp-content/uploads- файлов.phpздесь быть не должно;.htaccessв корне и во вложенных папках - дописанные правила редиректа;wp-config.phpиindex.php- сторонние строки в начале файла;- файлы активной темы, особенно
functions.phpиheader.php; - в базе: таблица настроек, содержимое записей, запланированные задачи.
Маркеры в коде: eval(, base64_decode(, gzinflate(, длинные нечитаемые строки, код сразу после открывающего тега без единого комментария.
О запланированных задачах. Любимый способ вернуться: в WordPress создаётся задача, которая раз в несколько часов восстанавливает удалённые файлы. Вы чистите сайт вечером, а утром всё на месте. Если заражение возвращается именно так - искать надо в задачах и в базе.
Шаг 5. Убрать последствия в поиске
- Спамные адреса должны отдавать 410, а не 404 и не редирект на главную.
- Удалить чужую карту сайта, подать свою.
- В Search Console подать заявку на проверку с описанием выполненных работ.
- Через неделю проверить
site:вашсайт.comещё раз.
Когда лучше не делать самому
- Заражение возвращается после чистки - значит, найдено не всё.
- Сайт коммерческий и простой стоит денег каждый день.
- На сервере несколько сайтов: заражение между ними переползает.
- Google уже показывает предупреждение посетителям.
- Нет бэкапа и нет уверенности, что именно изменилось.
Коротко
Сначала копия, потом диагноз, потом закрытие доступа, и лишь затем чистка. Ядро, плагины и темы переустанавливаются, а не лечатся. В конце - 410 для спамных адресов и заявка в Search Console.
Нужна помощь со взломанным сайтом?
Проверяю, чищу и закрываю уязвимость, через которую зашли.