В данном материале речь пойдет о базовых понятиях SQL-инъекций, будут рассмотрены самые популярные типы уязвимостей, а также дана информация касательно того, как эффективней всего предотвратить ввод SQL-кода на сайте.
Основные причины использования SQL-инъекций
Базовые уязвимости внедрения SQL-инъекций появляются после того, как группа контролируемой пользователем информации небезопасным способом устанавливает подключение в запросы к базе данных.Хакер запросто может предоставить особый созданный ввод, для изъятия из контекста данных, в котором они отображаются, и мгновенно вмешаться внутрь структуры интересующего его запроса.
Процесс внедрения SQL-инъекций может сопровождаться выполнением некоторой очередности вредоносных атак, включая скрытое чтение или редактирование критически важных участков информации, несанкционированное вмешательство в логику функционирования приложения, повышение пользовательских привилегий в базе данных и, иногда, полноценного контроля над определенным сервером базы данных.
Самые распространенные примеры использования хакерами SQL-инъекций:
- Возможность получения персонального доступа к скрытым данным, где запросто можно внедрить SQL-запрос с целью получения дополнительной информации;
- Подрыв логики функционирования приложения, где запрос редактируется таким образом, что приложение более не может работать по традиционной и изначально запрограммированной логике;
- Выполнение UNION атак, в которых предоставляется возможность получение информации из разнообразных таблиц БД;
- Ознакомление с базами данных, из которых извлекается информация о версии и типе базы данных;
- Слепое использование SQL-инъекций, когда итог запроса не возвращается в ответах программы.
На примере UNION атаки можно разобраться с конкретным примером внедрения SQL-инъекций.
Подобный вид атаки допускается в тех случаях, когда итоги SQL-запроса возвращаются в ответах приложения.Хакер, применяя внедрение SQL-инъекций, запросто может получить дополнительную информацию из других таблиц внутри базы данных.
Оператор UNION позволяет пользователю успешно выполнить дополнительный запрос SELECT и быстро добавить итоги в тело исходного запроса.
К примеру, программа выполняет запрос на доступ к информации о текущих скидочных приложениях в разделе «Gifts»:
SELECT name, description FROM products WHERE category = ‘Gifts’
Хакер может запросто добавить дополнительный запрос для получения клиентских данных:
‘UNION SELECT username, password FROM users—
Сервер атакуемого приложения принимает запрос на обработку и отправляет внутрь базы данных вот такой сформированный запрос:
SELECT name, description FROM products WHERE category = ‘Gifts’ UNION SELECT username, password FROM users—
В конечном итоге хакер получит доступ не только к названию, но и r полному описанию наименования продукции, а также ему станет известна вся информация касательно имен и паролей пользователей сайта или веб-приложения.Какие есть способы тестирования ПО на SQL-инъекции?
Практически больше половины SQL-уязвимостей можно запросто найти с помощью разнообразных сканеров веб- уязвимостей (в современном IT-сообществе особой популярностью пользуются такие инструменты как OWASP и Burp Suite).
Использование SQL можно также обнаружить с помощью применения систематического набора тестов для каждой из точек входа приложения.
Традиционно, подобные действия включают в себя следующие шаги:
- возможность отправки символов одинарного значка » и процесс поиска ошибки или других сторонних аномалий;
- способ отправки определенной группы специфических для SQL запроса синтаксисов, которые могут оценивать изначальные значения точки входа и процесс поиска систематических различий в полученных ответах программы;
- оперирование логическими условиями, такими как OR1 = 1 и OR1 = 2, и нахождение разных результатов в ответах программы;
- процесс отправки полезной информации, которая, в первую очередь, предназначается для старта временных задержек при выполнении в теле запроса SQL, и нахождение разных отличий во времени, которое необходимо для получения ответа.
Вариации по защите от несанкционированных SQL-инъекций
Чтобы не сталкивается с подобными проблемами при подготовке к выпуску ПО, нужно придерживаться очень простых, но в то же время действенных правил.
Необходимо всего лишь постоянно мониторить данные внутри запроса несложным обработчиком. Также необходимо отделять информацию от команд и суммы запросов.Для этого используется один из следующих способов:
- Применение безопасного API, который позволяет исключать использование интерпретатора или предоставляющий полный параметризованный интерфейс. Также можно заручиться помощью инструментов объектно-реляционного отображения (ORM);
- Имплементация белых списков на сервер с необходимостью проверки всех входящих данных. Естественно, такой метод не сможет обеспечить клиенту полную защиту, так как некоторые приложения запросто могут использовать разнообразные специальные символы (к примеру, внутри текстовых областей или для нужд API внутри мобильных приложений);
- Возможность внедрения экранирования специальных символов для прочей части динамических запросов, применяя соответствующий интерпретатору синтаксис. Небольшое примечание: все элементы SQL архитектуры, а именно наименования таблиц или столбцов, невозможно экранировать, а значит, предоставляемые клиентам наименования могут представлять некоторую опасность. Это очень распространенная проблема для всех платформ с возможностью генерации информационных отчетов;
- Применение в теле запросов элементов управления SQL для потенциального предотвращения утечек информации.
Вместо заключения
Естественно, нет совершенно безопасных систем, остается лишь снижать вероятность потенциального взлома.
Чтобы предотвратить вредоносные SQL-инъекции, необходимо очень тщательно тестировать полученные от клиента параметры любыми доступными на сегодняшний день способами.Можно перед подготовкой к выпуску ПО попробовать собственноручно взломать сайт, чтобы наверняка понять, какие в нем могут быть системные уязвимости: ввести инъекцию, редактировать вид запроса, добавить некоторые специальные символы в поля экранирования, попробовать выгрузить в архив файлов сайта документы с вредоносным кодом и прочее (выполнить полноценные работы по тестированию безопасности ПО).
И помните, что лучше лишний раз потратить свое и время разработчика на поиск уязвимостей, чем позже исправлять то, что наделает злоумышленник.
Оставить комментарий