Защита СУБД с GreenSQL-FW

Классическое веб-приложение, любого назначения, для своей работы использует собственно веб-сервер, с активным модулем интерпретатора языка, плюс база данных в которой хранятся данные. Все известные на сегодня атаки – XSS, SQL-injection, XPath-injections, CSRF/XSRF, HTTP Response Splitting, Include-атаки и другие в той или иной мере используют недоработки программистов, позволяющие в итоге получить доступ к закрытой информации. Обнаружить и устранить все возможные ошибки просто не реально, и веб-приложения здесь не исключение. Но зато приемы атакующих хорошо известны. Это и используют в специальных средствах, разработчики которых отслеживают все потенциальноопасные, да и просто запрещенные администратором запросы и пытаются их блокировать или изменить. Используя приложения вроде AppArmor, SELinux и TOMOYO Linux можно противостоять многим атакам. Сегодня посмотрим на некоторые другие решения.
Обзор начнем с проекта GreenSQL-FW (greensql.net), который работая как прокси-сервер между веб-приложением и SQL сервером, анализирует SQL команды, на предмет аномальных запросов и команды администрирования SQL сервера которые часто используются взломщиками (DROP, CREATE и т.д.).
Используя GreenSQL админ может определить список допустимых и запрещенных масок для операций – DELETE, UPDATE и INSERT, а также блокировать запросы содержащие id администратора.
При обнаружении атак кроме «опасных» команд, используется степень риска, которое вычисляется для каждого запроса к СУБД.
В числе факторов влияющих на коэффициент риска, могут выступать самые популярные приемы хакеров – обращение к служебным таблицам и конфиденциальным данным, запросы всегда возвращающие TRUE, попытка обнулить поля с паролем, использование в запросе OR, сравнение констант и другие. При превышении уровня риска установленного порога, запрос блокируется, а приложению отправляются пустые данные.
GreenSQL поддерживает несколько режимов работы:

Разработчики рекомендуют после установки включить «Learning mode» и после сбора данных перевести GreenSQL в режим Active protection.
На сайте проекта доступны три версии файера – Community, Light и Pro. Первая бесплатная (по лицензии GNU GPL) и предоставляет основные возможности, поддерживая СУБД MySQL и PostgreSQL (появилась в версии 1.2) и установку в Linux. Коммерческие версии, кроме того умеют защищать MS SQL Server и работают еще и на Windows 2003/2008.
Само защищаемое приложение роли не имеет, это может быть портал, CMS и так далее.
GreenSQL обычно устанавливается на том же сервере что и SQL база, хотя это не обязательно. По умолчанию GreenSQL слушает локальный порт 127.0.0.1:3305 после анализа перенаправляя SQL запросы на стандартный порт MySQL – 127.0.0.1:3306. При необходимости эти параметры легко изменить в консоли.
Управление программой и просмотр статистики запросов и блокировок производится через консоль или web-интерфейс. При помощи одной консоли можно управлять защитой нескольких СУБД.
Кратко разберем настройку GreenSQL Community. На сайте проекта доступны исходные тексты и пакеты для Ubuntu, RHEL/CentOS 5, Fedora, Debian, SLE/openSUSE и Mandriva. Установка в Ubuntu проста, скачиваем deb пакет, затем ставим как обычно:

$ sudo dpkg -i greensql-fw_1.2.2_amd64.deb

После чего в появившемся окне нужно выбрать тип СУБД которую будет защищать GreenSQL, IP-адрес или имя сервера, порт, данные root, название базы данных, в которой будут храниться настройки. Дальше скрипт предложит создать новую учетную запись для подключения к БД.

При необходимости изменить эти установки в дальнейшем можно поступить просто:

$ sudo dpkg-reconfigure greensql-fw

Или запустить скрипт «greensql-create-db«. Конфигурационные файлы GreenSQL находятся в каталоге /etc/greensq. Основной файл называется
greensql.conf и содержит настройки подключения к БД, журналирования и рисков. Установки рисков по умолчанию, подходят для большинства случаев и ничего трогать внутри обычно, не нужно, хотя при необходимости можно поиграться цифрами рисков просматривая журнал (/var/log/greensql.log) и подгоняя под свои условия. Все поля комментированы, поэтому их назначение должно быть понятным.
Проверить работает ли GreenSQL очень просто, подключаемся к 3305 порту, нас должны перебросить на 3306 на котором случает MySQL.

$ mysql -h 127.0.0.1 -P 3305 -u root -p

Все как обычно, но например на запрос «show databases» мы получим пустой список. Осталось изменить настройки всех клиентов работающих с БД на новый порт 3305, хотя чаще проще поступить наоборот, заставив GreenSQL слушать порт 3306, а мускул перестроить на тот же 3305.

Тогда клиентские приложения трогать не понадобится.
Для управления разработчики предлагают веб-интерфейс. Чтобы его настроить подключаем файл /etc/greensql/greensql-apache.conf в конфиге Apache:

$ sudo nano /etc/apache2/apache2.conf
Include /etc/greensql/greensql-apache.conf

В greensql-apache.conf также нужно произвести некоторые настройки.

$ sudo nano /etc/greensql/greensql-apache.conf
# снимаем комментарии с этих строк
<ifmodule mod_alias.c>
 Alias /greensql "/usr/share/greensql-fw"
</ifmodule>

Разрешаем всем запись в подкаталог templates_c.

$ sudo chmod 0777 /usr/share/greensql-fw/templates_c

В файле config.php устанавливаем корректные данные для доступа к БД:

$ sudo nano /usr/share/greensql-fw/config.php
$db_type = "mysql";
$db_host = "localhost";
$dbport=3306
$db_name = "greendb";
$db_user = "green";
$db_pass = "pwd";

Включаем mod_alias и перезапускаем веб-сервер:

$ sudo a2enmod alias
$ sudo service apache2 restart

Теперь регистрируемся через веб-интерфейс использовав для входа учетную запись «admin» с паролем «pwd».



Источник статьи