Что такое SQL-инъекция (язык структурированных запросов)

Mutt

Professional
Messages
1,057
Reputation
7
Reaction score
580
Points
113
Содержание статьи
  • Что такое SQL-инъекция
  • Что такое SQL-запросы
  • Типы SQL-инъекций
  • Пример SQL-инъекции
  • SQL-инъекция в сочетании с выполнением команд ОС: атака Accellion
  • Предотвращение и смягчение последствий SQLI
  • Добавление защиты, ориентированной на данные, для более глубокой защиты

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

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

При расчете потенциальной стоимости SQLi важно учитывать потерю доверия клиентов в случае кражи личной информации, такой как номера телефонов, адреса и данные кредитной карты.

Хотя этот вектор можно использовать для атаки на любую базу данных SQL, веб-сайты являются наиболее частыми целями.

Что такое SQL-запросы
SQL - это стандартизированный язык, используемый для доступа к базам данных и управления ими для создания настраиваемых представлений данных для каждого пользователя. Запросы SQL используются для выполнения таких команд, как получение данных, обновление и удаление записей. Эти задачи реализуются в различных элементах SQL, например в запросах с использованием оператора SELECT для извлечения данных на основе параметров, предоставленных пользователем.

Типичный запрос к базе данных SQL в интернет-магазине может выглядеть следующим образом:
Code:
SELECT ItemName, ItemDescription
FROM Item
WHERE ItemNumber = ItemNumber

Исходя из этого, веб-приложение строит строковый запрос, который отправляется в базу данных в виде одного оператора SQL:
Code:
sql_query= "
SELECT ItemName, ItemDescription
FROM Item
WHERE ItemNumber = " & Request.QueryString("ItemID")

Пользовательский ввод http://www.estore.com/items/items.asp?itemid=999 может затем сгенерировать следующий SQL-запрос:
Code:
SELECT ItemName, ItemDescription
FROM Item
WHERE ItemNumber = 999

Как вы можете понять из синтаксиса, этот запрос предоставляет имя и описание элемента номер 999.

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

Внутриполосный SQLi
Злоумышленник использует один и тот же канал связи для запуска своих атак и сбора результатов. Простота и эффективность внутриполосного SQLi делают его одним из наиболее распространенных типов атак SQLi. Есть два подварианта этого метода:
  • SQLi на основе ошибок - злоумышленник выполняет действия, заставляющие базу данных создавать сообщения об ошибках. Злоумышленник потенциально может использовать данные, предоставленные этими сообщениями об ошибках, для сбора информации о структуре базы данных.
  • SQLi на основе объединения - этот метод использует преимущество оператора UNION SQL, который объединяет несколько операторов выбора, сгенерированных базой данных, для получения одного ответа HTTP. Этот ответ может содержать данные, которые могут быть использованы злоумышленником.

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

Слепые SQL-инъекции основаны на реакции и поведенческих моделях сервера, поэтому они обычно медленнее выполняются, но могут быть столь же опасными. Слепые SQL-инъекции можно классифицировать следующим образом:
  • Boolean - этот злоумышленник отправляет SQL-запрос к базе данных, предлагая приложению вернуть результат. Результат будет зависеть от того, является ли запрос истинным или ложным. В зависимости от результата информация в HTTP-ответе изменится или останется неизменной. Затем злоумышленник может определить, было ли сообщение верным или ложным.
  • На основе времени - злоумышленник отправляет SQL-запрос к базе данных, что заставляет базу данных ждать (в течение периода в секундах), прежде чем она сможет отреагировать. Злоумышленник может видеть по времени, которое база данных требуется для ответа, является ли запрос истинным или ложным. В зависимости от результата ответ HTTP будет сгенерирован сразу или после периода ожидания. Таким образом, злоумышленник может определить, вернуло ли используемое им сообщение истину или ложь, не полагаясь на данные из базы данных.

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

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

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

Например, вышеупомянутый ввод, который извлекает информацию о конкретном продукте, может быть изменен на http://www.estore.com/items/items.asp?itemid=999 или 1 = 1 .

В результате соответствующий SQL-запрос выглядит так:
Code:
SELECT ItemName, ItemDescription
FROM Items
WHERE ItemNumber = 999 OR 1=1

А поскольку утверждение 1 = 1 всегда истинно, запрос возвращает все названия и описания продуктов в базе данных, даже те, к которым у вас может быть нет права доступа.

Злоумышленники также могут использовать неправильно отфильтрованные символы для изменения команд SQL, включая использование точки с запятой для разделения двух полей.

Например, это ввод http://www.estore.com/items/iteams.asp?itemid=999; DROP TABLE Пользователи могут сгенерировать следующий SQL-запрос:
Code:
SELECT ItemName, ItemDescription
FROM Items
WHERE ItemNumber = 999; DROP TABLE USERS

В результате может быть удалена вся база данных пользователей.

Другой способ обработки SQL-запросов - это оператор UNION SELECT. Это объединяет два несвязанных запроса SELECT для извлечения данных из разных таблиц базы данных.

Например, ввод http://www.estore.com/items/items.asp?itemid=999 UNION SELECT имя пользователя, пароль FROM USERS создает следующий SQL-запрос:
Code:
SELECT ItemName, ItemDescription
FROM Items
WHERE ItemID = '999' UNION SELECT Username, Password FROM Users;

Используя оператор UNION SELECT, этот запрос объединяет запрос имени и описания элемента 999 с другим, который извлекает имена и пароли для каждого пользователя в базе данных.

SQL-инъекция в сочетании с выполнением команд ОС: атака Accellion
Accellion, производитель File Transfer Appliance (FTA), сетевого устройства, широко используемого в организациях по всему миру для перемещения больших конфиденциальных файлов. Этому продукту более 20 лет, и срок его службы подошел к концу.

FTA стал объектом уникальной, очень изощренной атаки, сочетающей SQL-инъекцию с выполнением команд операционной системы. Эксперты предполагают, что атака Accellion была осуществлена хакерами, имеющими отношение к группе финансовых преступлений FIN11 и группе вымогателей Clop.

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

Кто пострадал от атаки?
Эксплойт Accellion представляет собой атаку на цепочку поставок, затрагивающую многочисленные организации, развернувшие устройство FTA. В их число входят Резервный банк Новой Зеландии, штата Вашингтон, Австралийская комиссия по ценным бумагам и инвестициям, телекоммуникационный гигант Singtel, производитель программного обеспечения безопасности Qualys, а также многие другие.

Поток Accelion Attack
Согласно отчету, заказанному Accellion, комбинация SQLi и атака выполнения команды работала следующим образом:
  1. Злоумышленники выполнили SQL-инъекцию, чтобы получить доступ к document_root.html, и получили ключи шифрования из базы данных Accellion FTA.
  2. Злоумышленники использовали ключи для генерации действительных токенов и использовали эти токены для получения доступа к дополнительным файлам.
  3. Злоумышленники воспользовались ошибкой выполнения команд операционной системы в файле sftp_account_edit.php, что позволило им выполнять свои собственные команды.
  4. Злоумышленники создали веб-оболочку по пути к серверу /home/seos/courier/oauth.api.
  5. Используя эту веб-оболочку, они загрузили на диск настраиваемую полнофункциональную веб-оболочку, которая включала в себя настраиваемые инструменты для эксфильтрации данных из системы Accellion. Исследователи назвали эту оболочку DEWMODE.
  6. Используя DEWMODE, злоумышленники извлекли список доступных файлов из базы данных MySQL в системе Accellion FTA и перечислили файлы и их метаданные на HTML-странице.
  7. Злоумышленники выполняли запросы на загрузку файлов, которые содержали запросы к компоненту DEWMODE с зашифрованными и закодированными параметрами URL.
  8. DEWMODE может принимать эти запросы, а затем удалять запросы на загрузку из веб-журналов FTA.
Это повышает профиль атак с использованием SQL-инъекций, показывая, как их можно использовать в качестве шлюза для гораздо более разрушительных атак на критически важную корпоративную инфраструктуру.

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

Первым шагом является проверка ввода (также известная как дезинфекция), которая представляет собой практику написания кода, который может идентифицировать незаконные вводимые пользователем данные.

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

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

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

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

Облачный WAF Imperva использует распознавание сигнатур, репутацию IP и другие методы безопасности для выявления и блокировки SQL-инъекций с минимальным количеством ложных срабатываний. Возможности WAF дополняются IncapRules - механизмом настраиваемых правил безопасности, который позволяет детально настраивать параметры безопасности по умолчанию и создавать дополнительные политики безопасности для конкретных случаев.

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

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

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

Безопасность базы данных - это последняя критически важная линия защиты от взлома, подобного SQLi. Уникальный подход Imperva к защите данных включает полное представление как веб-приложения, так и уровня данных.
 
Top