Сайт постійно зламують: як знайти бекдор і закрити вхід

Якщо ви вже чистили сайт, а за день чи тиждень він знову заражений, справа майже завжди в одному: прибрали симптом, але не закрили вхід. На сайті лишився бекдор, прихований скрипт, через який зараження повертається автоматично. Поки він живий, чистити марно: код заливають заново тим самим шляхом. Нижче: що таке бекдор, де він ховається, як його знайти і як закрити вхід, щоб сайт перестали ламати.

Зміст
  1. Чому ламають знову
  2. Перевірте сайт зараз
  3. Що таке бекдор
  4. Як знайти бекдор
  5. Чому антивірус мовчить
  6. Як закрити вхід
  7. Joomla або WordPress
  8. Коли кликати фахівця

Чому сайт ламають знову і знову

Повторний злом це не невезіння, а закономірність. Причина завжди в тому, що попередня чистка була неповною:

  • Прибрали видиме зараження (редирект, спам-сторінки), але не торкнулися механізму, що його створює.
  • Лишився бекдор: файл або фрагмент коду, що дає зловмиснику доступ в обхід пароля.
  • Не закрили вразливість, через яку зайшли першого разу, тому можуть зайти знову.

Прибрати зараження і закрити вхід це дві різні роботи. Без другої сайт ламають знову тим самим способом, часто того ж дня.

Перевірте сайт прямо зараз

Інструмент відкриє ваш сайт ззовні так, як його бачать пошуковий робот і відвідувач із телефону. Активне зараження, редирект і клоакінг буде видно одразу, а заодно застарілу версію CMS, через яку зазвичай і заходять. Доступ до сайту не потрібен.

Перевіряю: дефейс, мобільний редирект, клоакінг, версію CMS та її актуальність.

Перевіряю сайт ззовні...

Що таке бекдор і де він ховається

Бекдор це прихована точка входу, залишена після злому. Знайти її складно, бо вона маскується. Типові місця:

  • Веб-шел: окремий .php-файл із випадковим імʼям у папці uploads, media чи в кеші.
  • Вставка в легальний файл: один рядок у index.php, functions.php чи файлі шаблона, часто через eval(base64_decode(...)).
  • Файл-картинка: .php, замаскований під зображення чи іконку.
  • У базі даних: код у параметрах шаблона чи в записах, виконується при завантаженні сторінки.
  • Завдання cron: відновлює видалені файли за розкладом.
  • Лівий адміністратор у CMS або новий власник у Search Console.

Як знайти бекдор

Порядок, який реально знаходить прихований вхід:

  1. Порівняйте файли із завідомо чистою копією CMS: усе зайве під підозрою.
  2. Відсортуйте файли за датою зміни: заражені зазвичай змінювалися в один час.
  3. Пошукайте по коду підозрілі функції: eval, base64_decode, gzinflate, assert, preg_replace з модифікатором e.
  4. Перевірте папки, де .php бути не повинно: uploads, images, media.
  5. Перевірте завдання cron і список адміністраторів CMS.
  6. У базі перевірте параметри шаблона і службові записи на сторонній код.

Чому антивірус хостингу його не знаходить

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

Telegram