індексування сайту
Якщо в файлах, що зберігаються в папці uploads, є відомості конфіденційного характеру, додаємо до цього списку рядок: Disallow: / wp-content / uploads /. З іншого боку, в файлі robots.txt не рекомендується розміщувати посилання на директорії, які були створені спеціально для зберігання чутливої інформації. Інакше цим самим ти полегшиш зловмисникові завдання, так як це перше місце, куди зазвичай все заглядають в пошуках «цікавенького».
Визначення версії WordPress
Ще один важливий крок - ідентифікація версії CMS. Інакше як підібрати підходящий сплоіт? Існує три швидких способу для визначення використовуваної на сайті версії WordPress:
Мал. 1. Версія WordPress в файлі readme.html
Мал. 2. підглядати версію WordPress в файлі ru_RU.po
Один з варіантів захисту в даному випадку - обмежити доступ до файлів readme.html і ru_RU.po за допомогою .htaccess.
Автоматизація процесу тестування
Дослідженням безпеки WordPress зайнялися не вчора, тому існує достатня кількість інструментів, що дозволяють автоматизувати рутинні завдання.
- підбір пароля за словниками
- модуль для визначення версії: auxiliary / scanner / http / wordpress_scanner;
- модуль для визначення імені користувача auxiliary / scanner / http / wordpress_login_enum.
- перерахування встановлених плагінів: wpscan -url www.exmple.com -enumerate p;
- перерахування встановлених тем: wpscan -url www.exmple.com -enumerate t;
- перерахування встановленого timthumbs: wpscan -url www.example.com -enumerate tt;
- Вкажіть користувача: wpscan -url www.example.com -enumerate u;
- підбір пароля за словником для користувача admin: wpscan -url www.example.com -wordlist wordlist.txt -username admin;
- підбір пароля з використанням зв'язки ім'я користувача / пароль з числом потоків, рівним 50: wpscan -url www.example.com -wordlist wordlist.txt -threads 50.
Визначення встановлених компонентів
Далі, HTTP-заголовки, такі як X-Powered-By, можуть вказувати на наявність плагіна (наприклад, на плагін W3 Total Cache).
Так як інформація про плагіни не завжди відображається у вихідному коді HTML-сторінки, то виявити встановлені компоненти можна за допомогою утиліти WPScan (див. Врізку). Тільки не забувай, що перебір шляхів плагінів зафіксується в логах веб-сервера.
Отримавши дані про встановлені компонентах, вже можна приступати до пошуку вразливостей своїми силами або знайти загальнодоступні експлойти на ресурсах типу rapid7 або exploit-db.
Визначення імені користувачів
Брутфорс wp-login
Мал. 3. Помилки при аутентифікації користувача
Security-плагіни для WordPress
заливаємо Shell
підключаємо .htaccess
Для заборони доступу до чутливої інформації краще скористатися файлом .htaccess - це файл конфігурації, який використовується в Apache Web Server. Розглянемо можливості цього файлу з точки зору безпеки. З його допомогою можна: заборонити доступ до тек і файлів, заблокувати різні SQL-ін'єкції і шкідливі скрипти. Для цього стандартний файл .htaccess для CMS WordPress 4.1 потрібно трохи розширити. Щоб закрити список файлів і папок, додаємо:
Протидіяти скриптів, які намагаються встановити глобальні змінні або змінити змінну _REQUEST через URL:
Для протидії SQL-ін'єкцій блокуємо запити до URL, що містять певні ключові слова:
Щоб зіпсувати життя поширеним хакерських утиліт, відфільтровує певні user-agent'и:
захищаємо файли
Непогано було б також обмежити і доступ до особливо важливих файлів, які зберігають конфігурацію або просто можуть видати зловмисникові якусь інформацію. Можна виділити наступних кандидатів:
- wp-config.php, містить ім'я БД, ім'я користувача, пароль і префікс таблиць;
- .htaccess;
- readme.html і ru_RU.po, які містять версію WordPress;
- install.php.
Робиться це в такий спосіб:
Причому файл .htaccess, що містить ці рядки, повинен знаходитися в тій же директорії, що і захищається файл. Потім забороняємо перерахування користувачів (пам'ятаєш, трохи вище ми говорили про те, як легко отримати список користувачів?):
Набір правил 5G Blacklist і 6G Blacklist beta від Perishable Press, який дозволяє боротися з поширеними шкідливими URL-запитами для WordPress.
додаткові заходи
До того, що було сказано вище, можна додати такі рекомендації. По-перше, використовувати тільки актуальні версії WordPress і його компонентів - це дозволить усунути відомі уразливості. По-друге, видалити невикористовувані плагіни і теми, які також можуть бути проексплуатувати. По-третє, завантажувати теми і плагіни WordPress з достовірних джерел, наприклад з сайтів розробників і офіційного сайту WordPress. Як і домашній ПК, потрібно періодично перевіряти свій веб-ресурс веб-антивірусом, наприклад AI-Bolit. Якщо у тебе є доступ до веб-сервера, настрій права доступу до файлів і каталогів. Як правило, WordPress встановлює всі необхідні права на стадії установки, але в разі потреби chmod можна виставити вручну. Для каталогів - chmod 755, для файлів - chmod 644. Переконайся, що права 777 привласнені тільки тим об'єктам, які цього потребують (іноді це необхідно для нормальної роботи деяких плагінів). Якщо WordPress перестав нормально функціонувати, поекспериментуй з правами доступу: спочатку спробуй 755, потім 766 і, нарешті, 777. Для всіх htaccess-файлів вистав chmod 444 (тільки читання). Якщо сайт перестане працювати, спробуй поекспериментувати зі значеннями 400, 440, 444, 600, 640, 644.
Перемісти файл wp-config.php. Даний файл містить інформацію про налаштування MySQL, префікс таблиць, секретні ключі та інше. Тому його необхідно перенести для того, щоб файл не був доступний з інтернету. Якщо сайт не розташовується в папці public_html, то перенеси файл wp-config.php в папку рівнем вище, і WordPress автоматично знайде його в цій кореневої директорії (може бути застосовано, якщо на хостингу є тільки один сайт на цій CMS).
Щоб ускладнити заливку шелла, відключи можливість редагування теми через консоль WordPress. Для цього встав наступний рядок в файл wp-config.php: define ( 'DISALLOW_FILE_EDIT', true) ;.
Ще одне слабке місце - файл install.php (що в папці wp-admin). Тому його краще видалити, заблокувати або змінити. Виконай один з варіантів:
- Просто видали цей файл - після установки в ньому немає більше необхідності.
- Заборони доступ до файлу за допомогою .htaccess.
- Перейменують оригінальний файл install.php (наприклад, install.php.old) і створи новий файл install.php наступного змісту:
Крім повідомлення відвідувачів сайту, даний скрипт виконує наступні дії:
- відправляє клієнту і пошуковим системам код стану 503 ( «Сервіс тимчасово недоступний»);
- вказує проміжок часу, через який клієнти і пошукові системи можуть повернутися на сайт (настроюється параметр);
- повідомляє електронною поштою про проблему з БД для вжиття відповідних заходів.
Справа в тому, що в ранніх версіях WordPress (<= 2.7.1) при сбоях MySQL (например, при DDoS-атаке) CMS дает возможность переустановиться. Кроме того, это может произойти и при сбое/повреждении одной из таблиц WordPress. В частности, атака возможна, когда повреждена таблица wp_options (в WordPress 2.6.2) или wp_users (в WordPress 2.0.3 и 2.0.11). То есть в разных версиях WP разные таблицы главные при проверке в инсталляторе — это может быть либо таблица wp_options, либо wp_users.
Ну і нарешті, відключи реєстрацію нових користувачів, якщо в цьому немає необхідності (рис. 4). Якщо все ж на сайті передбачається реєстрації, подбай про те, щоб нові користувачі після проходження реєстрації отримували мінімальні привілеї.
Мал. 4. Відключення реєстрації нових користувачів
Корисні посилання
висновок
WordPress - досить великий і складний продукт, зі своїми плюсами і мінусами. На жаль, в дефолтной конфігурації його безпеку знаходиться під великим питанням, тому що навіть звичайний скріпткідіс при наявності прямих рук і інтернетів зможе пробити захист. Тому настійно рекомендую перевірити свій ресурс таким же чином, як ми робили це в статті. І якщо виявиш недоліки - пофиксить їх, щоб звести шанси зловмисника на компрометацію ресурсу до мінімуму.