Уязвимость В Протоколе Аутентификации Oracle 11G

Не так давно стало известно о новой уязвимости (получила номер CVE-2012-3137 ) в протоколе аутентификации O5Logon, используемом в базе данных Oracle версий 11.1 и 11.2. Уязвимость позволяет удаленному пользователю получить пароль доступа путем перебора зашифрованного идентификатора сеанса, полученного с сервера.

Эта функция позволяет угадать пароль пользователя локально, не отправляя дополнительные сетевые запросы на сервер базы данных.



Краткий обзор того, как работает O5Logon
Взаимодействие с сервером происходит по следующей схеме:
  1. Клиент подключается к серверу и отправляет имя пользователя
  2. Сервер генерирует идентификатор сеанса и шифрует его с помощью AES-192. В качестве ключа используется SHA1-хеш пароля пользователя и добавленная к нему соль.

  3. Сервер отправляет клиенту зашифрованный идентификатор сеанса и соль.

  4. Клиент генерирует ключ, получая хэш своего пароля и полученную соль.

    Используя этот ключ, клиент расшифровывает данные сеанса, полученные от сервера.

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

Основной интерес представляют этапы 1-3, которые можно представить следующим образом:

Уязвимость в протоколе аутентификации Oracle 11g

С самого начала соединения сервер передает всю информацию, необходимую для подбора пароля.

Ключевая особенность Session Id позволяет осуществить атаку: последние 8 байт идентификатора открытой сессии всегда состоят из восьмерок.

Этой информации достаточно, чтобы определить правильность расшифровки.

Еще одной особенностью данной проблемы является то, что при разрыве соединения после 3-го этапа факт попытки подключения не будет отражен в журналах, т.е.

атака может быть проведена совершенно незаметно.



Практический аспект
Для проверки уязвимости используется свободно распространяемый дамп виртуальной машины , используемый Oracle для обучения разработчиков и содержащий предустановленную базу данных версии 11.2.0.2. После установки можно попробовать подключиться к базе данных через стандартный порт, используя, например, Python и библиотеку cx_Oracle. В качестве теста был проведен выбор для встроенной пользовательской системы.

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

  
   

>>> import cx_Oracle >>> con = cx_Oracle.connect('system/[email protected]/orcl') Traceback (most recent call last): File "<stdin>", line 1, in <module> cx_Oracle.DatabaseError: ORA-01017: invalid username/password; logon denied

Чтобы получить зашифрованный идентификатор сеанса и соль в этом случае, проще всего было использовать Wireshark:

Уязвимость в протоколе аутентификации Oracle 11g

Здесь будут полезны следующие значения: Идентификатор сеанса (AUTH_SESSKEY) : EA2043CB8B46E3864311C68BDC161F8CA170363C1E6F57F3EBC6435F541A8239B6DBA16EAAB5422553A7598143E78767 Соль (AUTH_VFR_DATA) : A7193E546377EC56639E

Доказательство концепции
Для расшифровки сессии и перебора пароля был написан на коленке следующий код:

#-*-coding:utf8 -*- import hashlib from Crypto.Cipher import AES def decrypt(session,salt,password):

Теги: #информационная безопасность #oracle #o5logon #CVE-2012-3137 #информационная безопасность
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.