Меры противодействия атакам баз данных
Если в приложении не требуется использовать вызовы внешних процедур, то можно не запускать процесс PLSExtProc, используемый для выполнения вызовов внешних процедур (как это описано ниже в разделе PLSExtProc”). Это позволит предотвратить злоупотребления привилегией CREATE [ANY] LIBRARY.
Перед предоставлением пользователям мощных привилегий базы данных следует внимательно рассмотреть последствия. Все ненужные учетные записи необходимо блокировать или даже уничтожать.
Следует учитывать взаимное доверие между базами данных, которое может появиться в результате конфигурирования сети: привилегия CREATE DATABASE LINK (и различные пакеты PL/SQL, такие, как UTL_TCP) разрешают внешние сетевые соединения из базы данных.
Важно понимать, что DBA имеет все привилегии, поэтому он может читать, писать и выполнять файлы и команды операционной системы как пользователь, который является владельцем Oracle.
PLSExtProc
Сервис PLSExtProc – это механизм, который Oracle использует для вызова внешних процедур через ссылки библиотек базы данных, создаваемых командой CREATE LIBRARY (как это было описано выше в разделе Атаки баз данных”). Поскольку этот процесс представляет собой, так же, как и листенер, просто еще один сервис, то он может прямо взаимодействовать с листенером, не имея сначала соединения с базой данных.
Для того чтобы суметь связаться с PLSExtProc, нам нужно изучить формат сообщений, используемый в базе данных для запуска внешних процедур. Мы можем проверить содержимое сообщений, включив в файле sqlnet.ora опции трассировки:
trace_level_agent = support
trace_level_client = support
trace_level_server = support
В результате, в каталоге трассировки Oracle Net (который, если нужно, можно изменить установкой в sqlnet.ora параметров trace_directory_имя) будет создан ряд трассировочных файлов.
Затем, поскольку для проверки нам нужен подходящий библиотечный вызов, мы предлагаем использовать служебные вызовы операционной системы, например, system(). Подходящей для выполнения командой может быть что-то легкое, типа dir c:\temp” с завершающими, скажем, 80-ю пробелами. Анализируя впоследствии трассировочные файлы, мы сможем разобраться с сообщениями, которыми обмениваются база данных и PLSExtProc.
Сейчас мы можем написать программу для организации атаки воспроизведения” на PLSExtProc. Посылая в правильном порядке сообщения, восстановленные по трассировочным файлам, мы можем заставить PLSExtProc выполнить нашу перехваченную команду. Переписав текст параметров, передаваемых в системный служебный вызов, мы можем заставить PLSExtProc выполнять произвольные команды.
Обычно PLSExtProc связывается с базой данных, используя межпроцессные каналы (IPC), это означает, что атака воспроизведения обычно будет действовать только на локальный сервер. Для реконфигурирования PLSExtProc, чтобы он принимал удаленные команды, нужно изменить его запись в файле tnsnames.ora. Запись ADDRESS для PLSExtProc обычно выглядит примерно так:
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))
но после изменения ее на:
(ADDRESS=(PROTOCOL=TCP)(HOST=ëîêàëüíûé_õîñò)(PORT=1521))
PLSExtProc будет принимать и отвечать на запросы, поступающие по порту листенера 1521, установленного по умолчанию.
Меры противодействия – PLSExtProc
Если механизм вызова внешних процедур не нужен, то его можно без риска отключить, удалив из файлов listener.ora и tnsnames.ora связанные с ним записи. Это не позволит базе данных связываться с агентом внешних процедур. Для предотвращения реконфигурирования этих файлов и повторного включения механизма вызова внешних процедур следует убрать привилегию запуска процесса PLSExtProc или удалить саму выполняемую программу.
Если агент внешних процедур нужен, то следует рассмотреть использование межсетевых экранов, ограничивающих соединения, исходящие от сервера, с другими машинами (например, с узлами репликации). Пользователи с локальными учетными записями на машине и DBA смогут выполнять команды ОС как пользователи, которые являются владельцами Oracle.
Вопросы, подлежащие дальнейшему исследованию
В данной статье затронут ряд вопросов, которые подлежат дальнейшему исследованию, включая:
другие вопросы конфигурирования листенера, например, регистрация сервисов, SNMP, SSL;
другие злоупотребления PLSExtProc (например, атаки типа переполнение буфера” как на сам процесс, так и сервисы операционной системы сервера).
Оповещение о проблемах, связанных с безопасностью
Если читатели считают, что они обнаружили новую уязвимость защиты, мы просим сообщить об этом прежде всего в службу поддержки Oracle (для заказчиков с поддержкой) или же по адресу
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
. Мы обещаем частным лицам и организациям, которые работают с нами, идентифицировать и решить проблемы безопасности в наших извещениях.
Заключение
В данной статье рассмотрен ряд атак баз данных Oracle и описано, как Oracle встречает эти угрозы, по умолчанию или используя простые шаги конфигурирования. Описаны новые функциональные возможности:
опция листенера ADMIN_RESTRICTIONS;
блокирование по умолчанию учетных записей базы данных.
Эти, несомненно, простые и незначительные совершенствования, используемые совместно, существенно повышают защиту Oracle9i. Недооценка данных в этой статье рекомендаций может подвергать серьезным атакам (включая атаки типа отказ в обслуживании”) базу данных, соединенные с ней базы данных и сами серверные машины.