Слепая инъекция SQL — это тип инъекции SQL, при котором злоумышленник не может понять, как «думают» наши веб-приложения.

Одной из основных проблем в мире баз данных является SQL-инъекция — она распространена до такой степени, что даже OWASP постоянно называет ее угрозой №1 для веб-приложений. SQL-инъекция может иметь много типов, и один из этих типов — слепая SQL-инъекция — в этой статье мы рассмотрим, насколько опасной может быть такая атака.

Что такое SQL-инъекция? Каковы его категории?

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

Категории SQL-инъекций очень важно понимать по нескольким ключевым причинам:

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

SQL-инъекция имеет несколько категорий:

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

Царство слепых SQL-инъекций

Думайте о своем приложении как о замке. Мы знаем, это может показаться немного странным, но потерпите. Теперь представьте ваше веб-приложение в виде замка. Сделанный? Хорошо, представьте, что на него нападает кучка слепых солдат с копьями, и их копья часто не попадают в укрепленную оборону замка. Как вы думаете, сколько времени осталось слепым воинам с копьями, чтобы покончить с обороной вашего замка? Это займет некоторое время, но солдаты в конце концов пройдут. Это правда — и как только солдаты пройдут, сокровища, которые вы храните в своем замке (данные внутри ваших веб-приложений), станут кактусами — они украдут все.

Солдаты хорошо экипированы, и даже несмотря на то, что они слепы, они в конечном итоге прорвут вашу оборону — о нет! Примерно так работает слепая SQL-инъекция в реальном мире, поэтому давайте приведем еще один пример:

  1. Злоумышленник обнаруживает, что ваше веб-приложение уязвимо для скрытой формы SQL-инъекции, добавляя одинарную кавычку после определенного параметра, — тогда ваше веб-приложение возвращает ошибку.
  2. Злоумышленник продолжает создавать SQL-запросы — ни один из них не возвращает ошибку. Однако он быстро обнаруживает, что если он выполняет один тип запроса, данные внутри вашего веб-приложения отображаются на экране, после выполнения другого — данные исчезают. «Ага!», — думает злоумышленник. "Попался. У меня ошибка слепой SQL-инъекции».

Как вы, возможно, уже заметили, слепая инъекция SQL — это такая атака, которая задает базе данных «вопросы» в виде запросов и пытается определить, верны они или нет, на основе ответа веб-приложения. Слепая инъекция SQL чаще всего обнаруживается при выполнении таких запросов:

Если веб-приложение возвращает «положительный» ответ (имеется в виду, что оно возвращает видимую разницу на веб-странице), веб-приложение подвержено такой атаке, а если приложение безразлично, то, вероятно, нет. В первом сценарии злоумышленник узнает, что что-то не так с вашей базой данных, и попытается еще больше проникнуть в вашу защиту. Итак, игра начинается — злоумышленник пытается заметить, какие ответы готово вернуть ваше веб-приложение. Запрос возвращает страницу с результатами — ОК, он исследует дальше, запрос возвращает пустую страницу — хммм… он меняет запрос и пытается снова. И так игра продолжается до тех пор, пока из вашей базы данных не будут извлечены все данные, интересующие гнусную сторону. Да, такие запросы будут занимать много времени (и это одна из вещей, которыми в основном известны слепые SQL-инъекции), но имейте в виду, что время, как бы печально оно ни было, вероятно, выиграно. не останавливайте злоумышленника, который стремится нанести как можно больший вред вашим системам или украсть все ваши данные.

Некоторые веб-приложения могут даже фильтровать части в параметрах GET или POST, что означает, что они могут поймать используемые одинарные или двойные кавычки, но это только одна часть головоломки. Такая функция часто является частью функциональности брандмауэра веб-приложений — мы уже обсуждали WAF (сокращение от брандмауэров веб-приложений) в другой нашей статье, поэтому мы не будем вдаваться в подробности, но продолжим. Имейте в виду, что брандмауэры веб-приложений отражают все виды атак, начиная от отказа в обслуживании и заканчивая, как вы уже догадались, SQL-инъекцией. Вы можете найти живой пример брандмауэра веб-приложений, посетив веб-сайт одной из самых больших и быстрых поисковых систем для взлома данных в мире — BreachDirectory — но пока давайте вернемся к теме.

Типы слепых SQL-инъекций

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

Защита от слепых SQL-инъекций

Защита от слепого типа SQL-инъекции, вопреки распространенному мнению, не требует особых навыков и усилий — ее можно предотвратить с помощью элементарных мер безопасности. Да как же все просто! Мы можем добиться этого, используя подготовленные объекты данных (PDO) в PHP (они разделяют ввод, предоставленный пользователем, и остальную часть запроса, поэтому любое внедрение SQL невозможно), используя решения для автоматизированного тестирования, которые сообщают нам, или наше приложение не восприимчиво к SQLi, или, конечно, использование элементов управления безопасностью из белого списка — мы, как разработчики, должны иметь привычку фильтровать и очищать каждый вид параметра, который так или иначе взаимодействует с нашими данными. Делая это, мы можем вывести наши веб-приложения на следующий уровень безопасности, защищая как от всех видов атак с внедрением SQL, так и от других типов проблем безопасности.

Как только мы переведем наши веб-приложения на следующий уровень безопасности, мы должны позаботиться и о безопасности наших собственных учетных записей — мы можем запустить поиск через BreachDirectory, чтобы увидеть, не подвергается ли какая-либо из наших учетных записей риску, и действовать в соответствии с советы, данные нам. Как только мы это сделаем, наши учетные записи также должны быть в безопасности. Победить — победить!

Краткое содержание

Слепое внедрение SQL — это тип внедрения SQL, при котором злоумышленник не может понять, как «думают» наши веб-приложения, поэтому вместо этого ему приходится полагаться на вывод, который дает нам веб-приложение, или полагаться на время, в зависимости от того, какой метод (логический или по времени) используется. Полагаясь на внедрение SQL на основе логических значений, злоумышленник рассчитывает на тот факт, что веб-приложение может выглядеть иначе, чем обычно, в то время как при использовании внедрения SQL на основе времени злоумышленник в значительной степени полагается на время.

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

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

Кроме того, не забудьте выполнить поиск в известных поисковых системах утечки данных, таких как BreachDirectory, чтобы убедиться, что ваши данные в безопасности как днем, так и ночью и до следующего раза. Увидимся в следующем блоге!

Want to Connect?
Keep an eye on the Arctype blog — you will find decent security-related advice over there as well.