Сайт постоянно взламывают: как найти бэкдор и закрыть вход
Если вы уже чистили сайт, а через день или неделю он снова заражён, дело почти всегда в одном: убрали симптом, но не закрыли вход. На сайте остался бэкдор, скрытый скрипт, через который заражение возвращается автоматически. Пока он жив, чистить бесполезно: код заливают заново тем же путём. Ниже: что такое бэкдор, где он прячется, как его найти и как закрыть вход, чтобы сайт перестали ломать.
Почему сайт ломают снова и снова
Повторный взлом это не невезение, а закономерность. Причина всегда в том, что предыдущая чистка была неполной:
- Убрали видимое заражение (редирект, спам-страницы), но не тронули механизм, который его создаёт.
- Остался бэкдор: файл или фрагмент кода, дающий злоумышленнику доступ в обход пароля.
- Не закрыли уязвимость, через которую зашли в первый раз, поэтому могут зайти снова.
Убрать заражение и закрыть вход это две разные работы. Без второй сайт ломают снова тем же способом, часто в тот же день.
Проверьте сайт прямо сейчас
Инструмент откроет ваш сайт снаружи так, как его видят поисковый робот и посетитель с телефона. Активное заражение, редирект и клоакинг будет видно сразу, а заодно устаревшую версию CMS, через которую обычно и заходят. Доступ к сайту не нужен.
Что такое бэкдор и где он прячется
Бэкдор это скрытая точка входа, оставленная после взлома. Найти её сложно, потому что она маскируется. Типичные места:
- Веб-шелл: отдельный .php-файл со случайным именем в папке uploads, media или в кэше.
- Вставка в легальный файл: одна строка в
index.php,functions.phpили файле шаблона, часто черезeval(base64_decode(...)). - Файл-картинка: .php, замаскированный под изображение или иконку.
- В базе данных: код в параметрах шаблона или в записях, выполняется при загрузке страницы.
- Задача cron: восстанавливает удалённые файлы по расписанию.
- Левый администратор в CMS или новый владелец в Search Console.
Как найти бэкдор
Порядок, который реально находит скрытый вход:
- Сравните файлы с заведомо чистой копией CMS: всё лишнее под подозрением.
- Отсортируйте файлы по дате изменения: заражённые обычно менялись в одно время.
- Поищите по коду подозрительные функции:
eval,base64_decode,gzinflate,assert,preg_replaceс модификатором e. - Проверьте папки, где .php быть не должно: uploads, images, media.
- Проверьте задачи cron и список администраторов CMS.
- В базе проверьте параметры шаблона и служебные записи на сторонний код.
Почему антивирус хостинга его не находит
Очень частая ловушка: хостинг пишет «всё чисто», а сайт продолжают ломать. Причин две. Первая: антивирус ищет файлы по известным сигнатурам, а бэкдор либо обфусцирован (зашифрован), либо выглядит как легальный код. Вторая: часть механизма лежит в базе данных или в задаче cron, а не в файлах. Файлы при этом честно чистые, сканер честно это и показывает.
Поэтому «хостинг сказал, что всё в порядке» не значит, что бэкдор убран. Проверять надо и обфусцированный код, и базу, и cron, а не только сигнатуры в файлах.
Как закрыть вход навсегда
Чтобы сайт перестали ломать, мало убрать бэкдор. Нужно закрыть саму дверь:
- Найдите точку входа по логам сервера: через какое расширение или уязвимость зашли.
- Обновите CMS и все расширения до поддерживаемых версий, удалите неиспользуемые.
- Смените все пароли и ключи: админка, FTP и SSH, база, панель хостинга, секретные ключи CMS.
- Проверьте, что не осталось других бэкдоров и задач cron.
- Ограничьте доступ к админке, включите базовую защиту и настройте чистые резервные копии.
Если сайт на Joomla или WordPress
Joomla. Особенно уязвима Joomla 3: без обновлений безопасности с 17 августа 2023 года. Заходят через расширения (JCE, SP Page Builder) или фреймворк Helix3, а бэкдор прячут в папке media или в параметрах шаблона в базе. Без перехода на версию 5 или 6 сайт заражают снова.
WordPress. Проверьте папку wp-content (плагины mu-plugins, папку uploads на .php), файл wp-config.php, functions.php активной темы и таблицу wp_options. Чаще всего вход остаётся через заброшенный или уязвимый плагин.
Когда звать специалиста
Есть смысл не терять время самому, если:
- вы уже чистили сайт два и более раз, а заражение возвращается;
- бэкдор не находится, а сайт снова и снова заражают;
- код обфусцирован или лежит в базе, и антивирус хостинга молчит;
- хостинг заблокировал аккаунт за вредоносное ПО;
- рабочей чистой резервной копии нет.
Нахожу и убираю бэкдоры на любой CMS и закрываю точку входа, чтобы сайт перестали ломать, а не просто чищу симптом. Диагностика бесплатная. Работаю с владельцами сайтов из Украины, Польши и с русскоязычными в ЕС. С юридическими лицами, зарегистрированными в России, не работаю: это ограничение санкций ЕС.
Подробнее и заявкаЧастые вопросы
Убрал вирус с сайта, а через день он вернулся. Почему?
Потому что остался бэкдор или задача cron, которые заливают код заново, и не закрыта уязвимость, через которую зашли. Убрать заражение и закрыть вход это разные работы. Без второй сайт заражают снова тем же путём.
Что такое бэкдор простыми словами?
Это скрытая дверь, оставленная после взлома. Через неё злоумышленник заходит в обход пароля и снова заражает сайт. Бэкдор маскируется под обычный файл или прячется в базе, поэтому его трудно найти вручную.
Антивирус хостинга ничего не находит. Значит, бэкдора нет?
Нет. Антивирус ищет по сигнатурам, а бэкдор обычно обфусцирован или выглядит как легальный код, плюс часть механизма может быть в базе данных или в cron. Тишина сканера не доказывает, что сайт чист.
Можно ли просто откатиться из резервной копии?
Только если копия заведомо чистая и вы знаете дату заражения. Часто бэкдор залили за недели до того, как заметили взлом, и бэкап уже с ним. И главное: откат не закрывает уязвимость, поэтому сайт перезаражают.
Как понять, через что зашли на сайт?
По логам сервера: там видно, какой запрос и к какому файлу предшествовал появлению заражения. Обычно это уязвимое расширение или устаревшая CMS. Без закрытия этой точки входа сайт будут ломать снова.