Inhaltsverzeichnis
Fehlgeschlagene Anmeldungen in der Oracle DB überwachen
Angelegt am August 2013, aktalisiert auf 12c April 2018
Problem: In einer Datenbank ist immer wieder der SYSTEM-Account gelockt.
Folgender Oracle-Mechanismus schlägt dabei zu, im „default“ Profile wurde der Wert für failed_login_attempts auf 10 (default) gesetzt.
Einstellung abfragen:
SELECT * FROM dba_profiles WHERE resource_name LIKE 'FAILED%'; PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT -------- ------- -------------- ----- DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
Zähler "lcount" in der Tabelle sys.user$
Wie weiß die DB überhaupt, wie oft sich jemand falsch angemeldet hat?
Bei jeder Falschanmeldung wird der Zähler lcount in der Tabelle sys.user$ um 1 hochgezählt.
Wenn er die 10 erreicht, wird der Account gesperrt. Wenn sich zwischendurch der DBA mit dem richtigen Paßwort anmeldet, wird der Zähler wieder auf 0 zurückgesetzt
SYSTEM@sql> SELECT lcount FROM sys.USER$ WHERE name = 'SYSTEM'; LCOUNT --------- 0
1. Schritt: Falsch-Anmeldung in einer zweiten session
SYSTEM@sql> / LCOUNT --------- 1
2. Schritt: noch eine Falsch-Anmeldung
SYSTEM@sql> / LCOUNT --------- 2
3. Schritt: Richtig-Anmeldung ⇒
SYSTEM@sql> / LCOUNT --------- 0
Überlegung: Wenn sich ein Skript mit dem falschen PW anmeldet und DBA immer wieder mit dem richtigen PW die DB prüft, dann wird der Zähler immer wieder auf 0 gesetzt.
Überwachung für die failed_logins einschalten
Der Anwender erhält bei einer falschen Anmeldungen einen „ORA-01017: invalid username/password; logon denied“ oder einen „ORA-28000: the account is locked“.
Audit einschalten
-- check if auditing is enabled show parameter audit_trail -- if not enable ALTER system SET audit_trail = 'DB' scope = spfile; shutdown IMMEDIATE startup
Audition für fehlgeschlagene Anmeldungen aktiveren:
audit SESSION whenever NOT successful;
⇒ Danach stehen nach einem erfolglosen login die Einträge in sys.aud$
Die Daten liegen im SYSTEM-tablespace und können diesen überlaufen lassen!
⇒ siehe auch ⇒ Audit Tabelle umziehen
SELECT userid, userhost, terminal, COMMENT$text, spare1, ntimestamp# FROM sys.aud$ WHERE ( returncode=1017 OR returncode=28000); -------------------------- SYSTEM MYNET\NO32998 NO32998 Authenticated BY: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=172.27.2.36)(PORT=3862)) SCOTT 28.01.08 17:35:23,062526
Es wird auch protokolliert, wenn sich ein User mit einem nicht vorhandenen Account anmeldet.
In der Spalte userid steht der Username, mit dem ein Versuch durchgeführt wurde.
Audit Trail abfragen mit:
SELECT os_username , username , terminal , userhost , returncode , COUNT(*) FROM dba_audit_trail WHERE ( returncode=1017 OR returncode=28000) AND TIMESTAMP > sysdate-1 GROUP BY os_username,username,terminal,userhost,returncode /
Auditing ausschalten:
SYSTEM@sql> noaudit session whenever not successful; NOAUDIT wurde erfolgreich ausgeführt.
Die Einträge in sys.aud$ bleiben erhalten.
Wo sieht man, ob und was geaudited wird?
Die eingeschalteten Audit-Options stehen in folgenden Views:
- dba_stmt_audit_opts
- dba_priv_audit_opts
- dba_obj_audit_opts
Wenn kein audit eingeschaltet ist, geben die o.g. view no rows zurück.
Eine Liste der möglichen Audit-Options findet man in sys.audit_actions.
In unserem Beispiel:
SYSTEM@sql> SELECT * FROM dba_stmt_audit_opts; USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE ------------------------------ ---------------------------------------------------------------------- ---------- ---------- CREATE SESSION NOT SET BY ACCESS
Quellen
- audit failed login attempts: s.a. Metalink Note:352389.1
- Danke an Frau Monika Kern für die gute Zusammenarbeit