WordPress – одна з найпопулярніших та найрозвинутіших систем керування веб-контентом у світі. Близько 40% усіх сайтів у мережі Інтернет побудовані саме на WordPress. Відповідно така популярність спричиняє велику кількість атак, ризиків, вразливостей. Пропоную комплексні та дієві рекомендації як захистити свій сайт на WordPress.
Сайти на незахищеному HTTP-протоколі є більш вразливими, аніж сайти на HTTPS (Hypertext Transfer Protocol Secure). Для хакерів вони є ласим шматочком, адже незахищене з’єднання дає можливість проексплуатувати найрізноманітніші типи вразливостей: SQL/PHP/XSS-ін’єкції, DOS/DDOS, LFI та багато інших.
Щоби перевести сайт на захищений HTTPS-протокол, необхідно встановити на сервері SSL-сертифікат. Існують платні (COMODO, DigiCert) та безкоштовні SSL-сертифікати (LetsEncrypt, CloudFlare). Перевірити коректність встановлення і налаштування SSL/TLS можна з допомогою сервісу Qualys SSL Labs.
Для зручності керування, можна також скористатися WordPress-плагіном Really Simle SSL:
Really Simple SSL
У 90% випадків наявність багатофакторної аутентифікації (2FA/MFA) стає на заваді зламу. За відсутності 2FA, зловмиснику залишається лише підібрати логін і пароль до вашого сайту.
Багатофакторна аутентифікація – це додатковий шар захисту облікового запису, який окрім пароля, передбачає ще й введення коду підтвердження, який надійде вам на електронну пошту, мобільний застосунок (Google Authentificator) або в desktop-додаток (KeepassXC).
Для інтеграції 2FA в WordPress існує чудовий плагін – Wordfence Security:
Wordfence Security – Firewall, Malware Scan, and Login Security
Щоб увімкнути двофакторну аутентифікацію на сайті, необхідно перейти в меню Wodfence Security в сайдбарі WordPress й обрати пункт Login Security, після чого з’явиться вкладка Two-Factor Authentification з відповідними налаштуваннями:
Якщо сайтом користуються інші користувачі, бажано увімкнути обов’язкову 2FA-авторизацію для усіх типів облікових записів. Це можна зробити на вкладці Settings:
Усі файли і папки WordPress повинні бути надійно захищеними, інакше постає ризик витоку та розкриття даних. Основним службовим файлом WordPress є wp-config.php – у ньому міститься вся ключова інформація щодо конфігурації сайту та з’єднання з базою даних. Тож варто почати з нього.
Найпростіший спосіб захистити wp-config — це просто перенести його на 1 рівень вище, за межі кореневої директорії сайту (public_html) й встановити права доступу на файл 0600
, що унеможливить будь-які маніпуляції з ним.
Інші файли та папки, які обов’язково рекомендується захистити:
WordPress рекомендує встановити коректні права доступу для всіх директорій:
find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \;
І для файлів:
find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;
Можна також включити автоматичне виставлення прав доступу для файлів і папок в wp-config.php, додавши такі рядки:
define(‘FS_CHMOD_FILE’, 0644); define(‘FS_CHMOD_DIR’, 0755);
Примітка: для критично важливих файлів налаштуйте права 640, 600 або 440. Розібратися з їх значеннями можна в онлафн-сервісі CHMOD-CALCULATOR.
По замовчуванню, доступ в адмін-панель WordPress здійснюється за URL-адресою domain.com/wp-admin
, яка є публічнодоступною і переспрямовує користувача на сторінку з формою входу domain.com/wp-login.php
.
Дуже часто боти атакують цю форму, намагаючись підібрати логін та пароль. WordPress повідомляє про некоректно введені дані, що дає їм можливість відсіяти неуспішні спроби. Загалом, усе це створює ризик несанкціонованого доступу і навантажує сервер:
Існує кілька способів, як вирішити цю проблему. Найпростіший – змінити URL-адресу сторінки входу в адмінку WordPress можна з допомогою плагіна WPS Hide Login:
WPS Hide Login
Окрім того можна додатково обмежити кількість невдалих спроб входу в адмінку WordPress. Відповідні налаштування містить плагін Wordfence Security – вкладка Brute Force Protection у розділі All options:
Існує також окремий плагін для обмеження спроб входу – Limit Login Attempts Reloaded:
Limit Login Attempts Reloaded
Ще один дієвий спосіб як захистити адмінку WordPress без жодних плагінів (рекомендую) – це обмежити доступ до domain.com/wp-admin
з допомогою фільтрації по IP або ж створити додаткову преавторизацію (HTTP Auth Login) до сторінки входу з допомогою методу htapsswd:
Ім’я користувача (username) WordPress за замовчуванням, наприклад “admin”, дуже легко визначити, а далі спробувати підібрати пароль до нього. Тому при створенні облікових записів дотримуйтесь складних нестандартних імен та багатозначних паролів (до 20-ти і більше символів), які містять літери верхнього та нижнього регістру, цифти та спеціальні знаки.
На жаль, ім’я вже існуючого облікового запису в WordPress неможливо змінити. Але можна створити нового користувача, вилучити старого і зв’язати усі його записи та права з новим користувачем:
Логи WordPress зберігаються в файлі debug.log, який знаходиться в директорії /wp-content
. Часто він є публічнодоступним й зловмисник може скачати та переглянути його, дізнатися кореневу директорію сайту, розташування службових папок, тем і плагінів, отримати інформацію про критичні помилки і проблеми та проексплуатувати їх.
Тому доступ до debug.log необхідно обмежити, виставивши права читання і перегляду лише для Адміністратора — 0660
. Додатково можна перемістити його в іншу директорію.
Відкритий лістинг директорій (Directory listing, CWE-548) — це вразливість, яка дає можливість переглядати папки вашого сайту публічно через інтернет.
Зловмисник може дослідити структуру сайту, ідентифікувати компоненти: теми, плагіни, стилі, скрипти. Може дізнатися розташування службових файлів, наприклад логів, дампів, файлів конфігурації. Усе це допоможе йому спланувати атаку.
Відключити лістинг директорій просто – достатньо у файлі .htaccess прописати директиву Options All -Indexes
.
XMLRPC — це протокол віддаленого доступу до CMS WordPress. Через нього деякі плагіни, такі як Jetpack, можуть дистанційно обмінюватися інформацією з вашим сайтом. На жаль, цим протоколом часто зловживають зловмисники, наприклад можуть провести DDOS або SSRF-атаку.
Рекомендується або повністю відключити XMLRPC або обмежити доступ до нього.
Плагін, який дозволить це зробити:
Disable XML-RPC-API
WP-CRON — це вбудований планувальник WordPress, який дозволяє здійснювати публікацію записів за розкладом. По-замовчуванню, файл wp-cron.php є загальнодоступним й може також стати мішенню DDOS. Окрім того він споживає системні ресурси і на слабких серверах сповільнює WordPress. Я рекомендую відключити його і натомість активувати серверний планувальник Crontab.
Для цього необхідно перейти в файл конфігурації wp-config.php й додати наступний рядок:
define( 'DISABLE_WP_CRON', true );
Після цього підключитися до сервера по SSH і виконати команду:
crontab -e
Відкриється редактор серверного планувальника. Необхідно додати команду, яка запускатиме планувальник wp-cron за розкладом (наприклад, кожних 5 хвилин):
*/5 * * * * wget -qO- https://domain.com/wp-cron.php &> /dev/null
Для власників веб-серверів LiteSpeed/OpenLiteSpeed можна у цілях безпеки перекрити будь-які зовнішні запити до wp-cron.php. Для цього необхідно перейти в меню Server Configuration > General й увімкнути опцію Use Client IP in Header, а потім для Virtual Host (домену) прописати окремі правила в Rewrite Rules (вказавши IP-адресу вашого сервера):
RewriteCond %{REMOTE_ADDR} !^XXX\.XXX\.XXX\.XXX
RewriteCond %{REQUEST_URI} xmlrpc.php|wp-cron.php [NC]
RewriteRule .* - [F,L]
REST API — це технологія, яка дозволяє різним плагінам, додаткам, обліковим записам віддалено взаємодіяти з WordPress. Цю технологію використовують деякі компоненти для синхронізації і оновлення контенту.
Інформація в REST API передається у форматі JSON. Якщо доступ до REST API не обмежено, кожен бажаючий може відкрити URL-посилання, наприклад https://domain.com/wp-json/wp/v2/users
і провести атаку енумерації користувачів.
Подібним чином можна розкрити ID публікацій (https://domain.com/wp-json/wp/v2/posts
), категорій (https://domain.com/wp-json/wp/v2/categories
), тегів (https://domain.com/wp-json/wp/v2/tags
), коментарів (https://domain.com/wp-json/wp/v2/comments
) та інший службовий контент.
У 2017 році в WordPress була зафіксована серйозна вразливість, яка дозволяла через підключені по REST API плагіни провести екскалацію привілеїв і зламати більше 2 млн. сайтів.
Отже, у цілях безпеки рекомендується обмежити доступ по REST API для неавторизованих відвідувачів і HTTP-клієнтів. Існують вже готові плагіни, які реалізують це, наприклад Disable REST API:
Disable REST API
У CMS WordPress Адміністратор може редагувати вихідний код файлів, теми та плагіни відразу в адмін-панелі з допомогою вбудованого редактора коду:
Однак це створює додаткові ризики безпеки. Рекомендується працювати з файлами сайту лише через захищені протоколи sFTP або SSH.
Вимкнути вбудований редактор коду WordPress можна додавши в wp-config.php рядок:
// Disable WordPress file editor define( 'DISALLOW_FILE_EDIT', true );
Robots.txt — це службовий файл, який встановлює правила індексації сайту для пошукових ботів. З його допомогою можна заборонити пошуковим системам індексувати ті чи інші сторінки сайту.
Часто Адміністратори намагаються через robots.txt приховати якомога більше службових директорій та конфіденційних файлів сайту. Таким чином вони полегшують роботу зловмисникам і видають список прихованих ресурсів, які ті використовують як ціль для своїх атак:
Отже, robots.txt варто створювати якомога лаконічнішим. Для блокування індексації тих чи інших веб-сторінок рекомендується застосовувати тег <meta name =”robots” content=”noindex, nofollow”>
, а також серверні права доступу на файли і папки (chmod
, chown
). Таким чином, якщо пошуковий бот або відвідувач полізуть туди куди не треба, від сервера надійде код 403 – “Відмова у доступі”.
Captcha (Completely Automated Public Turing Test) — це автоматична система перевірки та захисту електронних ресурсів від ботів та спаму. Технологія перевіряє цифровий слід відвідувача: IP-адресу, країну, User-Agent та інші параметри. Якщо виявить підозру, попросить підтвердити, що ви не бот, інакше обмежить доступ.
З допомогою Captcha можна захистити будь-які сенситивні об’єкти та елементи на сайті, наприклад форми, кнопки, поля вводу і таке інше. Це чудовий захист від спамерів.
Відсутність капчі, дає можливість атакуючому провести ін’єкцію шкідливого коду, підмінити або перехопити дані, завантажити шелл:
Увімкнути капчу на WordPress-сайті можна з допомогою сервісу Google reCaptcha та плагіну Wordfence Security, або будь-якого іншого що підтримує reCAPTCHA v2/v3:
Окрім Google reCaptcha, існують альтернативні системи:
WordPress у вихідному коді сайту розкриває чимало важливих характеристик, наприклад версію ядра та компонентів сайту (CSS/JS файли). Цього варто уникати, адже знаючи технічні деталі, зловмисник зможе написати експлойт та спланувати хід атаки.
Приховати версію WordPress найпростіше з допомогою плагінів безпеки Wordfence Security та Sucuri Security:
Можна також вручну дописати код в службовий файл WordPress functions.php
:
function remove_version_info() { return ''; } add_filter('the_generator', 'remove_version_info');
Або цей код (використовується інший метод):
// remove version from head
remove_action('wp_head', 'wp_generator');
// remove version from rss
add_filter('the_generator', '__return_empty_string');
// remove version from scripts and styles
function collectiveray_remove_version_scripts_styles($src) {
if (strpos($src, 'ver=')) {
$src = remove_query_arg('ver', $src);
}
return $src;
}
add_filter('style_loader_src', 'collectiveray_remove_version_scripts_styles', 9999);
add_filter('script_loader_src', 'collectiveray_remove_version_scripts_styles', 9999);
Зловмисники намагатимуться просканувати ваш сайт, перебираючи різні комбінації URL-адрес (фаззінг), відправляючи GET (отримання) та POST (відправка) запити, підмішуючи до них різноманітні нелогічні і динамічні параметри, які ще називаються “payloads”, щоби таким чином виявити слабкі точки.
Фільтрація трафіку дозволить своєвчасно виявляти подібні кіберзагрози, відхиляти і блокувати будь-які невалідні та шкідливі HTTP-запити, токсичні User-Agent’и, хости, адреси і так далі.
Реалізувати це можна з допомогою Web Application Firewall (WAF) + CDN Cloudflare. Обидва засоби створять надійний мережевий екран-брандмауер для вашого сайту. З їх допомогою ви зможете сформувати правила блокування у разі виявлених несанкціонованих дій та аномалій.
Підключити Cloudflare можна безкоштовно, а в ролі WAF виступить кращий плагін безпеки для WordPress – Wordfence Security:
Зберігайте сайт в актуальному стані, адже щодня з’являються нові загрози та Zero-Day Вразливості. Не використовуйте “Nulled” та “warez” плагіни – вони можуть містити шкідливий код (закладки, бекдори) й сповільнювати роботу сайту, викликати системні збої та помилки.
Просканувати WordPress та усі його компоненти на вразливості, знайти “дірки безпеки” допоможуть наступні плагіни:
Patchstack – WordPress & Plugins Security
WPScan – WordPress Security Scanner
Wordfence Security – Firewall, Malware Scan, and Login Security
Також додатково рекомендую скористатися самостійними зовнішніми DAST-сканерами, які дозволять провести аудит безпеки сайту та комплексно оцінити захищеність, отримати рекомендації щодо покращення, наприклад:
Читайте також: ТОП сервісів для аудиту безпеки сайту.
По-замовчуванню, база даних WordPress має префікс wp_
. Це полегшує зловмисникам пошук та виявлення таблиць бази даних:
Змінити префікс можна з допомогою серверної утиліти PhpMyAdmin або спеціальних плагінів WordPress:
All-In-One Security (AIOS) – Security and Firewall
Brozzme DB Prefix & Tools Addons
HTTP Security Headers — це заголовки безпеки, які віддає сервер по протоколу HTTP з метою захистити інтернет-з’єднання з веб-сторінкою від перехвату даних та будь-яких інших маніпуляцій та загроз. Детальніше на сторінці OWASP.
Переглянути яких HTTP-заголовків не вистачає на сайті можна з допомогою онлайн-сервісів:
Резервна копія (backup) — це дамп, дублікат даних електронного ресурсу, який включає увесь вміст — файли і папки сайту, базу даних. Збережений дамп дає можливість швидко відновити сайт до попереднього стану.
Пропоную скористатися наступними плагінами для резервного копіювання WordPress:
BackWPup – WordPress Backup Plugin
UpdraftPlus: WordPress Backup & Migration Plugin
На завершення, варто дбати не тільки про безпеку сайту, а й сервера на якому він розміщений. Якщо сервер вразливий, то всі старання захистити WordPress будуть зведені нанівець.
Зокрема, перевірте все, що стосується мережевих TCP/UDP портів:
Проведіть аудит безпеки SSH-з’єднання, яке найчастіше піддається bruteforce атакам:
Встановіть спеціалізовані програмні модулі для захисту сервера:
Користувачі часто запитують: “Хто і навіщо буде мене ламати? Кому я та мій сайт потрібен?”.
Їм потрібні не ви чи ваші сайти. Їм потрібні ваші ресурси. Будь-який сайт – це інструмент, знаряддя, додаткові потужності, які можуть бути використані в різних цілях, наприклад:
А тепер уявіть, що таких сайтів — тисячі. Виходить прибутковий бізнес.
Підсумовуючи, можу виділити вектори атак, яким найчастіше піддаються сайти на WordPress:
/wp-content/plugins
і плагіни деактивуються скопом.define( ‘WP_ALLOW_REPAIR’, true );
та перейшовши за посиланням https://your-site.com/wp-admin/maint/repair.php
Якщо є доступ до phpmyadmin — провести там також перевірку і оптимізацію таблиць бази даних. Також не зайвим буде перевірити таблиці wp_users
(наявність прихованих користувачів) і wp_posts (на наявність шкідливого коду в публікаціях).zip -r website-backup.zip
та mysqldump -u username -p databasename > dump_file.sql
.18. Якщо сканери виявили шкідливий код у базі даних, то зробити її дамп, скачати SQL-файл на локальний комп’ютер, відкрити в редакторі вихідного коду Sublime Text та через пошук/заміна або регулярні вирази прибрати його. Тоді зберегти (у тому самому форматі і кодуванні) та імпортувати очищену базу назад.
19. Звернутися до KR. Laboratories, й ми допоможемо із захистом сайту на WordPress.
20. Перейти на якісний та безпечний хостинг, що унеможливить зараження від сайтів-сусідів.
ПОДІЛИТИСЬ У СОЦМЕРЕЖАХ:
Заповніть, будь ласка, форму й наш спеціаліст зв’яжеться з Вами та надасть безкоштовну консультацію!
Вкажіть, будь ласка, контактний номер телефону. Наш менеджер миттєво зв’яжеться з Вами!