4 Minuten Lesezeit (827 Worte)

CTF - Capture the Flag: Die Machen das mit “Links”!

Die ORDIX AG nimmt auch in diesem Jahr an der DOAG-Konferenz teil – einem der wichtigsten Treffpunkte der deutschen Oracle Community. Doch dieses Mal wollen wir nicht "nur" wie gewohnt Fachvorträge halten, sondern etwas Neues machen: Eine interaktive Vortragsreihe mit dem Fokus auf Datenbank-Security! In diesem Artikel geht es um das Thema Datenbanklinks. 

Passwörter von Links sind häufig eine kritische Hürde bei Migrationen von Datenbanken; gerade bei der Anpassung der hinterlegten Zielinformationen. Diese sind erforderlich, um die Datenbankverbindungen korrekt zu rekonstruieren. Doch häufig sind gerade Passwörter der Zielbenutzer nicht verfügbar. Aus Sicherheitsgründen werden diese nicht abgelegt oder nicht dokumentiert. Diese Situation kann den Migrationsprozess erheblich verkomplizieren und den Aufwand für die Administration steigern. In diesem Artikel beleuchten wir, warum dieses Problem auftritt und welche Lösungsansätze es gibt, um diese Herausforderung zu meistern. 

Das Problem

Wie häufig kommt es im Datenbankumfeld zu Migrationen? Oft sind es Hardwaremigrationen, die Verschiebungen von Pluggable Databases zwischen Containern aber auch die Trennung von Teilapplikationen, die eine Migration erforderlich machen. Diese administrativen Aufgaben erfordern es, die Metadaten von Datenbanklinks anzupassen. Die notwendige Adaption liegt in der Definition eines Datenbanklinks begründet.

Generell wird in vier verschiedene Arten von Datenbanklinks unterschieden. Das erste Unterscheidungsmerkmal ist, ob der Link als "Public" definiert ist oder lediglich für einen dedizierten Benutzer verwendbar ist. Für die Migrationsstrategie spielt dieser Unterschied keine Rolle. Aus sicherheitsrelevanten Gründen wird jedoch empfohlen, auf die Verwendung von öffentlichen Links zu verzichten.

Von entscheidender Bedeutung für die Verlagerung von Datenbanken oder Datenbankschemata ist die Unterscheidung, ob die Links auf den aktuellen Benutzer verweisen oder einen zentralen, in der Zieldatenbank zu definierenden Benutzer ansprechen. IIm ersten Fall muss der Ausgangsbenutzer dem Zielschema im Namen als auch im Passwort entsprechen. In der Praxis wird dieses Konstrukt selten verwendet, ist aber technisch valide. Die zweite Option, den Link auf einen zentralen Benutzer auf der Remoteseite zu definieren, erfordert das Passwort der Gegenseite.

Ein weiterer entscheidender Aspekt, der sich auf die Migrationsstrategie von Datenbanklinks auswirkt, ist die Definition des Zielservers. Der Angabe eines TNSNAMES-Alias steht der Möglichkeit, die Verbindungsinformationen fest in der Linkdefinition zu übergeben, gegenüber. 

-- Verbindung über TNSALIAS
-- a) tnsnames.ora

remotedb =
	(DESCRIPTION =
	  (ADDRESS = (PROTOCOL = TCP)(HOST = remotedb.ordix.de)(PORT = 1521))
	  (CONNECT_DATA = (SERVICE_NAME = ORCL))
    )
    
-- Linkerzeugung

CREATE DATABASE LINK remotedb
CONNECT TO ordix IDENTIFIED BY <password>
USING 'REMOTEDB';

-- Direkte Verbindungsdetails

CREATE DATABASE LINK remotedb
CONNECT TO ordix IDENTIFIED BY <password>
USING '(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = remotedb.ordix.de)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL)))';
 
Durch eine Migration können sich Datenbankname, Servicename, Hostname, der Port oder das Protokoll ändern. Für den Fall der Fälle, dass der Link über einen TNS-Alias definiert ist, kann dieser im einfachsten Falle geändert werden. Dieses Vorgehen kann bei standardisierten Namenskonventionen jedoch zu Inkonsistenzen führen. Sollten die Details zur Remotedatenbank im Link definiert sein, muss dieser neu erzeugt werden. In der Praxis ist das Passwort wegen unzureichender Dokumentationen oder aus Sicherheitsgründen nicht in jedem Fall bekannt. Die Datenbanklinks können also nicht einfach neu erstellt werden.

Gibt es nun eine Möglichkeit, die Links, ohne eine Passwortänderung des Zielschemas zu erstellen? 

Die Lösung

Ja, es ist möglich. Die Passwörter und die "Salts" mit denen sie erweitert werden, sind in der Datenbank hinterlegt. Eine Prozedur zum Entschlüsseln der Datenbank-Link Passwörter findet man unter
https://github.com/hatem-mahmoud/scripts/blob/master/db_link_password_decrypt.sql . 

Die Prozedur db_link_password_decrypt erwartet zwei Übergabeparameter, die aus der Datenbank ausgelesen werden können.

  • Wert der Spalte value$ für NO_USER_ID_SALT der Tabelle sys.props$
  • Wert der Spalte Passwordx für den entsprechenden Databaselink Namen der Tabelle sys.link$

Beides sind Tabellen der internen Schicht des Data Dictionary. Die Porperties-Tabelle (props$) liefert Datenbankgrundeinstellungen, wie in diesem Falle den Salt, mit dem die Link-Passwörter erweitert werden. Die Link-Tabelle (link$) speichert die Metadaten der gespeicherten Linkobjekte, wie unter anderem auch Namen und Passwort. 

SQL> select value$ from sys.props$ where name='NO_USERID_VERIFIER_SALT';

VALUE$
-----------------------------------------------------------
B1C8F128459F84EA6068906C6368712F

select PASSWORDX from sys.link$ where name like 'REMOTEDB';
PASSWORDX
----------------------------------------------------
07857A5CDEB439CF3DE2B1D142<langer String gekürzt> 

Mit den zwei ermittelten Werten kann die Prozedur ausgeführt werden und man erhält das entschlüsselte Passwort des Zielbenutzers der Ferndatenbank. Links können jetzt mit diesen Informationen nach erfolgter Migration der Datenbank entsprechend neu aufgebaut werden, auch wenn die Dokumentation dieser Passwörter nicht erfolgt ist. 

exec 
DB_LINK_PASSWORD_DECRYPT('B1C8F128459F84EA6068906C6368712F','07857A5CDEB439CF3DE2B1D142<langer String gekürzt>');

----------Decrypting DB Link password--------------
Initialization_vector :
01010300000100010002000001000001
---------------------------------------------------
Ciphertext :
7AED9E5CF9D728574AE1354886461FCC0A3E3586C4F8150FD2C2FCF58B239D4B
---------------------------------------------------
Encryption key part 1 :
2A5865CFF71B9BE721C81F553BE7FD6F827089EE62D2F869C2E8E33EA05DEC0F
Encryption key part 2 :
D25C85CFCEE9D93EA8D6C4894BAC732CC8944D1A504DD99EF5A9147B16001D5B
---------------------------------------------------
Encryption key  (Part 1 XOR Part 2) :
F804E00039F242D9891EDBDC704B8E434AE4C4F4329F21F73741F745B65DF154
---------------------------------------------------
Decrypted string: Password!Link09
Decrypted string: 124F72636C5F4C696E6B5F313132345F67426661D083ADD7059CA9DB7F5E9E94

PL/SQL procedure successfully completed.
 

Fazit

Ist es nötig Datenbanklinks auf der Ausgangsseite des Links anzupassen, müssen diese in der Datenbank neu erstellt werden. Die Definition mit den Passwort Hashes ist syntaktisch wie bei Benutzern (identified by values) nicht möglich. Sollten sich Namenskonventionen oder Zieldatenbanknamen ändern, ist es nicht sauber, wenn Standards aufgebrochen werden. Alle nötigen Informationen werden in der Datenbank vorgehalten. Die beschriebene Lösung hilft die Hindernisse der Linkmigration aufzuweichen und zu einer erfolgreichen Migrationsstrategie beizusteuern. 

Senior Chief Consultant bei ORDIX.

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Sonntag, 17. November 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.

Weitere Artikel in der Kategorie