Перейти к основному разделу

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

SQL-инъекция – определение и описание

SQL-инъекция или SQLi – уязвимость, которая позволяет атакующему использовать фрагмент вредоносного кода на языке структурированных запросов (SQL) для манипулирования базой данных и получения доступа к потенциально ценной информации. Атаки на основе таких уязвимостей – одни из самых распространенных и опасных: они могут быть нацелены на любое веб-приложение или веб-сайт, которые взаимодействуют с базой данных SQL (а подавляющее большинство баз данных реализованы именно на SQL).

Как происходят атаки на основе SQL-инъекции?

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

SQL-запрос – это запрос, направленный в базу данных для выполнения определенной операции или функции, такой как извлечение данных или исполнение SQL-кода. Например, запрос может осуществлять передачу учетных данных пользователя через веб-форму для доступа к сайту. Обычно подобные веб-формы сконфигурированы таким образом, чтобы принимать только определенные типы данных, такие как имя пользователя и (или) пароль. Введенная информация сверяется с базой данных. Если все совпадает, пользователь сможет войти на сайт. А если нет – в доступе будет отказано.

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

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

Симптомы SQLi-атаки

Успешно проведенная атака с SQL-инъекцией может вообще никак себя не проявлять. Тем не менее иногда можно заметить следующие симптомы:

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

Типы SQL-инъекций

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

Внутриполосная атака (In-band SQLi) 

Это самый простой вид атаки для злоумышленников, так как для реализации атаки и сбора результатов используется один и тот же канал связи. Этот тип SQLi-атак разделяют на два подвида:

  • Атака на основе ошибок (Error-based SQLi). При такой атаке действия злоумышленника приводят к тому, что база данных генерирует сообщение об ошибке. На основе полученных сообщений об ошибках злоумышленник пытается сформировать представление об инфраструктуре базы данных.
  • Атака на основе объединения (Union-based SQLi). Атакующий получает необходимые данные путем объединения нескольких инструкций SELECT в единый ответ HTTP с помощью SQL-оператора UNION.

Инференциальная атака (Inferential SQLi, также известна как «слепая SQL-инъекция») 

При таких атаках злоумышленники изучают ответы и поведение сервера после отправки наборов данных, чтобы узнать больше о структуре базы данных. При этом никакие записи из базы данных веб-сайта не передаются злоумышленнику, и он не видит их в том же канале связи, как в случае внутриполосной атаки (этим и объясняется название «слепая SQL-инъекция»). Такие атаки разделяют на два подвида:

  • Слепая атака, основанная на времени (Time-based SQLi). Атакующие направляют SQL-запрос к базе данных, вынуждая ее сделать задержку на несколько секунд, прежде чем она подтвердит или опровергнет полученный запрос.
  • Булевая слепая атака (Boolean SQLi). Атакующие делают SQL-запрос к базе данных, ожидая получить результат в виде утвердительного или отрицательного ответа.

Внеполосная атака (Out-of-band SQLi) 

Такая атака происходит в двух случаях:

  • когда атакующие не могут провести атаку и собрать данные через один и тот же канал связи; или
  • когда сервер работает слишком медленно или нестабильно, чтобы достичь нужного результата.
Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

Последствия атак на основе SQL-инъекции

Успешная SQLi-атака может нанести серьезный ущерб бизнесу. SQL-инъекция может привести к следующим последствиям:

  • Раскрытие конфиденциальных данных. Атакующие могут заполучить конфиденциальную информацию, хранящуюся на SQL-сервере.
  • Компрометация целостности данных. Злоумышленники могут отредактировать или удалить информацию в вашей системе.
  • Нарушение приватности пользователей. В зависимости от того, какие данные хранятся на SQL-сервере, атака может привести к раскрытию конфиденциальных пользовательских данных – адресов, номеров телефонов и сведений банковских карт.
  • Получение злоумышленниками административного доступа к вашей системе. Если у пользователя базы данных есть привилегии администратора, с помощью вредоносного кода атакующий может заполучить доступ к системе.
  • Получение злоумышленниками общих прав доступа к вашей системе. Если для проверки имен пользователей и паролей применяются слишком простые SQL-команды, атакующий сможет заполучить доступ к вашей системе, даже не имея действующих учетных данных пользователя. После этого злоумышленник сможет добраться до конфиденциальной информации и изменить ее, создав большие проблемы для вашего бизнеса.

Ущерб от SQLi-атак не только финансовый. Успешная атака может привести к репутационным потерям и утрате доверия клиентов, если произойдет кража персональной информации – имен, адресов, телефонных номеров и данных кредитных карт. Вернуть доверие клиентов гораздо сложнее, чем его потерять.

Примеры SQL-инъекций

За годы существования этого класса уязвимостей от SQLi-атак пострадало множество организаций. Приведем некоторые громкие случаи:

Fortnite, 2019 г.Fortnite – это онлайн-игра с аудиторией, насчитывающей более 350 млн игроков. В 2019 году была обнаружена уязвимость для SQL-инъекции, которая позволила злоумышленникам получить доступ к пользовательским учетным записям. Уязвимость впоследствии закрыли.

Cisco, 2018 г.

В 2018 году была найдена уязвимость для SQL-инъекции в Cisco Prime License Manager. Брешь позволила атакующим заполучить доступ к командной оболочке систем, на которых был развернут диспетчер лицензий Cisco. Компания Cisco впоследствии закрыла эту уязвимость.

Tesla, 2014 г.

В 2014 году специалисты по кибербезопасности заявили об успешном взломе веб-сайта Tesla методом SQL-инъекции – им удалось получить административные привилегии и украсть пользовательские данные.

Вопросы и ответы об SQLi-атаках

Часто задаваемые вопросы об SQLi-атаках:

Что представляет собой атака на основе SQL-инъекции?

Атака на основе SQL-инъекции подразумевает внедрение вредоносного SQL-кода с целью манипулирования серверной базой данных и доступа к закрытой информации. Сюда могут относиться конфиденциальные данные компании, списки пользователей или сведения о клиентах. SQL – это аббревиатура от Structured Query Language (язык структурированных запросов). Иногда понятие «атака с применением SQL-инъекции» сокращают до SQLi.

Что происходит в процессе SQL-инъекции?

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

Насколько распространены атаки на основе SQL-инъекции?

Злоумышленники довольно часто прибегают к SQLi-атакам, ведь их относительно просто реализовать, а успешная атака может принести большую прибыль. Однозначной статистики на этот счет нет, но по усредненным оценкам, SQL-инъекции составляют основную часть атак на программные системы. По данным сообщества Open Web Application Security Project, атаки на основе внедрения кода, к которым также относится SQL-инъекция, являлись третьим по значимости риском безопасности для веб-приложений в 2021 году.

Как предотвратить атаку на основе SQL-инъекции?

Вот ключевые принципы, которые помогут компаниям защитить свои веб-сайты и веб-приложения от потенциальной SQL-инъекции:

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

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

Не забывайте об обновленияхДля максимальной защиты важно пользоваться самой последней версией вашей среды разработки, так как в старых версиях могут отсутствовать некоторые современные функции безопасности. Устанавливайте актуальные версии ПО и исправления безопасности сразу после их выпуска.

Проводите регулярные проверки веб-приложений

Пользуйтесь комплексными инструментами управления производительностью приложений. Регулярные проверки веб-приложений позволяют выявить и устранить потенциальные уязвимости до того, как они обернутся серьезными проблемами.

Используйте сетевой экранНередко для отсеивания SQLi-атак и прочих онлайн-угроз применяется сетевой экран веб-приложений (WAF). WAF фильтрует вредоносные SQL-запросы, сравнивая их с объемными и регулярно обновляемыми списками сигнатур. Обычно сигнатуры в этом списке описывают специфические векторы атак. Такой список регулярно обновляется после обнаружения новых уязвимостей.

Другие продукты

Статьи по теме:

Что такое SQL-инъекция? Определение и описание

SQL-инъекция (внедрение SQL-кода) позволяет злоумышленникам заполучить несанкционированный доступ к базам данных организации и нанести ей ущерб. Узнайте, что такое SQL-инъекция и как она работает.
Kaspersky Logo