News zu Oracle

Passworte (halbwegs) sicher weggeschlossen – der Secure External Password Store

Oracle adres­siert mit dem Secure External Password Store (SEPS) das allseits präsente Problem, dass Logindaten für den Datenbankzugriff im Klartext lesbar in Scripts und  Configfiles abgelegt sind. Er erlaubt es, Logincredentials 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:

  • Connectstring zur Datenbank (der gleich­zeitig den Indexbegriff im Password Store darstellt)
  • Username
  • Passwort

Für die Einrichtung und Nutzung eines Secure External Password Store sind folgende Schritte erforderlich:

Anlegen des Wallets

Für das Anlegen des Password Stores verwendet man bis Verison 11.1 ausschließ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 hinzu­ge­kommene Option ‑auto_login_local verhindert laut Oracle, dass ein gestoh­lener Password Store von einem anderen User oder auf einem anderen Computer missbräuchlich verwendet werden kann. Warum das so leider nicht stimmt, wird gegen Ende des Artikels in der Bewertung erklärt. Der entspre­chende 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 Credentials. Der Password Store ist übrigens immer mit einem Kennwort geschützt, dass beim Erstellen des Store festgelegt wird. Man benötigt es sowohl für Schreibzugriffe als auch zum Auflisten des Inhaltes. Der Zugriff auf die Credentials für die Verbindung zu einer Datenbank erfolgt hingegen durch ein impli­zites Autologin.

[oracle@client(client11gR2 orcl) wallets]$ mkstore -wrl /u01/app/oracle/product/11.2.0/client_1/owm/wallets/seps -create
Oracle Secret Store Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.

Enter password:

Enter password again:

Eintragen der Credentials

Wie bereits erwähnt, besteht jeder Eintrag im Password Store aus einem Triple von Connectdescriptor, Username und Kennwort. Ein Password Store kann mehrere Credentials aufnehmen. Welcher dieser Einträge letztlich für die Anmeldung an der Datenbank gezogen wird, richtet sich nach dem Connectdescriptor. Der Wert, der als Connect zur Datenbank verwendet wird, ist gleich­zeitig auch der Credential-Index im Password Store. Da es sich dabei um reines Stringmatching handelt, steht dem Benutzer frei, ob er für die Einträge im Password Store Net Service Names oder ausfor­mu­lierte Connectstrings verwendet.

Wichtig ist nur, dass dann auch beim Connect zur Datenbank der richtige Net Service Name bzw. der bis hin zu Leerzeichen etc. exakt überein­stim­mende Connectstring verwendet werden. Aufgrund der wesentlich besseren Lese- und Wartbarkeit sollte natürlich dem Net Service Name gegenüber dem ausfor­mu­lierten Connectstring der Vorzug gegeben werden. Müssen in ein und dem selben Password Store unter­schied­liche Credentials für die selbe Datenbank abgelegt werden, muss natürlich zwangs­läufig für jedes Credential ein separater Net Service Name angelegt werden, da nur über den  Net Service Name der richtige Username angesprochen werden kann.

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

Wir hinter­legen z.B. den User OE mit dem Kennwort „oe“ folgen­der­maßen (der Net Service Name ORCL4OE wird weiter unten eingerichtet).

[oracle@client(client11gR2 orcl) wallets]$ mkstore \
   -wrl /u01/app/oracle/product/11.2.0/client_1/owm/wallets/seps \     -createCredential ORCL4OE oe oe

Oracle Secret Store Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, 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 einge­geben werden. Ebenso kann ein Connectstring anstelle eines Net Service Names verwendet werden. Wirklich übersichtlich ist das dann aber nicht mehr.

[oracle@client(client11gR2 orcl) wallets]$ mkstore \
    -wrl /u01/app/oracle/product/11.2.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 : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, 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

Einrichten von Net Service Names in der tnsnames.ora

Hat man Net Service Names als Credentialindex gewählt, müssen die entspre­chenden Net Service Names natürlich in der tnsnames.ora des Clients konfi­gu­riert werden.

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

Aktivieren 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=TRUEa

Wallet_location weist den Weg zum Password Store und wallet_override verhindert, dass der Client versucht, das Wallet für eine SSL-Authentisierung zu verwenden.

Damit sind alle Voraussetzungen erfüllt, um zukünftig ohne explizite Angabe eines Kennwortes eine Verbindung zur Datenbank herzustellen:

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

SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 10 19:33:07 2013

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


Connected to:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL> show user
USER is "OE"
SQL>
[oracle@client(client11gR2 orcl) ~]$ sqlplus /@'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))'

SQL*Plus: Release 11.2.0.3.0 Production on Thu Oct 10 19:38:33 2013

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


Connected to:
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

SQL> show user
USER is "FOO"
SQL>

Ändert sich das Passwort eines Datenbanknutzers, muss die Änderung natürlich auch entspre­chend im Passwort Store erfolgen:

SQL> alter user oe identified by "oracle";

User altered.

[oracle@client(client11gR2 orcl) ~]$ mkstore \
    -wrl /u01/app/oracle/product/11.2.0/client_1/owm/wallets/seps \     -modifyCredential ORCL4OE orcl oracle

Oracle Secret Store Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, 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 ‑listCredential Option auflisten:

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

Oracle Secret Store Tool : Version 11.2.0.3.0 - Production
Copyright (c) 2004, 2011, 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 verspricht mit dem Einsatz des Secure External Password Store einen deutlichen Sicherheitsgewinn, da Passworte nun nicht mehr im Klartext abgelegt sind. Zudem soll das Deployment von Logininformationen einfacher sein. Beides ist grund­sätzlich richtig. Nichts desto trotz sollte man bei aller Euphorie folgendes im Hinterkopf behalten:

  • Ein Secure External Password Store ist nicht weniger schutz­würdig als ein Script oder Configfile, das Credentials im Klartext enthält. Ein gestoh­lener Secure External Password Store erlaubt dem Besitzer Zugang zu Datenbanken ohne Kenntnis von Kennworten, sofern er die im Wallet hinter­legten Credential-Indexes kennt und, bei Verwendung von Net Service Names, die richtigen Connectinformationen rekon­stru­ieren kann. Er kann jedoch die Credential-Indexes nicht durch Auflisten des Walletinhaltes heraus­finden, ohne das Wallet-Kennwort zu wissen.

  • Die von Oracle in 11.2 in orapki imple­men­tierte ‑auto_­log­in_­local-Option ist, auch wenn anders behauptet, kein wirksamer Schutz gegen die missbräuch­liche Benutzung gestoh­lener Password Stores. Zwar wird behauptet, dass ein ‑auto_login_local erstelltes Wallet nicht auf einem anderen Computer benutzt werden kann. Tatsächlich werden aber im Wallet nur Betriebssystem-Nutzername des Erstellers und der Hostname des Computers abgelegt, auf dem das Wallet erstellt wurde. Diese Informationen lassen sich jedoch auf einem Drittcomputer ohne nennens­werten Aufwand nachbilden.

Fazit

Der Oracle Secure External Password Store bietet eine Möglichkeit, Klartext-Credentials aus Scripts und Configfiles zu verbannen und damit ein Plus an Sicherheit zu erreichen. Ein merklicher Vorteil ist die Tatsache, dass Credentials auf diese Art nicht mehr in Anwendungscode hinterlegt werden müssen und damit z.B. außerhalb des Zugriffs von Anwendungsentwicklern bleiben können. Auch das Ausspähen von Passworten aus Filesystembackups kann so unter­bunden werden. Allerdings stellen auch die Password Stores ein riskantes Angriffsziel dar und müssen ebenso gut wie Klartext-Credentials gegen Diebstahl gesichert werden. Ein Zugang zu einem Computer in einer Form, die das Auslesen von Klartext-Credentials ermög­lichte, erlaubt auch den Diebstahl des Password Stores.

Gemäß MOS Doc ID 340559.1 ist der Oracle Secure Password Store kostenfrei in allen Datenbankeditionen verfügbar:
„The feature Secure External Password Store can be used without any restriction in all product editions, you do not require a license for the Advanced Security Option (ASO).“

Was du noch alles tun kannst, um mehr Passwortsicherheit zu erlangen, haben wir für dich in unserem Post “Mehr Passwortsicherheit mit wenig Aufwand” zusam­men­ge­stellt.
Hier findest du weitere Posts zu den Themen Security bzw. weitere DBA Tipps rund um Datenbanken aus unserem News Bereich. 
icon-arrow_right_medium-violet-blue.svg

Share this article

Share on facebook
Facebook 
Share on twitter
Twitter 
Share on linkedin
LinkedIn 
Share on xing
XING 
Share on whatsapp
WhatsApp 
Share on email
Email