Классическое веб-приложение, любого назначения, для своей работы использует собственно веб-сервер, с активным модулем интерпретатора языка, плюс база данных в которой хранятся данные. Все известные на сегодня атаки – XSS, SQL-injection, XPath-injections, CSRF/XSRF, HTTP Response Splitting, Include-атаки и другие в той или иной мере используют недоработки программистов, позволяющие в итоге получить доступ к закрытой информации. Обнаружить и устранить все возможные ошибки просто не реально, и веб-приложения здесь не исключение. Но зато приемы атакующих хорошо известны. Это и используют в специальных средствах, разработчики которых отслеживают все потенциальноопасные, да и просто запрещенные администратором запросы и пытаются их блокировать или изменить. Используя приложения вроде AppArmor, SELinux и TOMOYO Linux можно противостоять многим атакам. Сегодня посмотрим на некоторые другие решения.
Обзор начнем с проекта GreenSQL-FW (
Используя 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».