Атаки с 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)
Такая атака происходит в двух случаях:
- когда атакующие не могут провести атаку и собрать данные через один и тот же канал связи; или
- когда сервер работает слишком медленно или нестабильно, чтобы достичь нужного результата.
Последствия атак на основе 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-запросы, сравнивая их с объемными и регулярно обновляемыми списками сигнатур. Обычно сигнатуры в этом списке описывают специфические векторы атак. Такой список регулярно обновляется после обнаружения новых уязвимостей.
Другие продукты
- Антивирус Касперского
- Kaspersky Premium
- Бесплатная пробная версия Kaspersky Premium
- Kaspersky Internet Security
- Менеджер паролей для Iphone и Android
- Kaspersky Secure Connection
Статьи по теме: