Базы данных Oracle - статьи


Oracleinfsec.shtml - часть 12


Если в приложении не требуется использовать вызовы внешних процедур, то можно не запускать процесс 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=eieaeuiue_oino)(PORT=1521))

PLSExtProc будет принимать и отвечать на запросы, поступающие по порту листенера 1521, установленного по умолчанию.

Меры противодействия – PLSExtProc




Начало  Назад  Вперед



Книжный магазин