В июле 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 |
||||||
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 |
|
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 |
|
Network Foundation |
Oracle Net |
None |
No |
7.5 |
Network |
Low |
Single |
None |
Partial+ |
Complete |
11.1.0.6 |
|
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 |
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 |
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
Уязвимости [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
Данная уязвимость [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]
Ссылки
Digital Security - одна из ведущих российских консалтинговых компаний в области информационной безопасности. Digital Security более семи лет работает на всей территории России, стран СНГ и Балтии. Все специалисты отдела аудита и аналитики имеют многолетний практический опыт выполнения работ в области ИБ, включая аудит на соответствие ISO 27001 и PCI DSS. Вся информация о деятельности компании доступна по адресам: www.dsec.ru, www.dsecrg.ru, www.pcidss.ru
В Матрице безопасности выбор очевиден