News zu Oracle

Mehr Pass­wort­si­cher­heit mit wenig Aufwand

Dass für Da­ten­bank­pass­wör­ter ab Oracle Version 11g in Groß-/K­lein­schrei­bung un­ter­schie­den wird, dürfte mitt­ler­wei­le hin­läng­lich bekannt sein. Dass sich allein dadurch al­ler­dings die Pass­wort­si­cher­heit nur marginal ver­bes­sert hat, eher weniger. Der heutige DBA-Tipp erklärt, warum auch seit Oracle 11g das Passwort ohne weiteres Zutun nicht we­sent­lich sicherer ist und was man tun kann, um tat­säch­lich von den neuen, besseren Hash­al­go­rith­men zu profitieren.

Ein­lei­tung

Die Ver­wen­dung case-sen­si­ti­ver Pass­wör­ter erhöht den Suchraum für eine Attacke auf Pass­wort­hash­es erheblich – soweit zur Theorie. Die Oracle Datenbank speichert al­ler­dings per Default und bis hinein in die aktuelle Version zu­sätz­lich zu den sicheren Hashes auch weiterhin den Hash der case-in­sen­si­ti­ven 10g-Variante des Pass­wor­tes ab und macht den Vorteil damit ei­gent­lich wieder zunichte. Hin­ter­ge­dan­ke dabei ist, dass die Kom­pa­ti­bi­li­tät mit älteren Clients und somit älteren Au­then­ti­sie­rungs­pro­to­kol­len und Hash­al­go­rith­men gewahrt bleiben soll. Da die alten Pass­wort­hash­es sehr simpel aufgebaut sind (Passwort, Username als SALT), sind sie ein sehr beliebtes An­griffs­ziel für Pass­wort­at­ta­cken. Username (user$.name) und Pass­wort­hash (user$.password) sind relativ einfach aus der Datenbank er­mit­tel­bar, ins­be­son­de­re bei zu weit­rei­chend ver­ge­be­nen Pri­vi­le­gi­en. Der Rest ist mit durch­schnitt­li­cher Re­chen­leis­tung (und wahlweise einem Dic­tion­a­ry) schnell erledigt. 

In den meisten Fällen ist diese von Oracle hier an­ge­bo­te­ne Ab­wärts­kom­pa­ti­bi­li­tät jedoch gar nicht er­for­der­lich. Cli­ent­in­stal­la­tio­nen können und sollten (spä­tes­tens) im Zuge eines Oracle-Updates ohnehin durch aktuelle Software ersetzt werden.

Welche Cli­ent­ver­sio­nen un­ter­stützt werden und welche Pass­wort­ver­sio­nen dabei zum Einsatz kommen, ergibt sich aus einem Zu­sam­men­spiel von ge­stat­te­ten Au­then­ti­sie­rungs­pro­to­kol­len und in der Oracle Datenbank ab­ge­spei­cher­ten Pass­wort­ver­sio­nen. Nur wenn beides zu­ein­an­der passt, ist eine er­folg­rei­che Anmeldung an der Datenbank möglich.

Au­then­ti­sie­rungs­pro­to­kol­le

Die zu­läs­si­gen Au­then­ti­sie­rungs­pro­to­kol­le werden über den SQL*Net-Parameter

  • SQLNET.ALLOWED_LOGON_VERSION (bis 11gR2)

    be­zie­hungs­wei­se

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER (ab 12c)

kon­fi­gu­riert. Sie können auf 8 (default bis 11gR2), 9, 10, 11 (default in 12c), 12 und 12a (nur in 12.1.0.2 verfügbar) gesetzt werden, wobei hin­sicht­lich der hier be­han­del­ten Spei­che­rung der Pass­wort­ver­sio­nen in der Datenbank nur die Un­ter­schei­dung in

  • 8–11,
  • 12 und
  • 12a

prak­ti­sche Relevanz besitzt. Die feinere Abstufung hat dann nur noch Aus­wir­kun­gen auf die un­ter­stütz­ten Cli­ent­ver­sio­nen und ist in der Oracle Database Net Services Reference aus­führ­li­cher be­schrie­ben (https://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF2016).

Pass­wort­ver­sio­nen

Abhängig von der in der sqlnet.ora des Servers gesetzten Au­then­ti­sie­rungs­pro­to­koll­ver­si­on werden bei Vergabe eines Pass­wor­tes folgende Pass­wort­ver­sio­nen angelegt

ALLOWED_LOGON_VERSION_SERVER
Passwort Version 10g
Passwort Version 11g
Passwort Version 12c
8, 9, 10 oder 11 
12 
12a 

Wie der Tabelle zu entnehmen ist, sind also alle Au­then­ti­sie­rungs­pro­to­koll­ver­sio­nen kleiner als 12 zu vermeiden. An­dern­falls werden, neben den besseren 11g- und 12c-Pass­word­ver­sio­nen auch die simpler an­greif­ba­re 10g-Variante in der Oracle Datenbank abgelegt. Die emp­foh­le­ne Au­then­ti­sie­rungs­pro­to­koll­ver­si­on ist 12 und wird für alle Clients ab Version 11.2.0.3 un­ter­stützt. Oder für ältere Clients, die mit Critical Patch Update October 2012 oder einem ak­tu­el­le­ren CPU/PSU gepatcht wurden. Pro­to­koll­ver­si­on 12a ist zwar die sicherste, schränkt jedoch die Clients auf Version 12.1.0.2 oder höher ein und könnte daher Probleme mit An­wen­dungs­zer­ti­fi­zie­run­gen nach sich ziehen.

Das Ändern der  zu­läs­si­gen Au­then­ti­sie­rungs­pro­to­kol­le in der sqlnet.ora erfordert keinen Neustart von Ser­ver­kom­po­nen­ten. Al­ler­dings kommt sie erst bei Neu­ver­ga­be eines Pass­wor­tes und dann natürlich auch nur für den be­trof­fe­nen Account zum Tragen. Das Anheben der Au­then­ti­sie­rungs­pro­to­koll­ver­si­on ist also nur in Ver­bin­dung mit der Neu­ver­ga­be aller Passworte (in einer neu ge­star­te­ten Session!) wirklich sinnvoll.

DBA_USERS. PASSWORD_VERSIONS

Welche Pass­wort­ver­sio­nen letzt­end­lich für die einzelnen Accounts tat­säch­lich in der Oracle Datenbank vorliegen, kann in der Spalte PASSWORD_VERSIONS der View DBA_USERS überprüft werden. Idea­ler­wei­se sollten hier keine Accounts auf­tau­chen, in denen noch „10G“ gelistet ist.

Beispiel

In der sqlnet.ora eines 12c-Servers wird

SQLNET.ALLOWED_LOGON_VERSION_SERVER=11 

gesetzt und ein Account neu angelegt:

$ echo 'SQLNET.ALLOWED_LOGON_VERSION_SERVER=11' >$OH/network/admin/sqlnet.ora

SQL> create user foo identified by bar;

User created.

SQL> select dba_users.PASSWORD_VERSIONS, user$.PASSWORD, user$.SPARE4 from dba_users, user$ where username=name and name='FOO'

PASSWORD_VERSIONS
--------------------
PASSWORD
---------------------------------------------------------------------
SPARE4
---------------------------------------------------------------------
10G 11G 12C
707156934A6318D4
S:CD62E86C632E9C16083796C1DD1E6930BADFD3856D34A9C4132CA7F7195
2;H:0D24086E9AB9A4C77292577B1416838F;T:D681B8FA82F2FF2D5A7B09
BA1C27BC8024E5708F56E9307F714F2A4D02F7B248D1B57949FBE3A2A1E6E
960F0E23AF585620E95EE97D3A2390CDCABD78BEF4EA8B982295DCE94CDC6
565FC269CCAD0368

Mit  Au­then­ti­sie­rungs­pro­to­koll­ver­si­on 11 (oder kleiner) werden in einer 12c-Datenbank also alle drei Pass­wort­ver­sio­nen ab­ge­spei­chert (dba_users.PASSWORD_VERSIONS=‘10G 11G 12C’):

  • die 10g-Pass­wort­ver­si­on in user$.PASSWORD (Wert: 707156934A6318D4)
  • die 11g-Pass­wort­ver­si­on in user$.SPARE4 (Wert: S:CD6…952) und 
  • die 12c-Pass­wort­ver­si­on in user$.SPARE4 (Wert: H:0D2…38F;T:D681…368)

Ändern wir SQLNET.ALLOWED_LOGON_VERSION_SERVER in der sqlnet.ora des Servers auf den Wert 12 und setzen das Passwort des users „foo“ neu, ist die 10g-Pass­wort­ver­si­on nicht mehr zu finden (dba_users.PASSWORD_VERSIONS=‘11G 12C’, user$.PASSWORD is NULL):

$ echo 'SQLNET.ALLOWED_LOGON_VERSION_SERVER=12' >$OH/network/admin/sqlnet.ora

SQL> alter user foo identified by bar ;

User altered.

SQL> select dba_users.PASSWORD_VERSIONS, user$.PASSWORD, user$.SPARE4 from dba_users, user$ where username=name and name='FOO';

PASSWORD_VERSIONS
--------------------
PASSWORD
---------------------------------------------------------------------
SPARE4
---------------------------------------------------------------------
11G 12C
S:C0BE960A205C6E246AC55EAA4B58D1387E735788609647871F46B2A6D72
F;H:0D24086E9AB9A4C77292577B1416838F;T:82C1928C0C0113CF1F6399
94FBDA542601889348B42FBD8E895D9533BABE1B5EC35AA435DF9D0279A16
124536283579F69DC7ED5A4B42A9B8D4438630CFCD3E9F31AE96E2E93FEBD
9F06673C60B1EF78

Fazit

Grund­sätz­lich ist die Pass­wort­si­cher­heit mit Ein­füh­rung case-sen­si­ti­ver Passworte und dem Einsatz sicherer Hashes ab Oracle Database 11g gestiegen. Diese Ver­bes­se­run­gen kommen aber nur dann si­gni­fi­kant zum Tragen, wenn die

  • Cli­ent­in­stal­la­tio­nen im Un­ter­neh­men auf einen modernen Stand angehoben,
  • die Nutzung alter Clients un­ter­bun­den und
  • alle alten, un­si­che­ren Hashes aus der Datenbank entfernt werden.

Dabei können die beiden letzt­ge­nann­ten Punkte durch simples Anpassen der sqlnet.ora und Neu­ver­ga­be der Da­ten­bank­pass­wor­te mit über­schau­ba­rem Aufwand umgesetzt werden. Der Gegenwert ist eine Datenbank, die gegen dic­tion­a­ry-basierte- oder brute-force-Pass­wort­at­ta­cken besser geschützt ist.

Hier findest du weitere Posts zu den Themen Security bzw. weitere DBA Tipps rund um Da­ten­ban­ken aus unserem Insights & Updates Bereich.

icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email