WordPress под прессом. Защити своими руками
WordPress — удобная платформа для публикации статей и управления, в основе которой лежит огромное количество различных сайтов. Из-за своей распространенности эта CMS уже давно стала лакомым кусочком для хакеров.
К сожалению, базовые настройки не обеспечивают должного уровня защиты, оставляя незакрытыми многие дыры кредитного дефолта. В этой статье мы пройдемся по типичному «образцовому» хакерскому сайту на WordPress и покажем, как исправить выявленные уязвимости.
На сегодняшний день система управления контентом WordPress является самой популярной. Его доля составляет 60,4% от общего количества сайтов, использующих CMS-движки. Из них, по статистике, 67,3% сайтов основаны на последней версии программного обеспечения. Между тем, за двенадцать лет существования веб-движка было обнаружено 242 уязвимости разного рода (без учета уязвимостей, обнаруженных в сторонних плагинах и темах). Статистика сторонних надстроек еще печальнее. Так, компания Revisium провела анализ 2350 русифицированных шаблонов для WordPress, взятых из разных источников. В результате они обнаружили, что более половины (54%) были заражены Web Shell, бэкдорами, блэкхатными seo («спамовыми») ссылками и скриптами, содержащими критические уязвимости. Так сидеть сложа руки, теперь собираемся понять, как провести аудит на сайте WordPress и устранить найденные недостатки. Использовать будет версию 4.
Индексация сайта
Первым шагом в любом тесте обычно является сбор информации о цели. И тут очень часто помогает неправильная настройка индексации сайта, которая позволяет неавторизованным пользователям просматривать содержимое определенных разделов сайта и, например, получать информацию об установленных плагинах и темах, а также получать доступ к конфиденциальным данным или резервным копиям баз данных.. Чтобы проверить, какие каталоги видны извне, проще всего воспользоваться услугами Google. Достаточно запустить запрос типа site:example.com intitle: «index of» inurl: /wp-content/. Оператор inurl: Вы можете указать следующие каталоги:
/wp-content/
/wp-content/languages/plugins
/wp-content/languages/themes
/wp-content/plugins/
/wp-content/themes/
/wp-content/uploads/
Если вы можете просматривать /wp-content/plugins/, то следующий шаг сбора информации об установленных плагинах и их версиях значительно упрощается. Естественно, запретить индексацию можно с помощью файла robots.txt. Так по умолчанию он не входит в установочный пакет WordPress, его необходимо создать и закинуть самостоятельно в корневую директорию сайта. Мануалов по созданию и работе с файлом robots.txt довольно много, так что оставьте эту тему для себя. Приведу лишь один из возможных вариантов:
User-Agent: *
Disallow: /cgi-bin
Disallow: /wp-login.php
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /?author=*
Allow: /
Если файлы, хранящиеся в папке uploads, являются конфиденциальной информацией, добавьте в этот список строку: Disallow: /wp-content/uploads/. С другой стороны, в файле robots.txt не рекомендуется размещать ссылки на каталоги, созданные специально для хранения конфиденциальной информации. В противном случае вы тем самым облегчите задачу злоумышленнику, ведь это первое место, куда обычно все заглядывают в поисках «нямми».
Security-плагины для WordPress
- Login LockDown – ограничивает количество неудачных попыток входа в систему;
- Revisium WordPress Theme Checker — ищет типичные вредоносные программы в темах WordPress;
- Sucuri Security — осуществляет мониторинг и обнаружение вредоносного кода;
- IThemes Security (ранее Better WP Security) — для защиты мультиплагина WordPress;
- BackUpWordPress — делает резервную копию файлов и баз данных;
- Google Captcha (reCAPTCHA) — устанавливает капчу при регистрации, входе в систему, восстановлении пароля и в виде комментариев.
Подключить .htaccess
Для ограничения доступа к конфиденциальной информации лучше использовать файл .htaccess — это файл конфигурации, используемый веб-сервером Apache. Рассмотрим возможности файла с точки зрения безопасности. С его помощью вы можете: запретить доступ к каталогам и файлам, заблокировать различные SQL-инъекции и вредоносные скрипты. Для этого стандартного файла .htaccess для CMS WordPress 4.1 нужно немного расширить. Чтобы закрыть список файлов и папок, добавьте:
Options +FollowSymLinks -Indexes
RewriteCond %{QUERY_STRING} base64_encode[^(]*([^)]*) [OR]
Ссылки на блоки, содержащие кодировку Base64. Избавьтесь от ссылок, содержащих тег :
RewriteCond %{QUERY_STRING} (|%3E) [NC,OR]
Чтобы противодействовать сценариям, пытающимся установить глобальные переменные или изменить _REQUEST
переменную через URL:
RewriteCond %{QUERY_STRING} GLOBALS (=|[|%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST (=|[|%[0-9A-Z]{0,2})
Для противодействия запросам на блокировку SQL-инъекций по URL-адресу, содержащему определенные ключевые слова:
RewriteCond %{query_string} concat.*( [NC,OR]
RewriteCond %{query_string} union.*select.*( [NC,OR]
RewriteCond %{query_string} union.*all.*select [NC]
RewriteRule ^(.*)$ index.php [F,L]
Чтобы испортить жизнь обычным хакерским инструментам, фильтруют определенные юзер-агенты:
SetEnvIf user-agent «Indy Library» stayout=1
SetEnvIf user-agent «libwww-perl» stayout=1
SetEnvIf user-agent «Wget» stayout=1
deny from env=stayout
Защищает файлы
Было бы неплохо ограничить и доступ к критическим файлам, которые хранят конфигурацию или просто могут дать злоумышленнику некоторую информацию. Вы можете выбрать следующих кандидатов:
- Wp-config.php, включает имя базы данных, имя пользователя, пароль и префикс таблицы;
- .htaccess;
- Readme.html и ru_RU.po, которые содержат версию WordPress;
- Установить.php.
Это делается следующим образом:
Order Allow,Deny
Deny from all
Файл .htaccess, содержащий эти строки, должен находиться в той же директории, что и защищенный файл. Затем не разрешаем перечисление пользователей (помните, чуть выше мы говорили о том, как просто получить список пользователей?):
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]
Так что еще? Вы можете разрешить вход только с указанных IP-адресов. Для этого создайте файл .htaccess в вашей wp-admin со следующими правилами:
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Access Control"
AuthType Basic
order deny,allow
deny from all
allow from 178.178.178.178 # IP Home computer
allow from 248.248.248.248 # IP Work computer
Метод не очень гибкий и применим только в том случае, если вы работаете с ограниченным количеством фиксированных IP-адресов. В противном случае рекомендуется установить пароль на папку wp-admin через хостинг (при наличии такой функциональности).
WWW
Набор правил 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 со следующим содержимым:
Error Establishing Database Connection
Error Establishing Database Connection
We are currently experiencing database issues. Please check back shortly. Thank you.
Помимо уведомления посетителей сайта, этот скрипт делает следующее:
-
Отправляет заказчику и поисковым системам код статуса 503 («Сервис недоступен»);
-
Задает временной интервал, через который клиенты и поисковые системы могут вернуться на сайт (настраиваемый параметр);
-
Сообщите по электронной почте о проблеме с базой данных для принятия соответствующих мер.
Дело в том, что в более ранних версиях WordPress (
Наконец, отключите регистрацию новых пользователей, если в этом нет необходимости. Если же предусмотрена онлайн-регистрация, позаботьтесь о том, чтобы новые пользователи после регистрации получили минимальные привилегии.
Полезные ссылки
-
Усиление WordPress
-
Десять шагов для защиты вашего WordPress-блога
-
Каждый второй русифицированный шаблон для WordPress заражен или уязвим
-
Презентация по взлому WordPress
Закрытие
WordPress — достаточно большой и сложный продукт, со своими плюсами и минусами. К сожалению, в дефолтной конфигурации его сохранность сомнительна, так как даже при наличии нормального скрипткидиса прямой руки и интернета удастся пробить защиту. Поэтому настоятельно рекомендуем проверить ресурс так же, как мы это сделали в статье. А если найдете недочеты — исправьте их, чтобы свести шансы злоумышленника скомпрометировать ресурс к минимуму.
Источник записи: instantshift.com