SQL-инъекция

редактировать

техника взлома компьютера Классификация векторов атак SQL-инъекций в 2010 Классификация атакующего вектора SQL-инъекции по состоянию на 2010 год.

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

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

В исследовании 2012 года было отмечено, что в среднем веб-приложение подвергалось 4 атакам в месяц, а розничные продавцы получали вдвое больше атак, чем другие отрасли.

Содержание

  • 1 История
  • 2 Форма
  • 3 Технические реализации
    • 3.1 Неправильно отфильтрованные escape-символы
    • 3.2 Слепое внедрение SQL
      • 3.2.1 Условные ответы
    • 3.3 Внедрение SQL второго порядка
  • 4 Устранение рисков
    • 4.1 Обнаружение
    • 4.2 Параметризованные операторы
      • 4.2.1 Обеспечение соблюдения на уровне кодирования
    • 4.3 Экранирование
    • 4.4 Проверка шаблона
    • 4.5 Разрешения базы данных
  • 5 Примеры
  • 6 В популярной культуре
  • 7 См. Также
  • 8 Ссылки
  • 9 Внешние ссылки

История

Первые публичные обсуждения внедрения SQL-кода начались примерно в 1998 году; например, статья 1998 года в Phrack Magazine.

Form

SQL-инъекция (SQLI) была признана одной из 10 основных уязвимостей веб-приложений в 2007 и 2010 годах по версии Open Web Application Security Проект. В 2013 году SQLI был признан атакой номер один в первой десятке OWASP. Существует четыре основных подкласса внедрения SQL:

  • SQL-инъекция + недостаточная аутентификация
  • SQL-инъекция + DDoS атаки
  • SQL-инъекция + перехват DNS
  • SQL-инъекция + XSS

Storm Worm - одно из представлений составного SQLI.

Эта классификация представляет состояние SQLI с учетом его эволюции до 2010 г. - ведется дальнейшее уточнение.

Технические реализации

Неправильно отфильтрованные escape-символы

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

Следующая строка кода иллюстрирует эту уязвимость:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

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

'OR' 1 '=' 1

или использование комментариев даже для блокировки остальной части запроса (существует три типа комментариев SQL). три строки имеют пробел в конце:

'OR' 1 '=' 1 '-' OR '1' = '1' {'OR' 1 '=' 1 '/ *

отображает один из следующих операторов SQL на родительском языке:

SELECT * FROM users WHERE name = '' OR '1' = '1';
SELECT * FROM users WHERE name = '' OR ' 1 '=' 1 '-';

Если бы этот код использовался в процедуре аутентификации, то этот пример можно было бы использовать для принудительного выбора каждого поля данных (*) от всех пользователей, а не от одного конкретного имени пользователя, как предполагал кодировщик, потому что оценка «1» = «1» всегда верна.

Следующее значение «userName» в приведенной ниже инструкции приведет к удалению таблицы «users», а также к выбору всех данных из таблицы «userinfo» (по сути, раскрывая информацию о каждом пользователе), используя API, который позволяет использовать несколько операторов:

a '; DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't

Этот ввод отображает окончательный оператор SQL следующим образом и указан:

SELECT * FROM users WHERE name =' a '; DROP TABLE users; ВЫБРАТЬ * ОТ userinfo WHERE 't' = 't';

В то время как большинство реализаций SQL-сервера позволяют выполнять несколько операторов с одним вызовом таким образом, некоторые API-интерфейсы SQL, такие как PHP mysql_query (), не позволяют этого для причины безопасности. Это не позволяет злоумышленникам вводить полностью отдельные запросы, но не мешает им изменять запросы.

Слепая SQL-инъекция

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

Условные ответы

Один тип слепой инъекции SQL заставляет базу данных оценивать логическое заявление на обычном экране приложения. Например, веб-сайт рецензии на книгу использует строку запроса , чтобы определить, какую рецензию на книгу отображать. Таким образом, URL https://books.example.com/review?id=5заставит сервер выполнить запрос

SELECT * FROM bookreviews WHERE ID = '5 ';

, из которого он будет заполнять страницу обзора данными из обзора с ID 5, хранящимися в таблице обзоры книг. Запрос полностью выполняется на сервере; пользователь не знает имен базы данных, таблицы или полей, а также не знает строку запроса. Пользователь видит только то, что указанный выше URL возвращает обзор книги. хакер может загрузить URL-адреса https://books.example.com/review?id=5 OR 1 = 1и https://books.example.com/review?id=5 AND 1 = 2, что может привести к запросам

SELECT * FROM bookreviews WHERE ID = '5' OR '1' = ' 1 '; ВЫБРАТЬ * ИЗ обзоров книг ГДЕ ID = '5' И '1' = '2';

соответственно. Если исходный обзор загружается с URL-адресом "1 = 1", а по URL-адресу "1 = 2" возвращается пустая страница или страница с ошибкой, а возвращенная страница не была создана для предупреждения пользователя о недопустимом вводе или другом Словом, был обнаружен входным тестовым сценарием, сайт, вероятно, уязвим для атаки с использованием SQL-инъекции, поскольку запрос, скорее всего, будет успешно пройден в обоих случаях. Хакер может продолжить эту строку запроса, предназначенную для выявления номера версии MySQL, запущенной на сервере: https://books.example.com/review?id=5 AND подстрока (@@ version, 1, INSTR (@@ version, '.') - 1) = 4, при котором будет отображаться обзор книги на сервере, на котором выполняется MySQL 4, и пустая страница или страница с ошибкой в ​​противном случае. Хакер может продолжать использовать код в строках запроса для непосредственного достижения своей цели или для получения дополнительной информации с сервера в надежде обнаружить еще один способ атаки.

SQL-инъекция второго порядка

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

Смягчение

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

Обнаружение

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

Параметризованные операторы

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

Легко сказать, использование параметризованных запросов может определенно предотвратить внедрение SQL. В основном это означает, что ваши переменные не являются строками запроса, которые могут принимать произвольные входные данные SQL, однако некоторые параметры данных типов определенно необходимы. Параметризованные запросы требуют от разработчика определения всего кода. Следовательно, без параметризованных запросов любой может ввести в поле любой код SQL и стереть базу данных. Но если бы параметры были установлены на '@username', то человек мог бы только ввести имя пользователя без какого-либо кода.

Применение на уровне кодирования

Использование объектно-реляционное сопоставление библиотек избавляет от необходимости писать код SQL. Фактическая библиотека ORM будет генерировать параметризованные операторы SQL из объектно-ориентированного кода.

Экранирование

Простым, хотя и подверженным ошибкам способом предотвращения инъекций является экранирование символов, которые имеют особое значение в SQL. В руководстве по СУБД SQL объясняется, какие символы имеют особое значение, что позволяет создать исчерпывающий черный список символов, требующих перевода. Например, каждое вхождение одинарной кавычки (') в параметре необходимо заменить двумя одинарными кавычками (' '), чтобы сформировать допустимый строковый литерал SQL. Например, в PHP параметры обычно экранируются с помощью функции mysqli_real_escape_string ();перед отправкой запроса SQL:

$ mysqli = new mysqli ('hostname', ' db_username ',' db_password ',' db_name '); $ query = sprintf ("ВЫБРАТЬ * ОТ ʻUsers` WHERE UserName = '% s' AND Password = '% s'", $ mysqli->real_escape_string ($ username), $ mysqli->real_escape_string ($ password)); $ mysqli->query ($ query);

Эта функция добавляет обратную косую черту к следующим символам: \ x00, \n, \r, \, ', "и \ x1a. Эта функция обычно используется для обеспечения безопасности данных перед отправкой запроса в MySQL.. PHP имеет аналогичные функции для других систем баз данных, таких как pg_escape_string () для PostgreSQL. Функция добавляет косые черты (строка $ str)работает для экранирования символов и особенно используется для запросов к базам данных, которые не имеют функций экранирования в PHP. Он возвращает строку с обратной косой чертой перед символами, которые необходимо экранировать в запросах к базе данных и т. Д. Это символы одинарной кавычки ('), двойной кавычки ("), обратной косой черты (\) и NUL (нулевой байт).. Обычно передача экранированных строк в SQL подвержена ошибкам, потому что легко забыть экранировать заданную строку. Создание прозрачного слоя для защиты ввода может уменьшить эту подверженность ошибкам, если не полностью устранить ее.

Проверка шаблона

Целочисленные, плавающие или логические строковые параметры могут быть проверены, если их значение является допустимым представлением для данного типа. Строки, которые должны следовать некоторому строгому шаблону (дата, UUID, только буквенно-цифровые и т. Д.), Могут быть проверены, если они соответствуют этому шаблону.

Разрешения базы данных

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

Например, на Microsoft SQL Serve r, вход в базу данных может быть ограничен выбором некоторых системных таблиц, что ограничит эксплойты, пытающиеся вставить JavaScript во все текстовые столбцы в базе данных.

запретить выбор sys.sysobjects для входа в веб-базу данных; запретить выбор sys.objects для входа в веб-базу данных; запретить выбор в sys.tables для webdatabaselogon; запретить выбор в sys.views для входа в веб-базу данных; запретить выбор в sys.packages для входа в веб-базу данных;

Примеры

  • В феврале 2002 года Джереми Джекс обнаружил, что Guess.com уязвим для атаки с использованием SQL-инъекции, что позволяет любому, кто может создать правильно созданный URL-адрес, получить 200 000+ имен, номеров кредитных карт и дат истечения срока действия. база данных клиентов сайта.
  • 1 ноября 2005 года хакер-подросток использовал SQL-инъекцию, чтобы проникнуть на сайт тайваньского журнала по информационной безопасности из группы Tech Target и украсть информацию клиентов.
  • 13 января 2006 г. российские компьютерные преступники взломали веб-сайт правительства штата Род-Айленд и якобы украли данные кредитных карт у лиц, которые вели дела в Интернете с государством.
  • 29 марта 2006 г. хакер обнаружил уязвимость SQL-инъекции на официальном правительственном сайте туризма.
  • На 29 июня 2007 г. компьютерный преступник взломал веб-сайт Microsoft UK с помощью SQL-инъекции. Веб-сайт Великобритании The Register процитировал представителя Microsoft , признающего наличие проблемы.
  • 19 сентября 2007 г. и 26 января 2009 г. турецкая хакерская группа "m0sted" использовала SQL-инъекцию использовать Microsoft SQL Server для взлома веб-серверов, принадлежащих McAlester Army Ammunition Plant и Инженерному корпусу армии США соответственно.
  • В январе 2008 года десятки тысяч Компьютеры были заражены в результате атаки с автоматическим внедрением SQL-кода, в которой использовалась уязвимость в коде приложения, использующего Microsoft SQL Server в качестве хранилища базы данных.
  • В июле 2008 года Kaspersky ' s Малазийский сайт был взломан группой хакеров "m0sted" с использованием SQL-инъекции.
  • 13 апреля 2008 г. Реестр сексуальных и жестоких преступников из Оклахома закрыла свой веб-сайт для «планового обслуживания » после того, как узнала, что 10 597 номеров социального страхования, принадлежащих сексуальным преступникам, были загружены с помощью SQL-инъекции. а ttack
  • В мае 2008 г. серверная ферма в Китае использовала автоматические запросы к поисковой системе Google для идентификации SQL-сервера веб-сайты, которые были уязвимы для атаки автоматического инструмента SQL-инъекции.
  • В 2008 году, по крайней мере с апреля по август, началась серия атак, использующих уязвимости SQL-инъекций веб-сервера Microsoft IIS и сервер базы данных SQL Server. Атака не требует угадывания имени таблицы или столбца и повреждает все текстовые столбцы во всех таблицах за один запрос. Строка HTML, которая ссылается на файл вредоносной программы JavaScript, добавляется к каждому значению. Когда это значение базы данных позже отображается посетителю веб-сайта, сценарий пытается несколькими способами получить контроль над системой посетителя. Количество использованных веб-страниц оценивается в 500 000.
  • 17 августа 2009 года Министерство юстиции США предъявило обвинение американскому гражданину Альберту Гонсалесу и двое неназванных россиян с кражей 130 миллионов номеров кредитных карт с помощью SQL-инъекции. Сообщается, что в «самом крупном деле кражи личных данных в американской истории», мужчина украл карты у ряда корпоративных жертв после исследования их систем обработки платежей. Среди пострадавших компаний были процессор кредитных карт Heartland Payment Systems, сеть круглосуточных магазинов 7 ‑ Eleven и сеть супермаркетов Hannaford Brothers.
  • . В декабре 2009 года злоумышленник взломал RockYou база данных открытого текста, содержащая незашифрованные имена пользователей и пароли около 32 миллионов пользователей, использующих атаку с использованием SQL-инъекции.
  • В июле 2010 года южноамериканский исследователь безопасности, проходивший мимо дескриптор "Ch Russo" получил конфиденциальную информацию о пользователе с популярного сайта BitTorrent The Pirate Bay. Он получил доступ к административной панели управления сайта и воспользовался уязвимостью SQL-инъекции, которая позволила ему собрать информацию об учетной записи пользователя, включая IP-адреса, MD5 хэши паролей и записи торрентов, загруженных отдельными пользователями.
  • С 24 по 26 июля 2010 г. злоумышленники из Японии и Китая использовали SQL-инъекцию для получения доступа к клиентским ресурсам. данные кредитной карты Neo Beat, компании из Осаки, которая управляет большим сайтом онлайн-супермаркета. Атака также затронула семь деловых партнеров, включая сети супермаркетов Izumiya Co, Maruetsu Inc и Ryukyu Jusco Co. Кража данных затронула 12 191 покупателя. По состоянию на 14 августа 2010 г. сообщалось, что было зарегистрировано более 300 случаев использования информации о кредитных картах третьими сторонами для покупки товаров и услуг в Китае.
  • 19 сентября во время шведской конференции 2010 г. всеобщие выборы избиратель попытался ввести код, написав вручную команды SQL в рамках write‑in vote.
  • 8 ноября 2010 г. Королевский флот Великобритании веб-сайт был взломан румынским хакером по имени TinKode с использованием SQL-инъекции.
  • 5 февраля 2011 г. HBGary, фирма, занимающаяся технологической безопасностью, была взломана LulzSec используя SQL-инъекцию на своем веб-сайте, управляемом CMS
  • 27 марта 2011 г. www.mysql.com, официальная домашняя страница MySQL, была взломана хакером, использовавшим слепую SQL-инъекцию
  • 11 апреля 2011 года Barracuda Networks была взломана с использованием уязвимости SQL-инъекции. Адреса электронной почты и имена пользователей были среди полученной информации.
  • В течение 4 часов 27 апреля 2011 года на Broadband Reports <26 произошла автоматическая атака с использованием SQL-инъекции.>веб-сайт, который смог извлечь 8% пар имени пользователя и пароля: 8 000 случайных учетных записей из 9 000 активных и 90 000 старых или неактивных учетных записей.
  • 1 июня 2011 г. "хактивисты "из группы LulzSec были обвинены в использовании SQLI для кражи купонов, ключей загрузки и паролей, которые хранились в виде открытого текста на веб-сайте Sony для доступа к личная информация миллиона пользователей.
  • В июне 2011 года PBS был взломан LulzSec, скорее всего, с помощью SQL-инъекции; весь процесс, используемый хакерами для выполнения SQL-инъекций, был описан в этом Imperva блоге.
  • В мае 2012 года веб-сайт Wurm Online, массово многопользовательская онлайн-игра была отключена из-за SQL-инъекции во время обновления сайта.
  • В июле 2012 года сообщалось, что группа хакеров украла 450 000 учетных данных для входа с Yahoo!. Логины хранились в виде обычного текста и предположительно были взяты из поддомена Yahoo , Yahoo! Голоса. Группа взломала систему безопасности Yahoo, используя «технику SQL-инъекции на основе union ».
  • 1 октября 2012 года хакерская группа под названием «Team GhostShell» опубликовала личные записи студентов, преподаватели, сотрудники и выпускники из 53 университетов, включая Гарвард, Принстон, Стэнфорд, Корнелл, Джонс Хопкинс и Цюрихский университет на pastebin.com. Хакеры утверждали, что они пытались «привлечь внимание к изменениям, произошедшим в сегодняшнем образовании», оплакивая изменение законодательства об образовании в Европе и повышение платы за обучение в США.
  • В феврале 2013 года группа мальдивских хакеров, взломал веб-сайт «ООН-Мальдивы» с помощью SQL-инъекции.
  • 27 июня 2013 года хакерская группа «RedHack » взломала сайт администрации Стамбула. Они утверждали, что смогли списать долги людей перед компаниями за воду, газ, Интернет, электричество и телефонную связь. Кроме того, они опубликовали имя пользователя и пароль администратора, чтобы другие граждане могли войти в систему и погасить свои долги рано утром. Они объявили новости из Твиттера.
  • 4 ноября 2013 года группа хактивистов «RaptorSwag» якобы взломала 71 правительственную базу данных Китая с помощью атаки SQL-инъекции на Китайскую международную торговую палату. Утечка данных была публично опубликована в сотрудничестве с Anonymous.
  • 2 февраля 2014 г. на AVS TV произошла утечка 40 000 учетных записей хакерской группой под названием @deletesec
  • 21 февраля 2014 г., Интернет Организации Объединенных Наций На Governance Forum просочилась информация об аккаунте 3215.
  • 21 февраля 2014 года хакеры из группы под названием @deletesec взломали Spirol International после того, как якобы пригрозили арестовать хакеров за сообщение об уязвимости системы безопасности. В ходе этого конфликта было раскрыто 70 000 пользовательских данных.
  • 7 марта 2014 г. официальные лица Университета Джона Хопкинса публично объявили, что их серверы биомедицинской инженерии стали жертвой атаки с использованием SQL-инъекции, осуществленной анонимным хакером по имени «Хуки». "и присоединился к группе хактивистов" RaptorSwag ". Хакеры взломали личные данные 878 студентов и сотрудников, разместив пресс-релиз и утечки данных в Интернете.
  • В августе 2014 года Милуоки - компьютерная безопасность. Компания Hold Security заявила, что раскрыла кражу конфиденциальной информации с почти 420 000 веб-сайтов с помощью SQL-инъекций. The New York Times подтвердила этот вывод, наняв эксперта по безопасности для проверки иска.
  • В октябре 2015 года была использована атака с использованием SQL-инъекции для кражи личных данных 156 959 клиентов с серверов британской телекоммуникационной компании TalkTalk, используя уязвимость на устаревшем веб-портале.
  • В августе 2020 года атака с использованием SQL-инъекции была использована для доступа к информации о романтических интересах многих Стэнфордских студентов из-за небезопасных стандартов очистки данных со стороны Link, стартапа, основанного на территории кампуса..

В популярной культуре

  • Несанкционированный вход на веб-сайты с помощью SQL-инъекций на составляет основу одного из сюжетов в J.K. Роман Роулинг 2012 года Случайная вакансия.
  • В мультфильме xkcd фигурирует персонаж Роберт '); DROP TABLE студенты; - названы для выполнения SQL-инъекции. В результате этого карикатуры SQL-инъекцию иногда неофициально называют «Таблицы Бобби».
  • В 2014 году человек в Польше юридически переименовал свой бизнес в Dariusz Jakubowski x '; Пользователи DROP TABLE; SELECT '1 в попытке нарушить работу ботов, собирающих спамеры .
  • В игре 2015 года Hacknet есть программа взлома под названием SQL_MemCorrupt. Он описывается как внедрение записи таблицы, которая вызывает ошибку повреждения в базе данных SQL, затем запрашивает указанную таблицу, вызывая сбой базы данных SQL и дамп ядра.
  • В 2019 Star Trek: Discovery Эпизод «Если память не отменяет» Командир Айриам обнаружила, что зонд, атаковавший хранилище данных на одном из корабельных шаттлов, сделал ряд SQL-инъекций, но она не смогла найти никаких скомпрометированных файлов.

См. также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-06 04:10:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте