Зламаний сайт лікується не в тому порядку, в якому підказує паніка. Найчастіша помилка - одразу кинутися видаляти підозрілі файли. Після цього сайт перестає працювати, слідів більше немає, а зловмисник досі всередині.
Нижче послідовність, яка працює.
Крок 0. Зафіксувати стан
До того, як щось видаляти, зробіть повну копію: файли і база. Так, заражену.
Вона потрібна з двох причин. По-перше, якщо під час чистки зламається щось потрібне, буде куди повернутися. По-друге, саме по цій копії потім видно, куди зайшли і що встигли зробити. Без неї ви лікуєте наосліп.
Крок 1. Зрозуміти, що саме сталося
Різні зараження лікуються по-різному, тому спочатку діагноз.
- Спам у видачі - у Google на вашому домені чужі сторінки. Класичний варіант japanese keyword hack.
- Редирект відвідувачів - сайт перекидає людей на сторонній ресурс, часто тільки з мобільних або тільки при переході з пошуку.
- Дефейс - замість головної чужа сторінка. Помітно одразу, лікується найпростіше.
- Розсилка спаму - хостинг блокує пошту, домен потрапляє в чорні списки.
- Прихований майнер або бекдор без видимих слідів - сайт наче працює, але навантаження на сервер зросло.
Корисні місця, куди варто заглянути: Search Console у розділі Проблеми безпеки, логи доступу на хостингу за період, коли почалися дивні речі, і дати зміни файлів.
Крок 2. Закрити вхід
Це найважливіший крок, і саме його зазвичай пропускають. Поки доступ у зловмисника є, чистити марно.
- Змінити паролі: усі адміністратори WordPress, панель хостингу, FTP і SFTP, користувач бази даних.
- Оновити ключі безпеки у
wp-config.php. Це розлогінює всіх, включно з тим, хто зараз сидить у вашій адмінці з чужої сесії. - Видалити невідомих користувачів у WordPress.
- Перевірити власників ресурсу в Search Console і прибрати чужих.
Крок 3. Замінити те, що можна замінити
Ядро WordPress, плагіни і теми - це файли, які завжди можна взяти заново з офіційного джерела. Тому їх не чистять, а перевстановлюють.
- Ядро WordPress: перевстановити ту саму версію поверх.
- Плагіни: видалити і поставити заново з каталогу. Ті, що більше не оновлюються, - замінити на аналоги.
- Тему: якщо це стандартна тема, перевстановити. Якщо кастомна - доведеться дивитися файли руками.
Після цієї операції залишається дуже вузьке коло місць, де може ховатися код: власна тема, папка uploads, корінь сайту і база даних.
Крок 4. Вичистити те, що замінити не можна
Що дивитися:
wp-content/uploads- файлів.phpтут не має бути взагалі;.htaccessу корені і у вкладених папках - дописані правила редиректу;wp-config.phpіindex.php- сторонні рядки на початку файлу;- файли активної теми, особливо
functions.phpіheader.php; - у базі: таблиця налаштувань, вміст записів, заплановані задачі.
Маркери у коді: eval(, base64_decode(, gzinflate(, preg_replace з модифікатором /e, довгі нечитабельні рядки, код одразу після відкриваючого тега без жодного коментаря.
Про заплановані задачі. Улюблений спосіб повернутися: у WordPress створюється завдання, яке раз на кілька годин відновлює видалені файли. Ви чистите сайт увечері, а вранці все на місці. Якщо зараження повертається саме так - шукати треба в задачах і в базі, а не у файлах.
Крок 5. Прибрати наслідки у пошуку
Сайт чистий, але Google про це ще не знає, а в індексі досі висять чужі сторінки.
- Спамні адреси мають віддавати 410, а не 404 і не редирект на головну.
- Видалити чужу карту сайту, подати свою.
- У Search Console, розділ Проблеми безпеки, подати заявку на перевірку з описом виконаних робіт.
- Через тиждень перевірити
site:вашсайт.comще раз.
Коли краще не робити самому
Чесно: частину випадків реально закрити самостійно, якщо ви впевнено почуваєтесь у файлах і базі. Але є ситуації, де самостійна чистка виходить дорожчою за роботу спеціаліста.
- Зараження повертається після чистки - значить, знайдено не все.
- Сайт комерційний і простій коштує грошей щодня.
- На сервері кілька сайтів: зараження між ними переповзає, і чистити треба всі одночасно.
- Google вже показує попередження відвідувачам - тут кожен день впливає на репутацію.
- Немає бекапу і немає впевненості, що саме змінилося.
Коротко
Спочатку копія, потім діагноз, потім закриття доступу, і лише потім чистка. Ядро, плагіни і теми перевстановлюються, а не лікуються. Наприкінці - 410 для спамних адрес і заявка в Search Console.
Потрібна допомога зі зламаним сайтом?
Перевіряю, чищу і закриваю вразливість, через яку зайшли.