Перехват SQL запросов SQlite 3 | Как перехватить запрос направляемый в БД - SearchInform

Перехват SQL запросов SQlite 3

Защита баз данных
с помощью системы

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

СУБД SQlite в версии 3 – небольшая встраиваемая программная оболочка, код которой находится в свободном доступе, с 2005 года, после получения престижной премии Google-O’Reilly Open Source Awards, стала одной из популярных. Из-за размеров и легкости использования ее часто применяют в разного рода комплексных продуктах, в том числе, в «1С:Предприятие». Неправомерный доступ к ней способен нарушить бизнес-процессы компании. Поэтому ее защита от SQL-инъекций становится крайне важной задачей, требующей системных и проверенных решений.

Понятие

SQL-запрос – это обращение из клиентского приложения к серверу, на котором расположена база данных, созданная на этом языке программирования. Таким обращением может быть заказ товара в интернет-магазине, обращение пользователя 1С за данными к расположенной на сервере системе, отправка студентом домашнего задания в предложенной для этого форме.

SQL-запрос используется для доступа к базе данных и управления ею. Это жестко структурированный набор инструкций – какие данные извлечь из таблиц, как и в какой последовательности представить.

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

Решения

Чаще всего программисты пытаются найти способ запретить писать запросы вручную, оставив только набор готовых решений. Но это нереализуемо для сложных баз данных, например, в рамках ERP- или CRM-систем. Также нереализуемо универсальное решение, которое выполнит все поставленные задачи. Набор правил, который будет выявлять только целевые атаки, а не ошибки пользователей, создать невозможно.

Существует два типа уязвимостей, которыми злоумышленники пользуются для введения неверного кода:

1. Обход решения.
2. Нечувствительность к порядку нолей в команде SELECT.

В небольших базах проблему решают с помощью словарей допустимых значений, благодаря которым выявляют и отклоняют недопустимые фразы. Для баз с большим количеством данных принцип словарей не подходит – работа по их созданию и доработке требует слишком много времени. Поэтому в больших БД используется синтаксический анализ.

Еще одно решение – создание теневой (дублирующей) базы данных, схожей по структуре с настоящей, к которой после перехвата будет отправлен перехваченный запрос, оказавшийся некорректным. Там он уничтожается, при этом системные администраторы могут проанализировать, кто и с какой целью направлял некорректные обращения.

Реализовать эту модель можно в фреймворке Django (Python-Django-JS-HTML-CSS). Решение повышает уровень безопасности информационной системы в целом:

  • защищает от межсайтового скриптинга;
  • защищает от подделки межсайтового обращения;
  • защищает от SQL-инъекций;
  • защищает от перехвата данных;
  • проверяет заголовок хоста.

Платформа также помогает решить проблему уязвимости при соединении с СУБД системных администраторов, имеющих допуск, но не имеющих достаточной квалификации для написания корректных обращений. К компрометации БД может привести ошибка пользователя с правами на модификацию или удаление данных. Эта задача частично решается перехватом всех запросов, в которых не используется команда SELECT.

Из более простых вариантов предлагается использовать:

  • фильтр, схожий с теми, которые нужны для блокировки спама. Он блокирует IP-адреса, с которых отправляются команды, схожие по признакам с инъекциями. «Черный список» адресов должен регулярно обновляться с учетом возможного использования динамических IP-адресов;
  • механизм подсчета количества инструкций в одной командной строке. Если больше, чем требуется, то обращение будет признано инъекцией и заблокируется. Например, разрешен только SELECT, а строка содержит также CREATE USER;
  • анализ частотности запросов. Например, если с одного IP-адреса разрешено отправлять только 100 обращений, а поступило 200, «лишние» заблокируются.

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


Контроль активности пользователей и анализ изменений в базах данных можно провести с помощью «СёрчИнформ Database Monitor». Бесплатный тест на 30 дней.  


 

25.08.2020

Подпишитесь на нашу рассылку и получите свод правил информационной безопасности для сотрудников в шуточных стишках-пирожках.