we go the extra mile database intelligence opera1ons excellence bi solu1ons Jan Schreiber, Pablo Stapff Loopback.ORG GmbH, Hamburg 1
loopback.org GmbH Oracle Architektur Data Warehouse und Business Intelligence Database Security 2
Enterprise Security mit LDAP und PKI Varianten der zentralen Benutzerverwaltung für Oracle Datenbanken 3
Problemstellung Die meisten Menschen können sich keine starken Passwörter merken Leichte Passwörter sind einfach zu brechen Aufgeschriebene Passwörter können in falsche Hände fallen Mehrfachbenutzung von Passwörtern erhöht das Risiko Audit-Risiken, tatsächliche Privilegienverteilung oft unklar "Wer verbirgt sich hinter diesem User? 4
Was tun? 5
Lösungsansatz #1: Zentrales Verzeichnis Ist in der Regel im Unternehmen bereits vorhanden, zusätzlicher Administrationsaufwand entfällt Eindeutige Benutzeridentifikation Berechtigungsvergabe nur an einer Stelle Keine Schattenkonten, sofortige Sperre möglich 1 st Level-Support kann Passwörter verwalten Compliance Reporting wird möglich 6
Active Directory Verzeichnisintegration Database Client SqlPlus, Java, etc DB FARM (AUTH) Map Users, Schema,Roles Oracle OID SYNC (DIP) oidpwdcn.dll Synchronisation Keine AD-Schemaänderungen nötig AD Agent muss auf AD- Kontrollern laufen und Klartext-Passwörter mitlesen Database Client SqlPlus, Java, etc Database Client SqlPlus, Java, etc DB FARM DB FARM (AUTH) Map Users, Schema,Roles (AUTH) Map Users, Schema,Roles OUD OVD Hashes Groups orclcommonattribute Hashes Groups oidpwdcn.dll OID Proxy: AD-Schemaänderungen nötig Password Filter muss auf AD-Controllern laufen AD Update Recht muss vorhanden sein Virtualisierung: Nur AD-Schemaänderung: Orclcommonattribute Rollentrennung DBA/AD 7
Oracle Internet Directory, Oracle Unified Directory als zentrales Verzeichnis DB FARM Anwender Anwendung XYZ Windows (pgina) (AUTH) OID Web-Anwendung UNIX PAM 8
EUS & OID im Deutschen Klimarechenzentrum Verwaltung von Klimaforschungsdaten Bereits 2004 eingerichtet 7 Datenbanken, 6500 internationale Anwender Identifikation per OID, X.509 DFN-Zertifikate optional 9
OID-Anbindung: Funktionsweise Database client authentification Leonard.Nimoy (1) Connect Leonard. Nimoy/ BIGDB (6) Logged in as SPOCK with ROLE SCIENCE_OFFICER Überprüft Passwort Hash, ordnet User Rollen und Schema zu EUS-enabled Oracle DB BIGDB (2) Request Leonard.Nimoy (3) Returned Leonard.Nimoy (4) Request Schema & Enterprise Roles (5) Returned Schema (SPOCK) & Enterprise Roles Ablage für User, Rollen & EUS Konfiguration Oracle Internet Directory (OID) 10
Datenpflege mit ODSM 11
TNS-Konfiguration für OID cat $TNS_ADMIN/ldap.ora # ldap.ora Network Configuration File: \ /u01/app/11.2.0/grid/network/admin/ldap.ora # Generated by Oracle configuration tools. DIRECTORY_SERVERS= (linux4:3060:3131) DEFAULT_ADMIN_CONTEXT = "dc=loopback,dc=org" DIRECTORY_SERVER_TYPE = OID WALLET_LOCATION= (SOURCE= (METHOD=file) (METHOD_DATA= (DIRECTORY=/u01/app/oracle/admin/loopds/wallet))) 12
Registrieren der Datenbank 13
Einrichtung der EUS-Mappings eusm createmapping realm_dn="dc=loopback,dc=org" ldap_port=3060 ldap_host=oraldap1 ldap_user_dn="cn=orcladmin" ldap_user_password=xxx database_name="pkilab" map_type="entry" map_dn="cn=test,cn=users,dc=loopback,dc=org" schema=global_connect 14
Anmeldung mit EUS SYS@loopds1> create user global_ident identified globally; User created. SYS@loopds1> grant connect to global_ident; Grant succeeded. oracle@zion ~]$ sqlplus test/geheim SQL*Plus: Release 11.2.0.4.0 Production on Sun Oct 14 11:53:38 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0-64bit Production GLOBAL_IDENT@loopds1> show user USER is "GLOBAL_IDENT" 15
Lösungsansatz #2: PKI-Authentifizierung Private Key Benutzer / Applikation SSL Handshake Datenbank Private Key User.csr User/CA Certs DB/CA Certs DB.csr Zertifizierungsstelle (CA) 16
PKI: Zertifikate und Wallets Datenbank-Server 1. Leeres Wallet erstellen 2. Key und Zertifikat-Request stellen 3. Request durch CA signieren lassen (Z.B. CN=db12c) 4. CA Zertifikat importieren (CN=myCA) 5. Signiertes Zertifikat importieren Client 1. Leeres Wallet erstellen 2. Key und Zertifikat-Request stellen 3. Request durch CA signieren lassen (Z.B. CN=jans) 4. CA Zertifikat importieren (CN=myCA) 5. Signierte Zertifikat importieren 17
PKI: Server-Wallet $ mkdir $ORACLE_BASE/admin/loopds/pki $ orapki wallet create -wallet \ $ORACLE_BASE/admin/loopds/pki -auto_login -pwd XXX $ orapki wallet add -wallet $ORACLE_BASE/admin/loopds/pki \ -dn 'CN=db12c' -keysize 2048 -pwd XXX $ orapki wallet export -wallet $ORACLE_BASE/admin/loopds/pki \ -dn 'CN=db12c' \ -request ~/db12c.csr $ orapki wallet add -wallet $ORACLE_BASE/admin/loopds/pki \ -cert myca.pem trusted_cert pwd XXX $ orapki wallet add -wallet $ORACLE_BASE/admin/loopds/pki \ -cert db12c.pem user_cert pwd XXX 18
PKI: Client-Wallet $ orapki wallet create -wallet \ $ORACLE_HOME/owm/wallets/client -auto_login -pwd XXX $ orapki wallet add -wallet $ORACLE_HOME/owm/wallets/client \ jans.csr \ -dn 'CN=jans' -keysize 2048 -pwd XXX $ orapki wallet export -wallet $ORACLE_HOME/owm/wallets/client \ -dn 'CN=jans' \ -request ~/jans.csr $ orapki wallet add -wallet $ORACLE_HOME/owm/wallets/client \ -cert myca.pem trusted_cert pwd XXX $ orapki wallet add -wallet $ORACLE_HOME/owm/wallets/client \ -cert jans.pem user_cert pwd XXX 19
Display Wallet [oracle@linux11 ~]$ orapki wallet display -wallet /u01/app/oracle/product/11.2.0/ dbhome_1/network/pki Oracle PKI Tool : Version 11.2.0.3.0 - Production Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. Requested Certificates: User Certificates: Subject: CN=LOOPDS Trusted Certificates: Subject: OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US Subject: CN=LBO Root Certificate II,OU=LoopCA,O= Loopback.ORG GmbH,O=Loopback.ORG,L=Hamburg,ST=No-State,C=DE Subject: OU=Secure Server Certification Authority,O=RSA Data Security\, Inc.,C=US Subject: CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US Subject: OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US Subject: OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US 20
PKI: Listener-Konfiguration SSL_CLIENT_AUTHENTICATION = FALSE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = $ORACLE_BASE/admin/loopds/pki) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db12c.loopback.org)(port = 1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = db12c.loopback.org)(port = 2484)) ) ) 21
PKI: TNS-Konfiguration SQLNET.AUTHENTICATION_SERVICES= (BEQ, TCPS) NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME) SSL_CLIENT_AUTHENTICATION = TRUE WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = $ORACLE_BASE/admin/loopds/pki) ) ) 22
Anmeldung mit User/Passwort und SSL $ sqlplus user/pwd@db12c Connected. SQL> select sys_context('userenv', 'NETWORK_PROTOCOL') from dual; SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') ------------------------------------------------------------------------ tcps SQL> select sys_context('userenv', 'AUTHENTICATION_METHOD') from dual; SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') ------------------------------------------------------------------------ PASSWORD 23
PKI: Anmeldung mit Zertifikat SQL> create user JANS identified externally as 'CN=jans'; SQL> grant create session to JANS; $ sqlplus /@DB12C Connected. SQL> select sys_context('userenv', 'NETWORK_PROTOCOL') from dual; SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') --------------------------------------------------- tcps SQL> select sys_context('userenv', 'AUTHENTICATION_METHOD') from dual; SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') ----------------------------------------------------- SSL 24
PKI: JDBC Auch per JDBC kann SSL verwendet werden Integration auch über keytool String url = "jdbc:oracle:thin:@(description=(address=(protocol=tcps) (HOST=servernam e)(port=2484))(connect_data=(service_name=servicename)))"); Properties props = new Properties(); props.setproperty("user", "scott"); props.setproperty("password", "tiger"); props.setproperty("javax.net.ssl.truststore", "/truststore/ewallet.p12"); props.setproperty("javax.net.ssl.truststoretype","pkcs12"); props.setproperty("javax.net.ssl.truststorepassword","welcome123"); Connection conn = DriverManager.getConnection(url, props); How to configure Oracle SQLDeveloper to use a SSL connection that was configured as per Note 401251.1 http://www.oracle.com/technetwork/topics/wp-oracle-jdbc-thin-ssl-130128.pdf 25
Be a Certificate Authority (CA) Externer Dienstleister? Es gibt verschiedene kommerzielle Produkte Auch Open Source: EBJCA OpenXPKI Alle Schritte sind in OpenSSL implementiert Nicht mit selbstsignierten Zertifikaten zu verwechseln openssl genrsa -out rootca.key 2048 openssl req -x509 -new -nodes -key rootca.key -days 1024 -out rootca.pem openssl ca -policy policy_anything -config loopca-url.cnf -out Certs/$1.pem\ -infiles Reqs/$1.req 26
PKI mit Smartcards Authentifizierung an Besitz der Karte gekoppelt Zertifikat kann nicht kopiert werden Vorraussetzung: Kartenleser, Middleware, PKI und Smartcards müssen miteinander kompatibel sein Ansonsten wie bei SSL-Wallets 27
Smartcard-PKI: Client-Konfiguration Middleware im Wallet verankern Middleware muss PKCS#11 implementieren Oracle liefert keine Liste kompatibler Hardware SmartCard-Einführung hat Projektcharakter orapki wallet p11_add -wallet <Wallet PFAD> \ -p11_lib <DLL PFAD> 28
Smartcard und Oracle Wallet orapki wallet p11_verify -wallet. pkcs11_wallet -pwd XXX Oracle PKI Tool : Version 11.2.0.4.0 Production Number of certificates found on token = 1 Cert with subject name: CN=Stapff Pablo has a matching private key on token. Cert with subject name: CN=Stapff Pablo installed as user cert in wallet. 29
Public Key Cryptography Standards (PKCS) 30
Vielen Dank für Ihr Interesse. 31