Digital Security: обзор последних уязвимостей СУБД Oracle

Digital Security: обзор последних уязвимостей СУБД Oracle

В июле 2009 года компания Oracle выпустила очередной пакет ежеквартальных обновлений, содержащий заплатки для 30 уязвимостей в различных продуктах, 10 из которых затрагивают СУБД.

Поляков Александр
Ведущий аудитор компании DigitalSecurity (http://www.dsec.ru)
Руководитель исследовательского подразделения DigitalSecurityResearchGroup (http://www.dsecrg.ru)

В июле 2009 года компания Oracle выпустила очередной пакет ежеквартальных обновлений, содержащий заплатки для 30 уязвимостей в различных продуктах, 10 из которых затрагивают СУБД. На сайте производителя приведено описание пакета с указанием продуктов и их версий, на которые распространяется обновление: [1]

http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpujul2009.html

Несколько слов о текущем обновлении

Данный релиз отличается от большинства предыдущих, в которых основная масса закрытых уязвимостей была обнаружена в PL/SQL процедурах, и для их эксплуатации требовались аутентификационные данные. Уязвимости PL/SQL инъекции во встроенных процедурах СУБД Oracle позволяли повысить привилегии обычного пользователя до роли  DBA [2] или позволяли читать критичные данные в системе [3]. 

В данном обновлении также присутствует одна закрытая уязвимость типа PL/SQL Injection. Что самое интересное, данная уязвимость [4] была закрыта ещё в апреле 2006 года, но, как оказалось, закрыта она была недостаточно, и с некоторыми модификациями опубликованный в 2006 году эксплоит можно было использовать вплоть до последнего обновления. Старый и новый эксплоиты к данной уязвимости доступны в свободном доступе на сайте компании Red-database-security и позволяют повысить привилегии любого пользователя до роли DBA [5].

Учитывая то, что в  большинстве систем присутствуют стандартные пользователи, такие как DBSNMP, SCOTT и  прочие, со стандартными паролями (по нашей статистике тестирований на проникновение примерно в 90% СУБД присутствуют стандартные учётные записи со стандартными паролями [6]), и получить доступ с непривилегированной учетной не составляет труда, то данная  уязвимость представляет собой реальную опасность;  к тому же код эксплоита доступен для всеобщего скачивания.  

Удалённые уязвимости высокой степени критичности в сетевых протоколах СУБД Oracle

Теперь сосредоточимся на более  критичных уязвимостях. В июльском пакете обновлений присутствует ряд уязвимостей в сетевом протоколе Oracle NET, позволяющих провести удалённую атаку, в половине случаев случаях даже не имея авторизационных данных. Именно на них мы и заострим внимание.

Таблица 1. Уязвимости СУБД Oracle, закрытые в обновлении за июль 2009 года.

Vuln#

Component

Protocol

Package and/or Privilege Required

Remote Exploit without Auth.?

CVSS VERSION 2.0 RISK (see Risk Matrix Definitions)

Last Affected Patch set (per Supported Release)

Base Score

Access Vector

Access Complexity

Authentication

Confidentiality

Integrity

Availability

CVE-2009-1020

Network Foundation

Oracle Net

None

No

9.0

Network

Low

Single

Complete

Complete

Complete

9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.4, 11.1.0.7

CVE-2009-1019

Network Authentication

Oracle Net

None

Yes

7.5

Network

Low

None

Partial+

Partial+

Partial+

9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.4, 11.1.0.7

CVE-2009-1963

Network Foundation

Oracle Net

None

No

7.5

Network

Low

Single

None

Partial+

Complete

11.1.0.6

CVE-2009-1021

Advanced Replication

Oracle Net

Create Session

No

5.5

Network

Low

Single

Partial+

Partial+

None

9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.3

CVE-2009-1966 (Oracle Enterprise Manager)

Config Management

HTTP

Valid Session

No

5.5

Network

Low

Single

Partial

Partial

None

11.1.0.7

CVE-2009-1967 (Oracle Enterprise Manager)

Config Management

HTTP

Valid Session

No

5.5

Network

Low

Single

Partial

Partial

None

11.1.0.7

CVE-2009-0987

Upgrade

Oracle Net

Create Session

No

5.5

Network

Low

Single

Partial

Partial

None

9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.3

CVE-2009-1973

Virtual Private Database

Oracle Net

Access to tables with VPD policies

No

5.5

Network

Low

Single

Partial+

Partial+

None

10.1.0.5, 10.2.0.4, 11.1.0.7

CVE-2009-1970

Listener

Oracle Net

None

Yes

5.0

Network

Low

None

None

None

Partial+

9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.4, 11.1.0.7

CVE-2009-1968

Secure Enterprise Search

HTTP

None

Yes

4.3

Network

Medium

None

None

Partial

None

10.1.8.3

CVE-2009-1015

Core RDBMS

Oracle Net

Create Session

No

4.0

Network

Low

Single

None

Partial+

None

9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.4

CVE-2009-1969

Auditing

Oracle Net

Create Session

No

2.1

Network

High

Single

Partial

None

None

9.2.0.8, 9.2.0.8DV, 10.1.0.5, 10.2.0.4, 11.1.0.7

Из приведённых в официальном Advisory уязвимостей наибольший интерес представляют уязвимости, обнаруженные исследователем Денисом Юричевым:

  • CVE-2009-1020   9 баллов ( 6.5 баллов в UNIX ) по   метрике CVSS v2
  • CVE-2009-1019   7.5 баллов по   метрике CVSS v2
  • CVE-2009-1963  7.5 баллов по   метрике CVSS v2 
  • CVE-2009-1970   5 баллов по   метрике CVSS v2

Рассмотрим перечисленные уязвимости более подробно:

CVE-2009-1020  

Уязвимости [7] присвоено 9 баллов из 10. При успешном выполнении данная уязвимость позволяет получить полный контроль над операционной системой, где установлена СУБД, с правами администратора в OS Windows (по умолчанию) или с правами пользователя Oracle в UNIX. Данной уязвимости подвержены все версии СУБД, начиная с 9g R2 и заканчивая 11i. Доступный в сети эксплоит позволяет выполнить только атаку на отказ в обслуживании.

Для реализации уязвимости требуется иметь доступ к СУБД с правами любой учётной записи, к примеру, SCOTT. Уязвимость заключается в возможности записать 4-х байтное нулевое значение в произвольное место памяти СУБД при помощи модификации сетевого пакета, который посылается клиентской программой на сервер при выполнении  любого запроса, к примеру “select * from v$version”.

На самом деле критичность данной уязвимости преувеличена по двум причинам. Во-первых, злоумышленнику необходимо иметь учётную запись в СУБД, что теоретически может привести к получению административного доступа, например, способом, описанным автором в исследовании “Проникновение в ОС через приложения. Получение доступа к ОС, используя непривилегированную учётную запись в СУБД Oracle”, в которой представлен модуль для Metasploit, позволяющий получить административный доступ к ОС с правами любого пользователя СУБД [8]. Во вторых, записав значение 0 в любую ячейку памяти, мы сможем в большинстве случаем вызвать отказ в обслуживании, но чтобы выполнить произвольный код, необходимо немало постараться, и код эксплоита будет очень сильно зависеть от версии программного обеспечения Oracle и операционной системы, на которой установлена СУБД.

CVE-2009-1019  

Уязвимости [9] присвоено 7.5 баллов из 10. При успешном выполнении данная уязвимость позволяет теоретически получить полный контроль над СУБД. Данной уязвимости подвержены все версии СУБД, начиная с 9g R2 и заканчивая 11i. Доступный в сети эксплоит позволяет выполнить только атаку на отказ в обслуживании.

Для реализации уязвимости не требуется никаких прав СУБД, и любой удалённый нарушитель может произвести атаку путём посылки некорректных NSPTCN пакетов на порт Листенера, что в некоторых случаях приводит к повреждению кучи и отказу в обслуживании.

Из приведённого описания понятно, что выполнение произвольного кода возможно больше в теории, но, тем не менее, удалённый отказ в обслуживании через порт Листенера при отсутствии аутентификационных данных – уязвимость достаточно критичная, особенно в периоды бухгалтерской отчётности.

 

 

CVE-2009-1063 

Уязвимости [10] присвоено 7.5 баллов из 10. Успешная реализация атаки позволяет загрузить процессор на 100% и выполнить атаку на отказ в обслуживании; эксплоит для реализации данной атаки доступен в сети. Уязвимости подвержена только версия  СУБД  11.1.0.6.

Данная уязвимость похожа на приведённую выше (CVE-2009-1020). Для реализации уязвимости требуется иметь доступ к СУБД с правами любой учётной записи, к примеру, SCOTT. Уязвимость возникает при перезаписи типа (изменяется тип из TTIPFN на DD) TNS протокола при посылке клиентом  любого стандартного запроса типа “select * from v$version”. В результате этого, система загружается на 100%, и происходят ошибки повреждения памяти.

Критичность данной уязвимости, как и уязвимости CVE-2009-1020, на наш взгляд, не высока, так как позволяет выполнить отказ в обслуживании только при условии наличия учётной записи в системе, тем более, уязвимости подвержена только 11 версия СУБД, которая на данный момент в коммерческой эксплуатации практически не встречается.

CVE-2009-1070  

Уязвимости [11] присвоено 5 баллов из 10. При успешном выполнении данная уязвимость позволяет выполнить отказ в обслуживании службы Листенера, в результате чего пользователи не смогут подключаться к СУБД. Данной уязвимости подвержены все версии СУБД, начиная с 10g R1 и заканчивая 11i. Доступный в сети эксплоит позволяет выполнить атаку на отказ в обслуживании.

Для реализации уязвимости требуется отсылать две TNS команды на порт Листенера с определёнными значениями в бесконечном цикле. Подробности описаны в официальном Advisory.

В итоге мы получаем удалённый отказ в обслуживании, для выполнения которого достаточно запустить публично доступный эксплоит.

Уязвимости средней и низкой степени критичности.

Из менее критичных уязвимостей, закрытых в данном обновлении, следует отметить:

  • CVE-2009-1068   4.3 балла  по   метрике CVSS v2
  • CVE-2009-1069   2.1 балла  по   метрике CVSS v2

CVE-2009-1068 

Данная уязвимость [12] обнаружена специалистами DSecRG в приложении Oracle Secure Enterprise Search, которое предоставляет безопасный удалённый доступ ко всем источникам данных в организации – веб-сайтам, файловым серверам, системам управления контентом, системам планирования ресурсов и системам управления взаимодействия с заказчиком. С помощью обнаруженной уязвимости внешний нарушитель может получить доступ к сессии аутентифицированного пользователя системы.

В одной из общедоступных страниц поиска (скрипт "search") обнаружена уязвимость межсайтового скриптинга (XSS). Уязвимым параметром является search_p_groups. Злоумышленник может внедрить XSS, добавив javascript код в параметр search_p_groups, после чего отправить зарегистрированному пользователю системы письмо со ссылкой на страницу с XSS, которая является для него доверенным ресурсом и, в случае захода пользователя по ссылке, получить доступ к его сессии.   

Критичность данной уязвимости по факту зависит от уровня осведомлённости пользователей и наличия специализированных средств защиты клиентских рабочих станций. Учитывая средние данные перехода по ссылке при использовании  сценариев социальной инженерии (от 10% до 50%) и то, что наличие на рабочих станциях пользователей HIPS пока ещё встречается не везде, можно говорить, что данная уязвимость вполне реализуема.

 

CVE-2009-1021  

Уязвимости [13] присвоено 2.1 балла из 10. Уязвимость обнаружена Алекандром Корнбрустом  из Red-database-security и позволяет получить доступ к хэшам паролей пользователей, которые записываются в журналы аудита при смене пароля пользователя.

Хэш пароля пользователя длинной менее 9 символов в большинстве случаев можно расшифровать (“большинство случаев” – это когда используется стандартный набор символов СУБД Oracle, такой как буквы, цифры и спецсимволы @,#,$), используя rainbow tables или стандартные методы перебора, за разумное время. Об этом можно подробнее почитать в статье “Запароленная власть” [14].

Таким образом, уязвимость представляет собой опасность в случае использования слабых паролей. Для того, чтобы настроить безопасно парольную политику в СУБД Oracle, рекомендуем воспользоваться  статьёй  “Настройка парольной политики в СУБД Oracle”, доступной на ресурсе PCIDSS.RU [15]

Альтернативный вариант защиты

В качестве альтернативного решения для защиты от атак на Листенер, а также в целом для повышения уровня защищённости, рекомендуется разграничить доступ к Листенеру. Разграничение осуществляется при помощи технологии  “valid node checking”, что на  практике реализуется путём добавления нескольких строк в конфигурационный файл sqlnet.ora, находящийся в директории $ORACLE_HOME/network/admin/. Пример:

tcp.validnode_checking = yes
tcp.invited_nodes = (192.168.0.1, 192.168.0.2, Adminstation, …)

Директива tcp.validnode_checking включает ограничение по IP адресам. Директива tcp.invited_nodes позволяет задавать список разрешённых адресов. Разрешено вводить только отдельные IP адреса и имена хостов. Список подсетей вводить запрещено. Также существует директива tcp.excluded_nodes, которая  позволяет задавать список запрещённых адресов, но рекомендуется использовать “белый список”. Более подробно о защите Листенера и безопасности СУБД Oracle в целом, можно прочитать в недавно вышедшей книге “Безопасность Oracle глазами аудитора: нападение и защита”. [16]

Ссылки

  1. Официальный релиз обновлений СУБД Oracle за июль 2009.
    http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpujul2009.html
  2. Эксплоит под уязвимость в пакете процедур SYS.LT.REMOVEWORKSPACE
    http://dsecrg.ru/pages/expl/show.php?id=22
  3. Эксплоит под уязвимость в пакете процедур pitrig_truncate
    http://dsecrg.ru/pages/expl/show.php?id=13
  4. Уязвимость в пакете процедур DBMS_EXPORT_EXTENSION (CPU July 2009)
    http://www.red-database-security.com/advisory/oracle_plsql_injection_dbms_export_extension.html
  5. Уязвимость в пакете процедур DBMS_EXPORT_EXTENSION (CPU July 2006)
    http://www.red-database-security.com/exploits/oracle-sql-injection-oracle-dbms_export_extension.html
  6. Доклад о безопасности СУБД Oracle с конференции Рускрипто 2009.
    http://dsecrg.ru/files/pub/pdf/Oracle_security_latest_trends_ruscrypto_2009_ru.pdf
  7. Уязвимость   CVE-2009-1020
    http://blogs.conus.info/node/23
  8. Исследование “Получение доступа к ОС, используя непривилегированную учетную запись в СУБД Oracle”.
    http://dsecrg.ru/files/pub/pdf/Penetration_from_application_down_to_OS_(Oracle%20Database)_ru.pdf
  9. Уязвимость   CVE-2009-1019
    http://blogs.conus.info/node/24
  10. Уязвимость   CVE-2009-1063
    http://blogs.conus.info/node/25
  11. Уязвимость   CVE-2009-1070
    http://blogs.conus.info/node/26
  12. Уязвимость CVE-2009-1068  в Secure Enterprise Search
    http://dsecrg.ru/pages/vul/show.php?id=125
  13. Уязвимость CVE-2009-1069 позволяющая читать хэши паролей СУБД Oracle.
    http://www.red-database-security.com/advisory/oracle_password_hash_audit.html
  14. Статья «Запароленная власть»
    http://www.xakep.ru/magazine/xa/113/052/1.asp
  15. Статья “Настройка парольной политики в СУБД Oracle”
    http://pcidss.ru/files/pub/pdf/A-2009-07-21-Polyakov-Passwords_in_Oracle.pdf
  16.  Книга “Безопасность Oracle глазами аудитора: нападение и защита”
    http://dsec.ru/about/articles/oracle_security_book/

Digital Security - одна из ведущих российских консалтинговых компаний в области информационной безопасности. Digital Security более семи лет работает на всей территории России, стран СНГ и Балтии. Все специалисты отдела аудита и аналитики имеют многолетний практический опыт выполнения работ в области ИБ, включая аудит на соответствие ISO 27001 и PCI DSS. Вся информация о деятельности компании доступна по адресам: www.dsec.ru, www.dsecrg.ru, www.pcidss.ru

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!