Netzwerkverschlüsselung für alle
von Heinz-Wilhelm Fabry & Ralf Durben, ORACLE Deutschland B.V. & Co KG
IT Systeme werden fast ausschliesslich in einem Netzwerk betrieben.
Datenbankanwendungen greifen über dieses Netzwerk auf die Datenbank zu.
Für potentielle Angreifer ist der Netzwerkverkehr ein interessanter und mit
einfachsten Mitteln zu attackierender Bereich eines IT Systems. Konsequenterweise gilt es,
diesen Bereich unbedingt zu schützen.
Dieser Schutz ist mit der Freigabe der Oracle Datenbank 12c Release 1 Ende Juni 2013 deutlich erleichtert worden. Denn sowohl die native Verschlüsselung über SQL*Net als auch die Verschlüsselung über SSL sind ab sofort nicht mehr als Teil der Advanced Security Option zu lizenzieren, sondern stehen - ebenso wie die starken Authentifizierungsmethoden - als Feature der Datenbank sowohl in der Enterprise Edition als auch in der Standard Edition der Datenbank ohne zusätzliche Kosten zur Verfügung. Das gilt übrigens auch für vorangegangene Releases (zum Beispiel für Oracle Database 11g), sofern diese das technisch unterstützen. Da die Netzwerkverschlüsselung über SQL*Net innerhalb von Minuten aktiviert werden kann, wird in diesem Artikel diese Form der Verschlüsselung näher dargestellt. Vorweg sollen einige Erläuterungen die Entwicklung der verschlüsselten Übertragung im Kontext der Oracle Datenbank erläutern. Bei der Verschlüsselung ist zunächst folgende Unterscheidung zu treffen
Netzwerkübertragung von Authentifizierungsinformationen
Alle Datenbank- und Clientversionen vor 7.1 kennen die automatische
Verschlüsselung des Logins nicht. Beginnend mit der
Datenbankversion 7.1 und seit der Version 2.1 von SQL*Net werden die
Authentifizierungsinformationen grundsätzlich verschlüsselt
übertragen. Der verwendete Schlüssel wird dabei für jede
Benutzersitzung / Session immer wieder neu erstellt.
Das bedeutet praktisch, dass für alle derzeit unter Support stehenden Datenbank- und Oracle Client-Versionen das Login grundsätzlich verschlüsselt erfolgt und keiner weiteren Betrachtung bedarf. Netzwerkübertragungen von Daten aus einer bestehenden Sitzung
Man ist geneigt, diesen Abschnitt mit einer Überschrift wie zum Beispiel
"Netzwerkübertragungen von Nutzerdaten" zu versehen. Das wäre aber eine
zu einschränkende Sicht auf das Thema. Nachdem der Benutzer
eine Benutzersitzung aufgebaut hat, findet bei den folgenden Übertragungen
keine Verschlüsselung mehr statt, es sei denn, man hat entweder seine Zugriffe
auf die Datenbank über SQL*Net entsprechend konfiguriert oder man hat sein
gesamtes Netzwerk verschlüsselt. Man hat hier die Wahl, aber irgendeine Form der
Verschlüsselung sollte auf jeden Fall genutzt werden.
Folgendes Beispiel soll das verdeutlichen. Der Benutzer SCOTT baut eine Benutzersitzung auf und fragt die Tabelle EMP ab. Sowohl die Abfrage als auch das Ergebnis sind über das Netzwerk klar sichtbar. Um das nachzuvollziehen, könnte man jetzt einen Netzwerksniffer einsetzen, also ein Tool, das den Netzwerkverkehr mitliest und mittels Filter gezielt nach Datenübertragungen suchen kann. Da in vielen Firmen - zu Recht - schon die Installation eines solchen Sniffers streng verboten ist, sollen stattdessen die Mittel der Oracle Datenbanksoftware genutzt werden, um einen Einblick in den Netzwerkverkehr mit der Datenbank zu bekommen. Dazu muss nur in der Datei SQLNET.ORA ein Tracing mit geeigneten Optionen eingestellt werden, hier trace_level_client = 16Jede neue Datenbanksitzung wird ohne Neustart der Datenbank ab sofort eine Tracedatei erzeugen. In dieser Tracedatei kann man dann zum Beispiel folgende Einträge finden ![]() Man sieht genau, welches SELECT-Statement vom Client an den Datenbankserver geschickt wird. Das sieht auf den ersten Blick nicht wirklich gefährlich aus. Dennoch enthalten Datenbankabfragen oft interessante Informationen für nicht autorisierte Personen. Nachdem die Abfrage von der Datenbank bearbeitet wurde, wird das Ergebnis an den Client geschickt ![]() Ein Teil der Informationen zum Datensatz eines Mitarbeiters, und zwar von KING, ist klar lesbar. Wäre das Netzwerk verschlüsselt, sähen die Informationen aus der Trace Datei für die Abfrage und die Benutzerdaten etwa folgendermassen aus ![]() ![]() Ein Angreifer kann also alle unverschlüsselt an den Client geschickten Daten abfangen und lesen. Das ist aber noch nicht alles: Wird das Passwort eines Datenbankbenutzers mit dem Befehl ALTER USER geändert und die Anwendung benutzt dabei eine Netzwerkverbindung, so wird auch das neue Passwort unverschlüsselt übertragen. In SQL*Plus ist deshalb schon seit einigen Jahren der Befehl PASSWORD eingeführt worden, der eine verschlüsselte Übertragung der Passwortänderung ermöglicht. Aber nicht nur das Mitlesen von Datenpaketen ist problematisch. Ein Angreifer kann diese Datenpakete auch verändern und so in Transaktionen eingreifen. Man kann anhand dieser einfachen Beispiele, die man in jeder Oracle Datenbankinstallation nachvollziehen kann, sehen, dass die Absicherung des Netzwerkverkehrs ein elementarer Baustein jeder Sicherheitsstrategie sein muss. Das gilt umso mehr, da viele Angriffe auf IT Systeme innerhalb der von Firewalls geschützten Bereiche durch sogenannte Innentäter erfolgen. Eine Verschlüsselung des gesamten Netzwerkverkehrs wäre für die meisten Unternehmen allerdings nicht zwingend notwendig und wohl auch zu teuer. Deshalb bietet Oracle die Verschlüsselung und Sicherung der Netzwerkkommunikation zwischen Oracle Datenbanken und Oracle Clients an. Dabei ist der Begriff "Oracle Client" weit zu fassen: Aus der Sicht einer Datenbank ist ein Application Server oder eine andere Datenbank, die über einen Datenbank Link zugreift, ebenfalls ein Oracle Client. Native Verschlüsselung mit SQL*Net
Über Einträge in der Datei SQLNET.ORA können unterschiedliche
Verschlüsselungsalgorithmen festgelegt werden. Zur Zeit stehen 12
Verschlüsselungsalgorithmen zur Verfügung.
Zwei Aspekte werden konfiguriert
![]() Als nächstes muß noch der Verschlüsselungsalgorithmus gewählt werden. Je nach Version der Datenbank beziehungsweise des Oracle Client stehen verschiedene Algorithmen zur Verfügung. Für ältere Datenbankversionen sind die verfügbaren Algorithmen zur Zeit noch im Handbuch "Advanced Security Administrators Guide" beschrieben. Für Oracle Database 12c erläutert das Handbuch Oracle Database Security Guide die Algorithmen. Die Datei SQLNET.ORA auf der Datenbankseite könnte schliesslich etwa folgende Einträge enthalten sqlnet.encryption_server = required sqlnet.encryption_types_server = AES256 sqlnet.encryption_client = required sqlnet.encryption_types_client = AES256Auch die CLIENT Parameter wurden angegeben, da eine Datenbank - wie oben bereits erwähnt - auch als Client agieren kann. Die gleiche Datei kann auch auf der Client Seite verwendet werden, vorausgesetzt der Client unterstützt die angegebenen Algorithmen. Die Tatsache, dass auch datenbankseitige Parameter spezifiziert sind, stört dabei nicht. Integritätsprüfungen
Die Verschlüsselung allein reicht nicht aus, um den Netzwerkverkehr abzusichern.
Auch verschlüsselte Datenpakete können abgehört, umgeleitet und
in veränderter Form wieder eingespielt werden. Um sich dagegen zu schützen,
sollten Prüfsummenverfahren genutzt werden. Zur Verfügung stehen zur Zeit 5
Algorithmen, deren Verwendung ebenfalls über zwei Parameter in der Datei
SQLNET.ORA konfiguriert wird. Auch hier werden wieder der Einsatzmodus und
der Algorithmus festgelegt
sqlnet.crypto_checksum_server = required sqlnet.crypto_checksum _types_server = SHA1 sqlnet.crypto_checksum_client = required sqlnet.crypto_checksum _types_client = SHA512 Fazit und Literaturhinweise
Der Netzwerkverkehr zwischen Datenbanken und Clients sollte
unbedingt verschlüsselt werden. Unverschlüsselt übertragene Daten
sind nicht geschützt vor unbefugtem Zugriff. Auch Integritätsprüfungen
sollten zum Einsatz kommen. Dabei ist die Verschlüsselung des gesamten
Netzwerks eine aufwendige und eventuell teuere Lösung - und zusätzlich
sogar etwas unsicherer. Denn die Verschlüsselung des Netzwerks endet an der
Netzwerkkarte und kann lokal unterlaufen werden, während die Verschlüsselung
über SQL*Net erst durch die Datenbank beziehungsweise durch den Client aufgelöst
wird.
Im bereits erwähnten Handbuch des aktuellsten Release (Oracle Database 12c Release 1) Oracle Database Security Guide finden sich weitere hilfreiche Informationen. Detaillierte Informationen zur Konfiguration von SQL*Net im aktuellsten Release finden sich im Handbuch Oracle Database Net Services Administrator's Guide sowie im Handbuch Oracle Database Net Services Reference. |