martinbulinski.de

Oracle Sicherheit für Revisoren Drucken E-Mail
  
Donnerstag, 13. November 2008 um 15:54

Angeregt durch ein Seminar für Revisoren stelle ich an dieser Stelle Skripten bereit als Checkliste für die Sicherheit einer ORACLE-Datenbank.

 

Fangen wir mit den einfachsten Überprüfungen an:

ORACLE-Passwörter:

Ein ORACLE-Passwort kann 30 Stellen lang sein. Alle Zeichen werden in Großbuchstaben umgewandelt, bevor der 8-Byte Hash DES Verschlüsselungsalgorithmus startet. Als Schlüssel wird der Benutzername verwendet!
Der Algorithmus ist dokumentiert in “Special Ops Host And Network Security For Microsoft, Unix, And Oracle” auf Seite 727.

Die neue Version 11g wird als zusätzlichen Hash-Algorithmus AES anbieten.

ORACLE nutzt für die Verschlüsselung die Konkatenation von Benutzername und Passwort. sys/temp1 and system/p1 haben deshalb den gleichen Hash-Key: (2E1168309B5B9B7A)

Die Kennwörter finden sich an verschiedensten Stellen:

  • in der Datenbank in SYS.USER$ – Password
  • im Oracle Password File
  • in Data Files des system tablespace
  • in (full) Export-Files
  • in archive logs

 

Brute Force Attacke / Dictionary Attacke

Aufgrund des simplen Schlüssels (Username) ist es möglich, eine Brute-Force-Attacke oder eine dictionary Attacke zu starten. Die verfügbaren Werkzeuge prüfen den Hashkey und können darüber auf das Passwort rückschliessen. Die effektivsten Werkzeuge (checkpwd und repscan) erreichen einen Durchsatz von 600.000 Passwörtern pro Sekunde!
Ein Pentium 4 mit 3GHz benötigt:

  • 10 seconds to calculate all 5-ascii-character-combinations
  • 5 minutes to calculate all 6-ascii-character-combinations
  • 2 hours to calculate all 7-ascii-character-combinations
  • 2,1 days to calculate all 8-ascii-character-combinations
  • 57 days to calculate all 9-ascii-character-combinations
  • 4 years to calculate all 10-ascii-character-combinations

Um zu prüfen, ob Ihre Passwörter Mindestanforderungen genügen, könnte man ORACLE Password Checker benutzen.

Default Passwörter prüfen

Hier ist eine Liste aller Default-Accounts mit verschlüsselten Passwörtern. oracle_default_passwords.csv

Um zu prüfen, ob das Data Dictionary korumpiert wurde, kann man folgenden Befehl benutzen. Es handelt sich hierbei um ein “Save Script”, das die Basis-Tabellen mit der Dictionary-View vergleicht.
bc. select name “Invisible User in DBA_USERS” from sys.user$
where type#=1 minus select username from SYS.dba_users;

External Users

Ein einfaches Eindringen ermöglichen sogenannte external user, wenn man den Usernamen und das Passwort des Betriebssystem-Accounts kennt. Der Schritt in die DB ist dann simpel: sqlplus /

Um zu prüfen, welche externen User es gibt, reicht ein

select username, password 
from dba_users
where password = 'EXTERNAL';

Remote-Zugriff über Database Links

Um in eine Datenbank einzudringen, könnte auch ein Database Link in einer anderen DB genutzt werden. So wäre es möglich, von einer weniger geschützten DB in eine besser gesicherte einzudringen.
Eine Liste aller DB-Links erhält man über

select db_link, username, password, host 
from dba_db_links;

Backups schützen

Sichern Sie Ihre Backups vor Diebstahl. Selbst wenn ein Eindringling nur Teile der DB stiehlt, kann er diese u.U. verwerten (siehe unter undokumentierte Parameter in ORACLE ).
Auch Export-Files sollten geschützt werden, da zumindest bei Full-Exports die Passwörter in verschlüsselter Form exportiert werden. Ein Einbrecher kann dann in Ruhe die Hash-Werte prüfen, um später mit dem erkannten Kennwort in die Datenbank einzudringen.

Trigger zum Spionieren einsetzen

Wenn ein User das Recht CREATE ANY TRIGGER hat, kann er einen Trigger einsetzen, der Aktivitäten auf einer Tabelle protokolliert, für die er selbst keine Rechte hat. Über OLD- und NEW-Werte könnte er Spalteninhalte in Erfahrung bringen. Der ORACLE-User MDSYS hat zum Beispiel o.g. Recht und könnte Aktivitäten auf der Tabelle von z.B. APP_USER protokollieren, um Daten auszuspionieren.

create or replace trigger trigg_spion 
before insert or update or delete on
app_user.app_tab
for each row
...

Schützen Sie Ihre RedoLog-Dateien

In den Redolog-Dateien stehen alle DML- und DDL-Statements, die in der DB angesetzt werden. DDL-Kommandos werden in DML-Anweisungen im Data Dictionary übersetzt (recursive SQL). Die Inhalte einer Redolog-Datei können mit dem LogMiner ausgelesen werden oder in ein Trace-File geschrieben werden mit
bc. SQL> alter system dump logfile;

Der Inhalt der RedoLog-Datei kann auch in einer anderen DB, als die, zu der es gehört, ausgewertet werden!

 
Benutzerbewertung: / 0
SchwachPerfekt 

Kommentar schreiben


Sicherheitscode
Aktualisieren

Anmeldung



Wer ist online

Wir haben 6 Gäste online