Експлуатація та безпека баз даних Oracle. Частина I, Криптографія, Security & Hack, статті

Зміст



Способи доступу


Існують різні способи доступу до баз даних Oracle. Наведемо деякі з них:



· Інструментальні засоби сервера Oracle, такі, як sqlplus і svrmgrl;
· Oracle Enterprise Manager;
· Написані користувачами програми на мовах, які підтримуються Oracle, включаючи:
                          · OCI;
                          · ODBC;
· JDBC;
· SQL * Net або NET 8.


У даному документі основний акцент робиться на інсталяції Oracle під управлінням ОС Unix, проте всі розглянуті технічні прийоми і рішення легко застосувати й в інших операційних системах.


Дослідження Oracle


Oracle доброзичливо і безоплатно надає всім бажаючим пробні інсталяційні CD-диски з програмним забезпеченням СУРБД і новітніми інструментальними засобами розробки та додатками. Доступні версії від Oracle 7.1 до Oracle 8i і 9i. Останнім часом Oracle пропонує повні комплекти CD-дисків для всіх операційних систем за дуже низькою ціною. Операційна система Solaris для Sparc і Intel поставляється з інстальованим програмним забезпеченням Oracle. Видавництво www.osborne.com спільно з книгою “Oracle8i for Linux Starter Kit” поставляє офіційну версію Oracle 8i для Linux або Windows NT (в анонсі видавництва про версії для Windows нічого не говориться, але це не суттєво. – Прим. пер.).


Інсталяція Oracle під Linux або Windows дуже корисна для отримання уявлення про програмне забезпечення та його використанні. Oracle регулярно змінює функціональні характеристики програмного забезпечення на нижніх рівнях. Подивіться на зміну від версії до версії структури, обсягів і кількості X $-таблиць, в яких зберігається вся службова інформація.


(Прим. пер.:)





















Версія Oracle 

Кількість X $-таблиць 

6

? (35)

7

126

8

200

8i

271

9i

352


СУРБД Oracle – солідний пласт програмного забезпечення, щоб зламати його або захистити потрібно знати його дуже добре.


Дослідження інстальованого програмного забезпечення Oracle на зламуємо машині неможливо без знання пароля власника програмного забезпечення, але це не має ніякого значення, якщо у вас у вашій власній машині є локальна копія тієї ж інстальованої версії Oracle.


З’ясування, які бази даних інстальовані і функціонують


Ви маєте доступ до Unix і мають намір зламати базу даних Oracle. Як дізнатися, де інстальовано програмне забезпечення бази даних і як до нього звертатися? Бази даних Oracle можуть бути розподіленими, паралельними з багатьма примірниками або автономними.


Під час інсталяції Oracle створюється файл oratab, який містить докладні дані про бази даних, інстальованих на машині. Він може використовуватися для запуску і зупинки баз даних під час перезавантаження, а також для управління резервним копіюванням. Місце знаходження цього файлу не фіксоване, він може перебувати в / etc або в / var / opt / oracle. Простіше за все його можна знайти наступною командою:



sputnik:pxf> find / -name oratab -print 2>/dev/null / more


/etc/oratab


Однак використання команди find не є дуже хороша ідея, якщо ви намагаєтеся уникнути виявлення. Добре почати з перегляду / etc, / var / opt та / opt, а також їх піддиректорій.


Файл oratab повинен бути доступний для читання, якщо тільки dba або адміністратор Unix не змінив права доступу до нього:



sputnik:pxf> ls -al oratab
-rw-rw-r– 1 oracle root 676 Jul 16 14:47 oratab


Цей файл дозволяє дізнатися список всіх ORACLE_SID і ORACLE_HOME. Якщо використовується угода про іменуванні OFA, то версія Oracle може бути “розкручена” по шляхах доступу до директорій. Важлива частина тут – ORACLE_SID, оскільки він може використовуватися для визначення, чи працює база даних.


Файли конфігурації SQL * NET і NET 8, як на сервері, так і на клієнті, можуть використовуватися для визначення інформації про бази даних, що працюють як на сервері, так і у всій організації. Файли конфігурації SQL * NET і NET 8 будуть розглянуті нижче в розділі “Конфігураційні файли SQL * NET і NET 8”.


Перевірка змінних оточення користувача бази даних може також дати деяку інформацію. У системах Unix / Linux повинен бути, принаймні, наступний набір змінних оточення:



Ще один спосіб пошуку доступних баз даних – за допомогою команди Unix ps подивитися, що працює на сервері. Тут можна дивитися або на реальні екземпляри баз даних, або на процеси, що працюють з цими примірниками (користувачі легковажні і в командному рядку з’єднання часто використовують ім’я користувача і пароль).


Приклад визначення, які екземпляри бази даних працюють:



sputnik:pxf> ps -ef / grep lgwr / grep -v grep / more
sputnik:pxf> oracle 654 1 0 10:37 ? 00:00:00 ora_lgwr_PENT


Тут показано, що працює один примірник Oracle і SID бази даних – PENT. Пошук “lgwr” означає пошук ідентифікатора, використовуваного для позначення фонового процесу Log Writer (процес запису журнальних файлів). У СУРБД Oracle є кілька фонових процесів, постійної працюючих і керуючих базою даних. Цей процес один з них. Можуть також працювати і кілька додаткових процесів. Всі ці процеси використовують для взаємодії область розділяється пам’яті, звану SGA (Shared Global Area – колективна глобальна область).


Пошук інформації в призначеному для користувача оточенні


Корисним вправою для злом баз даних Oracle є перевірка користувацького оточення: не створили користувачі змінні оточення з іменами користувачів і паролями в них.


Інша корисна перевірка – запускає чи хто-небудь будь-які командні файли, у яких командний рядок з’єднання з базою даних містить імена користувачів і паролі. Це можна побачити за допомогою наступної команди ps:







































































































































































sputnik:pxf> ps -ef / grep ora

root


617


1



39


10:37


tty1


00:00:00


login — oracle


root


618


1



39


10:37


tty2


00:00:00


login — oracle


oracle


625


617



39


10:37


tty1


00:00:00


-bash


oracle


650


1



39


10:37


?


00:00:00


ora_pmon_PENT


oracle


652


1



39


10:37


?


00:00:00


ora_dbw0_PENT


oracle


654


1



39


10:37


?


00:00:00


ora_lgwr_PENT


oracle


656


1



39


10:37


?


00:00:00


ora_ckpt_PENT


oracle


658


1



39


10:37


?


00:00:00


ora_smon_PENT


oracle


660


1



39


10:37


?


00:00:00


ora_reco_PENT


oracle


662


1



39


10:37


?


00:00:00


ora_s000_PENT


oracle


664


1



39


10:37


?


00:00:00


ora_d000_PENT


oracle


690


625



39


10:41


tty1


00:00:00


sqlplus system/manager @doit.sql


oracle


691


690



39


10:41


?


00:00:00


oraclePENT (DESCRIPTION=(


oracle


692


618



29


10:41


tty2


00:00:00


-bash


oracle


740


692



29


10:45


tty2


00:00:00


ps -ef


oracle


741


692



29


10:45


tty2


00:00:00


grep ora



Можна побачити, що хтось запускає командні файли SQL як користувач SYSTEM, який як і раніше має встановлений за замовчуванням пароль. Але цей приклад занадто дурний, частіше можна побачити виконання командних файлів SQL з “зашитими” в них іменами користувачів і паролями. Звичайно потрібно написати командний файл shell або завдання cron, які перевіряли б кожну хвилину список процесів, щоб виявити запущений командний файл SQL, або ж зробити домашню роботу і визначити, коли повинні запускатися пакетні завдання.

Наступний очевидний крок – знайти цілу машину чи конкретні директорії з командними файлами, що містять імена користувачів Oracle і їхні паролі. Командні файли можуть бути будь-якого типу: Bourne, KSH, Perl, SQL або двійковими. Не прогадаєте, якщо пошукайте рядки sqlplus або svrmgrl в будь-яких директоріях або файлах.


Резервні копії баз даних і бази даних розробників


Найпростіший і найбільш успішний спосіб компрометації баз даних полягає в отриманні інформації про бази даних з тих місць, які виявилися незахищеними. Два приклади: резервні копії баз даних, а також бази даних розробників і тестові бази даних. Якщо можна дістати резервну копію бази даних або експортний файл, то можна повторно створити базу даних на вашій власній машині.


Тут важливо враховувати те, що дані і бази даних часто не розміщуються в одному промисловому машині. Часто використовуються кілька баз даних для розробників, баз даних для компоновочного тестування, системного тестування та приймальних випробувань. Існують також різні типи резервних копій.


Типи резервних копій Oracle


Існує три основних види резервування Oracle:



Для перевірки, чи виконується в базі даних гарячі або холодне резервування, потрібно провести невелике дослідження. Можна пошукати в машині командні файли резервування, що містять слова ALTER TABLESPACE [TABLESPACE NAME] BEGIN BACKUP. Перевірте завдання cron, перевірте денні листинги процесів: не запускалося чи програмне забезпечення, яке могло виконувати резервування. Перевірте протокольні файли. З’ясуйте, програмне забезпечення для резервування встановлено на машині, використовуючи для цього pkginfo-l. Можна підтвердити статус табличних просторів, не переключалися вони в режим “OFFLINE”, що може бути доброю ознакою виконання в даний час гарячого резервування.



SQL> select tablespace_name,status
2 from dba_tablespaces;
































TABLESPACE_NAME

STATUS

SYSTEM

ONLINE

USERS

ONLINE

RBS

ONLINE

TEMP

ONLINE

OEM_REPOSITORY

ONLINE

INDX

ONLINE

APP_IND_1

ONLINE

APP_DATA_1

ONLINE



6 rows selected.


SQL>


Перевірка холодного резервування простіше, так як ви можете знову перевірити завдання cron, листинги процесів і подивитися, чи є регулярні зупинки, а потім пошукати якесь працююче програмне забезпечення резервування. Якщо доступний сигнальний файл Oracle (alert log), то в ньому просто знайти всі зупинки і запуски бази даних. Спробуйте визначити, де і коли записуються файли і, що більш важливо, спробуйте дізнатися, чи можна ці фали взяти і прочитати.


Резервні копії на стрічці


Резервні копії на стрічці досить добре охороняються, але якщо рішучий хакер захоче, і захист буде не на висоті, він може, використовуючи соціальну інженерію, запросити стрічки з резервними копіями “на винос “і почати їх упорядковувати і збирати у міру отримання. Коли всі стрічки будуть зібрані, можна буде повторно створити базу даних на іншій машині. Якщо навіть база даних занадто велика для цієї машини, то можна всі непотрібні табличні простору та файли даних перевести в автономний режим (деактивизировать) і відкрити базу даних без них.


[Прим. пер.: “соціальна інженерія” – тактика зловмисного проникнення, при якій зломщик шляхом “умовлянь” обманює користувачів або адміністратора (наприклад, представляючись новим співробітником) і домагається значимої інформації про компанії та / або її комп’ютерних системах, щоб дістати несанкціонований доступ до мережі.
www.kolbi.ru/cgi/dict/show-dict.pl?_query=social+engineering&_submit=Search]


Існують навіть приховані параметри, які допомагають запустити базу даних, коли вона ламається при спробі запуску неповної бази даних.


Резервні копії на диску


Резервні копії на диску навіть краще, якщо не захищені файли. Їх легше взяти і десь повторно створити базу даних для вилучення хешірованних паролів або конкретних даних. І знову потрібні технічні прийоми, про які говорилося вище, для з’ясування, яке використовувалося програмне забезпечення для резервування, де знаходяться реальні резервні копії і журнальні файли.


Бази даних розробників і тестові бази даних


Якщо ви націлені на конкретну промислову базу даних, яка досить добре захищена, іноді варто пошукати бази даних розробників і тестові бази даних, так як їх ймовірно набагато простіше зламати. У них зазвичай створюється набагато більше облікових записів для dba, так як багато розробників думають, що їм потрібні права доступу dba.


У багатьох випадках бази даних розробників і тестові бази даних мають копії всіх промислових даних, оскільки вони потрібні для системного тестування і налаштування продуктивності. Так що, якщо вам потрібні ці дані, дуже часто досить одного дня для їх вилучення з цих баз даних. Як знайти базу даних розробників або тестову базу даних? Їх не завантажують в ту ж машину, в якій працює промислова база даних. З’ясуйте у файлах tnsnames.ora і l istener.ora SID бази даних, який схожий на SID промислової бази даних. Подивіться в директорії admin інсталяції Oracle файли init.ora. Вони мають імена init [ORACLE_SID]. Ora.


Іноді залишаються інші дірки – розробники часто мають набагато більше прав доступу, ніж це потрібно. Коли тестова середу переноситься в промислову базу даних, часто копіюються також користувачі, і права доступу розробників також опиняються в промисловій базі даних. Їли ви дістали ім’я користувача (розробника), який має гарні привілеї, випробуйте його і в промисловій базі даних.


Бази даних для роботи в непередбачених обставинах


Іншим місцем для пошуку інформації баз даних є вторгнення у вузол, призначений для роботи в непередбачених обставинах. Якщо такий існує, необхідно його перевірити і отримати доступ до даними. Зазвичай великі організації підтримують працездатність таких вузлів, але, ймовірно, все там буде застарілим. Великим успіхом для хакера буде те, що там виявляться ті ж дані і бази даних, що і в промисловому вузлі, але вони, ймовірно, будуть менше захищені та швидше за все там не виявиться системного адміністратора або DBA, з’єднаних з базою даних і спостерігають за подіями.


Конфігураційні файли SQL * NET і NET 8


Конфігураційні файли SQL * NET і NET 8 існують як на сервері, так і на клієнті. Listener, що працює на сервері, чекає запитів для доступу до СУРБД. Ці конфігураційні файли кажуть лістнеру, яка база даних і який процес Oracle буде приймати запит.


У конфігураційних файлах SQL * NET і NET 8 буде також шукатися інформація. Вони є як на сервері, так і на кожному клієнті, який отримує доступ до баз даних Oracle. Конфігураційні файли tnsnames.ora, listener.ora і sqlnet.ora зазвичай розміщуються в ORACLE_HOME / network / admin в системах Unix і в%% ORA_HOME%% / network / admin в системах Windows.


У цих файлах міститься детальна інформація про кожну базу даних, що працює на сервері, і, у разі розміщення файлів на клієнтській машині, детальна інформація про кожну базу даних, до якої може отримати доступ даний клієнт, і про його машині. Нижче наведено приклад входу для бази даних PENT, а також показаний вхід для процесу EXTPROC.


Приклад входу у файлі tnsnames.ora:



PENT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)
(HOST = EUROPA)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PENT)
)
)


EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =


(SID = PLSExtProc)
(PRESENTATION = RO)
)
)


Тут можна побачити, що даний файл підтримує процедуру EXTPROC і тільки одну базу даних Oracle. Протокол – TCP, а хост – EUROPA, але може бути і IP-адресу та різні протоколи. Стандартний порт прослуховування для лістнера Oracle TNS – 1521, але можна використовувати і 1526, якщо 1521 вже використовується на цій машині іншими інсталяціями Oracle. SERVICE_NAME – SID бази даних. Це ім’я спільно з ім’ям користувача і паролем потрібно для підтримання зв’язку з конкретною базою даних.


Процес EXTPROC приймає запити процедур PL / SQL для виклику зовнішніх “C”-функцій, написаних і інстальованих розробниками. Гарне керівництво по розробці таких функцій і процесів можна знайти в “PL / SQL Oracle PL / SQL programming. 2nd Edition” написаного Steve Feuerstein і виданого www.oreilly.com. СУРБД Oracle викликає ці “C”-функції через протокол TNS, і не використовує прямі методи, застосовувані самої Oracle у вбудованих пакетах. Oracle викликає “C”-функції, які роблять більшість вбудованого в пакети з допомогою ключового слова PL / SQL pragma interface. Можна створювати користувацькі пакети, що використовують такий же синтаксис, і викликати “C”-функції Oracle і успішно компілювати їх. Якщо це буде зроблено, то при спробі виконання функцій або процедури в пакеті відбудеться збій з помилкою “ORA-6509 ICD vector missing error”. Це схоже на те, що Oracle має “зашиту” таблицю покажчиків функцій. Це можна побачити фото X $-таблицях. X $-таблиці не можуть модифікуватися, оскільки вони фактично є вікном в списки “C”-структур (structs) в SGA. Якщо дана таблиця знаходиться в числі X $-таблиць, то до неї можна додати нові входи з допомогою отладочной (poke) команди oradebug, стежте за простором!


Файл tnsnames.ora – необхідний файл сервера бази даних. Він же може знадобитися на клієнта, залежно від того, чи використовується сервер імен.


Нижче слідує приклад файлу listener.ora:



LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)
(HOST = EUROPA)(PORT = 1521))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =


Цей файл управляє TNS-лістнером на сервері. Він також містить інформацію про IP-адреси, імені хоста, протоколі і порте, який прослуховує лістнер. Другий розділ деталізує імена баз даних і ORACLE_HOME цих баз даних. Файл listener.ora має важливе значення для сервера баз даних. Якщо в одному вузлі використовується кілька баз даних, всі вони можуть розділяти один файл listener.ora.



(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)
(HOST = EUROPA)(PORT = 2481))
)
)


SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:OracleOra81)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = PENT)
(ORACLE_HOME = C:OracleOra81)
(SID_NAME = PENT)
)
)


Вторгнення з інших баз даних


Часто в організації використовується кілька баз даних Oracle і створюються додатки, які звертаються більш ніж до однієї бази даних, або програми однієї бази даних звертаються до іншої бази для поновлення своїх таблиць.


Якщо доступ до цільової базі даних істотно обмежений, можна звертатися до необхідної базі даних з меншим рівнем захищеності. Доступ до іншої базі даних можна отримати, використовуючи тих самих користувачів і прийоми. Можна подивитися, чи є які-небудь зв’язки даної бази даних з промисловою базою даних, доступ до якої нам потрібний:



SQL> select db_link,username,host
2 from all_db_links;


DB_LINK USERNAME HOST
————- ——– ———
VOSTOK VXD vostok@europa.world


1 rows selected.


SQL>


Для доступу до інших баз даних зв’язків бази даних потрібно використовувати TNS, тому в файлі tnsnames.ora повинен бути відповідний вхід. У прикладі, наведеному вище, VOSTOK – це інша база даних в хості europa. Дуже часто зв’язку баз даних створюються тоді, коли користувачі, що створюються в базі даних, виконують запити від імені вихідної бази даних як dba. Дуже важливо перевірити такий шлях доступу, щоб побачити, що вищі привілеї можуть бути отримані в промисловій базі даних.


Підтвердження версії Oracle


На самому початку дуже корисно визначити версію бази даних сервера Oracle, до якої ви хочете отримати доступ. Це можна зробити дуже легко без з’єднання з базою даних, а тільки запуском утиліти Oracle svrmgrl. Вона розташована в директорії ORACLE_HOME / bin інсталяції Oracle. Запуск виглядає наступним чином:



sputnik:pxf> svrmgrl

Oracle Server Manager Release 3.1.5.0.0 – Production


(c) Copyright 1997, Oracle Corporation. All Rights Reserved.


Oracle8i Enterprise Edition Release 8.1.5.0.0 – Production
With Partitioning and Java Options
PL/SQL Release 8.1.5.0.0 – Production


SVRMGR>


Абсолютно ясно, що у нас працює версія 8.1.5 СУРБД.


Так само можливий віддалений і локальний запуск лістнера, які дадуть аналогічну інформацію. Формат команди: lsnrctl status.

Частина 2


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


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

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

Ваш отзыв

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

*

*