News zu Oracle

DBA Tipp: Passworte (halbwegs) sicher weg­ge­schlos­sen – der Secure External Password Store

Es gibt Themen und Inhalte, die auch nach Jahren ihre Ak­tua­li­tät und Relevanz nicht verlieren. Deshalb freuen wir uns, dir heute einen unserer beliebten Beiträge aus dem Jahr 2021 erneut und frisch auf­ge­mö­belt zu prä­sen­tie­ren. Warum? Weil die darin ent­hal­te­nen In­for­ma­tio­nen und Er­kennt­nis­se nach wie vor genauso wichtig und wertvoll sind wie damals. Es geht um den Oracle Secure External Password Store (kurz: SEPS).

Oracle adres­siert mit dem Secure External Password Store das allseits präsente Problem, dass Log­in­da­ten für den Da­ten­bank­zu­griff im Klartext lesbar in Scripts und  Con­fig­files abgelegt sind. Er erlaubt es, Log­in­cre­den­ti­als in Oracle Wallets zu speichern und somit gegen all zu leichten Zugriff von außen zu schützen.

Ein Eintrag im Secure External Password Store besteht aus drei Teilen:

  • Con­nect­string zur Datenbank (der gleich­zei­tig den In­dex­be­griff im Password Store darstellt)
  • Username
  • Passwort


Welche Schritte für die Ein­rich­tung und Nutzung eines Secure External Password Stores er­for­der­lich sind und wie wir das Ganze bewerten, liest du in dem folgenden Beitrag.

Schritt 1: Anlegen des Wallets

Für das Anlegen des Password Stores verwendet man bis Verison 11.1 aus­schließ­lich das Secret Store Tool „mkstore“:

mkstore -wrl /pfad/zum/wallet -create

Ab 11.2 wird empfohlen, den Password Store mit dem Wallet-Tool „orapki“ anzulegen. Die dort neu hin­zu­ge­kom­me­ne Option ‑auto_login_local ver­hin­dert laut Oracle, dass ein ge­stoh­le­ner Password Store von einem anderen User oder auf einem anderen Computer miss­bräuch­lich verwendet werden kann. Warum das so leider nicht stimmt, wird gegen Ende des Artikels in der Bewertung erklärt. Der ent­spre­chen­de Befehl wäre:

orapki wallet create -wallet /pfad/zum/wallet -auto_login_local

Legen wir also einen Password Store an und füllen ihn mit Cre­den­ti­als. Der Password Store ist übrigens immer mit einem Kennwort geschützt, das beim Erstellen des Store fest­ge­legt wird. Man benötigt es sowohl für Schreib­zu­grif­fe als auch zum Auflisten des Inhaltes. Der Zugriff auf die Cre­den­ti­als für die Ver­bin­dung zu einer Datenbank erfolgt hingegen durch ein im­pli­zi­tes Autologin.

[oracle@client(orcl) wallets]$ mkstore -wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps -create
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved.

Enter password:

Enter password again:

Schritt 2: Eintragen der Credentials

Wie bereits erwähnt, besteht jeder Eintrag im Password Store aus einem Triple von Con­nect­de­scrip­tor, Username und Kennwort. Ein Password Store kann mehrere Cre­den­ti­als aufnehmen. Welcher dieser Einträge letztlich für die Anmeldung an der Datenbank gezogen wird, richtet sich nach dem Con­nect­de­scrip­tor. Der Wert, der als Connect zur Datenbank verwendet wird, ist gleich­zei­tig auch der Cre­den­ti­al-Index im Password Store. Da es sich dabei um reines String­mat­ching handelt, steht dem Benutzer frei, ob er für die Einträge im Password Store Net Service Names oder aus­for­mu­lier­te Con­nect­strings verwendet. Auch die Ver­wen­dung der ezconnect-Syntax ist möglich.

Wichtig ist nur, dass dann auch beim Connect zur Datenbank der richtige Net Service Name bzw. der bis hin zu Leer­zei­chen etc. exakt über­ein­stim­men­de Con­nect­string verwendet werden. Aufgrund der we­sent­lich besseren Lese- und Wart­bar­keit sollte natürlich dem Net Service Name gegenüber dem aus­for­mu­lier­ten Con­nect­string der Vorzug gegeben werden. Müssen in ein und dem selben Password Store un­ter­schied­li­che Cre­den­ti­als für die selbe Datenbank abgelegt werden, muss natürlich zwangs­läu­fig für jedes Cre­den­ti­al ein separater Net Service Name angelegt werden, da nur über den  Net Service Name der richtige Username an­ge­spro­chen werden kann.

mkstore -wrl /pfad/zum/wallet \
   -createCredential Connectdescriptor Username [Kennwort]

Wir hin­ter­le­gen z.B. den User OE mit dem Kennwort „oe“ fol­gen­der­ma­ßen (der Net Service Name ORCL4OE wird weiter unten eingerichtet):

[oracle@client(orcl) wallets]$ mkstore \
     -wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \ 	
-createCredential ORCL4OE oe oe Oracle Secret Store Tool Release 19.0.0.0.0 - Production Version 19.4.0.0.0 Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Enter wallet password: Create credential oracle.security.client.connect_string1

Das Kennwort muss nicht zwingend an der Console angegeben werden. Es wird bei Bedarf auch abgefragt und kann verborgen ein­ge­ge­ben werden. Ebenso kann ein Con­nect­string anstelle eines Net Service Names verwendet werden. Wirklich über­sicht­lich ist das dann aber nicht mehr.

[oracle@client(orcl) wallets]$ mkstore \
	-wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \
 	-createCredential '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))' foo

Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved.

Your secret/Password is missing in the command line
Enter your secret/Password:

Re-enter your secret/Password:

Enter wallet password:

Create credential oracle.security.client.connect_string2

Schritt 3: Ein­rich­ten von Net Service Names in der tnsnames.ora

Hat man Net Service Names als Cre­den­tial­in­dex gewählt, müssen die ent­spre­chen­den Net Service Names natürlich in der tnsnames.ora des Clients kon­fi­gu­riert werden.

ORCL4OE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

Schritt 4: Ak­ti­vie­ren des  Secure External Password Store

Über die sqlnet.ora des Clients wird die Nutzung des Secure External Password Store (SEPS) nun noch mittels folgender beider Einträge aktiviert.

wallet_location =
 (SOURCE=
  (METHOD=File)
  (METHOD_DATA=/u01/app/oracle/product/11.2.0/client_1/owm/wallets/seps
   (DIRECTORY=)
  )
 )

 

SQLNET.WALLET_OVERRIDE=TRUE

Wallet_location weist den Weg zum Password Store und wallet_override ver­hin­dert, dass der Client versucht, das Wallet für eine SSL-Au­then­ti­sie­rung zu verwenden.

Damit sind alle Vor­aus­set­zun­gen erfüllt, um zukünftig ohne explizite Angabe eines Kenn­wor­tes eine Ver­bin­dung zur Datenbank herzustellen:

[oracle@client(orcl) wallets]$ sqlplus /@orcl4oe

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 25 13:38:07 2023
Version 19.10.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.10.0.0.0

SQL> show user
USER is "OE"
SQL>
[oracle@client(orcl) ~]$ sqlplus 
/@'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))' SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 25 13:38:07 2023 Version 19.10.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.10.0.0.0 SQL> show user USER is "FOO" SQL>

Ändert sich das Passwort eines Da­ten­bank­nut­zers, muss die Änderung natürlich auch ent­spre­chend im Passwort Store erfolgen:

SQL> alter user oe identified by "oracle";

User altered.

[oracle@client(orcl) ~]$ mkstore \
	-wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \ 	
        -modifyCredential ORCL4OE orcl oracle
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved.

Enter wallet password:

Modify credential
Modify 1

Den Inhalt eines Password Stores lässt man sich mit der ‑list­Creden­ti­al Option auflisten:

[oracle@client(orcl) ~]$ mkstore \
	-wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \ 	
        -listCredential

Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Enter wallet password: List credential (index: connect_string username)
2: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl))) foo
1: ORCL4OE orcl

Bewertung

Oracle ver­spricht mit dem Einsatz des Secure External Password Store einen deut­li­chen Si­cher­heits­ge­winn, da Passworte nun nicht mehr im Klartext abgelegt sind. Zudem soll das De­ploy­ment von Log­in­in­for­ma­tio­nen einfacher sein. Beides ist grund­sätz­lich richtig. Nichts desto trotz sollte man bei aller Euphorie Folgendes im Hin­ter­kopf behalten:

  • Ein Secure External Password Store ist nicht weniger schutz­wür­dig als ein Script oder Con­fig­fi­le, das Cre­den­ti­als im Klartext enthält. Ein ge­stoh­le­ner Secure External Password Store erlaubt dem Besitzer Zugang zu Da­ten­ban­ken ohne Kenntnis von Kenn­wor­ten, sofern er die im Wallet hin­ter­leg­ten Cre­den­ti­al-Indexes kennt und – bei Ver­wen­dung von Net Service Names – die richtigen Con­nect­in­for­ma­tio­nen re­kon­stru­ie­ren kann. Er kann jedoch die Cre­den­ti­al-Indexes nicht durch Auflisten des Wal­let­in­hal­tes her­aus­fin­den, ohne das Wallet-Kennwort zu wissen.

  • Die von Oracle in 11.2 in orapki im­ple­men­tier­te ‑au­to_­log­in­_­lo­cal-Option ist, auch wenn anders behauptet, kein wirksamer Schutz gegen die miss­bräuch­li­che Benutzung ge­stoh­le­ner Password Stores. Zwar wird behauptet, dass ein ‑auto_login_local er­stell­tes Wallet nicht auf einem anderen Computer benutzt werden kann. Tat­säch­lich werden aber im Wallet nur Be­triebs­sys­tem-Nut­zer­na­me des Er­stel­lers und der Hostname des Computers abgelegt, auf dem das Wallet erstellt wurde. Diese In­for­ma­tio­nen lassen sich jedoch auf einem Dritt­com­pu­ter ohne nen­nens­wer­ten Aufwand nachbilden.

Fazit

Der Oracle Secure External Password Store bietet eine Mög­lich­keit, Klartext-Cre­den­ti­als aus Scripts und Con­fig­files zu verbannen und damit ein Plus an Si­cher­heit zu erreichen. Ein merk­li­cher Vorteil ist die Tatsache, dass Cre­den­ti­als auf diese Art nicht mehr in An­wen­dungs­code hin­ter­legt werden müssen und damit z.B. außerhalb des Zugriffs von An­wen­dungs­ent­wick­lern bleiben können. Auch das Ausspähen von Pass­wor­ten aus File­sys­tem­back­ups kann so un­ter­bun­den werden. Al­ler­dings stellen auch die Password Stores ein riskantes An­griffs­ziel dar und müssen ebenso gut wie Klartext-Cre­den­ti­als gegen Diebstahl gesichert werden. Ein Zugang zu einem Computer in einer Form, die das Auslesen von Klartext-Cre­den­ti­als er­mög­lich­te, erlaubt auch den Diebstahl des Password Stores.

Gemäß MOS Doc ID 340559.1 ist der Oracle Secure Password Store kos­ten­frei in allen Da­ten­ban­ke­di­tio­nen verfügbar:
„The feature Secure External Password Store can be used without any rest­ric­tion in all product editions, you do not require a license for the Advanced Security Option (ASO).“

Was du noch alles tun kannst, um mehr Pass­wort­si­cher­heit zu erlangen, haben wir für dich in unserem Post “Mehr Pass­wort­si­cher­heit mit wenig Aufwand” zu­sam­men­ge­stellt.
Hier findest du weitere Posts zu den Themen Security bzw. weitere DBA Tipps rund um Da­ten­ban­ken aus unserem News Bereich. 
icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email