Если есть что-то, что любят киберпреступники, так это данные. Украденные данные очень ценны на нелегальных рынках, а доступ к частным базам данных может быть отличным способом для злоумышленников получить прибыль от своих предприятий. Один из способов получить доступ к личным данным — это SQL-инъекция. Но что такое SQL-инъекция, как она работает и можно ли предотвратить такую атаку?
Что такое SQL-инъекция?
Программные программы полагаются на код для работы. Код — это также язык, который машины используют для выполнения операций, и он может принимать различные формы (Python, JavaScript, C++ и т. д.). Киберпреступники часто могут атаковать жертв с помощью кода, и SQL-инъекции (или SQLis) ничем не отличаются. Это позволяет злоумышленникам «внедрять» вредоносный код в оператор SQL.
Давайте сначала рассмотрим, что означает SQL.
SQL расшифровывается как язык структурированных запросов.
Это другой язык программирования специально используется при работе с базами данных. SQL, разработанный IBM в 1970-х годах, позволяет управлять, хранить и извлекать информацию из базы данных. Многие системы связи с базами данных по всему миру используют SQL, поэтому неудивительно, что злоумышленники придумали способы злоупотребления им для нападения на базы данных.Операторы SQL составляют ключевую часть взаимодействия с базой данных. Оператор SQL — это команда который приходит во многих различных формах. Некоторые изменяют данные, некоторые извлекают или удаляют их, а некоторые могут изменять структуру самой базы данных. Когда происходит SQL-инъекция, вредоносный код внедряется в инструкцию SQL.
Конечно, веб-сайт или приложение должны использовать язык программирования SQL, чтобы SQL-инъекция была возможной. Но как работает этот вектор атаки?
Допустим, у вас есть обычная строка кода, используемая приложением. Когда киберпреступник вводит вредоносную SQL-инъекцию, добавляется строка кода, которая может мешать запросам, которые само приложение отправляет в свою базу данных. Таким образом, базу данных можно использовать таким образом, чтобы субъект угрозы мог просматривать данные, к которым в противном случае у него не было бы доступа.
Отсюда киберпреступник может украсть данные, чтобы использовать их напрямую или продать его в даркнете или где-либо еще. Они также могут изменять, добавлять или удалять данные из целевой базы данных. В зависимости от степени атаки SQL-инъекцией может быть нанесен большой ущерб. При доступе к платежным реквизитам, номерам социального страхования или другим частным данным многие люди могут подвергнуться риску эксплуатации.
С другой стороны, если злоумышленнику удастся значительно изменить базу данных, большие объемы данных могут быть безвозвратно потеряны. В общем, SQL-инъекции могут уничтожить целые базы данных всего за одну атаку. Хотя они существуют с 1998 года, они по-прежнему актуальны и опасны в наши дни.
Как было установлено Открытый проект безопасности веб-приложений (OWASP), 274 000 случаев SQL-инъекций выявлено при тестировании приложений на наличие такой атаки в 2021 году.
Типы SQL-инъекций
Существует несколько различных видов SQL-инъекций, основными тремя из которых являются слепые, внутриполосные и внеполосные инъекции.
Слепая (или инференциальная) инъекция SQL происходит, когда приложение или сайт подвергается атаке со стороны инъекции, но предоставленные ответы HTTP (протокол передачи гипертекста) не содержат результат SQL-запрос. Другими словами, злоумышленнику не передаются никакие данные из атакуемой базы данных. Итак, какой в этом смысл?
Используя слепую инъекцию SQL, злоумышленник отправляет данные на целевой сервер, а затем может определить определенные сведения о базе данных по характеру самого HTTP-ответа. Кроме того, факторы, связанные с HTTP-ответом, могут помочь злоумышленнику создать еще одну, более эффективную SQL-инъекцию для доступа к базе данных.
Существует два основных типа слепых SQL-инъекций: основанные на времени и логические. Эти два варианта очень похожи по своей природе. Как логическая, так и основанная на времени SQL-инъекция отправляет массив вопросов с ответом «да» или «нет», хотя последний потребует от базы данных немного подождать, прежде чем ответить на запросы.
Далее идут внутриполосные SQL-инъекции. Внутриполосные SQL-инъекции позволяют оператору провести атаку и получить желаемый результат, используя тот же канал. Внутриполосные SQL-инъекции используются чаще всего просто потому, что их проще всего выполнять из-за того, что для них требуется только один канал.
Наконец, у вас есть внеполосная инъекция SQL. По сути, это альтернативная версия внутриполосной инъекции SQL, при которой злоумышленник не может провести атаку в целом, используя один единственный канал. В качестве альтернативы атаке может потребоваться внеплановая инъекция SQL, если целевой сервер просто недостаточно быстр для предоставления результатов.
Эти факторы немного усложняют процесс, а это означает, что он должен полагаться на определенные функции, чтобы быть активными в целевой базе данных для успеха. Например, на атакуемой платформе должна отсутствовать санация ввода. Из-за этого внутриполосные SQL-инъекции гораздо более распространены, чем внеполосные SQL-инъекции. Но они все же случаются.
Можно ли избежать SQL-инъекций?
SQL-инъекции больше беспокоят предприятия и организации, чем обычных людей. Но есть вещи, которые эти потенциальные цели могут сделать, чтобы снизить вероятность поражения такой атакой.
Очистка входных данных — ключевой распространенный метод предотвращения SQL-инъекций. Это процесс фильтрации, который сканирует и очищает ввод от опасных символов. Если код SQL обрабатывается до его очистки, вероятность SQL-инъекций естественным образом возрастает.
Кроме того, параметризованные запросы могут помочь вам избежать SQL-инъекций. Это запросы, для выполнения которых требуется хотя бы один параметр. Применение параметров усложняет киберпреступникам успешную атаку с внедрением SQL-кода.
Но нет надежного способа предотвратить SQL-инъекцию. Как и в случае со многими кибератаками, практически невозможно обеспечить полную герметичность ваших устройств и систем. Когда дело доходит до SQL-инъекций, лучшее, что вы можете сделать, — это очистить все входные данные и установить параметризованные запросы.
SQL-инъекции устарели, но все еще представляют угрозу
Хотя SQL-инъекции существуют уже более 20 лет, они по-прежнему представляют опасность для многих веб-сайтов и приложений. Поэтому рекомендуется помнить об этой форме атаки и предпринимать необходимые шаги, чтобы попытаться предотвратить ее, поскольку в какой-то момент в будущем она может представлять угрозу для ваших баз данных.