Почему SQL Injection — это самый опасный вид уязвимостей?
29 января 2018
Самый распространенный способ взлома сайтов и программ, работающих с базами данных, — SQL Injection. Чем же так опасна данная уязвимость?
SQL инъекция на данный момент является не только широко распространенной уязвимостью, а еще и одной из самых опасных по версии OWASP Top 10 Application Security Risks 2017. Попробуем разобраться почему.
Суть уязвимости — выполнение произвольного запроса к базе данных. Запрос может быть любым: на чтение, запись, модификацию и удаление каких-либо записей. Звучит катастрофично, не правда ли? А ведь этими угрозами все не ограничивается, так как при определённых обстоятельствах можно добраться и до чтения/записи локальных файлов или даже до выполнения кода! Все зависит от целей, которые преследует злоумышленник, от используемой системы и того, как она сконфигурирована.
Существует несколько типов SQL инъекций:
- Классическая SQL Injection — простая и легкая в эксплуатации. Позволяет злоумышленнику атаковать БД и сразу видеть результат атаки. В последнее время встречается нечасто.
- Error-based SQL Injection — чуть более сложный и затратный по времени тип атаки, позволяющий, на основе выводимых ошибок СУБД, получить информацию о всей БД и хранящиеся в ней данные. Эксплуатируется, если кто-то в спешке забыл отключить вывод ошибок.
- Boolean-based SQL Injection — одна из «слепых» инъекций. Суть атаки сводится к добавлению специального подзапроса в уязвимый параметр, на который БД будет отвечать либо True, либо, неожиданно, False. Атака не позволяет сразу вывести все данные БД «на экран» злоумышленнику, но позволяет, перебирая параметры раз за разом, получить содержимое БД, хотя для этого потребуется временной отрезок соизмеримый с содержимым БД .
- Time-based SQL Injection — следующая из «слепых» инъекций. В данном случае злоумышленник добавляет подзапрос, приводящий к замедлению или паузе работы БД при некоторых условиях. ), но, в зависимости от обстоятельств, чаще в БД хранится множество весьма критичных данных: учетные записи пользователей (включая пароли), номера телефонов, адреса электронной почты, а нередко номера карт, их сроки действия и прочие сопутствующие сведения.
Чем грозит? В первую очередь, репутационными потерями, ведь мало кто захочет пользоваться сервисом, из которого могут вытащить какую-либо информацию о нём. Ещё хуже, если пароли хэшировались слабыми алгоритмами, что потенциально приведет к их восстановлению. Как вы понимаете, это крайне негативно отразится на всем бизнесе. Нечто подобное случилось у компании Taringa (новость на thehackernews.com), где пароли хранились хэшированными алгоритмом MD5, который еще в 2011 году был признан устаревшим (RFC 6151). В результате около 94% были восстановлены в течение нескольких суток.
Deface
Про последствия deface’а, наверняка, слышал каждый. Некоторые, даже встречали разного рода «акции», выраженные в размещении рекламы на главных страницах зачастую немаленьких и известных организаций, настройку редиректов на «вирусные сайты», замену всей главной страницы каким-нибудь мемом, а иногда даже и угрозами. Такие манипуляции зачастую организованы как раз при помощи SQL Injection-атак.
Помимо столь грубых способов указать на проблемы безопасности, существуют более утонченные и элегантные. Например, долгое время предлагалась «услуга» по размещению номера телефона заказчика на сайте жертвы. То есть пользователь, заходя на сайт компании А, знакомился с описанием товаров и услуг, но звонил по подмененному номеру уже в компанию Б. И, что тоже немаловажно, такие «модификации» сайта замечаются далеко не сразу.Отдельно стоит упомянуть популярные в последнее время ICO. Почему? А потому что, если кто-нибудь заменит опубликованный в официальном источнике адрес кошелька, на который собираются средства, эти средства станут собираться уже на счете злоумышленника. Такие атаки были с успехом проведены несколько раз в прошлом году.
Отказ в обслуживании, пожалуй, одно из самых нелюбимых бизнесом событий. Причина этого проста: возникают простои в обслуживании клиентов, которые ведут как к потере репутации, так и к упущенной выгоде. DoS вызывается просто: либо база заполняется «мусорными» записями, либо, что гораздо опаснее, она просто удаляется. Второй случай особенно интересен, если по каким-либо причинам не делались (или не проверялись!) бэкапы.
Чтение системных файлов
Атака встречается весьма редко и работает только при некорректной настройке системы. Суть заключается в чтении системных файлов, в которых также указаны различные настройки, учётные записи и прочие чувствительные данные. Обычно подобные атаки применяются для углубления понимания атакуемой системы и намётывания дальнейших действий с целью получения доступа к ней.
Повышение привилегий
Некоторых нехороших пользователей по каким-то причинам может не устраивать тот факт, что они не являются администраторами в системах. С помощью SQL инъекции у таких пользователей появляется шанс исправить данную ситуацию. Так, например, в популярной CMS Joomla существовала возможность через инъекцию вытащить Cookie учётной записи администратора. Одним запросом, кстати говоря. А небезызвестная и распространённая MS SQL может предоставить даже несколько способов повысить привилегии (в зависимости от того, как сконфигурирована СУБД).
К чему это может привести? К большим проблемам, если кратко. Последующий сценарий подобной атаки может быть любым: это и все ранее перечисленные угрозы, и дополнительно, все действия, доступные администратору (может отличаться от системы к системе).
Повышение привилегий — одно из самых неприятных развитий событий, так как злоумышленник с правами администратора может доставить немало хлопот.Remote Code Execution (RCE)
Является, пожалуй, самым опасным вектором атаки, к счастью, нечасто встречающимся. Обычно выполняется с целью получения shell’а и, следовательно, контроля над сервером целиком.
Часто RCE осуществляется уже после атаки Privilege Escalation и из-за слабых настроек прав доступа в системе, но это происходит не всегда так. Для реализации атаки злоумышленник загружает файл-зловред и либо запускает его удалённо, либо сам одним из доступных образом «цепляется» к нему.
Какие последствия могут быть? Любые, включая все ранее перечисленные. Все опять же зависит от целей злоумышленника. Кто-то начинает использовать сервер для майнинга криптовалюты, кто-то может настроить репликацию БД на «свой» сервер, а кто-то просто пойдет дальше и постарается получить управление остальными серверами в локальной сети. Последствия могут быть самыми печальными.Как защититься?
Несмотря на всю серьёзность уязвимости, защита от атаки весьма проста: при разработке приложения необходимо уделить особое внимание фильтрации ввода и настройке прав. Обязательно отключайте вывод ошибок на «рабочей» системе, ни к чему пользователю такая чувствительная информация. И после каких-либо изменений в приложении проводить ASV-сканирования для гарантии. А в идеале, ввести данные действия в Software Development Life Cycle. Он же у вас уже есть, верно?
Используете готовое приложение? Всегда своевременно обновляйтесь. Часто это простое правило может уберечь от плачевных последствий.
Дополнительной мерой является установка Web Application Firewall (WAF) систем. Именно подобный класс решений заточен на борьбу с выше описанными атаками и, надо сказать, весьма хорош.
Хотите убедиться, что ваши системы надежно защищены? Или интересуетесь пилотом WAF? Обращайтесь, мы с радостью проведем аудит или поможем с тестом решения по защите от подобных атак.
Филипп Заболотный
Ведущий инженер, АкрибияFollow @AcribiaRu
Join channel
Другие публикации по теме
22 января 2018
О требованиях по безопасности значимых объектов критической информационной инфраструктуры
17 ноября 2017
Рекомендации по защите: Distributed DoS (DDoS)
27 августа 2017
Обзор решения: RedCheck
07 ноября 2017
Инструменты аналитика SOC для выявления инцидентов
Услуги
Акрибия: Центр оперативного мониторинга
Услуги
Акрибия: Поддержка и аутсорсинг
SQL-инъекция
Инъекция SQL — это уязвимость веб-безопасности, которая позволяет злоумышленнику вмешиваться в запросы, выполняемые скриптом в базе данных сайта. Как правило, злоумышленник может просматривать данные, которые не видны обычному пользователю сайта. Это могут быть данные, например, принадлежащие другим пользователям веб-ресурса, или любые другие данные базы данных сайта. Во многих случаях злоумышленник может изменить или удалить эти данные, что приводит к сбою скрипта сайта или изменениям содержимого страниц сайта.
В некоторых ситуациях злоумышленник может усилить атаку с использованием SQL-инъекции, чтобы поставить под угрозу сервер базы данных или другую внутреннюю инфраструктуру, или выполнить атаку типа «отказ в обслуживании» (DoS).
Успешная атака с использованием SQL-инъекций может привести к несанкционированному доступу к конфиденциальным данным, таким как: пароли, данные банковских карт или личные данные пользователей веб-ресурса. За последнее время большинство утечек данных стали результатом именно атак с использованием SQL-инъекций, что приводит к нанесению ущерба и подрыву репутации компаний. В некоторых случаях злоумышленник может получить постоянный бэкдор в системы организации, что приведет к долгосрочному компромиссу, который может оставаться незамеченным в течение длительного периода времени.
Существует множество уязвимостей, атак и методов внедрения SQL-кода, используемых злоумышленниками в разных случаях.
Распространенные примеры внедрения SQL
Получение скрытых данных, где злоумышленник может изменить запрос SQL для получения дополнительных результатов данных;
Подрыв логики работы скрипта веб-сайта, где злоумышленник может изменить запрос для нарушения работоспособности кода сайта;
UNION-атаки, где злоумышленник может получить данные из таблицы базы данных, например, логин и пароль;
Изучение базы данных, где злоумышленник может извлечь информацию о версии и структуре базы данных;
Слепое внедрение SQL — это когда результаты запроса к базе данных не возвращают ответ для корректной работы скрипта сайта.
Предотвращение внедрения SQL
Большинство случаев внедрения SQL можно предотвратить с помощью параметризованных запросов (подготовленные выражения), используя их вместо конкатенации строк в запросе.
Параметризованные запросы могут использоваться в любых случаях, когда ненадежный ввод отображается как данные в запросе, включая WHERE-предложение и значения в операторе INSERT или UPDATE. Их нельзя использовать для обработки ненадежного ввода в других частях запроса, таких как имена таблиц и столбцов или ORDER BY. Функциональные возможности скрипта, которые помещают ненадежные данные в эти части запроса, должны будут использовать другой подход, например, использование разрешенных входных значений белого списка или использование другой логики для обеспечения требуемого результата.
Чтобы параметризованный запрос был эффективен для предотвращения внедрения SQL, строка, которая используется в запросе, всегда должна быть жестко закодированной константой и никогда не должна содержать никаких переменных данных из любого источника. Не поддавайтесь искушению решать в каждом конкретном случае, является ли элемент данных надежным, и продолжайте использовать конкатенацию строк в запросе для случаев, которые считаются безопасными. Слишком легко ошибиться в отношении возможного происхождения данных или вносить изменения в другой код, предположив, что данные испорчены.
Как защитить сайт от SQL-инъекции посредством .
(.*)$ — [F,L] </IfModule> ВСЕ СТАТЬИ404: Страница не найдена
Качество программного обеспеченияСтраница, которую вы пытались открыть по этому адресу, похоже, не существует. Обычно это результат плохой или устаревшей ссылки. Мы извиняемся за любые неудобства.
Что я могу сделать сейчас?
Если вы впервые посещаете TechTarget, добро пожаловать! Извините за обстоятельства, при которых мы встречаемся. Вот куда вы можете пойти отсюда:
Поиск- Узнайте последние новости.
- Наша домашняя страница содержит последнюю информацию о качестве программного обеспечения.
- Наша страница «О нас» содержит дополнительную информацию о сайте, на котором вы находитесь, «Качество программного обеспечения».
- Если вам нужно, свяжитесь с нами, мы будем рады услышать от вас.
Просмотр по категории
Облачные вычисления
- Как работает маршрутизация на основе задержки в Amazon Route 53
- 4 рекомендации, чтобы избежать привязки к поставщику облачных услуг
Без надлежащего планирования организация может оказаться в ловушке отношений с облачным провайдером. Следуйте этим …
- Подходит ли вам облачная стратегия?
Стратегия, ориентированная на облачные технологии, имеет свои преимущества и недостатки. Узнайте, как избежать рисков и построить стратегию, которая …
Архитектура приложения
- Как выжить, когда царит развитие Waterfall
Несмотря ни на что, методология Waterfall поддерживает бесчисленное количество команд разработчиков программного обеспечения. …
- Необработанный, но растущий потенциал банковского обслуживания без ядра
Несмотря на то, что банковское дело без ядра все еще является новой концепцией, оно демонстрирует большой потенциал для освобождения банков от жестких программных систем, которые. ..
- Основы достижения высокой сплоченности и низкой связанности
Легко сказать «высокая сплоченность, низкая связанность», но так ли легко это реализовать на практике? Мы рассмотрим некоторые основы …
ITОперации
- Старейшина сервисной сетки Istio покидает Google и рекламирует Ambient Mesh
После 16 лет работы в Google соучредитель Istio становится техническим директором Solo.io и делает все возможное для проекта, который, по его мнению, определит…
Открытый исходный код имеет решающее значение для технологической отрасли, но почти половина специалистов по сопровождению работают бесплатно, и ситуация становится…
- Оператор Kubernetes и контроллер: в чем разница?
Операторы и контроллеры Kubernetes управляют ресурсами кластера, но играют разные роли в экосистеме Kubernetes. Исследуйте …
TheServerSide.com
- Как избежать выгорания удаленного инженера-программиста
Выгорание разработчика программного обеспечения реально. Вот несколько стратегий, которые программисты могут использовать, чтобы этого избежать.
- JavaScript против TypeScript: в чем разница? TypeScript и JavaScript — две дополняющие друг друга технологии, которые лежат в основе как клиентской, так и серверной разработки. Вот…
- Как применить принцип единой ответственности в Java
Как работает модель единой ответственности в программе Java? Здесь мы покажем вам, что означает этот принцип SOLID и как …
ПоискAWS
- AWS Control Tower стремится упростить управление несколькими учетными записями
Многие организации изо всех сил пытаются управлять своей огромной коллекцией учетных записей AWS, но Control Tower может помочь. Услуга автоматизирует…
- Разбираем модель ценообразования Amazon EKS
В модели ценообразования Amazon EKS есть несколько важных переменных. Покопайтесь в цифрах, чтобы убедиться, что вы развернули службу…
- Сравните EKS и самоуправляемый Kubernetes на AWS
Пользователи AWS сталкиваются с выбором при развертывании Kubernetes: запускать его самостоятельно на EC2 или позволить Amazon выполнять тяжелую работу с помощью EKS. См…
Что такое SQL-инъекция и как предотвратить SQL-инъекцию
В современном мире, где технологии процветают, становятся популярными методы веб-хакерства, особенно те, которые могут разрушить ваши приложения. Внедрение SQL — одна из таких техник, которая может атаковать приложения, управляемые данными. В этой статье вы узнаете, что такое SQL-инъекция и как SQL-инъекция использует вредоносные коды SQL для доступа к информации, которая может уничтожить вашу базу данных.
Что такое SQL-инъекция?
SQL Injection — это уязвимость на основе кода, которая позволяет злоумышленнику читать и получать доступ к конфиденциальным данным из базы данных. Злоумышленники могут обходить меры безопасности приложений и использовать SQL-запросы для изменения, добавления, обновления или удаления записей в базе данных. Успешная атака путем внедрения SQL-кода может серьезно повлиять на веб-сайты или веб-приложения, использующие реляционные базы данных, такие как MySQL, Oracle или SQL Server. В последние годы было много нарушений безопасности, вызванных атаками SQL-инъекций.
С этим базовым пониманием того, «что такое SQL-инъекция», вы теперь рассмотрите различные типы SQL-инъекций.
Типы SQL-инъекций
In-band SQLi — Злоумышленники используют один и тот же канал связи для запуска своих атак и сбора результатов.
Существует два распространенных типа внутриполосных внедрений SQL: внедрение SQL на основе ошибок и внедрение SQL на основе объединения.
- SQL-инъекция на основе ошибок. Злоумышленник выполняет определенные действия, которые приводят к тому, что база данных генерирует сообщения об ошибках. По сообщению об ошибке можно определить, какую базу данных она использует, версию сервера, на котором расположены обработчики и т. д.
- Внедрение SQL на основе объединения. Здесь оператор SQL UNION используется для объединения результатов двух или более операторов select, сгенерированных базой данных, для получения одного HTTP-ответа. Вы можете создавать свои запросы в URL-адресе или комбинировать несколько операторов в полях ввода и пытаться сгенерировать ответ.
Blind SQLi — здесь данные не передаются через веб-приложение. Злоумышленник не может видеть результат атаки внутри полосы.
- Внедрение SQL на основе логических значений. Злоумышленник отправляет SQL-запрос в базу данных, предлагая приложению вернуть разные результаты в зависимости от того, возвращает ли запрос значение True или False.
- SQL-инъекция на основе времени. В этой атаке злоумышленник отправляет SQL-запрос в базу данных, что заставляет базу данных ждать определенное время, прежде чем поделиться результатом. Время отклика помогает злоумышленнику решить, является ли запрос истинным или ложным.
Внедрение SQL из-за границы. Внедрение SQL из-за границы не так популярно, так как зависит от функций, которые включены на сервере базы данных, используемом веб-приложениями. Это может быть похоже на ошибку неправильной настройки администратором базы данных.
Теперь пришло время понять еще одну важную тему этой статьи под названием «Что такое SQL-инъекция», т. е. как предотвратить SQL-инъекцию?
Как работает SQL на веб-сайте?
Веб-сайт состоит из трех основных компонентов: внешнего интерфейса, внутреннего интерфейса и базы данных.
Внешний интерфейс веб-сайта разработан с использованием HTML, CSS и JavaScript. На бэкэнде у вас есть языки сценариев, такие как Python, PHP, Perl и т. д. На стороне сервера есть базы данных, такие как MySQL, Oracle и MS SQL Server, для выполнения запросов.
Когда вы пишете запрос, вы обычно отправляете запрос на получение на веб-сайт. Затем вы получаете ответ от веб-сайта с HTML-кодом.
Используя инструмент Postman API, вы можете тестировать ответы, которые вы получаете от различных веб-сайтов.
Демонстрация внедрения SQL
- Перейдите в Google Chrome или любой другой веб-браузер и выполните поиск неработающих веб-приложений owasp
- Нажмите на ссылку sourceforge.net
- Выберите параметр «Загрузить», чтобы загрузить OWASP Broken Web Applications Project 9.0010
Это приложение было разработано в рамках проекта Open Web Application Security Project, который периодически публикует 10 основных рисков, с которыми может столкнуться приложение в течение определенного года. У него есть коллекция уязвимых веб-приложений, которые распространяются на виртуальной машине.
В этом проекте есть встроенные уязвимости, позволяющие учащимся и профессионалам практиковать и развивать свои навыки работы с SQL-инъекциями.
Примечание. Выполнение SQL-инъекций в реальном мире на любом веб-сайте является незаконным.
- После загрузки виртуальной машины OWASP Broken Web Apps откройте ее на рабочей станции VMware.
- Вы можете увидеть IP-адрес машины. В данном случае это 192.168.71.132 .
- Используйте указанный выше IP-адрес и откройте его в браузере
Вы найдете обучающие приложения и реалистичные, намеренно уязвимые приложения.
Также можно найти старые версии реальных приложений и многое другое.
Для демонстрации вы будете использовать приложение OWASP Mutillidae II.
Слева вы можете увидеть 10 основных рисков OWASP за 2013, 2010 и 2007 годы.
Щелкните SQLi — Обход аутентификации > Войти
Вы перейдете на обычную страницу аутентификации при входе, которую может запросить любое приложение.
Предположим, вы вводите анонимный логин и пароль, что не позволит вам войти в систему.
Давайте напишем оператор SQL в имени пользователя и попробуем снова войти в систему.
- Мое имя пользователя будет: ‘ или 1=1 —
- Нажмите «Войти»
- Вы войдете в систему в это время с обновлением статуса, говорящим, что он аутентифицировал пользователя
Одинарная кавычка (‘) — это оператор, который обращается к серверу базы данных, выбирает пользовательские таблицы по умолчанию и сравнивает их с заданным условием. То условие, которое вы дали, было 1=1, что всегда верно. Итак, он выбрал пользовательскую таблицу по умолчанию, которая была доступна в базе данных, и вместо того, чтобы сравнить ее с паролем, он сравнил ее с условием.
Если вы зададите ложное условие, например 1=2, вы получите сообщение об ошибке «Учетная запись не существует».
Теперь, когда вы ознакомились с демонстрацией того, как можно использовать SQL-запрос для входа в приложение, давайте разберемся в последней теме этой статьи «Что такое SQL-инъекция».
Как предотвратить внедрение SQL?
- Использовать подготовленные операторы и параметризованные запросы. Параметризованные операторы обеспечивают безопасную обработку параметров, переданных в операторы SQL.
- Объектно-реляционное сопоставление. Большинство групп разработчиков предпочитают использовать инфраструктуры объектно-реляционного сопоставления для более плавного преобразования наборов результатов SQL в объекты кода.
- Экранирование входных данных — это простой способ защиты от большинства атак путем внедрения кода SQL. Многие языки имеют стандартные функции для достижения этой цели. Вы должны быть осторожны при использовании escape-символов в своей кодовой базе, где создается инструкция SQL.
Некоторые из других методов, используемых для предотвращения SQL-инъекций:
- Хэширование пароля
- Сторонняя аутентификация
- Брандмауэр веб-приложений
- Приобретите лучшее программное обеспечение
- Всегда обновлять и использовать исправления
- Непрерывно отслеживать операторы SQL и базу данных
Заключение
АтакиSQL Injection могут использовать базу данных организации и контролировать сервер базы данных за веб-приложением.