Oracle adatbázis érdekességek, avagy mitől őszül a kezdő DBA – part 4

2011.04.08. 08:06 | Spala Ferenc | 4 komment

Címkék: jelszó oracle audit felhasználókezelés kezdő dba

[A sorozat korábbi részei itt és itt meg itt]

Kivételesen most nem olyasmivel készültem, amivel megszívattam magam :-). A minap auditáltunk Oracle 11gR2-t - ez volt az első, úgyhogy gondoltam leírom a tapasztalatokat - persze az érdekesebbeket :-). Először is a jelszókezelésről néhány szó.

Az első dolog, amit jó ha tud az ember, hogy a 11-es Oracle segít nekünk abban, hogy felderítsük azokat a default accountokat, amik az alapértelmezett jelszavakat használják. Régebben erre még külön tool-t használtunk: checkpwd - Red Database Security. Az új módi azonban ez:

SELECT * FROM DBA_USERS_WITH_DEFPWD;

A másik, amit sokat hirdetnek is, hogy a jelszó politikája sokat fejlődött a 11-es Oracle-nek. Ez igaz is - részben, illetve hát izé… Ha azt nézzük, hogy a 10gR2-ben jelszó politika címén csak a

FAILED_LOGIN_ATTEMPTS = 10

beállítást használták alapértelmezésben, most pedig:

FAILED_LOGIN_ATTEMPTS = 10
PASSWORD_LOCK_TIME = 1
PASSWORD_GRACE_TIME = 7
PASSWORD_LIFE_TIME = 180

Ekkor tényleg mondhatjuk, hogy biztonságosabb lett. Viszont ami becsapós - sőt bevallom még én is rosszul tudtam -, hogy a másik fícsör, miszerint egész jó jelszó komplexitás ellenőrzés is van az új verzióban, alapértelmezésben nem került beállításra.

Egész pontosan azt mondja a hivatalos okosság, hogy ha upgrade-el az ember egy korábbi verzióról vagy DBCA-val csinál egy új adatbázist, akkor azoknál nem lesz bekapcsolva. Márpedig lássuk be, általában DBCA-val csinál az ember új adatbázist. Persze meg lehet reszelgetni, hogy jó legyen nekünk, csak tudni kell hozzá mit hol kell keresni. Van ugyanis egy $ORACLE_HOME/rdbms/admin/utlpwdmg.sql nevű szkript, amiben benne van az új hiper-szuper jelszó komplexitást kikényszerítő függvény (password verifycation function). Nem árt tudni, hogy két függvény is lakik ott, van egy régi (verify_function) és az új (verify_function_11G). Amikor lefuttatjuk a fenti SQL szkriptet, mindkét függvényt betölti, de az utóbbit állítja be a „default” nevű adatbázis profilhoz. És hogy mi is van ebben a gyári jelszó komplexitás ellenőrzésben?

  • Minimum 8 karakteres jelszó
  • Legalább 1 szám és egy betű legyen benne
  • Nem lehet „egyszerű” jelszó
  • A jelszó nem lehet egyenlő a felhasználónévvel
  • A jelszó hossza nem lehet egyenlő a felhasználónév hosszával (he? :-)
  • A jelszó nem lehet ugyanaz, mint a felhasználónév visszafele
  • A jelszó nem lehet ugyanaz, mint a szerver neve vagy a szerver neve valamilyen 1 és 100 közötti számmal postfixelve (pl.: oracle1)

És még egy kis érdekesség:

A 11-es verziótól kezdve az Oracle áttért az SHA-1 algoritmus használatára (megjegyzem, mire ők elkezdték használni, hivatalosan már depricated minősítést kapott az SHA-1, de mindegy is :-). Ennek az újításnak is a hozománya, hogy most már megkülönbözteti a rendszer kis és NAGY betűket a jelszavakban. Egész pontosan egy sec_case_ssensitive_login paraméterrel lehet ezt befolyásolni, ami alapértelmezésben TRUE értéket vesz fel. Ez eddig jó. Viszont, amit tudni kell, hogy ha korábbi verzióról frissítünk, akkor a régi jelszavak esetében amíg nem változtat jelszót a felhasználó, a kis/NAGY betűk továbbra is egyenértékűek lesznek (magyarul case-insensitive a dolog :-)

Sőt még le is tudjuk kérdezni, hogy adott usernek milyen „verziójú” jelszava van.

SELECT username, password_versions FROM dba_users WHERE username='SCOTT';

USERNAME PASSWORD ------------------------------ --------
SCOTT 10G 11G

Ha „10G”-t látunk, akkor még régi, case-insensitive jelszava van, míg a „10G 11G” azt jelenti, hogy már csilli-villi új case-sensitive jelszava van az emberünknek.

 

A bejegyzés trackback címe:

https://aliceesbob.blog.hu/api/trackback/id/tr802808781

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

|Z| 2011.04.08. 15:52:49

PASSWORD_LOCK_TIME = 1
PASSWORD_GRACE_TIME = 7
PASSWORD_LIFE_TIME = 180

9i-ben is volt, ahogy verify_function is. Mivel itt az ember magának írhatja a teljes PL/SQL kódot, bármit beletehet, pl. szótári szó ellenőrzést is.

A 11g SHA-1 jelszavak előnye, hogy SHA-1-et gyorsabb törni, de a salt továbbra is a usernév (viva la SYSTEM rainbow table). Kis hackeléssel megoldható, hogy a régi típusú jelszót be se állítsa. De a case sensitive dolog már tényleg vmi előrelépés :)

Spala Ferenc 2011.04.08. 21:44:23

Jaja, lehetőség volt, de egyik dolog sem volt beállítva alapból, nem?

A sózást írni is akartam, de elfelejtettem a mire megírtam a bejegyzést :))

Spala Ferenc 2011.04.19. 11:28:42

@|Z|: Beszélgettünk erről a témáról Tóth Lacival, azt mondja, hogy a 11g-ben nem a usernév a hash, hanem egy 10 byteos random érték.
+ meggúgliztam és úgy tűnik tényleg: wayne-lang.blogspot.com/2010/07/oracle-password-strength.html (utolsó bekezdés közepe)

|Z| 2011.04.19. 18:41:55

@Spala Ferenc: Jogos, igaz.
Bár félek tőle 5 év múlva is csomó olyan oracle rendszer lesz ahol még a régi hash-eket is használják.
süti beállítások módosítása