Некоторые вопросы безопасности в Oracle

ОГЛАВЛЕНИЕ

Получить доступ к серверу с установленными на нем последними обновлениями для системы безопасности и стойкими паролями становится довольно сложно, поэтому векторы атак смещаются сегодня в сторону приложений, наиболее важными из которых являются базы данных, тем более что именно информация в базах данных зачастую является конечной целью злоумышленника. База данных Oracle — одна из распространенных в корпоративной среде систем, поэтому она и была выбрана в качестве примера, а точнее, версии Oracle Database 9i и 10g. Рассмотрим ряд критичных уязвимых мест, которыми можно воспользоваться, не имея логических прав доступа к базе данных Oracle.

Внешний периметр

Удаленный доступ к базе данных предоставляет служба Oracle TNS Listener, работающая по умолчанию на TCP-порту 1521, и большинство атак направлено именно на эту службу. Listener — компонент сетевого доступа к системам Oracle, принимает клиентские запросы на соединение и направляет их для обработки соответствующему серверному процессу. Обычно Listener рассматривается как первый этап на пути вторжения в базы данных и другие службы, поэтому плохо сконфигурированный и незащищенный Listener предоставляет нарушителю различные возможности атак, включая удаленное выполнение команд и отказ в обслуживании.

Лазейки внешнего периметра

Для версий базы данных Oracle ниже 10g (8, 9i R1, 9i R2) в конфигурации по умолчанию можно осуществлять анонимное подключение и управление службой Listener. Эта проблема была впервые озвучена еще в 2001 году, но она до сих пор крайне актуальна. В конфигурации по умолчанию злоумышленник может:

  • получить детальную информацию об атакуемой системе — имени базы данных (SID), ее версии, пути к файлам журналов, версии операционной системы и т. д.;
  • произвести атаку класса «отказ в обслуживании»;
  • выполнять SQL-команды от имени администратора базы;
  • получить удаленный доступ к системе.

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


Рассмотрим атаку типа «отказ в обслуживании», исполняемую с помощью утилиты lsnrctl. С помощью команды stop любой удаленный неавторизированный пользователь может остановить службу Listener:

lsnrctl stop 192.168.55.16

Для получения удаленного доступа к системе используется утилита lsnrctl и сценарий tnscmd2.pl, позволяющий выполнять команды и посылать службе Listener произвольные пакеты. С помощью команды set log_file удаленный неавторизованный пользователь может изменить имя файла для хранения журналов, например, на имя исполняемого файла, лежащего в папке автозагрузки пользователя. Далее с помощью утилиты tnscmd2.pl злоумышленник может послать запрос, содержащий системные команды, которые в результате будут сохранены в файле журнала и выполнятся при следующей регистрации администратора в системе.

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

Защита внешнего периметра

Для защиты службы Listener существуют следующие параметры в файле LISTENER.ORA:

  • PASSWORDS_(listener name) = (listener_password) — параметр, который отвечает за установку пароля на подключение к Listener. После установки пароля пользователь не сможет остановить службу, а также проводить атаки, связанные со сменой имени файла журнала. Но тем не менее команды status и version выполняются и позволяют получить информацию о версии Listener, имени установочного каталога и версии операционной системы.
  • ADMIN_RESTRICTIONS_(listener name) — параметр, который во включенном состоянии ADMIN_RESTRICTIONS_(listener name) =ON (по умолчанию OFF) запрещает любые изменения файла конфигурации удаленно, т. е. смена имени и каталога файла журнала возможна только при наличии локального доступа к файлу listener.ora
  • LOCAL_OS_AUTHENTICATION_(listener name) — параметр, который во включенном состоянии (по умолчанию отключен) позволяет управлять службой Listener только локально — при любых попытках удаленного выполнения команд будет выдаваться сообщение об ошибке. Единственная команда, которую можно выполнить, — version, она выдаст версию установленной базы данных Oracle и версию операционной системы. В версии Oracle 10g R1 и выше Listener защищен путем установки параметра LOCAL_OS_AUTHENT в значение ON по умолчанию, что позволяет осуществлять управление только с локальной системы, что хоть и предотвращает ряд атак, но все равно позволяет получить доступ к управлению службой Listener при наличии любой непривилегированной учетной записи на сервере. С точки зрения администрирования крупной системы предпочтительнее все-таки иметь возможность удаленного администрирования Listener, поэтому многие администраторы отключают LOCAL_OS_AUTHENT, что сразу сказывается на безопасности базы данных.

Для проверки защищенности Listener можно воспользоваться удобной утилитой lsnrcheck.exe, работающей под Windows. Утилита распространяется бесплатно и доступна для загрузки по адресу http://www.integrigy.com/downloads/lsnrcheck.exe

Пример запуска утилиты на Oracle 10g с настройками по умолчанию можно увидеть на экране 2. Как мы видим, настройки по умолчанию в Oracle 10g более безопасны по сравнению с Oracle 9, но все же имеют ряд недостатков.