А. А. ЗАБЕЛИНСКИЙ

Московский институт новых информационных технологий ФСБ России

УЯЗВИМОСТЬ РАСПРЕДЕЛЕННЫХ БАЗ ДАННЫХ
НА ОСНОВЕ ВНЕДРЕНИЯ SQL КОДА

Рассмотрен механизм реализации одной из уязвимостей Web-технологии – SQL инъекции, которая может быть использована для несанкционированного доступа к ресурсам базы данных.

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

Перечислим некоторые из наиболее часто встречающихся проблем:

Межсайтовый скриптинг (Cross Site Scripting или XSS) - это возможность вставки («инъекции») HTML-кода в уязвимую страницу. Инъекция кода может быть реализована с помощью различных способов ввода информации. Любое Web-приложение, которое выводит какую-либо информацию, полученную от пользователя, может быть подвержено атакам этого вида. Возможность успешного проведения такой атаки возникает в случае отсутствия фильтрации значений переменных, полученных от пользователя, на наличие сценариев (под сценарием будем понимать скрипты JavaScript, VBScript, Perl, PHP) или опасных HTML-тегов. Данный вид атаки может использоваться злоумышленником для перехвата значений cookie различных пользователей (в том числе, и администраторов), пользовательских сессий, а также в некоторых случаях позволяет обойти механизм аутентификации. А также если поддерживается SSI (Server Side Include), то позволяет выполнить произвольную команду на стороне сервера.

НЕ нашли? Не то? Что вы ищете?

Расщепление HTTP ответа (HTTP Response Splitting). Эти уязвимости свойственны большинству Web-приложений и являются следствием неправильной обработки пользовательских данных. Злоумышленник может послать специальный HTTP-запрос, который заставит Web-сервер сформировать два HTTP-ответа (вместо правильного одного). Причем только первый HTTP-ответ, который является поддельным, будет обрабатываться объектом атаки. Этот вид атаки позволяет проводить целый ряд атак, таких как «отравление» Web-кэша, подмену страниц, «cross-user defacement», кражу пользовательской информации.

HTML инъекции (HTML code injection). Если Web-приложение неправильно обрабатывает динамически подключаемые файлы или пути к файлам, то появляется возможность выполнить произвольный код (PHP, ASP и другие) на стороне сервера или получить содержимое какого-либо файла. Успешно проведенная атака, позволяет злоумышленнику обойти механизм аутентификации, выполнять команды на сервере, читать содержимое файлов, записывать произвольные данные в файл и т. д.

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

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

Взаимодействие сервера СУБД с Интернет-навигатором осуществляется через программный шлюз и Интернет-сервер. Механизм этого взаимодействия представлен общей схемой взаимодействия пользователя с сервером СУБД.

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

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