Starke und existente Windows Authentisierung nutzen - Kerberos im Einsatz mit Oracle

Kerberos wurde als Authentisierungssystem vom MIT Ende der 1970ziger Jahre entwickelt und erst mit der Version 4 (Ende der 1980ziger) außerhalb der MIT genutzt. Heute ist Kerberos in der Version 5 als sicherer Authentisierungsstandard weit verbreitet. Der Kerberos-Authentisierungsdienst beteiligt drei Komponenten, den Client, der einen Server anfragt, den Server selber und den Kerberos Server. Hierbei authentisieren sich alle Komponenten gegenseitig, um so Man-in-the-Middle-Attacken zu verhindern. Darüberhinaus werden durch Kerberos auch insbesondere Angriffe durch passives Sniffing, Spoofing, Wörterbuch- und Replay-Attacken erschwert bzw. unterbunden. Bei dem Authentisierungsprozess werden sogenannte „Tickets (Ticket Granting Ticket TGT)“ genutzt. Bei einem Windows-Login an eine Windows-Domain wird das Kerberos Ticket sofort nach der Anmeldung erzeugt. Mit diesem Ticket kann der Client dann Berechtigungen für weitere Dienste beim Kerberos Server anfordern, ohne sich erneut anmelden zu müssen. Kerberos überträgt keine Kennwörter und ermöglicht über den Ticketaustausch das bereits angesprochene Single-Sign-on. Während der Authentisierung nutzt Kerberos schnelle symmetrische Schlüssel (DES, 3DES, AES 256, etc.). Typische Anwendungen von Kerberos sind Benutzerauthentisierungen z.B. unter Windows 2000/2003/2008, SSH, Routern u.a..

Kerberos

Abbildung 1: Kommunikationsmodell der Kerberos Authentisierung

Um das sichere Authentisierungsverfahren Kerberos nutzen zu können, müssen Dienste, wie ein Datenbankdienst, mit den Kerberos-Tickets umgehen können. Die Oracle Datenbank beinhaltet bereits seit der Version 7 einen Kerberos Authentication Adapter, der in der damaligen Advanced Networking Option ausgeliefert wurde. Heute ist der Keberos Authentication Adapter Bestandteil der Advanced Security Option. Natürlich findet Kerberos auch in anderen Oracle Lösungen Anwendung wie Oracle Identity Manager, Oracle WebLogic, Oracle HTTP Server u.a..

Vorbereitung der Oracle Datenbank zur Kerberos Nutzung

Folgende Komponenten kommen zum Einsatz: Eine Oracle Datenbank Enterprise Edition 10g R2 mit Advanced Security Option auf einem Linux Rechner und ein Microsoft Windows Server 2003 mit Active Directory als Kerberos Server.

Demo-Umgebung

Abbildung 2: Demo-Aufbau

Eine Datenbank für eine Kerberos-Authentisierung vorzubereiten, ist sehr einfach. Es sind zwei wesentliche Schritte auszuführen. Als erstes muß die Datenbank dem Kerberos Server (also dem Active Directory lt. Abbildung 2) bekannt gemacht werden. Im zweiten Schritt muss die Datenbank so konfiguriert werden, dass diese die Kerberos Authentisierung mit dem Kerberos Server verwendet.

1. Datenbank dem Kerberos Server bekannt machen
Damit der Kerberos Server die Datenbank authentisieren kann, muss die Datenbank einen Benutzer-Account (kein Computer-Account) im Active Directory besitzen. In der Abbildung 3 wird ein Beispiel für den Server „asterix“ dargestellt, auf dem die Oracle Datenbank läuft:

Active Directory Eintrag

Abbildung 3: Datenbank-Eintrag im Active Directory

Als nächstes wird auf dem Active Directory Server eine Datenbank Kerberos Keytab Datei mit einem eindeutigen Service Principal Name SPN (gemapped auf den so eben erstellten Benutzer Account) erstellt, die dann vom Datenbankserver für die Authentisierung verwendet wird. Der SPN wird für die Client-Dienst-Anfrage verwendet. Fragt der Client ein Service Ticket für einen Dienst beim Kerberos Server an, so muss der Client angeben für welchen Service Principal Name er dieses Ticket haben will. Für die Erstellung der Keytab Datei wird das Windows Support Tool KTPASS (auf der MS Windows Server CD zu finden) verwendet.

KEYTAB

Abbildung 4: Erstellung der Keytab mit KTPASS

Entsprechend Abbildung 4 lautet der SPN „ORACLE“. Der verwendete Verschlüsselungsalgorithmus ist „DES-CBC-CRC“ und die Keytab Datei ist „asterix.keytab“. Besonders wichtig bei der Ausführung dieses KTPASS Befehls ist die Klein/Grossschreibung, bitte achten Sie darauf.

2. Datenbank für die Kerberos Authentisierung konfigurieren
Die erstellte Keytab Datei „asterix.keytab“ wird auf den Datenbank Server, typischerweise unter dem Pfad \etc\asterix.keytab, kopiert. Nun muss der Datenbank-Server so eingestellt werden, damit er weiß, wie er den Kerberosserver anzufragen hat. Hierfür müssen die Parameter in den Konfigurtationsdateien krb5.conf und krb5.realms eingestellt werden.

krb5.conf

Abbildung 5: Beispiel krb5.conf Einstellungen

krb.realms

Abbildung 6: Beispiel krb.realms Einstellungen

Bitte achten Sie auch darauf, dass die Namensauflösung (DNS) funktioniert. Nehmen Sie hierfür den Kerberos-Server mit Hostnamen und IP in die HOSTS Datei auf.

Damit der Datenbank Server die eingestellten Kerberos Parameter verwendet, muss zu allerletzt die sqlnet.ora angepaßt werden. Man kann diese Datei direkt verändern oder die Veränderungen mit dem Oracle Net Manager durchführen.

Net Manager

Abbildung 7: Kerberos Authentisierung mit dem Net Manager einstellen (Methode)

Net manager

Abbildung 8: Kerberos Authentisierung mit dem Net Manager einstellen (Parameter)

sqlnet.ora

Abbildung 9: Einstellungen in der sqlnet.ora

Somit ist die Datenbank für die Kommunikation mit dem Kerberosserver vorbereitet.

Kerberos Authentisierung mit der Oracle Datenbank testen

Für den ersten Test auf Funktionstüchtigkeit wird ein neuer Benutzer im Active Directory und in der Oracle Datenbank erstellt. Die Benutzernamen müssen identisch sein. Der Datenbankbenutzer wird als externally angelegt, da wir eine externe Authentisierung nutzen möchten. Zusätzlich bekommt der DB-Benutzer noch einige DB-Berechtigungen:

CREATE USER “SAHOVIC@DE.ORACLE.COM” IDENTIFIED EXTERNALLY;

GRANT CREATE SESSION, RESOURCE TO “SAHOVIC@DE.ORACLE.COM”;

Dieser neue AD-Benutzer meldet sich an die Windows-Domäne an, bezieht ein Kerberos TGT Ticket und authentisiert sich damit (ohne erneute Anmeldung) an die Datenbank.

Für den ersten Test braucht man keinen Windows Login durchführen, sondern kann das TGT Ticket manuell beziehen. Mit dem Oracle Tool okinit wird ein TGT Ticket für den Benutzer SAHOVIC vom Kerberos Server abgeholt. Das Kommando wird auf dem Datenbank Server ausgeführt.

TGT Ticket

Abbildung 10: TGT Ticket mit okinit beziehen

Das TGT Ticket entspricht der Funktion eines SSO Cookies, das als Grundlage für die Erstellung von Session Tickets dient. Das TGT Ticket wird in der Credential Cache Datei abgelegt. Den Inhalt der Credential Cache Datei kann mit dem Tool „oklist“ ausgelesen werden. Das Kerberos TGT Ticket ist vorhanden und nun kann eine externe Authentisierung zur Datenbank durchgeführt werden. Der DB-Benutzer wird bei einem Datenbank-Login an den Kerberos Server weitergeleitet, der dann das Session Ticket für die Datenbank zurückliefert. Das bereits erstellte TGT Ticket dient als Benutzerinformation beim Kerberos Server für die Session Ticket Erstellung.

Die Anmeldung an die Datenbank erfolgt ohne Username/Password, da wir alle Informationen bereits über die Kerberos Tickets bezogen haben.

Kerberos Authentisierung

Abbildung 11: Kerberos Authentisierung an die Datenbank

In der Abbildung 11 sieht man eine erfolgreiche Kerberos Authentisierung gegen die Datenbank und trotz nicht angegebener Benutzerinformation weiß die Datenbank, dass der Benutzer SAHOVIC@DE.ORACLE.COM angemeldet ist. Selbstverständlich ist dieser erste Test keine charmante und transparente Lösung für den Endbenutzer.

Kerberos im Zusammenspiel zwischen Oracle Datenbank, MS Windows Server mit Active Directory und einem MS Windows XP Client

Ein typischer Arbeitstag eines Endbenutzers beginnt in der Regel mit dem Starten seines Rechners und der Anmeldung an eine Windows Domäne. Bei diesem Anmeldeprozess kommt bereits eine Kerberos Authentisierung zum Einsatz. Nach der erfolgreichen Anmeldung des Benutzers speichert der Windows-Client-Rechner sein eben erlangtes Kerberos TGT Ticket in verschlüsselter Form in dem Windows Credential Cache. Dieses TGT Ticket kann man wie bereits erwähnt für die Anmeldung an die Oracle Datenbank nutzen und einen Kerberos-basierten single-Sign-on realisieren.

Windows XP konfigurieren für die Kerberos Anmeldung an die Oracle Datenbank

Der Windows Client (hier XP oder Win2000 Workstation, Vista, Windows7) muss eine Oracle Client Installation aufweisen. Als Minimum ist der Oracle InstantClient zu installieren. In der Oracle Client Installation befindet sich eine sqlnet.ora Datei ($ORACLE_HOME/network/admin), die entsprechend für eine Kerberos-Nutzung anzupassen ist:

Client sqlnet.ora

Abbildung 12: Client sqlnet.ora anpassen

Die Client-seitige sqlnet.ora unterscheidet sich nur minimal von sqlnet.ora auf dem Datenbank-Server. Der Parameter SQLNET.KERBEROS5_CC_NAME mit dem Wert des Credential Cache „OSMSFT://“ besagt, hole die Credential Informationen aus dem Windows Credential Cache. Zusätzlich muss die krb5.conf Datei vom Datenbank-Server auf den Windows Client kopiert und in krb5.ini Datei umbenannt werden. Zu guter Letzt wird die Client-seitige tnsnames.ora Datei mit den Angaben des Datenbank-Servers angepaßt.

Funktionsweise zwischen dem Kerberos Server, der Oracle Datenbank und dem Windows Client überprüfen

Es wurden alle notwendigen Einstellungen am Client vorgenommen, so dass eine Kerberos-Anmeldung an die Datenbank durchgeführt werden kann. Hierzu wird Oracle SQL*Plus verwendet.

Login

Abbildung 13: Login mit SQL*Plus

Die Kerberos Anmeldung ohne Kennwort Eingabe funktioniert. Sicherlich arbeiten nicht alle mit SQL*Plus, sondern verwenden auch andere DB Applikationen wie z.B. Oracle SQL Developer.

Kerberos Datenbank Anmeldung mit Oracle SQL Developer

Der Oracle SQL Developer unterstützt die Kerberos Authentisierung seit der Version 1.5.3. Eine Kerberos Authentisierung muss auch am SQL Developer eingestellt werden. Hierfür muss bei entsprechenden DB Connection das Häkchen für Kerberos gesetzt werden:

SQL DEV

Abbildung 14: DB Connection Einstellung beim SQL Developer

Zu erwähnen ist noch, dass der SQL Developer eine OCI Connection nutzen muss. Diese stellt man in den Preferences ein.

OCI

Abbildung 15: OCI im SQL Developer einstellen

Thin und Thick JDBC

Oracle SQL Developer unterstützt auch eine Kerberos-Authentisierung über JDBC Thin Connection. Dies wird jedoch erst ab einer Datenbank Version 11gR1 unterstützt. In der Abbildung 15 sind für die Thin Konfiguration zwei Eingabefelder (im Bereich Kerberos Thin Config) vorgesehen. Hier wird hinterlegt, wo sich das Kerberos TGT Ticket und der Kerberos Server befinden. Die DB Connection Details wiederum bleiben wie bei einer Kerberos OCI Connection absolut gleich. Um die Funktionstüchtigkeit einer Kerberos DB Anmeldung über eine JDBC Thin Connection zu überprüfen, müsste man vorher manuell ein Kerberos TGT Ticket mit okinit Tool beziehen. Das TGT Ticket ist dann per default 10 Stunden gültig. Das heißt, einmal beziehen und genießen.

Kerberos Datenbank Anmeldung mit Client/Server Java Applikationen

Die Befähigung von Client/Server Java Applikationen, eine Kerberos Authentisierung zu verwenden, ist wiederum abhängig vom benutzten JDBC Treiber. Kann der JDBC Thick Treiber verwendet werden, also eine OCI Connection zur Datenbank aufgebaut werden, dann sieht der Connect String wie folgt aus (ohne Benutzer Informationen):
jdbc:oracle:oci:@10gee92

Bei einer JDBC Thin Connection hingegen müssen die vier Kerberosparameter der sqlnet.ora Einstellung (siehe Abbildung 12) programmtechnisch übergeben werden. Die Parameter haben folgende Bedeutung:

  1. Ort Kerberos Konfigurationsdatei (krb5.ini)

  2. Authentisierungsart

  3. Gegenseitige Authentisierung aktivieren

  4. Pfad der Credential Cache Datei

Der Code für das Setzen der Parameter in Java würde wie folgt aussehen:

JDBC