Inhaltsverzeichnis
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:
- RC4.
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
- Benchmark der Algorithmen: http://www.cryptopp.com/benchmarks.html
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.
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)