Як зламати парольний захист Oracle або як її обійти, Ссітемное адміністрування, Локальні мережі, статті

Царськосельський СТАТУЯ1

Урну з водою впустивши, про скеля її діва розбила.
 Діва сумно сидить, дозвільний тримаючи черепок.
 Чудо! НЕ сякнет вода, виливаючи з урни розбитою:
 Діва над вічної струменем вічно сумна сидить. 

Олександр Сергійович Пушкін

 Дива не бачу я тут. Генерал-лейтенант Захаржевський,

В урні тієї дно просвердливши, воду провів через неї. 

Олексій Костянтинович Толстой 


Введення


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


Наведений матеріал істотно використовує відомості з www.red-database-security(.)com, www.petefinnigan(.)com, http://isc.sans(.)org. 


Реалізація парольного захисту в 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); повного експорту; архівованих журналів.


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


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


–         groups.google.com/group/comp.security.misc/msg/83ae557a977fb6ed?output=gplain


–         isc.sans.org/diary.html?storyid=793 (Далі позначається як [1]) 


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


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


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


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


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


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


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


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


– Згортка не залежить від регістру букв. Наприклад, пари SCOTT / TIGER, Scott / Tiger, scoTT / TigeR дадуть одну і ту ж згортку F894844C34402B67.


– Однакові склеєні пари ім’я_користувача / пароль дають однакову згортку. Наприклад, пари SCOTT / TIGER, SCOT / TTIGER, SCOTTTIG / ER дадуть одну і ту ж згортку F894844C34402B67.


– Згортка не залежить від БД. Наприклад, де б ми не створювали БД Oracle, згортка для користувача SCOTT і пароля TIGER завжди буде F894844C34402B67.


– Використовується шифрування DES.


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


Не варто забувати, що приєднання до СУБД може бути виконано в обхід перевірки автентичності пароля. В 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 можна знайти на www.cirt.net/cgi-bin/passwd.pl?method=showven&ven=Oracle і в 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 ). 


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


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


Відповідь фірми Oracle на слабкості парольного захисту


У відповідь на опублікування 18 жовтня 2005 [1] Фірма Oracle 10 листопада того ж року опублікувала Note: 340240.1 на metalink.oracle.com


Фірма рекомендує використовувати керування паролями за допомогою профілів, зокрема, часто міняти пароль і вибирати паролі не коротше 12 символів.


Приклад функції перевірки виставляються паролів давно є в штатній постачання Oracle в файлі utlpwdmg. sql. Приклад вживання може виглядати так:


SQL> CONNECT / AS SYSDBA


Connected.


SQL> @?/rdbms/admin/utlpwdmg 


Function created. 


Profile altered.


SQL> ALTER USER scott IDENTIFIED BY tiger;


ALTER USER scott IDENTIFIED BY tiger


*


ERROR at line 1:


ORA-28003: password verification for the specified password failed


ORA-20003: Password should contain at least one digit, one character and one punctuation


SQL> ALTER USER scott IDENTIFIED BY tiger_1234567


User altered


SQL> SELECT * FROM user_history$; 


     USER# PASSWORD                       PASSWORD_


———- —————————— ———


        38 F1A76B5340C01290               25-APR-07 


(Сценарій utlpwdmg. Sql не тільки заводить функцію SYS.VERIFY_FUNCTION перевірки обраного користувачем пароля, а й визначає парольні параметри профілю DEFAULT, зокрема PASSWORD_REUSE_TIME. Щоб відмінити їх дію, потрібно виставити командою ALTER PROFILE default … значення парольних параметрів в UNLIMITED).


По-друге, фірма рекомендує захищати всі файли, де може виявитися значення згорток паролів (див. вище).


По-третє, фірма радить захищати передачу даних по Oracle Net, і по-четверте – покладатися на зовнішні системи аутентифікації (“безпарольного”, з точки зору СУБД, підключення, див. вище).


У цьому ж поясненні фірми наводиться посилання на що знаходиться у відкритому доступі документ www.oracle.com/technology/deploy/security/pdf/twp_security_checklist_db_database.pdf з назвою “Oracle Database Security Checklist”, говорить за себе. Документ датований вже січнем 2007 року; знайомство з ним систематизує багато з розглянутого вище.


Незмінним поки залишається найвразливіше місце в парольного захисту Oracle: алгоритм обчислення згортки. Ймовірне рішення цієї проблеми – дочекатися версії 11 СУБД Oracle. За неофіційними даними в цій версії буде-таки введено відмінність великих і малих букв в паролі і алгоритм DES замінений на більш сучасний, SHA-1 або AES ( www.petefinnigan.com/weblog/archives/00000976.htm, www.red-database-security.com/whitepaper/oracle_passwords.html ). Обробка паролів у версіях аж до 10.2, ймовірно, мінятися не буде.

1Обидва вірші маститих поетів, написані з розривом у кілька десятків років, присвячені одній і тій же статуї, дотепер сидить в парку поблизу Катерининського палацу в Царському селі, розташованому неподалік від здається великого міста, але без назви, замість якого на карті знаходиться інше місто, всього за 300 років п’ять разів брав чотири різні історичні назви, два з яких поки що росіяни, а два – німецькі. Одна з рекомендацій, наведених у статті – частіше і різноманітніше міняти паролі користувачів.

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


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

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

Ваш отзыв

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

*

*