Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
23:21, 17 апреля 2011

GreenSQL: Защита SQL-серверов от инъекций

Blog post image

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

Обеспечить безопасность приложения в данном случае поможет GreenSQL — файрволл или прокси для SQL-серверов. Сервис GreenSQL размещается между вашим приложением и SQL-сервером, принимает sql-запросы от приложения и в зависимости от степени его благонадежности либо перенаправляет их на целевой SQL-сервер, либо отвергает.

Blog post image

GreenSQL поддерживает СУБД Microsoft SQL 2000/2005/2008, MySQL 4.x/5.x, PostgreSQL 7.x/8.x и является кросс-платформенным. Среди официально поддерживаемых платформ Microsoft Windows Server 2003/2008, Ubuntu, CentOS. Поддерживаются 32-х и 64-х разрядные системы.

Что касается стоимости, существует несколько модификаций программы — бесплатная Express, Lite и Pro с ежемесячной оплатой. Основное отличие платных версий от бесплатной, если опустить техподдержку и автоматическое обновление, — возможность модифицировать запросы на лету и работа с безопасными SSL-соединениями.

Каждая из версий GreenSQL поддерживает несколько режимов работы.

Risk Based — IPS/IDS реализует базовый алгоритм идентификации потенциально опасных SQL-запросов. Т.е. GreenSQL производит семантический разбор запроса и по косвенным признакам определяет степень его благонадежности. Калькуляция степени опасности производится с учетом следующих параметров:

  • операции, изменяющие структуру таблиц
  • запросы к служебным таблицам и базам
  • запросы с использованием доступа к файловой системе
  • административные запросы, например, SHOW TABLES, SHOW CREATE TABLE
  • операции сравнения, всегда возвращающие ИСТИНУ, например, 1=1, field=field
  • комментарии внутри запроса
  • использование OR в запросе
  • операции над таблицами, содержащими личную информацию, например, users, accounts, payments
  • передача в запросе пустого пароля, например, password='', pwd='', passw=''

Необходимые заблокированные запросы можно добавить в список разрешенных (whitelist).

Database Firewall — активный режим защиты, который пропускает только запросы, находящиеся в списке разрешенных (whitelist).

Learning Mode — режим обучения, в ходе которого все запросы (вернее, шаблоны запросов) попадают в список разрешенных (whitelist). Таким образом, можно в режиме обучения прогнать в хвост и гриву свое приложение, чтобы он собрал базу «чистых» запросов, а затем включить «боевой» режим с блокировкой всех неизвестных запросов (Database Firewall + Active protection).

Настройки программы

GreenSQL запускается как сервис (демон). Управление настройками происходит через веб-интерфейс, расположенный по адресу 127.0.0.1:5000.

Blog post image
Логин/пароль по умолчанию admin/pwd

После авторизации вы попадаете на страницу статистики работы приложения. Перейдите в раздел System > License, и укажите лицензионный ключ, который вы найдете в письме со ссылкой для скачивания (для возможности скачивания необходима регистрация на сайте разработчика).

Blog post image

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

Blog post image

  • 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)

После создания прокси он будет запущен на указанном порту. Теперь достаточно задать правила для работы прокси (Policy), чтобы начать использовать GreenSQL в своем приложении. В принципе, уже на этом этапе можно попробовать настроить свое приложение на работу с GreenSQL, правда, работать оно будет в «прозрачном» режиме.

Blog post image

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

Теперь можно попробовать настроить свое приложение на использование GreenSQL.

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

Тест производительности взят с официального сайта GreenSQL. Суть теста такова, что посредством Apache Bench производилось несколько замеров в 400 обращений и 10 конкурентными запросами. Результат тестов представлен на изображении.

Blog post image

GreenSQL поставляется с хорошей документацией по использованию. Здесь я не пытался ее перевести, а скорее, обозначил общее назначение и настройки базового функционала программы. Предыдущие версии GreenSQL (до 1.2, текущая — 1.5) распространялись под лицензией GPL.

 
0
1108
6