А. А. ЗАБЕЛИНСКИЙ
Московский институт новых информационных технологий ФСБ России
УЯЗВИМОСТЬ РАСПРЕДЕЛЕННЫХ БАЗ ДАННЫХ
НА ОСНОВЕ ВНЕДРЕНИЯ 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 инъекций. Защиту приложения можно обеспечить только одним способом — путем принятия мер на уровне безопасности приложения.


