Як зламати або обійти парольний захист Oracle, Інші СУБД, Бази даних, статті

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

Реалізація парольного захисту в Oracle


Основним прийнятим засобом аутентифікації (перевірки справжності) користувача Oracle і включає / виключає ролі є вказівка ​​пароля. Так, пароль вказується при виконанні з’єднання з СУБД (наприклад, в SQL * Plus в команді CONNECT), в пропозиції SQL створення користувача або в повному визначенні зв’язку зі сторонньою БД (database link).


Зберігання пароля


Заданий для користувача Oracle командою CREATE / ALTER USER пароль піддається перетворенню і потрапляє в словник-довідник у вигляді згортки (password hash). При вказівці пароля в момент встановлення з’єднання з СУБД Oracle заново обчислить згортку і порівняє її з збереженої в БД. У відкритому вигляді паролі в БД не зберігаються.


Основне місце зберігання згортки пароля – таблиця словника-довідника SYS.USER $. Над цією таблицею як базової побудована похідна, SYS.DBA_USERS. Якщо в профілі (profile) користувача включений параметр PASSWORD_REUSE_TIME, згортки пароля також зберігаються в SYS.USER_HISTORY $.


Побачити згортки логічно можна, видавши наприклад:

SQL> CONNECT / AS SYSDBA

Connected.

SQL> SELECT username, password FROM dba_users;

USERNAME                       PASSWORD

—————————— ——————————

MGMT_VIEW                      34D8B04B40368661

SYS                            8A8F025737A9097A

SYSTEM                         2D594E86F93B17A1

DBSNMP                         FFF45BB2C0C327EC

SYSMAN                         2CA614501F09FCCC

XDB                            FD6C945857807E3C
SCOTT                          F894844C34402B67

ADAM                           DC8670031DD24E45

PROF                           3D2DEE6D12BD13D2

FORD                           0805304F10B59B54

XTEST                          5E3A5B0B1B1B4755

STREAMADMIN                    77079477FD902BB1

OUTLN                          4A3BA55E08595C81

EXFSYS                         66F4EF5650C20355

WMSYS                          7C9BA362F8314299

DIP                            CE4A36B8E06CA59C

TSMSYS                         3DF26A8B17D0F29F

ANONYMOUS                      anonymous

18 rows selected.


Останній рядок у наведеній видачу є ілюстрацією застосування недокументованою, але широко відомою можливості Oracle занести в БД на місце згортки в БД безпосереднє значення:

SQL> ALTER USER scott IDENTIFIED BY VALUES “Це не згортка ніякого пароля”; 

User altered.

SQL> SELECT username, password FROM dba_users WHERE username = “SCOTT”;

USERNAME                       PASSWORD

—————————— ——————————

SCOTT Це не згортка ніякого пароля


Фактично це знецінює привілей CREATE SESSION, якщо така є (з’єднання все одно неможливо). Можливість занести в БД безпосередньо згортку дозволяє власникові привілеї ALTER USER підмінити на час пароль, щоб за законних підставах увійти в систему під чужим ім’ям. Однак якщо це користувач SYS, замінений таким чином йому “пароль” не фіксується у файлі PWD. ORA, так що особливої ​​проблеми з доступністю це властивість не створює.


Якщо параметр СУБД O7_DICTIONARY_ACCESSIBILITY має значення TRUE (умовчання у версії 8), до трьох зазначених таблиць може звернутися будь-який власник системної привілеї SELECT ANY DICTIONARY; в іншому випадку – тільки власник SYS.


Фізично згортки можна спостерігати в файлах ОС: “парольного” PWD. ORA; табличного простору SYSTEM, де зберігаються SYS.USER $ і SYS.USER_HISTORY $ (часто це SYSTEM 01.DBF); повного експорту; архівованих журналів.


Алгоритм обчислення згортки пароля


Алгоритм обчислення згортки пароля перед приміщенням його в словник-довідник БД і при перевірки дійсності (автентичності) офіційно фірмою-виробником не опублікований. Проте викликають довіру джерела:



повідомляють про наступній послідовності дій:


1) До імені користувача приклеюється праворуч текст пароля.


2) У вийшла рядку буквах підвищується регістр.


3) Символи рядка переводяться в багатобайтових формат доповненням зліва нульовим значенням 0x00 (для символів ASCII), і справа рядок дописується нульовими байтами до загальної довжини 80.


4) Отримана рядок шифрується алгоритмом DES в режимі зчеплення блоків шіфротекста (CBC) ключем 0x0123456789ABCDEF.


5) З останнього блоку результату видаляються розряди парності і отриманий рядок (56 розрядів) використовується для нового шифрування заданої стрічки тим же способом.


6) Останній блок результату переводиться в знаки шістнадцятковій арифметики і оголошується кінцевим результатом – сверткой.


Особливості такого алгоритму:



Обхід парольного захисту


Не слід забувати, що приєднання до СУБД може бути виконано в обхід перевірки автентичності паролем. В Unix довірче підключення користувача SYS, що не вимагає вказівки пароля, можливо при роботі від імені користувача ОС, що входить в групу ОС dba, а в Windows – входить в групу ORA_DBA, але ще при додатковому умови, що в файлах sqlnet. ora на клієнтській машині і на сервері є значення NTS для параметра SQLNET.AUTHENTICATION_SERVICES. При закладі ПО Oracle на Windows це значення цього параметра встановлюється автоматично, що часто ігнорується початківцями адміністраторами Oracle на Windows і становить одну з найбільш популярних помилок.


Можливо безпарольного підключення та інших користувачів за умови, що імена таких користувачів в Oracle співвіднесені іменам користувачів ОС або ж вжиті в довіднику каталогів LDAP. Встановлюються такі властивості командами типу:


CREATE/ALTER USER … IDENTIFIED EXTERNALLY


CREATE/ALTER USER … IDENTIFIED GLOBALLY AS … 


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


Користувачі Oracle з подібними властивостями теж можуть мати привілеєм SELECT ANY TABLE, що дозволяє читати будь-які згортки (з урахуванням застереження, зробленої вище).


Крім того, привілеєм SELECT ANY TABLE володіють і багато користувачів-схеми, штатно включаються до складу БД в Oracle. Якщо адміністратор не змінить початково встановлені для них паролі, виникає ризик несанкціонованого прочитання згортки паролів інших користувачів. Список вихідних паролів для багатьох штатних користувачів Oracle можна знайти на http://www.cirt.net/cgi-bin/passwd.pl?method=showven&ven=Oracle і в http://www.oracle.com/technology/deploy/security/pdf/twp_security_checklist_db_database.pdf


Злом пароля


Підбір пароля в Oracle полегшується властивостями прийнятого алгоритму обчислення згортки ([1]). 


А) Зведення алфавіту до одних тільки великим буквах істотно спрощує перебір. Маючи на увазі 26 великих букв латинського алфавіту і 10 цифр, різних паролів довжиною n може бути 36 n , Якщо ж букви могуг бути і великі, і маленькі, їх повне число стає 52, і паролів може бути 62 n . (Може здатися, що ці числа трохи перебільшені, так як Oracle не дозволяє починати пароль з цифри, проте таку перевірку СУБД робить в момент встановлення пароля, а це легко нейтралізувати:


SQL> ALTER USER scott IDENTIFIED BY a;


 User altered. 


SQL> ALTER USER scott IDENTIFIED BY 1;


ALTER USER scott IDENTIFIED BY 1


                               *


ERROR at line 1:


ORA-00988: missing or invalid password(s) 


SQL> ALTER USER scott IDENTIFIED BY 1a;


ALTER USER scott IDENTIFIED BY 1a


                               *


ERROR at line 1:


ORA-00988: missing or invalid password(s) 


SQL> ALTER USER scott IDENTIFIED BY “1”


User altered. 


SQL> CONNECT scott/1


Connected


Але навіть якби таке обмеження існувало, воно б не робило погоди в скороченні обсягів перебору).


Б) Знання згортки та імені користувача дозволяє скоротити перебір варіантів.


В) Згортка обчислюється тільки на основі імені та пароля, так що сам підбір можна здійснювати у власній базі, “на стороні”, не залишаючи слідів у вихідній базі і не відчуваючи проблем з’єднання з нею.


Г) Хоча складність злому шифрування DES досить велика, за нинішніми мірками цей алгоритм вже не вважається досить стійким ( http://en.wikipedia.org/wiki/Data_Encryption_Standard ). 


Сам підбір можливий як на основі списків найбільш вживаних паролів, так і грубим перебором.


На http://www.red-database-security.com/software/checkpwd.html наводиться приклад програми, підбирає пароль перебором, відштовхуючись від відомого імені користувача і відомої згортки. Ще одне посилання на подібну програму приведена в [1]: Це програма RainbowCrack ( http://www.antsight.com/zsl/rainbowcrack/ ). Наведене час розпізнавання 8-символьного пароля для користувача SYSTEM останньої програмою приблизно 4 хвилини, тим не менш оригінальна програма потребувала коригування. Є й інші подібні програми.

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


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

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

Ваш отзыв

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

*

*