GreenSQL Express

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:12, 7 июня 2020.
GreenSQL
Logo.jpeg
Постоянный выпуск: 1.3
Состояние разработки: Завершено
Написана на: C++,C
Операционная система: Windows, Linux
Платформа: кросс-платформенный
Лицензия: GPL
Веб-сайт greensql.net


GreenSQL — это межсетевой экран с открытым исходным кодом, используемый для защиты баз данных от SQL-инъекции. GreenSQL работает как прокси для команд SQL и имеет встроенную поддержку MySQL. Логика работы основана на оценке команд SQL с использованием матрицы оценки риска. Каждому sql-запросу, GreenSQL присваивает некоторое число, обозначающее степень риска запроса. Если оно превышает заданное по конфигурации число, запрос отклоняется, в противном случае перенаправляется в БД. Также осуществляется блокировка известных административных команд БД (DROP, CREATE и т. Д.).

[Источник 1]

Архитектура GreenSQL

GreenSQL работает как обратный прокси-сервер для соединений c БД. Это означает, что вместо соединения с БД напрямую приложение будет подключаться к серверу GreenSQL. GreenSQL анализирует запросы SQL и перенаправляет их на внутренний сервер БД. Архитектура сервиса приведена на рисунке 1.

Рисунок 1 - архитектура GreenSQL

Механизм GreenSQL поддерживает СУБД Microsoft SQL Server 2000/2005/2008, MySQL4.x/5.x, PostgreSQL 7.x/8.x и является кросс-платформенным. Среди официально поддерживаемых платформ Microsoft Windows Server 2003/2008, Ubuntu, CentOS. Поддерживаются 32-х и 64-х разрядные системы. Как видно из архитектуры, GreenSQL вызывает сервер базы данных для выполнения команд SQL, веб-приложение подключается к серверу GreenSQL, как если бы это был сервер БД. GreenSQL может быть установлен вместе с сервером БД на одном компьютере или может использовать отдельный сервер. По умолчанию GreenSQL прослушивает локальный порт 127.0.0.1:3305, перенаправляя запросы SQL на 127.0.0.1:3306 (настройка MySQL по умолчанию). Эти настройки можно изменить с помощью консоли GreenSQL. [Источник 2]

Режимы работы

Брандмауэр GreenSQL поддерживает несколько режимов работы:

Режим симуляции(Simulation Mode)

Режим симуляции- пассивная система обнаружения атак (IDS), только протоколирующая SQL-запросы и выдающая предупреждения на консоль управления.

В этом режиме ничего не блокируется. GreenSQL работает как система IDS БД(Intrusion Detection System - система обнаружения вторжений). В данном режиме используется матричный механизм оценки рисков, чтобы находить подозрительные запросы и уведомлять администратора базы данных с помощью консоли управления GreenSQL.

Блокировка подозрительных команд(Blocking Suspicious Commands)

Блокировка подозрительных команд- атаки не только обнаруживаются, но и блокируются (IPS) в соответствии с установленными правилами, указывающими на аномальность запроса.

В данном режиме используется эвристический движок для поиска вредоносных запросов и их автоматическая блокировка. В основном это система баз данных IPS (Intrusion Prevention System - система предотвращения вторжений). При этом вредоносный запрос не блокируется сразу. Сначала проверяется белый список команд(whitelist). Если команда была найдена в этом списке, она будет перенаправлен на сервер БД. Если нет, то в приложение будет отправлен пустой набор результатов. В этом режиме иногда могут возникать ложноположительные и ложноотрицательные ошибки. В результате некоторые корректные запросы могут быть заблокированы, или же наоборот, система может пропустить вредоносный запрос.

Режим обучения(Learning mode)

Режим обучения- предназначен для прогона и настройки правил в "чистой" среде, что позволяет сформировать белый список для предотвращения ложных срабатываний впоследствии.

В режиме обучения все запросы автоматически добавляются в белый список. Когда режим обучения заканчивается, автоматически включается активная защита. Если она включена, все неизвестные команды будут блокироваться. Также будет рассчитываться риск запросов,используя эвристические методы, и результат отображается в консоль управления GreenSQL.

Активная защита от неизвестных запросов (db firewall)

Активная защита от неизвестных запросов- блокирование всех неизвестных запросов.

В данном режиме все поступающие команды сравниваются со списком разрешенных команд, и если их нет в списке, то они автоматически блокируются.

[Источник 3]

Как GreenSQL находит вредоносные запросы?

GreenSQL находит подозрительные запросы, используя ряд методов:

  1. Путем определения административных и чувствительных команд SQL
  2. Путем подсчета риска запроса

Определение административных и чувствительных SQL команд

В данном случае используется механизм сопоставления команд по паттернам для поиска команд, которые считаются вредоносными. Например, следующие команды считаются вредоносными: административные команды базы данных(SHOW TABLES, CREATE TABLE); команды, которые пытаются изменить структуру БД(ALTER TABLE); команды, используемые для доступа к системным файлам.

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

Расчет риска запроса

GreenSQL рассчитывает риск каждого запроса. Для нахождения аномалий GreenSQL использует собственный лексер языка SQL для поиска токенов SQL. После того, как риск рассчитан, GreenSQL может заблокировать запрос или просто создать предупреждающее сообщение (зависит от режима приложения). На риск запроса могут влиять:

  • Если запрос обращается к конфиденциальным таблицам (пользователи, учетные записи, кредитная информация)
  • Комментарии внутри команд SQL
  • Пустая строка пароля
  • “or” внутри запроса
  • выражение SQL, которое всегда возвращает истину (1=1)

[Источник 4]

Процесс установки

Рассмотрим процесс установки GreenSQL. Будем устанавливать приложение из исходных фалов их официального репозитория.[Источник 5]

1. Создаем папку для установки и клонируем репозиторий

$ mkdir install_dir && cd install_dir
git clone https://github.com/larskanis/greensql-fw

2. Скачиваем greensql-console

Для успешной сборки программы необходимы файлы greensql-console, также через консоль GreenSQL можно произоводить конфигурацию Скачаем их из репозитория. Там хранятся необходимые файлы, для взаимодействия с GreenSQL через web-интерфейс.

git clone https://github.com/larskanis/greensql-console

3. Подготавливаем пакеты для установки

Для успешной сборки также необходимы следующие пакеты: g++, make, libpcre3-dev, libmysqlclient-dev, libevent-dev, flex, bison, libpq. Список пакетов может изменяться в зависимости от системы, которую вы используете. Более детальную информацию по необходимым пакетам можно посмотреть в репозитории в файле compilation.txt. Установить данные пакеты можно при помощи команды

$ sudo apt-get install  g++ make libpcre3-dev libmysqlclient-dev libevent-dev flex bison libpq-dev

4. Запускаем скрипт, для сборки deb файла

$ ./build.sh
…
package created ../ directory

Видим, что deb-файл создался на директорию выше.

5. Создаем пользователя greensql

Существует несколько способов добавить нового пользователя. Это можно сделать вручную при помощи следующих команд.

$ groupadd greensql
$ useradd -M -g greensql -s /dev/null greensql

А можно добавить нового пользователя через sh-скрипт, который лежит в директории scripts

$ cd scripts && sudo ./setup_user.sh

6. Создаем конфигурационную бд

Данный этап можно пропустить, если вы заполнили поля конфигурации при установке deb-файла

$ sudo ./greensql-create-db.sh

7. Запускаем демон

$ sudo /etc/init.d/greensql-fw start
Чтобы проверить, что приложение успешно запущено, можно проверить статус демона. Если все хорошо, то в строке статуса сервиса будет написано Active.
$ systemctl status greensql-fw

[Источник 6]

Настройка конфигурации из браузера

Добавим возможность конфигурировать наш сервис GreenSQL из браузера.

1. Добавляем в корень нашего сервера файлы greensql-console

Переходим в корень сервера Apache(обычно это директория var/www/html) и копируем директорию greensql-console в нее. Отменим, что все операции внутри корня корня сервера будут требовать прав sudo.

$ sudo cp -avr ~/green_install/greensql-fw/greensql-console/ greensql-console

2. Изменяем кофигурационный файл

Заносим следующее содержимое в файл config.php.

##
<?php

# Uncomment the following line to switch to demo version
#$demo_version = 1;

# greensql version
$version = "1.3.0";

# Database Type, allowed values "mysql" and "pgsql"
$db_type = "mysql";

# Database IP address
$db_host = "127.0.0.1";

# Database Port Value.
$db_port = 3306;

# database name used to store greensql confiuration and alerts
$db_name = "greendb";

# database user and password
$db_user = "green";
$db_pass = "pwd";

# If you run greensql-fw service on the same computer you can specify
# location of it's log file. It will be visible as part of the console.
$log_file = "/var/log/greensql.log";

# Number of lines to show when viewing log file.
$num_log_lines = 200;

# Number of lines to show when displaying a table.
$limit_per_page = 10;

# Generated web pages cache
$cache_dir = "templates_c";

# Smarty directory location (optional)
$smarty_dir = "/usr/share/php/smarty";

?>

3. Делаем директорию templates_c/ доступной для записи

$ chmod 777 templates_c/

4. Перезагружаем сервер Apache

$ sudo systemctl restart apache2.service

5. Конфигурирование системы

После этого мы можем перейти в браузере по url=localhost/greensql-console и попадем в форму, приведенную на рисунке 2. Если при первоначальной настройке ничего не менять, то логин/пароль по умолчанию admin/pwd.

Рисунок 2 - форма ввода логина/пароля

Для начала работы необходимо создать прокси. В бесплатной версии можно создать только один прокси. Для создания перейдите в раздел Databases > Create proxy. На рисунке 3 видим форму настройки прокси, в которой мы можем ввести имя прокси, тип базы данных, ip-адрес и порт.

Рисунок 3 - Настройка прокси
  • Proxy name — название прокси для идентификации внутри GreenSQL
  • Database type — тип защищаемой СУБД
  • Username и Password — логин и пароль для авторизации в СУБД. Не является обязательным, но их указание помогает при дальнейшей настройке выбирать объекты БД из списка, а не вводить вручную
  • Frontend IP — на каком IP будет работать прокси (актуально в случае нескольких сетевых подключений на машине). 0.0.0.0 означает работу на всех сетевых интерфейсах
  • Frontend Port — на каком порту будет работать прокси. Именно этот порт необходимо использовать в своем приложении для подключения к СУБД
  • Backend server name — название защищаемой СУБД. Может быть любым, необходим для идентификации внутри GreenSQL (я пишу localhost)
  • Backend IP — IP-адрес, на котором работает защищаемая СУБД (например, 127.0.0.1)
  • Backend port — порт, на котором работает защищаемая СУБД (обычно, для MySQL — 3306, для MSSQL — 1433, для PostgreSQL — 5432)

После создания прокси он будет запущен на указанном порту. Теперь достаточно задать правила для работы прокси, чтобы начать использовать GreenSQL в своем приложении. На рисунке 4 показано как выглядит страница выбора режима работы приложения.

Рисунок 4 - Выбор режима работы приложения
  • Rule type — Тип правила (Learning mode, Database firewall, Risk based). В зависимости от того, какой тип выбран, изжменяются поля для заполнения.
  • Database — название защищаемой базы данных в СУБД
  • Proxy — прокси, на который распространяется правило
  • IDS (Mode) — является общим для всех типов правил.
  • IPS/IDS — не использовать автоматическое распознавание атак
  • Active protection — блокировать потенциально опасные запросы
  • Monitoring — логировать и не блокировать потенциально опасные запросы

[Источник 7] [Источник 8]

Производительность

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

Рисунок 5 - Тест производительности

На данном рисунке приводится сравнения количества обращений к БД при включенном и отключенном брандмауэре. В среднем получаем небольшое снижение производительности и скорости работы, около 2-12%

[Источник 4]

Источники

  1. GreenSQL Express FREE Database Security // Блог GreenSQL [2010-]. URL:https://greensql.wordpress.com/2010/12/21/greensql-express-free-database-security/ (дата обращения: 10.05.2020).
  2. GreenSQL Express FREE Database Security // Блог GreenSQL [2010-]. URL: https://lifeonweb.wordpress.com/2009/08/27/green-sql// (дата обращения: 10.05.2020).
  3. Защита СУБД с GreenSQL-FW // Хакер [2011-]. URL: https://xakep.ru/2011/02/16/54849/#toc01. (дата обращения: 15.05.2020).
  4. 4,0 4,1 GreenSQL Documentation // Официальный сайт GreenSQL из web-архива [2007 - 2011]. URL: http://web-arhive.ru/view2?time=20111211225825&url=http%3A%2F%2Fwww.greensql.net%2Fcommunity%2Fdocs (дата обращения: 09.05.2020).
  5. GreenSQL is an Open Source database firewall used to protect databases from SQL injection attacks // Репозиторий проекта на github [2007-]. URL:https://github.com/larskanis/greensql-fw (дата обращения: 09.05.2020).
  6. How to install and configure GreenSQL in Ubuntu 9.10 // Блог Jaime Frutos Morales's [2009-]. URL:https://acidborg.wordpress.com/2009/12/09/how-to-install-and-configure-greensql-in-ubuntu-9-10/ (дата обращения: 10.05.2020).
  7. Preventing MySQL Injection Attacks With GreenSQL // Сайт HowToForge [2009-]. URL:https://www.howtoforge.com/preventing-mysql-injection-attacks-with-greensql-on-debian-etch?__cf_chl_captcha_tk__=b737b988c3f7d19dee58f8c5b82ca8276ed70510-1589982295-0-AYngI1Z-QKIljjLborWvKFj8bOeGxoYA_zhr-3Kd0gyJKEOr7uDXLlyLyOvK9BjWHDl-PK63WjLzjvIsdj6iP2XbgrHAmT_1ad-gjoKqHw0upWIpQO0xrP9TmOye4aCCGme4U9q60UzP4U1WCzEKO_t9lwrMCSWDMwxOmuGWe8QuMWoRt4hAVeqAuSksfJYq9EVg4dyiqwxgMnef9fubCbbNbh_4lTCGJqL15_k2Adsst0SCoV2q4-mXkqMZEvUFtOAwhzarj3kvCwQOvBXLDJERaryIFKEmNUVdCrnyVDTIR7jX1YCDqDdmTLIFsi3gUK6VuhPdCxECt-diFUFxLS--DTuTv58xDvDQBYWxXlHtEs1SaDpdBv0i3eiz-m0pgrfIe5iKM3vCJ4vnuFilsKjnzmuTH7xvY2BtR_532Ze6mX-4GLdjWLZpAW1gjP219seSSmXHBpsAQ43DU0YFJyhJlpnrLDms7JVCz_w5X4tcTy7zUWLNojEnsYGyXblXqXSvV2CTPOnxqMAEVonDM6UXxKuoJ-FhOm_K3PlpsOCsgoM-MHH17Ms3wZQnQ5SENw#-installing-greensqlfw (дата обращения: 15.05.2020).
  8. GreenSQL: Защита SQL-серверов от инъекций // Хабр [2011 - ]. URL:https://habr.com/ru/post/117375/ (дата обращения: 15.05.2020).