Безпека WordPress: один кейс замість тисячі порад

«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 показує під вашим доменом чужий контент, або ви просто хочете переконатися, що все в порядку — напишіть мені. Я проведу аудит безпеки, знайду вразливості та закрию їх до того, як ними скористається хтось інший. Краще витратити годину на перевірку зараз, ніж потім кілька безсонних ночей на лікування.

Віталій Капля

Засновник, веб-розробник, WordPress-експерт

Програмуванням почав цікавитися ще у 1997 році, перше знайомство з майбутньою професією – Visual Basic. У 2004-2005 роках займався розробкою…

Більше про автора

Експерт
кастомної
WordPress розробки

Безкоштовна консультація + розрахунок вартості

Більше цікавих статей

Почніть вводити текст для пошуку
Вхід для клієнтів

Цей сайт використовує файли cookie

Ми використовуємо файли cookie, щоб персоналізувати вміст і рекламу, надавати функції соціальних мереж і аналізувати наш трафік. Ми також надаємо інформацію про ваше використання нашого веб-сайту нашим партнерам із соціальних мереж, реклами та аналітики, які можуть поєднувати її з іншою інформацією, яку ви їм надали або зібрали під час використання вами їхніх послуг. Продовжуючи користуватися нашим сайтом, ви погоджуєтеся із використанням файлів cookie, а також приймаєте нашу Політику конфіденційності та Умови використання.

Я на звʼязку!