Базы данных являются критически важными для большинства компаний. Во многих корпоративных базах данных содержится информация о клиентах и работниках, т.е. данные, которые не должны куда-либо исчезнуть. К сожалению, утечки данных случаются всегда, даже в крупных компаниях, где имеется многочисленный технологический персонал и тщательно разработанная IT инфраструктура. Небольшие компании с малым числом работников чаще являются более уязвимыми, так как кроме дорогого оборудования, в них также отсутствует необходимый опыт в такого рода вопросах.
Небольшие и средние компании чаще всего используют серверы, на которых веб-приложения и системы управления базами данных работают параллельно. Ошибка в веб-приложении может подвергнуть риску сервер или предоставить доступ посторонним лицам к базе данных через внедрение SQL-кода, особенно если в компании отсутствует персонал для выявления уязвимостей и своевременной их ликвидации. Поэтому имеет смысл использовать такие инструменты как GreenSQL, которые, хотя и не предоставляют защиту от умышленного захвата сервера, могут успешно предотвратить внедрение SQL-кода.
Компания GreenSQL LTD в Израиле разрабатывает GreenSQL с 2009 года. До версии 1.3 утилита выпускалась по открытой лицензии. В 2012 году вышла версия 2, уже под авторской лицензией и с бесплатной версией Express, которая предоставляла хорошую защиту. Файрволл написан на C++. Взяв в качестве примера сервер Linux с бесплатной системой библиотек Koha, я детальнее рассмотрю Security-версию GreenSQL, которая предоставляет дополнительные функции предупреждения и создания отчётов (в отличие от Express), а также функцию кэширования. Вы можете пользоваться ей бесплатно в течение двух недель.
GreenSQL является средним между приложением и системой управления базами данных, и функционирует как реверсный прокси или файрволл баз данных. Версия Security работает как на Linux, так и на Windows и осуществляет защиту таких систем управления базами данных как PostgreSQL, MariaDB, MySQL и Microsoft SQL Server.
В режиме файрволла в базу данных передаются только авторизованные запросы; на неавторизованные запросы GreenSQL выдаёт пустой результат. Коммерческие версии Activity Monitoring и Data Masking также отслеживают отправителя запроса в базу данных, либо же маскируют определённые данные, такие как информацию о работниках или клиентах. В общем, возможные взломщики не заметят, что имеют дело с прокси, а не СУБД.
Ввод в эксплуатацию
В идеале вам следует иметь три компьютера: веб-сервер; сервер, выделенный специально под GreenSQL; и сервер базы данных, хотя также возможно запустить все эти приложения на одном компьютере.
Для того чтобы установить GreenSQL, скачайте приложение, затем (на Linux) выполните команду chmod 755 greensql.bin, чтобы сделать его исполняемым, и запустите установщик путём ввода ./greensql.bin. Установщик создаст группу greensql и пользователя, переместит все файлы в /opt, создаст загрузочный сценарий и запустит GreenSQL.
К интерфейсу администратора можно получить доступ, набрав в браузере https://Server:5000/, где вам будет нужно ввести ключ продукта. Вам нужно получить ключ после обязательной регистрации, которая необходима, чтобы скачать приложение. Если вы скачиваете GreenSQL не с сайта разработчика, то можете вернуться к этому шагу позже. Далее вам будет необходимо сменить пароль администратора, перед тем, как вы попадёте в личный кабинет.
Личный кабинет даёт общее представление о GreenSQL |
Первым делом установите соединение с системой базы данных перед активацией GreenSQL как прокси. Это можно сделать с помощью пункта меню Базы данных (Databases). Перед сохранением параметров вы можете нажать на кнопку Проверить Соединение (Check Connection), чтобы убедиться в доступности базы данных.
Далее установите прокси, через который будут осуществляться все дальнейшие соединения с базой данных. Прокси находится между приложением и СУБД и проверяет каждый запрос перед тем, как отправить его в базу данных либо отменить. Прокси должен прослушать порт, отличный от порта базы данных. Если до установки GreenSQL у вас уже имелось большое количество веб-приложений, целесообразно использовать порт базы данных для прокси, а для СУБД отвести отдельный порт.
База данных, в которой позже будут храниться запросы и другие данные для правил файрволла, можно не создавать вручную; обычно GreenSQL создаёт её автоматически. Если же вы хотите с самого начала задать своё собственное имя, конечно, можете создать её сами.
Как только вы подключились к базе данных и создали прокси, может потребоваться небольшая настройка приложений базы данных; к примеру, если прокси использует порт отличный от порта, используемого базой данных. Вам следует лишь изменить порт СУБД и сервер в файле конфигурации для каждого приложения.
Будьте осторожны с известным localhost на Linux системах, если прокси и приложения запускаются на одном сервере. Для localhost часто используются сокеты Unix, чего не учитывает GreenSQL. В таком случае запросы обходят радар GreenSQL и не проверяются. Однако если вы замените localhost на 127.0.0.1, всё должно работать как следует.
Снова в школу
Так как разрешённые запросы теоретически известны приложениям баз данных, которые разрабатываются внутри компании, намного сложнее получить общее представление для уже готовых приложений. Конечно, возможен поиск по ключевым словам, однако на практике запросы чаще охватывают большое количество файлов и составляются динамически.
Для того чтобы быстро составить как можно более подробный список авторизованных и неавторизованных запросов, GreenSQL может работать в режиме обучения в безопасной среде. В меню Безопасность Базы Данных / Правила (Database Security / Policy) создайте новое правило типа Режим Обучения (Learning Mode) и, если хотите, привяжите его к базе данных.
Полученные запросы базы данных во время обучения хранятся в группе запросов; вы можете создать группу с помощью шаблона. В группе запросов могут содержаться запросы от всех прокси и баз данных, либо же их можно ограничить до выбранных случаев.
Помочь сдержать поток запросов могут такие функции, как IP Источника (Source IP), Пользователь Базы Данных (Database User) и Приложения (Application). С помощью функции Расписание (Schedule) администратор может ограничить время применения правила. Одним из вариантов будет предоставление доступа к базе данных лишь в рабочее время.
Далее введите промежуток времени, в течение которого Вы хотите обучать GreenSQL запросам. Когда ваши пользователи начнут работу с защищённым приложением, группа запросов, связанная с правилом, будет пополняться базовым набором разрешённых или запрещённых запросов, который вы можете подкорректировать позже.
На начальной стадии обучения GreenSQL знакомится с разрешёнными и запрещёнными запросами |
Защитник базы данных
Для активации GreenSQL Вам необходимы правила типа Файервол Базы Данных (Database Firewall) или Риск-ориентированные системы IDS/IPS (Risk-based IDS/IPS). Правила применяются по порядку, как и другие файрволл-системы. Как только найдено совпадение, оно сразу же принимается и процесс сравнения прекращается. Это значит, что если вы хотите запретить некоторые запросы, но принимать все остальные, то вам следует расположить запрещающее правило в самом начале. Однако если вы хотите запретить все запросы и разрешить только некоторые, сделайте наоборот.
Файрволл разрешает или блокирует доступ к базе данных на основе правил запросов или же правил таблиц. Запросы могут собираться, к примеру, во время работы GreenSQL в режиме обучения, однако их также можно ввести вручную или же скопировать из log-файла.
Вы также можете добавить файервол и IDS/IPS правила для дополнительных ограничений. Если сервер обслуживает несколько компьютеров, вы можете сделать исключение для IP или целых диапазонов IP. То же самое можно применить и относительно пользователей, приложений и времени применения правила. Всё это делается в меню Безопасность Базы Данных / Объекты (Database Security / Objects).
Если в случае с разрешёнными запросами думать особо не нужно, вы можете сами для себя решить, как GreenSQL должен реагировать на запросы, которые вы хотите заблокировать. В качестве вариантов предложены возвращение пустого результата запроса, закрытие соединения с базой данных или показ сообщения об ошибке SQL. Обычных пользователей меньше всего сбивает с толку пустой результат запроса.
В случае неавторизованных запросов GreenSQL возвращает пустой результат запроса, закрывает соединение с базой данных или выдает сообщение об ошибке |
GreenSQL в качестве IDS
GreenSQL может работать совместно с профилями риска, такими как IDS или IPS. Сами запросы не определяют, будет ли разрешён запрос, однако влияют на принимаемое действие. В зависимости от конфигурации, IDS может блокировать соединение с базой данных и уведомлять администратора о предполагаемой попытке вторжения.
Общее у IDS и IPS систем то, что они могут обнаруживать внедрение SQL-кода. Для этого они обращаются к базе данных известных схем атаки, созданной GreenSQL. Более того, все подозрительные запросы считаются внедрениями SQL-кода. Если же это ложная тревога, то вы помещаете запрос в группу запросов "Схемы Внедрений" (Injection Patterns) или же иную группу, запросы которой GreenSQL распознает как разрешённые.
Также в Безопасности Базы Данных (Database Secutiry) создаются различные профили риска. Данные профили не ограничиваются отдельными запросами, а могут соотноситься с такими операциями над базой данных, в которых задействованы серверы, безопасность или другие базы данных. Профили предусматривают запрос информации об активных процессах или логах, изменение пароля и увеличение прав доступа, вывод баз данных и таблицы, или же сбор информации по схемам базы данных.
Профили риска предоставляют администраторам более точно установить, какие операции с базам данных разрешить, а какие запретить |
Ведение истории и составление отчётов
GreenSQL может уведомлять администратора о различных событиях, например, изменение системных настроек, попытки вторжения или же нарушение правил файервола. Для включения данной функции необходимо установить соединение со списком контактов и SMTP-серверами в меню Оповещения (Alerts). Настроить уведомления так же легко, как и остальную часть файервола. Вдобавок к имени, вам нужно определить тип оповещения и временной интервал. К примеру, Системное оповещение (System) будет предупреждать вас о создании новых или же изменении уже существующих правил, Трафик (Traffic) - о заблокированных запросах, а Вторжение (Intrusion) - о всех запросах, чьё поведение похоже на попытку вторжения.
Так как сообщения быстро накапливаются, GreenSQL позволяет вам группировать их для отправки, и вот тут временной интервал вступает в игру: вместо того, чтобы отправлять по несколько сообщений подряд, данный параметр отправляет группу сообщений каждые несколько минут или даже часов. Если вы поставите "галочку" в пункте Подробно (Verbose), GreenSQL будет отправлять как оповещения, так и связанный с ним SQL запрос.
Благодаря расширенным возможностям ведения истории, вы можете быстро найти причину любой проблемы. В случае с системой библиотек Koha, у GreenSQL возникли проблемы с оператором
set autocommit = 1
что привело к закрытию Koha и появлению сообщения об ошибке. Решением оказалось просмотр лога и обучение GreenSQL соответствующему запросу. Существует два подхода к ручному обучению. Либо вы добавляете запрос с помощью Безопасность Базы Данных / Группы Запросов / Изученные Схемы / Создать Новую Схему (Database Security / Query Groups / Learned Patterns / Create New), либо Вы нажимаете на нужную запись в логе и добавляете схему в группу запросов.
GreenSQL не просто ведет историю трафика и попыток вторжения. Программа также выводит информацию об эффективности работы, системных событиях или же наиболее частых запросах. Кроме собственных log-файлов, при необходимости возможна отправка выбранных сообщений "Демону" системных логов, что позволит Вам просматривать их в системе мониторинга.
Тщательно разработанная функция составления отчётов предоставляет возможность удобной обработки информации из логов. Отчёты могут быть использованы для фиксирования улучшений либо помощи при принятии решений. В GreenSQL уже имеется много видов отчётов, так что администраторы могут сразу же узнать, какие запросы обрабатываются дольше всего, какие запросы чаще всего возникают либо же блокируются и с каких IP адресов совершается большинство попыток вторжения. Все отчёты могут быть конвертированы в формат PDF или Excel.
Как только GreenSQL настроен, вам захочется сделать резервную копию настроек. Это возможно с помощью соответствующих пунктов меню Система / Создание резервной копии и Восстановление (System / Backup & Restore). Пароль для резервной копии запрашивается один раз. Имеет смысл попробовать восстановить настройки сразу же после создания резервной копии, чтобы убедиться, что в пароле не было допущено никаких опечаток. Такая мера предосторожности поможет избежать неприятных сюрпризов в чрезвычайных ситуациях.
Выводы
SQL и внедрение кодов является одной из наиболее опасных уязвимостей веб-приложений (взгляните на список OWASP Top Ten 2013). GreenSQL позволяет администраторам эффективно защищать критически важные веб-приложения, которые (всё ещё) не были тщательно изучены на наличие уязвимостей.
GreenSQL также представлен во многих вариантах. Даже Express версия предоставляет хорошую базовую защиту, которая является достаточной для блога компании или же небольшого магазина. Коммерческие версии предлагают дополнительные функции, такие как оповещения и отчёты, отслеживание соединений с базой данных и скрытие личной информации.
GreenSQL легок в установке и введении в эксплуатацию. Детальное ведение записей может оказать помощь, если что-то неясно. Возможность автоматического обучения запросам избавляет администраторов от лишней работы и от возможности забыть о важных запросах, что с самого начала уменьшает количество проблем и жалоб пользователей. Разработчики изначально убедились в том, что только пользователи связанной с GreenSQL сети могут подключиться к его серверу. GreenSQL можно сделать доступным лишь с одного IP адреса или локального хоста без дальнейшего создания правил файервола. Аутентичность сервера помогают определять сертификаты.
Хотя GreenSQL и не может защитить от всех неопределённостей интернета, это полезное решение по обеспечению защиты, которое может покончить с атаками на уровне базы данных и внести значительный вклад в обеспечение безопасности на всём предприятии.
Фалько БЕНТИН (Falko Benthin),
Admin Magazine
http://www.kv.by/content/329222-zashchita-dannykh-ot-zloumyshlennikov-s-pomoshchyu-greensql