Сайт постійно зламують: як знайти бекдор і закрити вхід
Якщо ви вже чистили сайт, а за день чи тиждень він знову заражений, справа майже завжди в одному: прибрали симптом, але не закрили вхід. На сайті лишився бекдор, прихований скрипт, через який зараження повертається автоматично. Поки він живий, чистити марно: код заливають заново тим самим шляхом. Нижче: що таке бекдор, де він ховається, як його знайти і як закрити вхід, щоб сайт перестали ламати.
Чому сайт ламають знову і знову
Повторний злом це не невезіння, а закономірність. Причина завжди в тому, що попередня чистка була неповною:
- Прибрали видиме зараження (редирект, спам-сторінки), але не торкнулися механізму, що його створює.
- Лишився бекдор: файл або фрагмент коду, що дає зловмиснику доступ в обхід пароля.
- Не закрили вразливість, через яку зайшли першого разу, тому можуть зайти знову.
Прибрати зараження і закрити вхід це дві різні роботи. Без другої сайт ламають знову тим самим способом, часто того ж дня.
Перевірте сайт прямо зараз
Інструмент відкриє ваш сайт ззовні так, як його бачать пошуковий робот і відвідувач із телефону. Активне зараження, редирект і клоакінг буде видно одразу, а заодно застарілу версію 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. Без закриття цієї точки входу сайт ламатимуть знову.