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:
- SELECT VALUE V$PARAMETER WHERE FROM NAME=’archiv_log_start’;
2). Análisis de los Oracle Data Blocks, para determinar:
- 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
3). Obtención del SID de la BD
4). Enumeración de usuarios
- SELECT USERID, ACTION#, RETURNCODE, TIMESTAMP# FROM SYS.AUD$;
- SELECT USERID, COMMENT$TEXT FROM SYS.AUD$;
5). Consultar Ataques de Fuerza bruta o Diccionario a cuentas de usuario
- 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;
6). Consulta de Ataques de Fuerza Bruta a la cuenta SYS
7). Consulta de intentos del exploit AUTH_ALTER_SESSION
- SELECT USERID, ACTION#, RETURNCODE, TIMESTAMP# FROM SYS.AUD$;
8). Consulta de intentos de iniciar una sesiÛn la base de datos a travÈs de XML (XDB)
- 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’;
9). Consulta si la Auditoria esta habilitada
- 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$;
10). Consulta del archivo sqlnet.log,Agntsrvc.log, spfilesid.ora, o el init.ora todas las ubicaciones referentes a estos parámetros:
- 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.
11). Consulta de archivos Log Listener (ORACLE_HOME/network/admin/listener.ora) (lsnrctl status me dara la ubicación actual)
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 información de los inicios de Sesion:
- SELECT USER_ID, SESSION_ID, SAMPLE_TIME FROM SYS.WRH$_ACTIVE_SESSION_HISTORY
14). Consultar una lista de usuarios y roles, usuarios con función de DBA, para buscar inconsistencias,o usuarios creados por un atacante y la generación de contraseñas fuertes con la validación de los hash, cuentas bloqueadas, tiempos de password
- 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#;
15). Consultar una lista de objetos y privilegios en el sistema
- 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;
16). Consulta de tablas eliminadas
- SELECT U.NAME, R.ORIGINAL_NAME, R.OBJ#, R.DROPTIME, R.DROPSCN FROM SYS.RECYCLEBIN$ R, SYS.USER$ U WHERE R.OWNER#=U.USER#;
17). Consulta de Directorios, archivos datos, archivos externos, tablas externas, buscando elementos perdidos o ubicados en sitios diferentes por el atacante.
- 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#;
18). El Monitor del Sistema (SMON) MON_MOD$ Table
- 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#;
19). Revision de Triggers al encendido, apagado, inicio y terminacion de sesion
- 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;
20). Consulta de librerias, que puedan estar ejecutando codigo arbitrario(malicioso)
- 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#;
21). Consultas de FlashBack (nuevos privilegios, derechos asignados, nuevos objetos, objetos eliminados) entre la tabla actual y la anterior en un tiempo determinado.
- 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$;
22). Consulta de las tablas RECYLEBIN$ y OBJ$
- SQL> SELECT MTIME, NAME, OWNER#, OBJ# FROM SYS.OBJ$ WHERE NAME LIKE ‘BIN$%’;
23). Consultas la Administracion automatica Deshacer ( UNDOTBS01.DBF)
- SELECT SEGMENT_NAME,HEADER_FILE,HEADER_BLOCK,EXTENTS,BLOCKS FROM DBA_SEGMENTS WHERE SEGMENT_NAME LIKE ‘_SYSSMU%$’;
24). Consulta de los logs del Apache (Oracle Application Server)
No hay comentarios:
Publicar un comentario