Приложения и сайты сегодня зачастую используют базы данных на основе SQL-языка. С помощью него веб-приложение формирует запрос-обращение к необходимой странице и ищет в базе нужную информацию.
Именно из-за распространенности SQL-языка SQL-инъекция или внедрение SQL-кода один из самых популярных способов атаки на сайты, программы и приложения, которые работают с базами данных. Внедрение такой уязвимости дает преступнику возможность вмешиваться в запросы программы к своим базам данных.
Сергей Полунин
Руководитель группы защиты инфраструктурных ИТ компании «Газинформсервис»
SQL-инъекция – это атака, которая базируется на внедрении произвольного SQL-кода в легитимный запрос к базе данных. Например, у вас есть веб-приложение – интернет-магазин, где в базе данных хранится информация о товарах. Выбирая на сайте нужный товар, вы складываете его в корзину, а логика сайта подсчитывает общую стоимость. Если нарушить взаимодействие приложения с базой данных, изменяя запросы к этой базе, можно, например, изменить стоимость товаров в корзине.
Злоумышленник с помощью внедрение SQL-кода получает возможность вносить изменения, добавлять и удалять данные. Помимо этого, хакер может получить доступ к паролям и другой конфиденциальной информации, а также вносить изменения в команды ресурса, который атакует.
Традиционно принято выделять 3 вида инъекций-SQL: классическая SQL-Injection, слепая SQL-Injection и out-of-band-Injection (атака, осуществляемая только путем превышения емкости сокета, открытого между клиентом и сервером). Каждая из них делится на подтипы, также атаки при помощи SQL-инъекции бывают смешанные.
SQL-Injection делят по способам эксплуатации:
У разных систем управления базами данных есть свои тонкости в реализации каждого вида атак. Эксперты отмечают, что типовые атаки обычно срабатывают, если есть уязвимости в самих веб-приложениях. Для того чтобы защититься от атаки или снизить ее эффективность, прежде всего необходимо понять, что произошла атака именно на основе SQL-инъекции.
Внедрение SQLi в веб-приложение имеет следующие признаки:
Кроме того, определить, что на ваш ресурс совершена SQL-атака можно по увеличению нагрузки на него. Перегрузка сервера в результате аномально большого количества запросов к базе данных может тоже говорить о том, что была сделана SQL-инъекция.
Независимо от вида и способа атаки защититься от SQL-инъекции полностью нельзя Всегда есть риск попасть под такую атаку. Но больше всего рискуют те, у кого в системе уже есть уязвимости. С хорошей системой безопасности и придерживаясь определенных правил SQL-атаку можно предотвратить или затруднить ее проведение.
Евгений Андрюхин
Специалист по тестированию на проникновение Awillix
Атаку на основе SQL-инъекции не предотвратить на 100%, это как Чеховское ружье. Если кто-то написал include <sqllite.h>, значит оно рано или поздно выстрелит, как и любой third-party продукт. Поэтому надо ревьюить патчи, делать taint-анализ потоков данных, закупать WAF и локальные анализаторы поведения хостов. И всё равно вам это не поможет, но вы хотя бы отловите 1-day скрипты, которые используют тупые методы форкования типа runtime.exec("cmd.exe -c 'net user Vasyan 1q2w3e4f /add'").
Чтобы предотвратить атаку на основе SQL-инъекции или затруднить ее проведение, необходимо:
Основная идея предотвращения атаки на основе SQL-инъекции заключается в том, чтобы фильтровать то, что веб-приложение пересылается в систему управления базами данных. Запросы должны быть строго формализированы и грамотно ограничены. Плюс очень полезным оказывается использование специализированный межсетевых экранов уровня приложений – Web application firewall. Они как раз предназначены для защиты от различных типов атак на веб-приложения, в том числе и инъекции. Как правило, они уже содержат сигнатуры для типовых способов эксплуатации этой уязвимости.
Так как большинство веб-приложений использует SQL-язык, количество громких примеров кибератак на основе SQL-инъекций достаточно. Часто этот вид атак используют в комплексе с другими. Так, в 2013-2014 годах Yahoo столкнулся с серией атак, включая SQL-инъекции, в результате чего были украдены личные данные более чем 3 миллиардов пользователей.
Антон Кузнецов
Ведущий инженер информационной безопасности R-Vision
Один из ярких примеров применения SQL-инъекций – атаки, нацеленные на сайты под управлением WordPress. В прошлом году самым громким случаем стало наличие SQL-уязвимости у более чем 500 тысяч сайтов на базе этой платформы, в этом году уязвимыми оказались уже 70 тысяч сайтов. Еще один из громких примеров – в 2017 году компания Equifax, крупнейший кредитный бюро в США, была подвергнута масштабной кибератаке, в результате которой были скомпрометированы данные более чем 140 миллионов человек. Один из методов атаки была SQL-инъекция, которая позволила хакерам получить доступ к базе данных компании.
В 2015 году TalkTalk, британский провайдер интернет-услуг, был атакован злоумышленниками, которые использовали SQL-инъекцию. В результате были украдены личные данные более чем 150 000 клиентов, включая данные банковских карт.
Евгений Андрюхин
Специалист по тестированию на проникновение Awillix
SQL-инъекция интересна сама по себе в силу обширности своего применения. Сложно представить себе условия, в которых не было бы использования баз данных. Традиционно принято начинать поиск SQL-инъекций в веб-приложениях – есть огромное количество историй с названием «SQL to RCE». Даже будучи одной из самых изученных проблем, SQL-Injection до сих пор часто встречается в Security Bullet-in'ах серьезных продуктов. Одна из самых больших проблем это возможность адаптации атаки под конкретный продукт с целью обхода WAF.
В 2007 году произошел The Little Bobby Tables incident. Была опубликована статья в блоге xkcd, в которой описывалась SQL-инъекция, которая могла бы произойти, если бы у пользователя было имя «Robert»); DROP TABLE Students;--". Этот пример стал очень популярным и даже получил свою собственную страницу в документации SQLite.
Как и от любой другой сетевой атаки, защититься от нападения на основе SQL-инъекций на 100% невозможно. Никто не может гарантировать полную безопасность, но можно проследить за наличием уязвимостей в своей системе.
С помощью набора инструментов кибербезопасности, соблюдения необходимых правил и постоянного тестирования своей системы, проведения проверок на SQLi, можно добиться определенных результатов и свести вероятность SQL-инъекции к минимуму.
Нажимая на кнопку, я даю Согласие на обработку персональных данных в соответствии с Политикой обработки.
Зарегистрироваться