Владелец заметил, что часть посетителей с телефонов попадает на чужой сайт, хостинг прислал уведомление о рассылке спама, а Яндекс пометил сайт как опасный. Нашли и удалили вредоносный код, закрыли путь, через который он попал, обновили ядро и сменили все доступы. Работали на копии и с резервной копией до начала чистки.
С чем обратился владелец сайта и что получилось после работ.
С телефона из поиска примерно каждый третий переход уводил на сторонний сайт. С компьютера всё выглядело нормально, поэтому заражение долго не замечали.
Хостинг сообщил о тысячах писем в сутки с аккаунта сайта и ограничил отправку почты. Письма о заказах перестали доходить покупателям.
В Яндекс Вебмастере появилась отметка об угрозе, браузер показывал страницу «Сайт может быть опасен». Трафик из поиска заметно просел.
Основные находки (часть однотипных файлов объединена). Пути сокращены, вредоносный код в отчёт не вставляем: он сохранён в архиве для разбора.
| Где | Что делал | Как нашли |
|---|---|---|
/bitrix/php_interface/init.php | Подменён: в начало файла добавлен код, который для мобильных браузеров с переходом из поиска отдавал редирект | Проверка целостности сверка с эталоном и история изменений |
/.htaccess, /upload/.htaccess | Правило перенаправления по User-Agent; в папке загрузок разрешён запуск PHP | ручной разбор правил сервера |
/upload/iblock/3f2/*.php (6 файлов) | Веб-шеллы под видом картинок каталога: загрузка файлов и выполнение команд | поиск по сигнатурам eval, base64, gzinflate |
/bitrix/tools/cache_check.php | Скрипт рассылки спама через почтовую функцию сервера | Проверка целостности файла нет в эталоне |
/bitrix/modules/main/include/.cfg.php | Бэкдор: выполнял код из параметра запроса, восстанавливал удалённые файлы | поиск по сигнатурам и дате изменения |
Таблица b_agent: 2 агента | Раз в час заново записывали вредоносный код в init.php | разбор агентов с чужими функциями |
Таблица b_module_to_module: 1 обработчик | Обработчик события OnEpilog дописывал скрипт в страницы для мобильных | разбор обработчиков событий |
Таблица b_user: 1 запись | Лишний пользователь в группе администраторов, создан через уязвимость | сверка списка администраторов с владельцем |
Вероятный путь заражения: устаревшая версия модуля main с известной уязвимостью и запуск PHP в папке загрузок. Оба закрыты, см. следующий блок.
Порядок важен: сначала копия и изоляция, потом чистка, потом закрываем дыру и меняем доступы. Иначе вирус возвращается через сохранённый бэкдор или старый пароль.
Полная копия файлов и базы до любых изменений: для отката и для разбора.
Страница обслуживания для посетителей, отключена отправка почты с сайта, закрыт доступ к админке по IP на время работ.
Удалены веб-шеллы и скрипт рассылки, восстановлен init.php, удалены агенты, обработчик события и лишний администратор.
«Проверка целостности»: все изменённые файлы ядра восстановлены из дистрибутива, повторная сверка без расхождений.
Сначала на копии сайта, затем на рабочем: главный модуль, интернет-магазин, обмен с 1С. Проверены каталог, корзина и оформление заказа.
PHP 8.2 после проверки шаблона и своих компонентов на совместимость, исправлены устаревшие вызовы.
Пароли FTP, базы данных, панели хостинга и всех администраторов. Удалены старые FTP-аккаунты подрядчиков.
Включены проактивный фильтр, контроль активности, журнал вторжений, запрет PHP в папке загрузок.
Капча на формах обратной связи, регистрации и восстановления пароля, ограничение частоты отправки.
Запрос перепроверки в Яндекс Вебмастере, письмо в поддержку хостинга о снятии ограничения на почту.
Каждую проверку повторяли после работ. Перепроверка в Яндексе занимает некоторое время, статус в отчёте указан на момент сдачи.
| Проверка | До | После | Комментарий |
|---|---|---|---|
| Яндекс Вебмастер, «Безопасность и нарушения» | угроза найдена | ✓ угроз нет | Перепроверка запрошена и пройдена, отметка снята |
| Антивирус хостинга | 9 файлов | ✓ чисто | Полное сканирование аккаунта |
| Сканер безопасности 1С-Битрикс | 7 критичных | ✓ 0 критичных | Остались 2 рекомендации по настройке сервера, переданы хостингу |
| Проверка целостности ядра | 23 расхождения | ✓ совпадает | Сверка с эталоном после обновления |
| Редиректы с телефона (Android, iOS, из поиска) | есть | ✓ нет | 30 переходов с разных устройств и User-Agent |
| Исходящая почта с сервера | тысячи писем | ✓ только письма сайта | Ограничение хостинга снято, письма о заказах доходят |
| Повторная проверка через неделю | — | ✓ изменений нет | Контроль целостности и журнал вторжений без новых событий |
Полной защиты не бывает, но эти шаги резко снижают риск повторного заражения и упрощают восстановление.