WordPress представляет собой систему управления контентом (CMS), со свободным и открытым исходным кодом, написанную на языке программирования PHP и использующую СУБД MySQL. WordPress установлен на веб-сервере, который либо является частью интернет-хостинга, либо частной локальной сети. Первый вариант может быть реализован с помощью собственной службы-хостера, такой как WordPress.com, а второй — с использованием машины под управлением пакета программного обеспечения WordPress.org. Примером второго случая является локальный компьютер, настроенный как самостоятельный веб-сервер с хостингом Wordpress для целей тестирования или обучения пользователей.
Особенностями данной CMS являются: использование плагинов и система шаблонов. WordPress был использован для создания более чем 23,3 % из 10 миллионов веб-сайтов по состоянию на январь 2015 года. WordPress является самой популярной системой ведения блога.
Для данной статьи используется WordPress версии 4.4.2.
В связи с подобной популярностью использования данной CMS в веб-индустрии для создания порталов различных масштабов, и не в последнюю очередь порталов для коммерческой деятельности, стал актуальным вопрос уязвимости ресурсов, использующих WordPress. А одна из приятных возможностей системы — использование плагинов — только обостряют ситуацию, так как для их размещения не требуется прохождения пре-релизной проверки на соответствие кода заявленному функционалу и на наличие в нем недокументированных возможностей. Таким образом, люди, не имеющие отношения к профессиональной разработке, при загрузке уже готовых плагинов и шаблонов подвергают свои проекты и свою информацию опасности копирования или уничтожения.
В данной статье, на основе имеющейся информации и ресурсов, будет разработан алгоритм анализа веб-порталов, использующих CMS WordPress для нахождения не только популярных уязвимостей, но и более специфических.
Возможные уязвимости веб-ресурсов, использующих CMSWordPress
Веб-порталы, использующие как основу язык программирования PHP и СУБД MySQL имеют ряд общих проблем безопасности. В данном разделе мы рассмотрим их общие принципы проявления, возможные и доступные методы борьбы с ними при необходимости, а также менее тривиальные уязвимости и статус их официального исправления на данный момент.
Misconfiguration (ошибочная настройка) — представляет собой вариант неправильной установки CMS на хостинг, что ведет в дальнейшем к возможности получения полного контроля злоумышленником над данным ресурсом в пределах под-папки на сервере или, в особо редких случаях, и содержимому корневой папки. Для избежания подобного инцидента достаточно ознакомиться с главой об установке в официальной документации.
Injection flaws — возможности для инъекций вредоносного кода разных видов. Это может произойти, когда вы передаете неотфильтрованные данные на сервер SQL (SQL-инъекции), в браузер (XSS), на сервер LDAP (LDAP- инъекции) и т. п. Проблема заключается в том, что злоумышленник может внедрять таким образом исполнительные команды (скрипты), что приводит к потере данных и позволяет использовать браузеры клиентов для кражи аутентификационной информации. Для защиты от инъекций необходимо настроить на хостинге фильтрацию входящего трафика, так как в самом WordPress данные виды уязвимостей уже учтены.
Broken authentication — состоит из нескольких проблем, которые могут возникнуть из-за «сломанной» аутентификации, например:
- URL может содержать идентификатор сеанса и утечки его в заголовке реферера кому-то другому.
- Пароли могут быть не зашифрованы либо при хранении или передаче.
- Идентификаторы сессий могут быть предсказуемыми.
- Возможный перехват сессии, если портал использует доступ по протоколу с HTTP (без SSL), и т. д.
Самым простым способом избежать эту уязвимость безопасности является использование готовых библиотек для аутентификации, которая является частью WordPress
Cross site scripting (XSS) — довольно частый случай инъекций. Злоумышленник подает веб-приложению на вход код, написанный на языке программирования JavaScript. При случайном обращению к нему пользователем произойдет немедленное выполнение скрипта браузером. Он может быть замаскирован в виде простой фишинговой кнопки или менее приметным образом. На загруженной странице начинает работать сценарий, который, например, может быть использован для отправки cookies злоумышленнику. Решением является невозвращение HTML-тегов клиенту. Такой метод имеет дополнительное преимущество в защите от HTML инъекции, атаки, в результате которой злоумышленник производит инъекцию простого HTML-содержимого (например, изображения). Данная уязвимость была устранена в WordPress не так давно, согласно данным на сайте трэкинга уязвимостей.
Insecure Direct Object References — классический случай доверия вводимым пользователем данных. Прямая ссылка на объект означает, что внутренний объект, такой как файл или база данных раскрыт пользователю. Проблема состоит в том, что злоумышленник может подменить эту ссылку и получить доступ к веб-порталу. При использовании WordPress CMS данная проблема отпадает, так как авторизация осуществляется должным образом и подмена ссылки злоумышленником ни к чему не приведет, т. к. он не имеет прав доступа.
Unvalidated redirects and forwards — это еще один момент фильтрации входящего поток данных. Предположим, что целевой участок имеет модуль redirect.php, который принимает URL в качестве параметра GET. Манипулируя данным параметром, мы может создать URL на наш собственный ресурс, который при нажатии перенаправляет браузер непосредственно на портал злоумышленника. Также, возможно перенаправление с добавлением команд в формате CGI. Решением в данном случае является использование встроенного функционала WordPress, с последующим запрещением создания редиректов для всех возможных пользователей с правами доступа ниже Администратора.
DDoS-атаки остались не рассмотренным, т. к. успешность в противодействии им напрямую зависит от хостера и выделенного под веб-портал лимита ресурсов.
Алгоритм анализа CMS WordPress на наличие уязвимостей
Для проведения аудита веб-портала, созданного с использованием CMS WordPress воспользуемся специально разработанной для подобных целей технологией, размещенной по открытой лицензии в сети Интернет.
При выведении результирующего отчета, полученного посредством данного веб-приложения проведем его тщательный анализ и приведем полученные результаты к систематизированному виду.
Таблица 1
Анализ полученной информации об уязвимостях
Потенциальная уязвимость |
Возможности использования |
Вариант устранения |
Вывод используемой версии CMS |
Нахождение актуальных уязвимостей для данной версии WordPress |
Скрыть файл /readme.html в корне public папки на хостинге, сделав его доступным только для администратора или удалить |
Вывод общей технической информации о ресурс |
С помощья сервиса Whois возможно определение данных о владельце, таких, как имя/фамилия и адрес |
Воспользоваться услугой по маскировке своих данных, предоставляемой хостером |
Вывод списка использованных плагинов |
Нахождение актуальных уязвимостей для данной версии плагина |
Интегрировать плагины напрямую в functions.php CMS или вообще ими не пользоваться |
Bruteforce возможных путей размещения популярных плагинов |
Нахождение актуальных уязвимостей для данной версии плагина |
Интегрировать плагины напрямую в functions.php CMS или вообще ими не пользоваться |
Вывод название используемой темы |
Нахождение актуальных уязвимостей для данной версии используемого шаблона |
Постоянно иметь самую свежую версию используемого шаблона, либо создать собственный |
Вывод логинов пользователей и их идентификаторов (User Enumeration) |
Последующий подбор пароля или записей в БД |
Внести в.htaccess файл хостинга следующие строки: RewriteCond %{REQUEST_URI}!^/wp-admin [NC] RewriteCond %{QUERY_STRING} author=\d RewriteRule ^ /? [L,R=301] |
Индексирование директорий |
Получением злоумышленником структуры сайта и возможность доступа к файлам, предназначенным исключительно для разработчика |
Отключить индексирование в файле.htaccess корневого каталога хостера |
Внешние ссылки на JavaScript файлы |
Находить уязвимые методы для XSS-инъекций |
Объединять все имеющиеся JavaScript-файлы в один с последующем размещении на внутреннем ресурсе |
Внешние вставки с помощью HTML5-тега |
Возможность передачи иных контейнеров |
Проводить периодический просмотр всех имеющихся |
Таким образом, мы можем настроить WordPress для противостояния большинству известных в настоящее время методов атак и использования уязвимостей. В свою очередь, для их эффективного и своевременного обнаружения и устранения недостает необходимого инструментария.
Литература:
- «WordPress Security Scan»: https://hackertarget.com/wordpress-security-scan/
- «Security Vulnerability Datasource»: http://www.cvedetails.com/vulnerability-list/vendor_id-2337/product_id-4096/
- «Web Security Vulnerabilities»: https://www.toptal.com/security/10-most-common-web-security-vulnerabilities
- «WordPress»: https://en.wikipedia.org/wiki/WordPress