«12 сайтів — один пароль. Нуль зусиль з боку хакера — нуль шансів з боку власника»
Історія, яка може статися з будь-ким
Нещодавно чистив масове зараження дванадцяти WordPress-сайтів, які жили на одному хостингу. Хтось додав сторінки, яких ніколи не існувало. Десь з’явились файли з незрозумілими назвами. Google почав показувати в пошуку під цими доменами контент про онлайн-казино та криптовалютні схеми. Самі сайти ледь дихали, працювали через раз, а хостер був за крок від того, щоб заблокувати їх повністю.
Робота була інтенсивна, результат — чисті сайти і купа висновків, якими варто поділитись.
Анатомія зламу: що ми знайшли на сервері
Коли я отримав доступ до сервера, картина була… показовою. Усі дванадцять сайтів жили на одному віртуальному хостингу (shared hosting), під одним системним акаунтом. Один пароль — і атакуючий отримав доступ до всього. Як єдиний ключ від дванадцятиквартирного будинку.
Що було далі? Наливайте чай, сідайте зручніше — бо список того, що ми там знайшли, вражає.
Doorway-сторінки — 182 штуки
По всьому WordPress — у wp-admin, wp-includes, wp-content — з’явились папки з числовими назвами, всередині яких лежали index.php файли. Це так звані doorway pages — сторінки-привиди, які існують тільки для пошукових роботів. Google індексує їх, бачить «трастовий» домен і починає показувати спам у пошуковій видачі. Власник сайту може місяцями не знати, що його домен працює на чуже казино, хай йому грець!
Вебшелли — 9+ копій
Вебшелл — це, по суті, чорний хід на ваш сервер. Маленький PHP-скрипт, через який хакер може віддалено виконувати будь-які команди: читати файли, завантажувати нові, видаляти, змінювати — все, що завгодно. І таких “чорних ходів” ми знайшли дев’ять штук.
Файли з назвами на кшталт clasa99.php, astar.php, proccess_config.php — розкидані по різних директоріях. Деякі маскувались під CSS-файли (editorm.css.php у /wp-includes/blocks/avatar/). Один мав AES-шифрування — це вже не аматорщина, а інструмент з арсеналу для перепродажу доступу на хакерських форумах.
Фейкові плагіни
У директорії плагінів з’явились каталоги, що імітують легітимні розширення. Всередині — PHP-файли розміром по 50–60 КБ, начинені обфускованим кодом — тобто навмисно заплутаним так, щоб ні людина, ні антивірус не змогли швидко зрозуміти, що він робить. WordPress їх бачить як «плагіни», адмін може навіть не помітити зайвий рядок у списку. Як додатковий мешканець у квартирі, якого ніхто не запрошував, але він тихо живе і їсть з вашого холодильника.
Ін’єкції в теми
У шести темах був модифікований functions.php. Додано код індонезійською мовою (коментарі “Memanggil file backlink”), який через хук wp_footer підвантажував файл backlink.php — ін’єкцію зовнішніх посилань у футер сайту. Кожне відвідування сторінки генерувало невидимі для користувача SEO-посилання на сайти замовника атаки.
Прихований адміністратор
У mu-plugins лежав файл jetpack-performance.php — назва, яка не викликає жодних підозр. Але всередині — фільтр, який ховав конкретного користувача з адмін-панелі. Хакер створив собі адміністраторський акаунт, а потім зробив його невидимим. Навіть якщо ви зайдете в «Користувачі» — ви його не побачите. Він просто не існує у вашому інтерфейсі. Але він є. Сидить собі тихенько у вашій квартирі, їсть ваш борщ, спить на вашому ліжку — і ви навіть не підозрюєте, що він там. Наглість? Ні. Це бізнес-модель.
Заражені root-файли
У кожному index.php кореневої директорії був впроваджений код, що завантажував payload із зовнішнього сервера. Це дозволяло хакеру змінювати поведінку сайтів без повторного зламу — сьогодні редирект на казино, завтра криптомайнер, післязавтра фішинг-сторінка. Пульт дистанційного керування вашим сайтом — тільки в чужих руках.
Хакерські акаунти
На більшості сайтів були створені хакерські адміністраторські акаунти. А на одному сайті ми виявили 232 спам-акаунти. Двісті тридцять два. На одному сайті. Вам там не тісно, хлопці? 😄
Хто за цим стоїть і навіщо
Судячи з коментарів у коді індонезійською мовою — сліди ведуть у Південно-Східну Азію. Але не варто уявляти собі кіношного хакера в капюшоні, який вночі п’є каву і зловісно посміхається в монітор. Це конвеєр. Бізнес. Дуже прибутковий бізнес.
Злам масовий і автоматизований. Боти сканують мільйони серверів, пробують типові паролі або використовують бази витоків. Один вкрадений пароль — і автоматичний скрипт за хвилини заражає всі сайти на акаунті.
А далі — монетизація. Багатошарова, як цибуля.
Doorway-сторінки продаються замовникам спаму пачками: «1000 doorways на трастових доменах — $300». Бекдори перепродаються окремо — доступ до зламаного сервера на хакерському форумі коштує від $5 до $50 за штуку. Backlink-ін’єкції — це окрема послуга для «чорного SEO». А якщо все інше не вдасться — завжди можна розгорнути криптомайнер або використати сервер для DDoS-атак.
Один зламаний акаунт із дванадцятьма сайтами — це не «інцидент». Це актив, який приносить дохід кільком різним покупцям одночасно.
Чому це сталось: ніяких геніїв, тільки халатність
Тут немає жодних SQL-ін’єкцій чи складних zero-day експлойтів. Усе набагато прозаїчніше. І саме це робить цю історію такою болючою.
Усі ознаки вказують на компрометацію FTP/SSH-пароля. Ідентичний патерн зараження на всіх дванадцяти сайтах — один автоматичний прохід по файловій системі. Модифіковані core-файли WordPress — через вразливість плагіна таке неможливо, потрібен прямий доступ до файлів. Файли створені від імені системного користувача хостингу.
Як витік стався? Є кілька типових сценаріїв.
Слабкий або повторно використаний пароль. Якщо ви використовуєте один пароль для FTP і для реєстрації на якомусь форумі — рано чи пізно він потрапить у базу витоків.
FTP-клієнт як найслабша ланка. FileZilla та подібні клієнти зберігають паролі у відкритому вигляді у XML-файлах на вашому комп’ютері. Один троян-стілер — і всі ваші акаунти скомпрометовані.
Фішинг. Підроблена сторінка входу в панель хостингу — виглядає один в один, але відправляє ваші дані зовсім не туди, куди ви думаєте.
А далі — віртуальний хостинг зробив свою справу. Дванадцять сайтів під одним системним акаунтом. Один пароль = повний доступ до всього. Як один ключ від усього будинку — і від квартир, і від підвалу, і від горища.
І ще один момент, який не можу не згадати: на сервері працював PHP 7.3–7.4. PHP 7.3 не оновлюється з грудня 2021 року, PHP 7.4 — з листопада 2022. Тобто роками без жодних патчів безпеки. У 2026 році стандарт — PHP 8.3+. Три-чотири роки без патчів — це подарунок для будь-якого бота, який сканує сервери.
Як я лікував ці сайти
Процес очистки зайняв кілька годин інтенсивної роботи. Кілька дуже інтенсивних годин. Якщо коротко — ось що довелось зробити:
- Знайшов і видалив усі шкідливі файли — вебшелли, фейкові плагіни, doorway-сторінки, бекдори в mu-plugins, заражені
index.phpта backlink-ін’єкції в темах - Видалив хакерські акаунти з баз даних усіх сайтів
- Понизив роль підозрілих «системних» акаунтів до передплатника
- Перегенерував секретні ключі WordPress (salt keys) — це скидає всі активні сесії, включно з хакерськими
- Заблокував виконання PHP у директорії
uploads - Вимкнув редагування файлів через адмінку
- Відновив пошкоджені файли тем
Це була технічна частина. Але без зміни підходу до безпеки — все це доведеться повторювати знову і знову.
П’ять уроків, які коштували безсонної ночі
Я підготував детальний технічний чекліст безпеки WordPress на 2026 рік — він доступний на моєму освітньому порталі: Чекліст безпеки WordPress (2026). Там є все — від конфігурації wp-config.php до налаштування серверних заголовків безпеки та WAF.
Але якщо виділити найважливіше з цієї історії — ось п’ять висновків.
Один пароль — одна точка відмови. Якщо на вашому хостингу живе десять сайтів під одним акаунтом — компрометація одного пароля означає компрометацію всього. Використовуйте SSH-ключі замість паролів. Якщо паролі — тільки унікальні, тільки складні, тільки через менеджер паролів. І ніколи — ніколи — не зберігайте їх у FileZilla чи інших FTP-клієнтах.
PHP має бути актуальним. Як я вже згадував вище — застаріла версія PHP без патчів безпеки це запрошення для ботів. Оновлюйте до актуальної версії, не відкладайте.
Віртуальний хостинг — це спільна квартира. Ваші сайти живуть поруч із сотнями інших, і один скомпрометований сусід може стати проблемою для всіх. Для серйозних проєктів варто розглянути виділений сервер (VPS) або хостинг із ізоляцією сайтів один від одного.
Моніторинг — це не розкіш. Власник цих сайтів дізнався про злам випадково — коли Google вже індексував спам під його доменами. Якби був встановлений Wordfence або будь-який інший моніторинг цілісності файлів — злам виявили б за годину, а не за місяці.
Бекапи — це не «колись зроблю». Якби існували чисті бекапи — відновлення зайняло б хвилини, а не години ручної роботи з пошуку та видалення кожного шкідливого файлу окремо.
Підсумок
Кожен злам — це не технічна проблема. Це проблема пріоритетів.
Коли бізнес вирішує «зекономити» на безпеці, відкласти оновлення на потім, використати один пароль для всього — він не економить. Він бере кредит. Кредит із дуже високою процентною ставкою, яку доведеться платити не грошима, а репутацією, позиціями в Google, даними клієнтів і безсонними ночами.
Дванадцять сайтів. Одна ніч. Один пароль.
Не будьте цим кейсом.
Якщо ваш WordPress-сайт поводиться дивно, Google показує під вашим доменом чужий контент, або ви просто хочете переконатися, що все в порядку — напишіть мені. Я проведу аудит безпеки, знайду вразливості та закрию їх до того, як ними скористається хтось інший. Краще витратити годину на перевірку зараз, ніж потім кілька безсонних ночей на лікування.