Программирование HTML Плагин mmleoni для защиты от атак SQL Injection и LFI Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Плагин mmleoni для защиты от атак SQL Injection и LFI Печать
Добавил(а) microsin   

Множество атак происходит из-за того, что расширения сайтов уязвимы для атак типа SQL или LFI (local file inclusion). Простой плагин для Joomla [1] позволит увеличить уровень защиты, перехватывая наиболее известные виды атак.

Плагин [1] обладает следующими функциями:

• Фильтрует запросы в POST, GET, REQUEST, и блокирует попытки атак SQL injection / LFI.
• Оповещает по e-mail обнаруженные атаки.
• Также защищает сайт от уязвимостей расширений сторонних разработчиков.
• Предоставляется белый список для безопасных компонентов (используйте его на свой страх и риск).

[Стандартная настройка]

Works on Front End only: игнорируются запросы (auto disable plugin), когда они отправляются в /administrator. Проверьте, что все работает правильно перед тем, как разрешить это также и на бэкэнде! Особенно если Вы разрешили блокировку по IP, иначе можете потерять доступ к сайту.

NameSpaces inspected: можно выбрать суперглобальные массивы для инспекции, возможны опции проверки:

Get
Get, Post
Request
Get, Post, Request

Ignored Extension. Игнорируемые расширения можно задать с помощью списка, где элементы отделены друг от друга запятой, например: com_content, com_dumper, com_weblinks.

Важное замечание: PHP парсит запросы и заполняет суперглобальные массивы путем копирования значений в каждый массив. Таким образом, $_GET['varName'] и $_REQUEST['varName'] не ссылаются на один и тот же объект! Изменение $_GET для очистки строки запроса недостаточно, если программа считывает $_REQUEST.

У меня плагин срабатывал на редактор статей JCE Editor, поэтому в список исключений добавил com_jce.

[Оповещение]

Send Email Alert on injection/inclusion. Если 'Yes', то посылает mail-alert на attack/malformed URL.

Mail to notify attack. Адрес почты, куда посылается оповещение.

[Продвинутая настройка]

Raise Error on Fault. Если YES, то остановит Joomla и возвратит ошибку (будет установлена обычная ошибка, не дающая атакующему подсказки). Если No, то очистит запрос и передаст это Joomla.

Http Error Code. Код ошибки HTTP для возврата (40x, 50x)

Http Error Message. Сообщение на странице ошибки.

[Параметры LFI]

LFI check only on canonical. Если Yes, то проверяется LFI только на параметры model, view, controller, template.

Max number of consecutive '../'. Как много идущих друг за другом '../' может присутствовать в URL.

[Блокировка по IP]

Эти опции доступны начиная с версии 1.1.

Enable temporary IP block. Разрешение или запрет бана по IP.

Seconds to hold ip banned. Сколько секунд удерживается блокировка.

Max hacks attempt. Максимальное количество попыток взлома для запуска блокировки.

Внимание: убедитесь, что запрещена функция 'Debug' Joomla перед тем, как разрешить блокировку по IP (только для версий до 1.4). 'Debug' Joomla захватывает ошибки базы данных и не дает плагину возможности создать таблицу для сохранения IP.

• Убедитесь, что Joomla 'Debug' запрещено.
• Разрешите IP blocking.
• Снова активируйте 'Debug' (если конечно это нужно).

НЕ ПЫТАЙТЕСЬ ПРОВОДИТЬ НИКАКИХ АТАК после разрешения 'IP blocking' и защиты бэкэнда! Иначе Вы потеряете доступ к сайту на время, установленное в параметре 'Seconds to hold ip banned'.

[Полезное дополнение]

Не все атаки проходят через фреймворк Joomla: касается jce editor. Вы можете добавить этот код к своему файлу .htaccess, вставьте его сразу после "RewriteEngine On":

RewriteCond %{REQUEST_URI}  ^/images/  [NC,OR]
RewriteCond %{REQUEST_URI}  ^/media/  [NC,OR]
RewriteCond %{REQUEST_URI}  ^/logs/  [NC,OR]
RewriteCond %{REQUEST_URI}  ^/tmp/
RewriteRule .*\.(phps?|sh|pl|cgi|py)$ - [F]

Этот код заблокирует все попытки запуска скриптов не под управлением Joomla. Возможно Вам понадобится добавить другие пути в зависимости от установленных компонентов.

[Восстановление неправильной установки]

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

.ckForms
.virtuemart
.joomfish
.PhocaDownload
.PhocaGallery
.RokDownloads
.AcyMailing
.ccnews
.AlphaRegistration
.Chrono Contact
.SOBI2

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

Используйте phpmyadmin (или любой другой редактор SQL), выберите таблицу -- plugins (#__ обычно таблица -- ).

Выберите запись с именем, равным "System - Marco's SQL Injection - LFI Interceptor": вероятно это последняя запись. Отредактируйте эту запись, и установите поле "published" в "0". С этого момента плагин запрещен.

Используйте phpmyadmin (или любой другой редактор SQL), выберите таблицу -- extensions (#_ это случайная строка, см. префиксы у других таблиц).

Выберите запись с именем, равным "System - Marco's SQL Injection - LFI Interceptor": вероятно это последняя запись. Отредактируйте эту запись, и установите поле "enabled" в "0". С этого момента плагин запрещен.

Если функция Debug была разрешена, когда активировался IP-Blocking, то сервер будет выдавать ошибки, наподобие следующих:

JDatabaseMySQL::query: 1146 - Table 'xxx.yyy_mi_iptable' doesn't exist

Как устранить, процесс по шагам:

1. Запретите плагин (см. врезки выше).

2. Запретите Debug. Для этого подключитесь через ftp и отредактируйте configuration.php и установите следующее. Для Joomla 1.5:

var $debug = '0';

Для Joomla 2.5, Joomla 3.x:

public $debug = '0';

Перезагрузите страничку.

3. Создайте таблицу вручную. Используйте phpmyadmin (или любой другой редактор SQL), выберите закладку SQL, вставьте и выполните следующий код.

CREATE TABLE `#__mi_iptable` (
`ip` VARCHAR(40) NOT NULL COMMENT 'ip to char',
`firsthacktime` DATETIME NOT NULL ,
`lasthacktime` DATETIME NOT NULL ,
`hackcount` INT NOT NULL DEFAULT '1',
`autodelete` TINYINT NOT NULL DEFAULT '1',
PRIMARY KEY ( `ip` )
);

Здесь "#_" это префикс таблицы. Начиная с Joomla 2.5 это случайная строка, см. какой префикс у других таблиц.

Вероятно была сделана попытка установки на PHP4, только на Joomla 1.5. Ничего тут сделать нельзя, кроме как запретить плагин и обновить Joomla.

[Ссылки]

1. SQL Injection and LFI protection site:mmleoni.net.

 

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


Защитный код
Обновить

Top of Page