Что делал «плагин кэширования»
В списке плагинов он выглядел как очередной ускоритель: понятное название, описание про кэш. На деле:
- Клоакинг. Обычным посетителям сайт показывался как прежде, а поисковым роботам — страницы со ссылками на интернет-аптеку. Контент загружался с внешнего сервера. Владелец ничего не видел, а в поиске по его домену росли страницы про лекарства.
- Скрытый администратор. Плагин создал пользователя с обычным человеческим именем, похожим на сотрудника редакции, — такой не бросается в глаза в списке.
- Понижение настоящих администраторов. Все остальные администраторы стали редакторами. Владелец терял возможность удалить чужака и сам плагин.
- Запасной путь. Плагин умел сам себя продублировать в
mu-plugins, откуда плагины не отключаются через админку. - Для своих данных он создал отдельную таблицу в базе, настройки и папку с картинками внутри
uploads.
Что ещё нашлось на сайте
Плагин был не первым заражением. Сверка ядра и осмотр файлов показали более старые слои:
- в
wp-includes— файл, исполняющий любой присланный PHP-код, датированный началом 2024 года; - там же — зашифрованный загрузчик с подделанной датой;
- остатки давно известного вируса WP-VCD, который распространяется через пиратские темы и плагины;
- активный плагин «файловый менеджер» — через такие плагины любой администратор, в том числе чужой, получает полный доступ к файлам;
- «взломанная» версия платного плагина переноса сайтов с поддельным ключом;
- полный дамп базы данных в корне сайта, доступный по прямой ссылке любому, кто угадает имя файла.
Журналы доступа на хостинге хранились только за текущий день, поэтому точный путь первого проникновения установить не удалось. Это частая ситуация — и аргумент за то, чтобы хранить логи хотя бы месяц.
Что сделали
- Всё подозрительное перенесли в карантин, а не удалили: снимок базы до чистки, файлы, плагины и темы — в закрытую папку вне сайта. Если что-то окажется нужным, это можно вернуть.
- Переустановили ядро WordPress 7.1 и проверили контрольные суммы.
- Удалили данные поддельного плагина из базы и скрытого администратора, его записи передали настоящему.
- Вернули владельцу роль администратора и сменили пароль.
- Убрали в карантин 18 неактивных плагинов и 5 неиспользуемых тем, файловый менеджер и пиратский плагин.
- Сменили секретные ключи и пароль базы данных, запретили редактирование файлов из админки.
- Запретили выполнение PHP в
uploadsи поставили защитный mu-plugin с журналом событий.
Что проверить у себя прямо сейчас
- Все ли администраторы на месте и остались ли они администраторами.
- Нет ли плагинов, которые вы не ставили. Отсортируйте папку
wp-content/pluginsпо дате. - Пуста ли папка
wp-content/mu-plugins— или вы знаете каждый файл в ней. - Нет ли в корне сайта файлов
.sql,.zip,.tar.gz. - Как видит ваш сайт поисковик: запрос
site:ваш-сайт.ruв Google и инструмент «Проверка ответа сервера» в Яндекс.Вебмастере.
Про спам, который видят только поисковики, — в статье «В поиске появились чужие страницы сайта».
Частые вопросы
Почему я не вижу спам, если открываю сайт сам?
Это клоакинг: код определяет, кто пришёл. Поисковому роботу показывается спам, человеку — обычный сайт. Увидеть подмену можно через инструменты Вебмастера или по сохранённой копии в поиске.
Зачем переносить файлы в карантин, а не удалять?
Чтобы ничего не потерять. Иногда вместе с вирусом «подозрительным» выглядит нужный файл. Из карантина его можно вернуть, а удалённый — нет.
Опасен ли файловый менеджер в админке?
Сам по себе это не вирус, но он даёт полный доступ к файлам любому администратору. Если в админку попадёт чужой, файловый менеджер сэкономит ему всю работу. На рабочем сайте его лучше не держать.