- •Информационная безопасность Oracle 9i
- •Помните: нужно своевременно вставлять заплаты!
- •Структура документа
- •Безопасность листенера
- •Перечисление целей: поиск листенеров
- •Перечисление целей: использование управляющей программы листенера
- •Атаки листенера
- •Меры противодействия – установка параметров защиты листенера
- •Атаки баз данных
- •Меры противодействия – атаки баз данных
- •Меры противодействия – plsExtProc
- •Приложение b – контрольный список вопросов для оценки защиты листенера
- •Приложение с – дополнительная литература и ссылки
Меры противодействия – атаки баз данных
Если в приложении не требуется использовать вызовы внешних процедур, то можно не запускать процесс 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, установленного по умолчанию.