Как защитить сайт на Joomla

Уважаемые читатели, эта статья посвящена защите и настройке безопасности не менее популярной CMS — Joomla. Все рекомендации будут относиться к актуальной на данный момент ветке 3.3х. Многие из наших советов будут работать и на предыдущих версиях.

 

Этап установки

В процессе установки CMS необходимо обратить внимание на некоторые апсекты, правильное выполнение которых позволит существенно повысить защищенность вашего сайта.

 

Используйте сгенерированный префикс таблиц

Разработчики третьей версии Joomla (а также ветке 2.5) встроили некоторые механизмы, которые минимизируют выполнение векторов атаки, актуальных для предыдущих версий. Ранее все таблицы в базе данных создавались с использованием префикса jos_, что существенно облегчало выполнение sql-инъекций. Теперь установщик сам генерирует этот префикс, вам же остается только принять его.

Установка joomla - генерация префикса

Установка joomla — генерация префикса

Не стоит заменять его на что-то угадываемое, например, на имя вашего домена.

 

Придумайте имя администратора — не «admin»

Далее необходимо придумать имя администратора сайта и пароль. В качестве логина используйте что-то вроде «director-asa2». Если вы укажете классическое «admin», то подобрать параметры доступа будет существенно проще.

Установка joomla - имя администратора

Установка joomla — имя администратора

При установке пароля обратите внимание на отсутствие индикатора стойкости.  Для выбора надежного значения лучше воспользуйтесь одним из онлайн сервисов по генерации паролей.

 

Не используйте FTP

Использование ftp-протокола — это потенциальная угроза безопасности. Причина — передача пароля и данных в «открытом» виде (нешифрованный протокол).

Для администрирования сайта рекомендуем использовать SSH или SFTP. В этом случае весь сеанс связи зашифрован. Большинство хостингов предоставляют такую возможность.

По умолчанию использование FTP отключено. В качестве альтернативы можете воспользоваться одним из плагинов в официальном репозитории extensions.joomla.org, например, ProFiles.

Установка joomla - не использовать FTP

Установка joomla — не использовать FTP

 

Удалите директорию «installation/»

После завершения установки система предложит удалить директорию installation. Выполните это требование, так как ее наличие позволит злоумышленнику «затереть» ваш сайт новой установкой. Если вы удалили директорию непосредственно на файловой системе (а не воспользовались кнопкой в установщике), не забудьте также удалить файл joomla.xml, который содержит точную версию вашей CMS.

 

Этап эксплуатации

Не стоит думать, что по окончанию установки можно забыть о мерах безопасности. Как правило, в базовой комплектации система наименее подвержена компрометации. Риски возрастают при расширении функциональности, добавлении пользователей и т.д.

 

Обновляйте ядро, установленные плагины и темы

Базовый принцип всех CMS — своевременное обновление ядра системы и установленных плагинов. О наличии обновлении вы можете узнать на главной странице панели управления.

Настройка joomla - проверка обновлений

Настройка joomla — проверка обновлений

Для повышения отказоустойчивости вашего сайта рекомендуется делать резервные копии при установки новых версий ядра CMS. Для этого воспользуйтесь плагином Akeeba Backup версии не ниже 4.0.5.

 

Не используйте неподдерживаемые версии Joomla: 1.0х, 1.5х, 1.6х и 1.7х

Если вы давно используете Joomla, то возможно версия вашей системы уже официально не поддерживается (это касается всей ветки 1х) или скоро перестанет поддерживаться (ветка 2.5 официально заканчивается 31 декабря 2014 года). Мы рекомендуем задуматься о миграции на актуальную версию 3.3х. На официальном сайте joomla.org представлены руководства для перехода со старых версий.

Так же существуют плагины для автоматического апгрейда CMS (Migrate Me).

Настройка joomla - расширение migrate me

Настройка joomla — расширение migrate me

 

Проверьте используемые плагины в списке уязвимых

Думаю не секрет, что вы знаете о потенциальной угрозе безопасности, которую несет каждый устанавливаемый плагин. Чтобы минимизировать этот риск следует выполнять простые правила:

  • использовать расширения только из официального репозитория extensions.joomla.org
  • перед установкой проверять наличие расширение в списке уязвимых — http://vel.joomla.org/index.php/live-vel

 

Используйте предоставляемый .htaccess-файл

Дистрибутив CMS Joomla версии 3.3х поставляется совместно с файлом htaccess.txt, который содержит правила для защиты от широко известных векторов атак на эту CMS. Вам необходимо переименовать этот файл в .htaccess, чтобы он использовал для защиты возможности веб-сервера Apache, или вставьте следующие строки в уже существующий файл:

RewriteEngine On
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
RewriteRule .* index.php [F]

Данные правила будут работать, если на сервере установлен модуль mod_rewrite.

 

Используйте ЧПУ-ссылки

Многие сканеры, которые эксплуатируют уязвимости в joomla, получают списки сайтов из google. Для этого используется техника Google XAK, а конкретно для нас может использоваться вот такой запрос inurl:index.php?option=com_jce. Поисковик выведет список сайтов, на которых установлен плагин JCE.

Чтобы затруднить работу сканерам и одновременно улучшить SEO нашего сайта следует использовать ЧПУ-ссылки:

Настройка joomla - включить ЧПУ

Настройка joomla — включить ЧПУ

Это можно сделать перейдя в панели управления «Общие настройки» -> «Сайт» -> «Настройки SEO».

 

Защитите панель администрирования

Панель управления сайтом для CMS Joomla расположена по адресу site.com/administrator/. Если сайт использует стандартные настройки, то любой пользователь, зная логин и пароль, может управлять сайтом. Полагаться только на уникальность логина и стойкость пароля не достаточно.

Начиная с версии 3.2.0 в CMS внедрена возможность использования двухфакторной аутентификации. Мы настоятельно рекомендуем включить эту опцию. В этом случае помимо пароля пользователю нужно знать еще и уникальный ключ.

Настройка joomla - включение двухфакторной аутентификации

Настройка joomla — включение двухфакторной аутентификации

Включить и настроить эту опцию можно в разделе «Пользователи» -> «Менеджер пользователей» -> Имя вашего пользователя -> «Двухфакторная аутентификация». Воспользуйтесь одним из механизмов: Google Authenticator или YubiKey (мы протестировали Google Authenticator — все заработало с первого раза).

Вот так будет выглядеть форма входа в панель администрирования:

Настройка joomla - двухфакторная аутентификация

Настройка joomla — двухфакторная аутентификация

Для изменения адреса формы входа можно воспользоваться плагином AdminExile. С его помощью можно установить ключ, который предоставит доступ для входа в панель администрирования (например,site.com/administrator/index.php?myadmin). Если его не указать, то произойдет автоматический редирект на главную страницу вашего сайта.

Настройка joomla - плагин  adminexile

Настройка joomla — плагин adminexile

Этот же плагин позволит установить список ip-адресов, для которых разрешен доступ в панель управления, и защитит от брутфорса. Устанавливайте плагин версией не нежи 2.3.6.

 

Защитите конфигурационный файл configuration.php

Файл configuration.php расположен в корневой директории Joomla (http://example.com/configuration.php). В нем содержатся параметры подключения к базе данных, ключ шифрования, префикс таблиц, параметры ftp (при использовании).

Если файл будет доступен для злоумышленников, то у них появляется реальный шанс получить полный доступ до вашего сайта. На очень многих хостингах установлена панель управления базой данных — phpMyAdmin.  Использование параметров из файла configuration.php позволит пройти авторизацию в этой панели.

Основная причина доступности файла — небезопасная конфигурация. Достаточно  часто администратор сайта создает резервные копии вида:

  • сonfiguration.php.old
  • сonfiguration.php1
  • сonfiguration.php.test
  • сonfiguration.php~

При использовании таких имен файлы перестают обрабатываться как php-скрипты. При прямом запросе (например, http://example.com/сonfiguration.php.old) злоумышленник получит все содержимое.

Не храните резервные копии конфигурационного файла в пределах вашего сайта. Для дополнительной защиты поместите следующий код в файл .htaccess, расположенный в корне сайта:

<Files ~ «^configuration\.»>
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

Так вы заблокируете доступ к этому файлу (и всем его копиям) средствами веб-сервера.

 

Настройте права доступа для ключевых файлов и директорий

Как правило, при проведении атаки злоумышленник пытается записать свой код в уже существующие файлы системы. Таким образом он хочет дополнить эти файлы скрытым функционалом. Для того чтобы максимально затруднить его задачу необходимо выставить определенные права на ключевые файлы и директории. Для CMS Joomla:

  • 444 на site.ru/index.php
  • 444 на site.ru/configuration.php
  • 444 на site.ru/templates/ваш шаблон/index.php
  • 555 на директорию site.ru/templates/ваш шаблон/

Не забудьте временно изменить права на 644 для файла configuration.php, когда будете вносить изменения в панели администрирования.

 

Запретите свободную регистрацию пользователей

Если бизнес-модель вашего сайта не подразумевает регистрацию пользователей, то вам необходимо ее отключить в панели управления CMS. По умолчанию она включена.

Для отключения перейдите в панель «Пользователи» -> «Менеджер пользователей» -> «Настройки».

Настройка joomla - запрет на регистрацию

Настройка joomla — запрет на регистрацию

Некоторые уязвимости требуют для своей реализации зарегистрированного пользователя. При отключении авторегистрации эксплуатация будет затруднена. Если же регистрация нужна, тогда включите уведомление администратора.

 

Перенесите директории «logs/» и «tmp/» за пределы сайта

Служебные директории logs и tmp по умолчанию находятся в корневой директории сайта. Мы рекомендуем перенести их за пределы «видимости». Как правило это на один уровень выше их текущего положения на файловой системе.

Сначала переместите директории, а потом установите соответствующий путь в панели администрирования («Общие настройки»).

Настройка joomla - перенос логов

Настройка joomla — перенос логов

Настройка joomla - перенос tmp

Настройка joomla — перенос tmp

 

Используйте плагины безопасности

Достаточно много расширений для повышения безопасности CMS представлено в официальном репозитории. Есть среди них как платные, так и бесплатные решения. Попробуйте начать с «Admin Tools«. Его основные возможности:

  • экстренный перевод сайт в оффлайн режим
  • список ip-адресов, для которых разрешен доступ в панель администрирования
  • редактирование префикса таблиц в базе данных
  • Web Application Firewall
  • менеджер расширений файлов
  • дополнительная защита панели администрирования с помощью .htaccess
Настройка joomla - расширение admin tools

Настройка joomla — расширение admin tools

 

Блокируйте небезопасные запросы

Для защиты от наиболее опасных типов уязвимостей (sql-инъекций и lfi) вы можете воспользоваться плагином Marco’s SQL Injection.

Настройка joomla - расширение marcos

Настройка joomla — расширение marcos

Основные возможности расширения:

  • фильтрация и блокировка sql-инъекций и lfi в запросах GET, POST, REQUEST
  • уведомление администратора по электронной почте
  • белый список компонентов, для которых не применять защиту
  • блокирование ip-адреса злоумышленника

 

Используйте механизмы для активного аудита

Если вы читали нашу статью о защите блога на WordPress, то в одном из пунктов мы рассказывали о сканере WPScan. Он позволяет просканировать блог снаружи и определить наиболее уязвимые места.

К сожалению аналогичного уровня сканера для Joomla в настоящее время нет. Joomscan от OWASP можно не брать в расчет. Продукт не обновлялся с мая 2013 года, список уязвимых плагинов также далек от сегодняшнего дня.

Для внешнего аудита безопасности воспользуйтесь нашим SaaS-решением: weBBez. Непосредственно для CMS Joomla мы умеем:

  • искать копии конфигурационного файла
  • осуществлять поиск уязвимых плагинов
  • обнаруживать ошибки администрирования CMS
  • осуществлять поиск сигнатур Joomla-вирусов на вашем сайте

 

Вывод. Для защиты вашего сайта на основе cms Joomla рекомендуется выполнить следующие шаги и рекомендации:

  • используйте сгенерированный префикс таблиц
  • придумайте имя администратора — не «admin»
  • не используйте FTP
  • удалите директорию «installation/»
  • обновляйте ядро, установленные плагины и темы
  • не используйте неподдерживаемые версии Joomla: 1.0х, 1.5х, 1.6х и 1.7х
  • проверьте используемые плагины в списке уязвимых
  • используйте предоставляемый .htaccess-файл
  • используйте ЧПУ-ссылки
  • защитите панель администрирования
  • защитите конфигурационный файл configuration.php
  • настройте права доступа для ключевых файлов и директорий
  • запретите свободную регистрацию пользователей
  • перенесите директории «logs/» и «tmp/» за пределы сайта
  • используйте плагины безопасности
  • блокируйте небезопасные запросы
  • используйте механизмы для активного аудита

 

Ссылки на упомянутые программные продукты и сервисы:

  • Joomla — http://joomla.org
  • официальный репозиторий — http://extensions.joomla.org
  • ProFiles — http://extensions.joomla.org/extensions/core-enhancements/file-management/24160
  • Akeeba Backup — http://extensions.joomla.org/extensions/access-a-security/site-security/backup/1606
  • Migrate Me — extensions.joomla.org/extensions/migration-a-conversion/joomla-migration/24238
  • список уязвимых расширений — http://vel.joomla.org/index.php/live-vel
  • AdminExile — http://extensions.joomla.org/extensions/access-a-security/site-security/login-protection/15711
  • Admin Tools — http://extensions.joomla.org/extensions/access-a-security/site-security/site-protection/14087
  • Marco’s SQL Injection — http://extensions.joomla.org/extensions/access-a-security/site-security/site-protection/12731
  • Joomscan — http://sourceforge.net/projects/joomscan/
  • phpMyAdmin — http://www.phpmyadmin.net/home_page/index.php
  • WPScan — http://wpscan.org/
  • weBBez — http://webbez.ru/