Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:sql_net_security

Das SQL*Net Protokoll mit einer symmetrischen Verschlüsselung wie DES / AES oder RC4 schützen

Die Verschlüsselung des SQL*Netwerk Protokolls war/ist Teil der Secure Network Services (SNS) (vor 8i ?) bzw. Oracle Advanced Security ab (8i - 11g R1). Ab 11g R2 (Mitte 2013) kann anscheinend die Optionen für alle DB Editionen eingesetzt werden und ist nicht mehr Teil der DB EE Optionen.

Das SQL*Net Protokoll kann mit einer symmetrischen Verschlüsselung mit folgenden Algorithmen geschützt werden:

Alternativ kann aber auch das SSL/TLS Protokoll eingesetzt werden, siehe dazu ⇒SSL - Secure Sockets Layer - für SQL*Net aktivieren.

  • Vorteil der symmetrischen Verschlüsselung: ⇒ Performance
  • Vorteil der SSL Verschlüsselung: ⇒ Der SSL Key kann für die Validierung von Clients verwendet werden

Neben der reinen Verschlüsselung kann auch über einen Checksum Algorithmus wie SH-1 sichergestellt werden, das die Daten unterwegs nicht manipuliert wurden, bei einem RC4 Algorithmus ist das auch dringenden anzuraten.

Welchen Algorithmus wählen?

Entscheidungsgrundlagen:

  • Performance / CPU Bedarf
  • Legal Requirement wie die CIS Checklisten / PCI DSS Requirement 3 usw.
  • Erreichter Sicherheitsgrad

Performance Überlegungen:

Eigener Benchmark für die verschiedenen Algorithmen auf der DB Maschine mit „openssl“ erstellen:

openssl speed
 
...
Doing rc4         for 3s on 1024 size blocks:      931.586 rc4's         in 2.98s
Doing des ede3    for 3s on 1024 size blocks:       56.305 des ede3's    in 3.00s
Doing aes-128 cbc for 3s on 1024 size blocks:      261.485 aes-128 cbc's in 3.01s
Doing aes-192 cbc for 3s on 1024 size blocks:      195.826 aes-192 cbc's in 3.01s
Doing aes-256 cbc for 3s on 1024 size blocks:      177.465 aes-256 cbc's in 3.01s
 
...
 
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
..
aes-128 cbc      49178.34k    53913.86k    55103.94k    55214.19k    55585.25k
aes-192 cbc      39690.63k    39582.07k    43645.81k    45839.35k    43046.90k
aes-256 cbc      34692.58k    36641.99k    36443.21k    34194.83k    34803.01k

Damit wären mit einem RC4 in 3s am meisten Blocks verschlüsselt worden.

Damit kann ein Gefühl für den CPU Aufwand hinter der Algorithmen gewonnen werden.

Mehr zu Benchmarks

Allgemeine Überlegungen zu dem Thema:

Erreichbarer Sicherheitsgrad

RC4 zum Beispiel wird seit 2013 nicht mehr empfohlen

siehe https://www.bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr02102/index_htm.html

Prüfen, welche Verschlüsselungsalgorithmen zur Verfügung stehen

Auf einer Linux Maschine:

#Oracle Umgebung setzen:
cd $ORACLE_HOME/bin
 
 
./adapters
 
...
 
Installed Oracle Advanced Security options are:
 
    RC4 40-bit encryption
    RC4 56-bit encryption
    RC4 128-bit encryption
    RC4 256-bit encryption
    DES40 40-bit encryption
    DES 56-bit encryption
    3DES 112-bit encryption
    3DES 168-bit encryption
    AES 128-bit encryption
    AES 192-bit encryption
    AES 256-bit encryption
    MD5 crypto-checksumming
    SHA-1 crypto-checksumming
...
 
./adapters sqlplus

Lizenz

Seit Mitte 2013 scheint die SQL*Net Verschlüsselung NICHT mehr Teil der Advanced Securtiy Option zu sein.

11g

Siehe Lizenz Dokument ⇒ https://docs.oracle.com/cd/E11882_01/license.112/e47877.pdf

Folgender Satz (Auf Seite 23 ) sagt dann wohl aus das die ASO Optionen nicht benötigt wird:

..
Network encryption (native network encryption and SSL/TLS) and strong authentication services (Kerberos, PKI, and RADIUS) are no longer part of Oracle Advanced Security and are available in all licensed editions of all supported releases of the Oracle database
..

12c

Siehe ⇒ https://docs.oracle.com/database/121/DBLIC/editions.htm#DBLIC109

Laut diesen Dokument ist die Verschlüsselung nun in allen Editionen der Datenbank im Standard enthalten.


Konfiguration

Die Verschlüsselung wird über die Datei „sqlnet.ora“ konfiguriert/aktiviert

Client

Im einfachsten Fall muss auf dem Client explizit nichts definiert werden, da der Default Wert für SQLNET.ENCRYPTION_CLIENT bereits auf „accepted“ steht.

SQLNET.ENCRYPTION_CLIENT=accepted

Für die möglichen Werte siehe 11g Parameters for the sqlnet.ora File oder 12c Parameters for the sqlnet.ora File

Alles weitere wird dann vom Oracle Listener gesteuert.

Weitere mögliche Parameter für den Client:

  • SQLNET.ENCRYPTION_TYPES_CLIENT - legt fest, welche Verschlüsselungsalgorithmen unterstützt werden
  • SQLNET.CRYPTO_SEED - Legt einen Seed für den gewählten Verschlüsselungsalgorithmus fest - taucht in der 11g R2 und 12c nicht mehr auf??

Empfehlenswert ist auch die Aktivierung einer Checksumme (besonders wenn eine RC4 Versclüsselung zum Einsatz kommen soll) mit:

SQLNET.CRYPTO_CHECKSUM_CLIENT = [accepted | rejected | requested | required]
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm])

wie

SQLNET.CRYPTO_CHECKSUM_CLIENT =required
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA1)

Server

Auf der Server Seite muss in der sqlnet.ora des Listeners (stets die sqlnet.ora im selben Verzeichnis wie die listener.ora) die Verschlüsselung aktiviert werden

sqlnet.ora

SQLNET.ENCRYPTION_SERVER=required
SQLNET.ENCRYPTION_TYPES_SERVER=(3des168,rc4_256)
SQLNET.CRYPTO_SEED = 'DiesIsteineLang!Chryp0toS33dalsBeiSp1el'

In der 11g R2 stehen dazu die folgenden Algorithmen zur Verfügung: Table 9-3 Valid Encryption Algorithms und in der 12c Table 13-3 Valid Encryption Algorithms

Empfehlenswert ist auch die Aktivierung einer Checksumme (besonders wenn eine RC4 Verschlüsselung zum Einsatz kommen soll) mit:

SQLNET.CRYPTO_CHECKSUM_SERVER       = [accepted | rejected | requested | required]
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm])

wie

SQLNET.CRYPTO_CHECKSUM_SERVER=required
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA1)

Werte eintragen und Listener neu starten

Test und Überprüfung

Trace

Zum Schluss lässt sich leider nur über einen Trace feststellen, ob die Verschlüsselung auch funktioniert.

siehe Übersicht SQL*Net Probleme

Testen, ob das Verschlüsselung vom Server aktiviert ist / erwartet wird

Im der Client „sqlnet.ora“ den Paramter „SQLNET.ENCRYPTION_CLIENT=rejected“ setzen und testen:

sqlplus gpi/gpi@oragpi
 
..
ORA-12660: Verschlüsselungsparameter oder Parameter für verschlüsselte Prüfsummen nicht kompatibel
...

Session Eigenschaften in der DB überprüfen

Über die View gv$session_connect_info können die Netzwerk Eigenschaften der angemeldeten Sessions überprüft werden:

SELECT    s.inst_id
       ,  s.sid
       ,  s.serial#
       ,  s.status
       ,  s.username
       ,  s.machine
       ,  s.program
       ,  c.osuser
       ,  c.network_service_banner 
       ,  c.CLIENT_CHARSET
       ,  c.CLIENT_OCI_LIBRARY
       ,  c.AUTHENTICATION_TYPE
  FROM gv$session_connect_info c 
     , gv$session s 
 WHERE c.sid = s.sid 
   AND c.serial#=s.serial# 
   AND c.inst_id=s.inst_id
   AND s.username IS NOT NULL
  ORDER BY 1
/

Quellen

Oracle:

Support:

  • Overview and Configuration of Oracle Network Encryption (Doc ID 76629.1)
  • Using and verifying ASO encryption and checksum with JDBC/thin (Doc ID 1377228.1)
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
dba/sql_net_security.txt · Zuletzt geändert: 2015/06/03 09:16 von Gunther Pippèrr