¿Que Mirar Cuando Auditamos una Base de Datos Oracle?
Cuando se realiza una auditoria, siempre es recomendable seguir una
serie de pasos para no pasar por algo ningún detalle que pueda resultar
crucial para nuestra investigación, a continuación les dejo un pequeño
listado de las cosas a las que debemos echarle una ojeada cuando
auditamos una base de datos oracle.
1). Determinar si en la BD esta activo el modo de operación en ARCHIVELOG o NONARCHIVELOG. Si este no esta activo, la evidencia de ataque o cambios serán sobrescritos por un nuevo redo.
Se puede determinar realizando una sentencia SQL a la BD:
4). Enumeración de usuarios
7). Consulta de intentos del exploit AUTH_ALTER_SESSION
12). Revisión de los LOGS de sentencias(SQL $ORACLE_HOME/bin/LOGIN.SQL,$ORACLE_HOME/dbs/LOGIN.SQL,$ORACLE_HOME/SQLPlus/admin/glogin.sql)
13). Consultando informacion de los inicios de Sesion:
25). ¿faltó algo? háznoslo saber en los comentarios.
Autor: D7n0s4ur70
Fuente: DargonJAR
1). Determinar si en la BD esta activo el modo de operación en ARCHIVELOG o NONARCHIVELOG. Si este no esta activo, la evidencia de ataque o cambios serán sobrescritos por un nuevo redo.
Se puede determinar realizando una sentencia SQL a la BD:
- SELECT VALUE V$PARAMETER WHERE FROM NAME=’archiv_log_start’;
- Registros eliminados
- Localizar bloques asignados a tablas (OBJETOS DE INTERÉS)
- Seguimiento de Objetos creados y eliminados
- Localización de tablas eliminadas
- Localización de Funciones eliminadas
4). Enumeración de usuarios
- SELECT USERID, ACTION#, RETURNCODE, TIMESTAMP# FROM SYS.AUD$;
- SELECT USERID, COMMENT$TEXT FROM SYS.AUD$;
- SQL> SELECT USERID, ACTION#, RETURNCODE, TIMESTAMP# FROM SYS.AUD$;
- SELECT NAME, LCOUNT FROM USER$ WHERE LCOUNT>0;
- SELECT NAME, LTIME FROM USER$ WHERE ASTATUS = 4;
7). Consulta de intentos del exploit AUTH_ALTER_SESSION
- SELECT USERID, ACTION#, RETURNCODE, TIMESTAMP# FROM SYS.AUD$;
- SELECT USERID, ACTION#, RETURNCODE, TIMESTAMP# FROM SYS.AUD$;
- SELECT COMMENT$TEXT FROM SYS.AUD$ WHERE USERID = ‘DBSNMP’;
- SELECT TERMINAL,SPARE1,TIMESTAMP# FROM SYS.AUD$ WHERE USERID=’DBSNMP’;
- SELECT USER_ID, SESSION_ID, SAMPLE_TIME FROM SYS.WRH$_ACTIVE_SESSION_HISTORY ORDER BY SAMPLE_TIME;
- SELECT USERID, ACTION#, RETURNCODE, TIMESTAMP# FROM SYS.AUD$;
- SELECT USERID,ACTION#,TIMESTAMP#,LOGOFF$TIME FROM AUD$;
- audit_file_dest ——-> Sistema de Auditoria (ORACLE_HOME/rdbms/audit)
- background_dump_dest ——-> archivo alert.log y tracer de procesos ($ORACLE_HOME/admin/$ORACLE_SID/bdump)
- core_dump_dest ——-> archivos Oracle core dump ($ORACLE_HOME/DBS/)
- db_recovery_file_dest ——-> redo logs, flashback logs, y RMAN backups
- user_dump_dest ——-> Archivos trace debuggin procesos/usuarios (/oracle/utrc)
- utl_file_dir ——-> Especifica uno o m·s directorios que Oracle debe utilizar para PL/SQL archivos E/S.
- control_files ——-> Especifica uno o varios nombres de archivos de control de Oracle
- db_create_file_dest ——-> Especifica la ubicación predeterminada de archivos de datos administrados por Oracle.
- db_create_online_log_dest_n—-> Especifica la ubicación de los redo logs y file control
- log_archive_dest ——-> Es aplicable solo si la BD esta en modo de ARCHIVELOG
- log_archive_dest_n ——-> Define hasta 10 archivos de registros logs.
12). Revisión de los LOGS de sentencias(SQL $ORACLE_HOME/bin/LOGIN.SQL,$ORACLE_HOME/dbs/LOGIN.SQL,$ORACLE_HOME/SQLPlus/admin/glogin.sql)
13). Consultando informacion de los inicios de Sesion:
- SELECT USER_ID, SESSION_ID, SAMPLE_TIME FROM SYS.WRH$_ACTIVE_SESSION_HISTORY
- SELECT USER#, NAME, ASTATUS, PASSWORD, CTIME, PTIME, LTIME FROM SYS.USER$ WHERE TYPE#=1;
- SELECT U.NAME AS “GRANTEE”, U2.NAME AS “ROLE” FROM SYS.USER$ U,SYS.USER$ U2, SYS.SYSAUTH$ A WHERE U.USER# = A.GRANTEE# AND PRIVILEGE# = U2.USER#;
- SELECT U.NAME AS “GRANTEE”, P.NAME AS “PRIVILEGE”, U2.NAME AS “OWNER”, O.NAME AS “OBJECT” FROM SYS.USER$ U, SYS.USER$ U2,SYS.TABLE_PRIVILEGE_MAP P, SYS.OBJ$ O, SYS.OBJAUTH$ A WHERE U.USER# =A.GRANTEE# AND A.OBJ# = O.OBJ# AND P.PRIVILEGE = A.PRIVILEGE# AND O.OWNER#=U2.USER#;
- SQL> SELECT OBJ#, OWNER#, NAME, TYPE#, CTIME, MTIME, STIME FROM SYS.OBJ$ ORDER BY CTIME ASC;
- SELECT U.NAME, R.ORIGINAL_NAME, R.OBJ#, R.DROPTIME, R.DROPSCN FROM SYS.RECYCLEBIN$ R, SYS.USER$ U WHERE R.OWNER#=U.USER#;
- SELECT T.NAME AS “TABLESPACE”, D.NAME AS “FILNAME” FROM V$DATAFILE D, TS$ T WHERE T.TS#=D.TS#;
SELECT U.NAME AS “OWNER”, O.NAME AS “DIRECTORY”, D.OS_PATH AS “PATH” FROM SYS.OBJ$ O, SYS.USER$ U, SYS.DIR$ D WHERE U.USER#=O.OWNER# AND O.OBJ#=D.OBJ#; - SELECT O.NAME, D.DEFAULT_DIR FROM SYS.OBJ$ O, SYS.EXTERNAL_TAB$ D WHERE D.OBJ# = O.OBJ#;
- SELECT U.NAME AS “OWNER”, O.NAME AS “OBJECT”, M.OBJ#, M.INSERTS,M.UPDATES, M.DELETES, M.TIMESTAMP FROM SYS.MON_MODS$ M, SYS.USER$ U,SYS.OBJ$ O WHERE O.OBJ#=M.OBJ# AND U.USER#=O.OWNER#;
- SELECT U.NAME AS “OWNER”, O.NAME AS “ENABLED_TRIGGER_NAME”,DECODE(T.TYPE#, 0, ‘BEFORE’,2, ‘AFTER’,'NOTSET’) AS “WHEN” FROM SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND O.OWNER# = U.USER# AND ENABLED=1;
- SELECT U.NAME AS “OWNER”, O.NAME AS “ENABLED_TRIGGER_NAME” FROM SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,1) = 1;
- SELECT U.NAME AS “OWNER”, O.NAME AS “ENABLED_TRIGGER_NAME” FROM SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,2) = 2;
- SELECT U.NAME AS “OWNER”, O.NAME AS “ENABLED_TRIGGER_NAME” FROM SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,8) = 8;
- SELECT U.NAME AS “OWNER”, O.NAME AS “ENABLED_TRIGGER_NAME” FROM SYS.OBJ$ O, SYS.TRIGGER$ T, SYS.USER$ U WHERE O.OBJ#=T.OBJ# AND O.OWNER# = U.USER# AND ENABLED=1 AND BITAND(T.SYS_EVTS,16) = 16;
- SELECT U.NAME AS “OWNER”, O.NAME AS “LIBRARY”, L.FILESPEC AS “PATH” FROM SYS.LIBRARY$ L, SYS.USER$ U, SYS.OBJ$ O WHERE O.OBJ#=L.OBJ# AND O.OWNER#=U.USER#;
- SELECT GRANTEE#, PRIVILEGE# FROM SYS.SYSAUTH$ MINUS SELECT GRANTEE#, PRIVILEGE# FROM SYS.SYSAUTH$ AS OF TIMESTAMP(SYSDATE – INTERVAL ‘3600′ MINUTE);
- SELECT NAME FROM SYS.OBJ$ MINUS SELECT NAME FROM SYS.OBJ$ AS OF TIMESTAMP(SYSDATE – INTERVAL ‘156′ MINUTE);
- SELECT NAME FROM SYS.OBJ$ AS OF TIMESTAMP(SYSDATE – INTERVAL ‘156′ MINUTE) MINUS SELECT NAME FROM SYS.OBJ$;
- SQL> SELECT MTIME, NAME, OWNER#, OBJ# FROM SYS.OBJ$ WHERE NAME LIKE ‘BIN$%’;
- SELECT SEGMENT_NAME,HEADER_FILE,HEADER_BLOCK,EXTENTS,BLOCKS FROM DBA_SEGMENTS WHERE SEGMENT_NAME LIKE ‘_SYSSMU%$’;
25). ¿faltó algo? háznoslo saber en los comentarios.
Autor: D7n0s4ur70
Fuente: DargonJAR


0 Comments:
Publicar un comentario
Gracias por dejar un comentario en Segu-Info.
Gracias por comentar!