Close

Як захистити сайт на WordPress? 20+ рекомендацій безпеки.

WordPress – одна з найпопулярніших та найрозвинутіших систем керування веб-контентом у світі. Близько 40% усіх сайтів у мережі Інтернет побудовані саме на CMS WordPress. Ця багатоцільова і кросплатформна система з відкритим кодом має мільйони розширень і доповнень у вигляді різноманітних тем, плагінів, компонентів. Однак така популярність спричиняє і певні ризики. Щороку фіксуємо велику кількість атак і вразливостей на сайти під управлінням WordPress. У цьому керівництві ви дізнаєтесь як тримати сайт на постійному замку й не дати пасти під навалою раптових кіберзагроз. Комплексні та дієві поради і рекомендації усім власникам WordPress.

Зміст статті

Використовуйте тільки HTTPS

SSL сертифікат HTTPS

Сайти на незахищеному HTTP-протоколі є більш вразливими, аніж сайти на HTTPS (Hypertext Transfer Protocol Secure). Для хакерів вони є ласим шматочком, адже незахищене з’єднання дає можливість проексплуатувати найрізноманітніші типи вразливостей: SQL/PHP/XSS-ін’єкції, DOS/DDOS, LFI та багато інших.

Щоби перевести сайт на захищений HTTPS-протокол, необхідно встановити на своєму сервері SSL-сертифікат. Існують як платні (COMODO, DigiCert) так і безкоштовні сертифікати (LetsEncrypt, Cloudflare).

Додатково, подбайте про те, щоб на сервері використовувалися останні версії протоколу шифрування передачі даних TLS  – 1.2-1.3. Активуйте протокол HTTP/2, який оптимізований під повнофункціональне використання TLS.

Перевірити коректність встановлення і налаштування SSL/TLS можна з допомогою сервісів Qualys SSL Labs (веб-версія) та testssl.sh (версія для командного  рядка).

Використовуйте HTTP Security Headers (заголовки безпеки)

HTTP Security Headers

HTTP Security Headers  —  це заголовки безпеки, які віддає сервер по протоколу HTTP з метою захистити інтернет-з’єднання з веб-сторінкою від перехоплення даних та будь-яких інших маніпуляцій чи загроз.

Заголовки, які рекомендується додати:

  • Strict-Transport-Security – так-званий HSTS заголовок, який унеможливлює доступ по HTTP-протоколу та змушує веб-браузер примусово використовувати HTTPS-з’єднання;
  • Content-Security-Policy – один з найважливіших заголовків, який являє собою політику безпеки для контролю внутрішніх та зовнішніх HTTP-з’єднань;
  • X-Frame-Options – захищає від несанкціонованого показу вашого сайту у вигляді iframe на інших ресурсах, унеможливлює Hijacking/Clickjacking маніпуляції;
  • X-Content-Type-Options – захищає контент від сніффінгу, спуфінгу та інших атак;
  • Referrer Policy – визначає які функції API та мультимедіа можуть використовуватись на сайті.

Детальніше про HTTP-заголовки на сторінці OWASP.

Переглянути яких HTTP-заголовків не вистачає на сайті можна з допомогою онлайн-сервісів:

Вмикайте багатофакторну аутентифікацію (2FA/MFA)

Wordfence Security 2FA

У 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 з відповідними налаштуваннями:

How enable 2FA in Wordfence Security

Якщо сайтом користуються інші користувачі, бажано увімкнути обов’язкову 2FA-авторизацію для усіх типів облікових записів. Це можна зробити на вкладці Settings:

Wordfence Security 2Fa settings

Забезпечте захист файлової структури WordPress (file permissions)

Wp-config WordPress location

Усі файли і папки WordPress повинні бути надійно захищеними, інакше постає ризик витоку та розкриття даних, а разом з тим і несанкціонованого доступу

Система CMS WordPress по замовчуванню має наступну файлову структуру:

├── index.php – це індексна, домашня сторінка WordPress, яка у свою чергу підключає головну сторінку активної теми;
├── license.txt – це файл публічної угоди користувача про безкоштовне використання WordPress за ліцензією GNU / OpenSource. Його можна видалити або заборонити доступ, щоб приховати сліди CMS;
├── readme.html – це публічний файл з довідковою інформацією для адміністратора по встановленню WordPress, містить детальний опис кроків встановлення, а також інформацію про системні вимоги і посилання WordPress. В старіших версіях WordPress він розкривав поточну версію CMS. За потреби його можна видалити або обмежити доступ;
├── wp-activate.php – це службовий файл, який використовується для активації електронної пошти під час створення або реєстрації нового користувача;
├── wp-admin – службова директорія WordPress, яка містить ресурси адмін-панелі WordPress, при переході по ній система здійснює автоматичний редирект на сторінку входу в адмін-панель з формою авторизації wp-login.php;
├── wp-blog-header.php – це службовий файл ядра WordPress, який здійснює ініціалізацію основних початкових компонентів при завантаженні сайту;
├── wp-comments-post.php – це службовий файл WordPress, який відповідає за обробку та публікацію коментарів, які надсилаються користувачами на сайт. Якщо функція публікації коментарів для відвідувачів увімкнена, цим файлом можна зловживати;
├── wp-config.php – основний службовий файл WordPress, в якому прописується конфігурація CMS-системи, повинен бути захищений, адже містить усі налаштування і доступи до бази даних WordPress;
├── wp-config-sample.php – публічний файл, який служить шаблоном для конфігурації CMS WordPress та підготовки основного wp-config.php. Рекомендується його видаляти після кожного оновлення WordPress, або просто обмежити публічний доступ;
├── wp-content – це службова директорія WordPress, яка містить усі основні користувацькі дані, необхідні для роботи сайту: теми, плагіни, директорію сайту, кеш, папка завантажень та інше;
├── wp-cron.php – вбудований планувальник WordPress, який виконує фонові завдання CMS за розкладом. Рекомендується перейти на серверний планувальник cronjob (див. нижче);
├── wp-includes – основна службова директорія WordPress, яка містить критично важливі файли ядра CMS. Тут зберігаються сертифікати, шрифти, файли JavaScript, віджети та ін.;
├── wp-links-opml.php – це службовий файл WordPress, який відповідає за роботу посилань з так-званого “Блогролу” – функції, яка в останніх версіях є вимкненою і майже не використовуєть;
├── wp-load.php – це службовий файл, який використовується для підвантаження функціоналу WordPress в різних скриптах;
├── wp-login.php – сторінка доступу до WordPress, яка по замовчуванню знаходиться у публічному доступі, а тому рекомендується обмежити її;
├── wp-mail.php – це службовий файл, який використовується для публікації контенту через надіслані email-листи. Може використовуватися в атаках, а тому краще обмежити доступ;
├── wp-settings.php – це службовий файл, який відповідає за підключення усіх налаштувань та конфігурацій WordPress;
├── wp-signup.php – це службовий файл, який виконує функцію реєстрації нового користувача, а також нового сайту, якщо включена опція “Мультисайт”. Якщо реєстрація користувачів увімкнена, може застосовуватися для спам-атак. Рекомендується обмежити доступ;
├── wp-trackback.php – це службовий файл, який відповідає за обробку відстеження в рамках функціоналу WordPress Pingback, що реалізує сповіщеннях з інших блогів, якщо на них з’явиться зворотне посилання на ваш сайт. Цією функцією серйозно зловживають, часто викликаючи DDoS. Рекомендується обмежити доступ;
└── xmlrpc.php – це протокол віддаленого доступу до CMS WordPress. Через нього та функції API деякі плагіни, наприклад Jetpack, можуть дистанційно обмінюватися інформацією з сайтом. На жаль, цим протоколом також часто зловживають, наприклад можуть провести DDOS або SSRF-атаку. Рекомендується обов’язково обмежити публічний доступ до цього файлу.

Найкритичнішим з усіх є системних файлів є wp-config.php– у ньому міститься вся ключова інформація щодо конфігурації WordPress та під’єднання до бази даних сайту:

Файл конфігурації WordPress - wp-config
Приклад файлу конфігурації wp-config.php

Найпростіший спосіб захистити wp-config —  перенести його на рівень вище, за межі кореневого каталогу сайту WordPress (напр., public_html або www) й встановити права доступу 0600, що унеможливить будь-які маніпуляції та зміни.

Ще один службовий файл, про який варто подбати аби не був у відкритому доступі – debug.log. Він знаходиться в директорії /wp-content. Цей файл зберігає журнали подій WordPress та застосовується для відладки. В ньому фіксуються усі системні попередження та помилки з вказаними шляхами до проблемних рерсурсів. Необхідно виставити права читання і перегляду на цей файл лише для Адміністратора — 0660.

Маючи приватний доступ до debug.log, можна вимкнути публічне виведення системних помилок на сторінках сайту, що є важливим в цілях безпеки. Для цього необхідно в wp-config.php додати рядок:

define('WP_DEBUG_DISPLAY', true);

Ще одним джерелом розкриття інформації про WordPress є публічнодоступні файли readme.txt, які знаходяться в директоріях плагінів і розкривають технічні деталі про них. Вони ні на що не впливають і без них можна обійтися. Однак для зловмисника інформація в них є вкрай важливою, адже дає можливість підібрати експлойт під конкретну версію плагіна. Цей витік можна легко побороти, виконавши команду на автоматичний пошук та вилучення файлів readme:

sudo find /home/example.com/public_html -name "readme*" -exec rm -f {} \;

У 2018 році користувачі WordPress дізналися про вразливість CVE-2018-6389, яка дозволяла маніпулювати ресурсами JavaScript через компонент loads-script.php. Зловмисники через доступ до /wp-admin/load-scripts.php?load= підвантажували велику кількість JS-скриптів і в результаті викликали відмову в обслуговуванні на боці сервера, тобто проводили DDoS. Щоб захистити сайт від такого навантаження, необхідно обмежити до файлу load-scripts.php (а також load-styles.php) публічний доступ й додати в wp-config.php наступну директиву:

define( 'CONCATENATE_SCRIPTS', false );

У висновку це збереже ваші ресурси, а також пришвидшить роботу сайту (за умови що ви використовуєте HTTP/2).

Ще однією поширеною атакою на WordPress є WPSetup Hack, яка полягає у публічному доступі до файлів інсталяції /wp-admin/setup-config.php та /wp-admin/install.php. Таким чином зловмисник може спробувати повторно запустити процес встановлення WordPress. Якщо ви розгорнули свіжий сайт і не розпочали процес встановлення WordPress, тоді він може прописати власні дані конфігурації, зокрема доступ до бази даних на своєму віддаленому сервері і таким чином захопити ресурс. Найкращим способом є просто обмежити доступ до обох файлів.

Перелік файлів та директорій WordPress, публічний доступ до яких рекомендується обов’язково обмежити (надати код відповіді сервера 40X для всіх неавторизованих користувачів):

  • /.htaccess
  • /wp-config.php
  • /wp-login.php
  • /xmlrpc.php
  • /wp-trackback.php
  • /readme.html
  • /wp-config-sample.php
  • /wp-links-opml.php
  • /wp-signup.php
  • /wp-mail.php
  • /wp-content/debug.log
  • /wp-admin/load-scripts.php
  • /wp-admin/load-styles.php
  • /wp-admin/setup-config.php
  • /wp-admin/install.php
  • /wp-settings.php
  • /wp-includes/
  • /wp-content/uploads/

Примітка: Як саме обмежується доступ на вашому сервері – читайте в документації розробників. Наприклад, для Apache серверів це може бути директива RewriteCond/RewriteRule в файлі .htaccess. Для Nginx та LiteSpeed необхідно додати відповідні правила у файли конфігурації віртуальних хостів.

Для решти папок та файлів CMS 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.

Забороніть відкритий лістинг директорій (Directory listing)

Directory Listing Vulnerability in WordPress

Відкритий лістинг директорій (Directory listing, CWE-548)  —  це вразливість, яка дає можливість переглядати файлову структуру сайту публічно через інтернет.

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

Ось команда, яка переводить дані з відкритого лістингу директорій у читабельний формат у командному рядку:

curl -s -X GET https://example.com/wp-includes/ | html2text

Directory listing WordPress Vulnerability

Відключити лістинг директорій просто  –  достатньо у файлі .htaccess прописати директиву: Options All -Indexes.

Захистіть сторінку входу в адмін-панель WordPress

WordPress login attempts

По замовчуванню, доступ в адмін-панель WordPress здійснюється за URL-адресою example.com/wp-admin, яка є публічнодоступною і переспрямовує користувача на сторінку з формою входу example.com/wp-login.php.

Дуже часто боти атакують цю форму, намагаючись підібрати логін та пароль. WordPress повідомляє про некоректно введені дані, що дає їм можливість відсіяти неуспішні спроби. Загалом, усе це створює ризик несанкціонованого доступу і тільки навантажує сервер/

Існує кілька способів, як вирішити цю проблему. Найпростіший – змінити URL-адресу сторінки входу в адмінку WordPress можна з допомогою плагіна WPS Hide Login:

WPS Hide Login

WPS Hide Login

Окрім того можна додатково обмежити кількість невдалих спроб входу в адмінку WordPress. Відповідні налаштування містить плагін Wordfence Security – вкладка Brute Force Protection у розділі All options:

Wordfence Brute Force Protection

Існує також окремий плагін для обмеження спроб входу – Limit Login Attempts Reloaded:

Limit Login Attempts Reloaded

Ще один дієвий спосіб як захистити адмінку WordPress без жодних плагінів (рекомендую) – це обмежити доступ до example.com/wp-admin з допомогою фільтрації по IP або ж створити додаткову преавторизацію HTTP Authorization до сторінки входу з допомогою методу htapsswd:

HTTP Auth login WordPress

Відключіть стандартний планувальник WordPress (wp-cron.php)

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://example.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]

Рекомедую додатково встановити плагін Advanced Cron Mananger, щоби мати можливість контролювати виконання завдань відразу з адміністративної частини WordPress:

Advanced Cron Manager – debug & control

Обмежте доступ до REST API (wp-json)

REST API — це технологія, яка дозволяє різним плагінам, додаткам, обліковим записам віддалено взаємодіяти з WordPress. Цю технологію використовують деякі компоненти для синхронізації і оновлення контенту.

Інформація в REST API передається у форматі JSON. Якщо доступ до REST API не обмежено, кожен бажаючий може відкрити URL-посилання, наприклад https://example.com/wp-json/wp/v2/users і провести атаку енумерації користувачів.

Подібним чином можна розкрити ID:

  • публікацій (https://example.com/wp-json/wp/v2/posts)
  • категорій (https://example.com/wp-json/wp/v2/categories)
  • тегів (https://example.com/wp-json/wp/v2/tags)
  • коментарів (https://example.com/wp-json/wp/v2/comments)
  • ..інший контент.

У 2017 році в WordPress була зафіксована серйозна вразливість, яка дозволяла через підключені по REST API плагіни провести екскалацію привілеїв і зламати більше 2 млн. сайтів.

Отже, у цілях безпеки рекомендується обмежити доступ по REST API для неавторизованих відвідувачів і HTTP-клієнтів. Існують вже готові плагіни, які реалізують це, наприклад Disable REST API:

Disable REST API

Змініть ім’я користувача по замовчуванню та підберіть складний пароль

Ім’я користувача (username) WordPress за замовчуванням, наприклад “admin”, дуже легко визначити, а далі спробувати підібрати пароль до нього. Тому при створенні облікових записів дотримуйтесь складних нестандартних імен та багатозначних паролів (до 20-ти і більше символів), які містять літери верхнього та нижнього регістру, цифти та спеціальні знаки.

На жаль, ім’я вже існуючого облікового запису в WordPress неможливо змінити. Але можна створити нового користувача, вилучити старого і зв’язати усі його записи та права з новим користувачем:

Перевірте привілеї і доступи користувачів WordPress

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

По замовчуванню, в WordPress діє рольова система з наступними типами і характеристиками користувачів:

  • Administrator – повний доступ до всіх функцій WordPress;
  • Editor – редактор, може публікувати та керувати публікаціями інших;
  • Author – може публікувати та керувати лише власними публікаціями;
  • Contributor – дописувач, можу створювати публікації, але не публікувати і не керувати ними;
  • Subscriber – підписник, може мати власний профіль і керувати ним, переглядати публікації.

Ролі користувачів WordPress

👉 Детальніше про ролі користувачів на офіційному сайті WordPress>>

Вилучіть облікові записи, які не використовують або є підозрілими.

Варто також подбати про захист облікових записів авторів від такої атаки як WordPres User Enumeration. Це техніка брутфорс-перебору, яка дає можливість дізнатися справжні логіни користувачів, які використовуються для доступу до адмін-панелі. Хакери парсять URL-адреси сторінок авторів, наприклад /?author=1.  Знаючи логіни та імена користувачів в системі, вони можуть приступити до підбору паролів та зламати сайт.

Необхідно заборонити доступ до цих URL-адрес, прописавши в файлі конфігурації веб-сервера .htaccess правило:

RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* http://example.com/? [L,R=302]

Або скористатись плагіном GOTMLS, який cамостійно блокуватиме будь-які спроби запитів до ?author=:

Anti-Malware Security and Brute-Force Firewall

Приховайте версію ядра WordPress та CSS/JS компонентів у коді сайту

У вихідному коді сторінок сайту WordPress розкриває чимало технічної інформації, наприклад номер версії ядра (через тег <meta generator>), версії CSS-стилів і JS-скриптів (додаючи до їх URL-адрес параметри з номерами). Цю інформацію дуже легко спарсити такими інструменти командого рядка як: curl, wfuzz, wpscan.

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

Розкриття версій в коді wordpress

Приховати версії компонентів WordPress найпростіше з допомогою плагінів безпеки Wordfence Security та Sucuri Security:

Можна також вручну дописати код в 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);

Не варто забувати і про HTML-коментарі, котрі додаються компонентами CMS або самими розробниками й також розкривають технічну інформацію:

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

Змініть стандартний префікс бази даних WordPress

Префікс бази даних WordPress

По-замовчуванню, база даних WordPress має префікс wp_. Це полегшує зловмисникам пошук та виявлення таблиць бази даних.

Змінити префікс можна з допомогою серверної утиліти PhpMyAdmin або спеціальних плагінів WordPress:

All-In-One Security (AIOS) – Security and Firewall

Brozzme DB Prefix & Tools Addons

Вимкніть вбудований редактор коду WordPress

У CMS WordPress Адміністратор може редагувати вихідний код файлів, теми та плагіни одразу в адмін-панелі з допомогою вбудованого редактора коду (Appearance -> Theme Editor):

Однак це створює додаткові ризики безпеки. Хакери нерідко проникають в адміністративну частину й завдяки увімкненому редактору залишають реверс-шели в файлах тем, наприклад в файлах 404.php або footer.php, після чого віддалено керують сервером зі своєї хост-машини (атаки Remote Code Execution (RCE)).

Читайте також: Що таке Reverse Shell і як він працює? Практичні приклади.

Рекомендується працювати з файлами сайту лише через захищені протоколи sFTP або SSH. Вимкнути вбудований редактор коду WordPress можна додавши в wp-config.php рядок:

// Disable WordPress file editor
define( 'DISALLOW_FILE_EDIT', true );

Обмежте інформацію у robots.txt

Robots.txt — це службовий файл, який встановлює правила індексації сайту для пошукових ботів. З його допомогою можна заборонити пошуковим системам індексувати ті чи інші сторінки сайту.

Часто Адміністратори намагаються через robots.txt приховати якомога більше службових директорій та конфіденційних файлів сайту. Таким чином вони полегшують роботу зловмисникам і видають список прихованих ресурсів, які ті використовують як ціль для своїх атак:

Приклад як не треба наповнювати robots.txt

Отже, robots.txt варто створювати якомога лаконічнішим. Для блокування індексації тих чи інших веб-сторінок рекомендується застосовувати тег <meta name =”robots” content=”noindex, nofollow”>, а також серверні права доступу на файли і папки (chmod, chown). Таким чином, якщо пошуковий бот або відвідувач полізуть туди куди не треба, від сервера надійде код 403 – “Відмова у доступі”.

Застосуйте систему Captcha

Captcha (Completely Automated Public Turing Test)— це автоматична система перевірки та захисту електронних ресурсів від ботів та спаму. Технологія перевіряє цифровий слід відвідувача: IP-адресу, країну, User-Agent та інші параметри. Якщо виявить підозру, попросить підтвердити, що ви не бот, інакше обмежить доступ.

Captcha WordPress

З допомогою Captcha можна захистити будь-які сенситивні об’єкти та елементи на сайті, наприклад форми, кнопки, поля вводу і таке інше. Це чудовий захист від спамерів.

Відсутність капчі, дає можливість атакуючому провести ін’єкцію шкідливого коду, підмінити або перехопити дані, завантажити шелл:

Увімкнути капчу на WordPress-сайті можна з допомогою сервісу Google reCaptcha та плагіну Wordfence Security, або будь-якого іншого що підтримує reCAPTCHA v2/v3:

Інтеграція системи Captcha на сайті WordPress з допомогою плагіну Wordfence Security

Окрім Google reCaptcha, існують альтернативні системи:

Підключіть антиспам-систему

Способів як це зробити  – насправді безліч. Починаючи від інтеграцій таких загальновідомих рішень як Fail2ban та SpamAssasin, та закінчуючи встановленням спеціального плагіна для WordPress.

Захист email-форм від спам атаки

Одним із кращих є Maspik, який налаштовується у два кліки, містить багато правил та інтеграцій:

Maspik – Advanced Spam Protection

Фільтруйте трафік і HTTP-запити

Зловмисники намагатимуться просканувати ваш сайт, перебираючи різні комбінації URL-адрес (фаззінг), відправляючи GET (отримання) та POST (відправка) запити, підмішуючи до них різноманітні нелогічні і динамічні параметри, які називаються “payloads”, щоб таким чином виявити слабкі точки.

Фільтрація трафіку дозволить своєвчасно виявляти подібні кіберзагрози, відхиляти і блокувати будь-які невалідні та шкідливі HTTP-запити, токсичні User-Agent’и, хости, геолокації, адреси і так далі. А головне – приховати IP-адресу сайту, на яку націлюються хакери!

Cloudflare WAF

Реалізувати всі вищеперераховані функції можна з допомогою хмарного онлайн-сервісу Cloudflare WAF. Ви отримаєте надійний зовнішній мережевий екран-брандмауер для вашого сайту. Ви також зможете сформувати будь-які свої правила блокування у разі виявленнях тих чи інших несанкціонованих дій та аномалій.

Додатковим шаром безпеки безпосередньо для CMS-системи WordPress може стати Wordfence Security – один з кращих плагінів безпеки:

Wordfence Security WAF

Wordfence – це справжній комбайн, який має велику кількість додаткових функцій. З його допомогою можна просканувати сайт, зіставити зміни у файлах, отримати рекомендації тощо.

Регулярно скануйте і оновлюйте WordPress

Зберігайте сайт в актуальному стані, адже мало не щодня з’являються нові загрози та Zero-Day Вразливості. Не використовуйте ламані “Nulled” та “warez” плагіни – вони можуть містити шкідливий код (закладки, бекдори) й сповільнювати роботу сайту, викликаючи збої і помилки.

Просканувати WordPress та усі його компоненти на вразливості, знайти “прострочені плагіни” і “дірки безпеки” допоможуть наступні плагіни:

Patchstack – WordPress & Plugins Security

WPScan – WordPress Security Scanner

Wordfence Security – Firewall, Malware Scan, and Login Security

Sucuri Security – Auditing, Malware Scanner and Security Hardening

Також додатково рекомендую скористатися окремими зовнішніми DAST-сканерами, які дозволять провести аудит безпеки та комплексно оцінити його захищеність, наприклад:

👉 Читайте також:

Здійснюйте регулярне резервне копіювання

Резервна копія (backup) — це дамп, дублікат даних електронного ресурсу, який включає увесь вміст — файли і папки сайту, базу даних. Збережений дамп дає можливість швидко відновити сайт до попереднього стану.

Ось плагіни, які підійдуть для резервного копіювання WordPress:

BackWPup – WordPress Backup Plugin

UpdraftPlus: WordPress Backup & Migration Plugin

Здійснюйте регулярний моніторинг системних журналів (логів сервера)

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

Кожен веб-сервер по замовчуванню генерує 2 типи логів:

  • Access.log – логи доступу, в яких реєструються відвідувачі та їх дії, будь-які HTTP-запити (GET/POST/HEAD/OPTIONS і т.д.), включаючи пошукових та інших ботів;
  • Error.log – логи помилок, у яких реєструються будь-які проблеми, баги, конфлікти на рівні системи.

Окрім цього у WordPress існує власний лог:

  • Debug.log – логи відладки ядра WordPress, де реєструються будь-які важливі поовідомлення та помилки на рівні СMS.

Дуже важливо їх щоденно передивлятися і моніторити, що забезпечити стабільне та надійне функціонування електронного ресурсу. Це можна робити як з допомогою автоматизованих систем, наприклад GoAccess або Zabbix, так  і стандартними засобами командного рядка Linux, наприклад:

  • tail -n 50 access.log – перегляд останніх 50 рядків журналу;
  • tail -n 100 -f access.log – виводить останні 10 рядків журналу і стежить за наступними запитами в режимі реального часу;
  • tail -f access.log | grep "ERROR" – фільтрація логів в режимі реального часу;
  • tail -f access.log error.log – перегляд декількох логів одночасно в режимі реального часу;
  • grep "User-Agent" access.log | grep "YYYY-MM-DD" – пошук в логах запитів від заданого юзер-агента та за вказаною датою.
Як відстежити атаку через логи
Відстеження DDoS-атаки в реальному часі через моніторинг логів

Виявлені шкідливі IP-адреси варто перевіряти, вносити в чорні списки та блокувати на рівні сервера з допомогою фарєвола. Одним з кращих рішень є CSF Firewall – синхронізується з IPTablecs, LFD, Fail2ban, ClamAV, дозволяє формувати різноманітні правила доступу, обмежувати доступ за геолокацією, формувати білі та чорні списки і багато іншого.

Як проаналізувати шкідливу IP адресу в AbuseIPDB

Подбайте про безпеку і захист сервера

Варто дбати не тільки про безпеку сайту, а й сервера на якому він розміщений. Якщо сервер вразливий, то всі старання щодо захисту WordPress будуть зведені нанівець.

Server Security

Зокрема, перевірте все, що стосується мережевих TCP/UDP портів:

  • Закрийте порт бази даних — 3306
  • Закрийте порт Remote Desktop Protocol — 3389
  • Закрийте або приховайте порти хостинг-панелі (cPanel, VestaCP, CyberPanel, DirectAdmin, Plesk або ін.)
  • Закрийте будь-які інші порти інтерфейсів, котрі не використовуються або мають високий ступінь важливості
  • В ідеалі, бажано залишити публічно доступними лише порти HTTP — 80 та HTTPS — 443

Проведіть аудит безпеки SSH-з’єднання, яке найчастіше піддається bruteforce атакам:

  • Змінити стандартний номер порта (замість 22 поставити будь-яке п’ятизначне число, попередньо надавши доступ у мережевому екрані на рівні сервера/хостинга)
  • Заборонити вхід на сервер під обліковим записом root
  • Дозволити вхід на сервер тільки з вашого IP
  • Дозволити вхід на сервер лише по SSH-ключу безпеки

Встановіть спеціалізовані програмні модулі для захисту сервера:

Хто і навіщо взламує WordPress?

Користувачі часто запитують: “Хто і навіщо буде мене ламати? Кому я та мій сайт потрібен?”.

Їм потрібні не ви чи ваші сайти. Їм потрібні ваші ресурси. Будь-який сайт  –  це інструмент, знаряддя, додаткові потужності, які можуть бути використані в різних цілях, наприклад:

  • організація ботнет і проведення DDOS-атак з використанням IP-адреси та потужностей сервера вашого сервера;
  • побудова PBN-сіток сайтів й розгортання “чорного” BlackHat SEO;
  • організація дорвеїв і клоак, продаж реклами і монетизація трафіку;
  • розміщення рекламних, партнерських, шпигунських посилань;
  • встановлення прихованого майнера криптовалют;
  • встановлення прихованого інтернет-парсера;
  • встановлення прихованого стилера, який стежитиме за відвідувачами і збиратиме їх персональні дані для подальшої продажі логів у даркнеті;
  • електронна розсилка спаму, відправка фішингових листів засобами WordPress.

А тепер уявіть, що таких сайтів — тисячі. Виходить прибутковий бізнес.

Найрозповсюдженіші типи атак на WordPress

Найрозповсюдженіші атаки на WordPress

Підсумовуючи, можу виділити вектори атак, яким найчастіше піддаються сайти на WordPress:

  • XSS-ін’єкції  —  втілення шкідливого JavaScript коду в веб-об’єкти і елементи сайту та його виконання на боці сервера;
  • SQL-ін’єкції  —  взлам та модифікація бази даних через несанкціоновані запити до неї;
  • Local File Inclusion/Remote File Inclusion (LFI/RFI)  —  використання локальних та віддалених файлів для отримання конфіденційної інформації і несанкціонованого доступу;
  • DOS/DDOS-атаки  —  відправка великої кількості хаотичних HTTP-запитів з різних IP, спрямованих на вразливу веб-сторінку чи об’єкт;
  • Brute-Force  —  атаки “грубої сили”, масовий перебір комбінацій та значень даних авторизації.

Що робити якщо ваш сайт WordPress зламали?

  1. Негайно змінити паролі до всіх технічних засобів, вузлів, адміністративних частин та компонентів сайту, включаючи субдомени, сервери, хостинг-панель. Оновити доступи до всіх адмінок та служб керування: SSH, FTP, PhpMyadmin і т.д.
  2. Тичасово вимкнути публічний доступ до сайту.
  3. Зробити резервну копію усього сайту – файлів і бази даних. Це можна зробити швидко в командному рядку Linux, підключившись по SSH: zip -r website-backup.zip та mysqldump -u username -p databasename > dump_file.sql.
  4. Деактивувати тимчасово усі плагіни. Можна просто перейменувати папку /wp-content/plugins і плагіни деактивуються скопом.
  5. Видалити усіх користувачів сайту WordPress, створити нового Адміністратора (дописи старих адміністраторів автоматично експортуються в новий обліковий запис).
  6. Перевірити усі файли WordPress: тему (index.php, header.php, footer.php, functions.php і т.д.), ядро (wp-config.php, wp-settings.php, wp-load.php, wp-login.php і т.д.). Вмістилищем шкідливого коду можуть бути JavaScript і PHP скрипти, а також будь-які інші файли: документи, архіви, зображення (file.jpg.php, file.pdf.php, exploit.ico і ін.).
  7. Деактивувати або вилучити усі сторонні теми WordPress крім системних.
  8. Видалити будь-які підозрілі посилання, файли або папки з назвами, які не мають відношення до CMS WordPress і можуть бути шкідливими (напр., adminer, wso, r57, c99, hiddencode і т.п.).
  9. Перевірити файли .htaccess, robots.txt, sitemap.xml.
  10. Перевірити файли конфігурацій PHP, MySQL, SSH.
  11. По поможливості зробити відкати до “заводського стану” усіх службових компонентів і файлів WordPress.
  12. Перевірити планувальник Crontab на наявність несанкціонованих задач.
  13. Згенерувати нові ключі безпеки WordPress (Salt Keys) і оновити їх в wp-config.php (рядок AUTH KEYS).
  14. Запустити автоматичнее відновлення бази даних WordPress, додавши у wp-config.php рядок: define( ‘WP_ALLOW_REPAIR’, true ); та перейшовши за посиланням https://your-site.com/wp-admin/maint/repair.php
  15. Провести там також перевірку і оптимізацію таблиць бази даних MySQL. Не зайвим буде перевірити таблиці wp_users (наявність прихованих користувачів) і wp_posts, wp_meta (на наявність шкідливого коду).
  16. Перевірити сайт на шкідливий код спеціалізованими сканерами:

18. Провести ручний пошук по базі даних – зробити її дамп, скачати SQL-файл на локальний комп’ютер, відкрити в редакторі вихідного коду Sublime Text або SciTE Editor та через пошук/заміна або регулярні вирази прибрати його. Варто звернути на такі вирази як: base64_decode, eval, document write та інші. Очищену базу зберегти у тому самому форматі і кодуванні та імпортувати назад.
19. Звернутися до спеціалістів KR. Laboratories – ми допоможемо з захистом сайту на WordPress.
20. Перейти на якісний та захищений хостинг, що унеможливить зараження від сайтів-сусідів і вразливостей самого хостингу.
21. Перенести домен сайту на обслуговування в DNS Cloudflare.

👉 Читайте також:

ПОДІЛИТИСЬ У СОЦМЕРЕЖАХ:

5 2 голосів
Рейтинг статті
Підписатися
Сповістити про
guest
2 Коментарі
Старіші
Новіші Найпопулярніші
Вбудовані Відгуки
Переглянути всі коментарі
Serhii
Serhii
1 місяць тому

Топовий матеріал!
Дякую за вашу роботу!

KR. Laboratories
Адмін
KR. Laboratories
1 місяць тому
Відповісти  Serhii

дякую!

2
0
Поставте запитання й отримайте відповідь!x
Отримати комерційну пропозицію
Оформити заявку
Замовити консультацію
Замовити дзвінок

Вкажіть, будь ласка, контактний номер телефону. Наш менеджер миттєво зв’яжеться з Вами!