16
SGBD Auditoría en Oracle Sistemas Gestores de Base de Datos Juan Javier Rodríguez Guisado

Auditoria en Oracle

Embed Size (px)

Citation preview

Page 1: Auditoria en Oracle

SGBD

Auditoría en Oracle Sistemas Gestores de Base de Datos Juan Javier Rodríguez Guisado

Page 2: Auditoria en Oracle

AUDITORÍA EN ORACLE

2

SGBD

AUDITORÍA EN ORACLE Objetivos:

Aprender a activar la auditoría en ORACLE.

Dominar las vistas del D.D. donde se almacena la información de auditoría.

Conocer la forma de auditar:

o Inicios de sesión en la base de datos

o Ejecución de sentencias concretas

o Acciones de cada usuario.

o Acciones sobre cada objeto.

o Privilegios del sistema.

Gestionar registros de auditoría (proteger, destruir, etc.).

Análizar los redo logs con LogMiner.

Conocer las posibilidades que ofrece Enterprise Manager para llevar a cabo

auditorías.

Aprender a redactar una documentación concisa y útil sobre procedimientos de

administración.

Activación de la auditoría en Oracle La auditoría en Oracle consiste en la monitorización y almacenamiento de información

de nuestro servidor Oracle, la auditoría es una parte importante de la seguridad del

sistema que no debe olvidarse.

Ventajas:

o Dispondremos de información de las operaciones del sistema.

o Protegeremos mejor nuestro sistema.

o Podemos prevenir ataques y detectar posibles intrusos.

Inconvenientes:

o Mayor consumo de recursos del sistema.

Oracle, por defecto no trae activada la auditoría (Hasta la versión 11g), aunque la

emplea en algunas actividades de la misma (auditoría obligatoría): el encendido y

apagado, conexiones como sysdba y sysoper.

Para activar la auditoría estándar en Oracle, necesitamos cambiar el paramétro

Audit_trail del init.ora (por defecto “none”), podemos ver el estado de este parámetro

con el comando “show parameter audit”

El comando para activar la auditoría en oracle es el siguiente:

ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE;

Page 3: Auditoria en Oracle

AUDITORÍA EN ORACLE

3

SGBD

Las modificaciones del archivo init.ora requieren el reinicio de la base de datos para que

surjan efecto, así que reiniciaremos para aplicar los cambios.

Tambien podemos activar la auditoría de operaciones de usuarios con privilegios de

sistema, para ello hacemos lo siguiente:

SQL> ALTER SYSTEM SET audit_sys_operations=true SCOPE=SPFILE;

Los valores más comunes que podemos asigar al parámetro audit_trail son los

siguientes:

none La auditoría está desactivada.

db La auditoría está activada con todos y guarda los registros en la tabla

SYS.AUD$ (tablespace SYSTEM por defecto).

os La auditoría está activada, con todos los registros guardados directamente

en el sistema operativo (en un di rectoio y archivos concretos), está opción

depende del sistema operativo.

db, extended La auditoría está activada los datos se almacenarán en la

taba SYS.AUD$. Además se escribirán los valores correspondientes en las

columnas SqlText y SqlBind de la tabla SYS.AUD$.

xml activa la auditoría de la base de datos, los sucesos será escritos en

ficheros XML del sistema operativo.

Xml, extended activa la auditoría de la base de datos, los registros serán

escritos en el formato XML del sistema operativo, además se incluirán los

valores de SqlText y SqlBind.

Para este documento vamos a usar el tipo de auditoría db, el más común y el que viene

por defecto en oracle a partir del 11g.

Vistas del D.D. con relación a la auditoría Nota: Estas vistas serán usadas en ejemplos más adelante en este mismo documento

Las vistas del diccionario de datos nos muestran información útil de nuestro sistema, a

nosotros nos insteresan las vistas con relación a la auditoría, que principalmente son:

Page 4: Auditoria en Oracle

AUDITORÍA EN ORACLE

4

SGBD

Vista Descripción

ALL_AUDIT_POLICIES Define las políticas en las tablas y vistas accesibles

al usuario actual. ALL_AUDIT_POLICY_COLUMNS Define las políticas de auditoría en las tablas y vistas

accesibles para el usuario actual. ALL_DEF_AUDIT_OPTS

Lista las opciones por defecto de auditoría que serán

aplicadas a los objetos que se crean. AUDIT_ACTIONS Lista las acciones que pueden ser auditadas. DBA_AUDIT_EXISTS Lista las entradas auditadas producidas por AUDIT

NOT EXISTS. DBA_AUDIT_OBJECT Lista los registros de auditoría de todos los objetos

del sistema. DBA_AUDIT_POLICIES Lista toda la información sobre las políticas de

auditoría del sistema. DBA_AUDIT_SESSION Lista todos los registros que conciernen a

CONNECT y DISCONNECT. DBA_AUDIT_POLICY_COLUMNS Lista las columnas de política en las tablas y vistas

de toda la base de datos. BDA_AUDIT_STATEMENT Lista los registros auditados que conciernen a

GRANT, REVOKE, AUDIT, NOAUDIT y ALTER

SYSTEM de toda la base de datos. DBA_AUDIT_TRAIL Lista todas las entradas estándares que hay en la

tabla AUD$. DBA_COMMON_AUDIT_TRAIL Combina los logs estándares con los exhaustivos,

incluye SYS y los registros obligatorios escritos en

formato XML. DBA_FGA_AUDIT_TRAIL Lista los registros completos de una auditoría. DBA_OBJ_AUDIT_OPTS Describe las opciones de auditoría en todos los

objetos. DBA_PRIV_AUDIT_OPTS Describe los privilegios de sistema actuales que

estan siendo auditados por algún usuario. DBA_STMT_AUDIT_OPTS Describe todas las opciones de auditoría actuales de

todo el sistema y por usuario. USER_AUDIT_OBJECT Lista los registros auditados para sentencias que

conciernen objetos accesibles para el usuario actual. USER_AUDIT_POLICIES Describe exhaustivamente las columnas de políticas

de auditoría en las tablas y vistas accesibles por el

usuario actual. USER_AUDIT_SESSION Lista todos los registros de auditoría relacionados a

conexiones y desconexiones del usuario actual. USER_AUDIT_STATEMENT Lista todos los registros relacionados con las

sentencias GRANT, REVOKE, AUDIT, NOAUDIT

y ALTER SYSTEM emitidas por el usuario actual. USER_AUDIT_TRAIL Lista todas las entradas de auditoría estándares de la

tabla AUD$ sobre el usuario actual. USER_OBJ_AUDIT_OPTS Describe las opciones de auditoría en todos los

objetos que posee el usuario actual. STMT_AUDIT_OPTION_MAP Describe información sobre los tipos de códigos de

auditoría

Page 5: Auditoria en Oracle

AUDITORÍA EN ORACLE

5

SGBD

Hay bastantes vistas más, para verlas todas podemos usar esta sentencia:

SELECT view_name FROM dba_views

WHERE view_name LIKE '%AUDIT%'

ORDER BY view_name

Auditar los inicios de sesión de la base de datos Para auditar los inicios de sesión de la base de datos usaremos la sentencia “AUDIT

SESSION” (la cual podemos filtrar por usuarios de la siguiente forma “AUDIT

SESSION BY usuario1, usuario2;” Al igual que el comando AUDIT tenemos el

comando NOAUDIT para desactivarla política de auditoría previamente activada.

Como ejemplo vamos a ver las conexiones y desconexiones del usuario juanla (como

sys) Hay más campos en la vista dba_audit_session que pueden ser interesantes. SQL > Select Username, userhost, extended_timestamp, action_name from

dba_audit_session where username='JUANLA';

La vista dba_audit_trail tambien nos da información interesante cuando registra que el

usuario Juanla se ha conectado o desconectado: SQL > Select username, timestamp, action_name, comment_text, priv_used

from dba_audit_trail where username='JUANLA';

También podemos comprobar que funciona con la siguiente línea si estamos con la

cuenta de usuario: SQL > Select Username, userhost, extended_timestamp, action_name from

user_audit_session;

Podemos filtrar los registros de conexiones si han sido correctas o fallida de la siguiente

manera, si no lo filtramos nos registrará los 2 tipos:

SQL>audit session whenever not successful;

SQL>audit session whenever successful;

Auditar una sentencia concreta Pongámonos en la situación que por ejemplo vamos a auditar todas las sentencias que

creen una tabla, para este ejemplo vamos a auditar los create table de juanma;

Page 6: Auditoria en Oracle

AUDITORÍA EN ORACLE

6

SGBD

Con estas sentencias podemos ver que la auditoría de la sentencia create table ha sido

activada para ese usuario: SQL > Select * from dba_priv_audit_opts where user_name='JUANMA';

SQL > Select * from dba_stmt_audit_opts where user_name='JUANMA';

Así podemos ver que quedan auditados los crete table de Juanma, en este caso: SQL > Select username,owner,obj_name,action_name,priv_used,timestamp

FROM dba_audit_object where username='JUANMA';

Al crear la tabla con juanma habíamos definido un “Audit create table by juanma”, en el

caso que no pongamos el by nombreusuario, se auditarán todas, como por ejemplo si

creamos una tabla nueva con SCOTT (en el caso que auditemos a todos los usuarios):

SQL > Select username,owner,obj_name,action_name,priv_used,timestamp

FROM dba_audit_object where username=SCOTT;

Auditar acciones de cada usuario Si vamos a auditar las acciones de cada usuario, lo primero vamos a definir en Oracle

que registre todas las actividades que hacen:

Ahora, para comprobar si está auditando correctamente, vamos a hacer algunas

operaciones y vemos si las registra:

1. Nos conectamos con el usuario “Hard” y creamos una tabla SQL > Select username, userhost, timestamp, obj_name, action_name,

priv_used from dba_audit_trail where username='HARD'

Page 7: Auditoria en Oracle

AUDITORÍA EN ORACLE

7

SGBD

2. Nos conectamos con Hard2, hacemos un Select a una tabla que ha creado. SQL > Select username, userhost, timestamp, obj_name, action_name,

priv_used from dba_audit_trail where username='HARD2'

3. Hacemos un insert en alguna tablal con Hard2. SQL > Select * from dba_audit_trail where username='HARD2';

3. Borramos la tabla creada con Hard2. SQL > Select username, userhost, timestamp, obj_name, action_name,

priv_used from dba_audit_trail where username='HARD2'

Auditar acciones sobre cada objeto Auditando acciones sobre objetos tendremos seguirdad sobre la actividad de los

usuarios que han interactualo con ese objeto, vamos a ver como se audita una tabla, para

ello crearemos una tabla con el usuario “Ejemplo” llamada “tablaobjeto”:

La sentencia para auditar sobre un objeto es la siguiente (Vamos a auditar la tabla que

acabamos de crear, para que haya algún registro interesante vamos a hacerle un insert

con otro usuario “juanma”):

Page 8: Auditoria en Oracle

AUDITORÍA EN ORACLE

8

SGBD

Resultado al hacer un insert con juanma:

SQL > Select username, userhost, timestamp, owner, obj_name,

action_name from dba_audit_object where username='JUANMA';

Para auditar todas las acciones de esa misma tabla haríamos:

SQL > audit all on CONTABILIDAD by access;

Auditar privilegios del sistema Para auditar un privilegio de sistema simplemente debemos de usar la orden audit

seguida del privilegio de sitema que necesitemos:

SQL > AUDIT DELETE ANY TABLE BY ACCESS;

Podemos ver todos los privilegios de la base de datos con la siguiente sentencia:

SQL > Select privilege from dba_sys_privs;

Como en sesiones podemos filtrar los privilegios que se terminan correctamente y los

que no, con “WHENEVER (NOT) SUCCESSFUL” al final de la sentencia, si no se

define auditará todos los tipos. Si nos conectamos con SCOTT y borramos una tabla

podemos ver que dejamos “huella” de ello.

SQL > Select * from dba_audit_trail where username=’SCOTT’;

Gestionar registros de Auditoría Para gestionar los registros de auditoría de oracle debemos tener claro que cualquier

usuario que se conecte con privilegios de administrador puede borrar estos archivos,

aunque es “visible” que han sido borrados siempre que tengamos activado el parámetro

audit_sys_operations=true tal y como está explicado arriba.

El final de la sentencia “by access” nos guardará un registro nuevo por cada

sentencia que se trague, siendo un registro más exhaustivo que con la orden

“by session” que solo nos guaradaría uno por sesión. Claro que también

acaparará más recursos del sistema

Page 9: Auditoria en Oracle

AUDITORÍA EN ORACLE

9

SGBD

Proteger

Eliminar

Gestión de tamaño

Un dba tiene que tener en cuenta que el tamaño de la tabla AUD$ (como hemos dicho

antes) puede aumentar mucho, depende de dos factores:

Número de opciones de auditoría activadas.

Page 10: Auditoria en Oracle

AUDITORÍA EN ORACLE

10

SGBD

Frecuencia con la que se producen esas auditorias.

Analizar Redo logs con Log Miner Log Miner es una herramienta que Oracle incorpora en su BBDD que nos ayudan a

hacer más sencillo e interpretable los redo logs. Para activarlo tenemos que definir una

ruta de archivos en el parámetro “utl_file_dir”, podemos ver inicialmente el valor de la

siguiente manera:

Pues ya sabemos modificar parámetros estáticos y que conllevan a reiniciar la BBDD: SQL > alter system set utl_file_dir='C:\LogMiner' scope=spfile;

Ahora al reiniciar la base de datos tenemos que tener en cuenta que la sesión de

LogMiner es la de SYS, no podremos usarla con otro usuario porque trabaja con la

sesión de SYS (Recuerda usar un directorio que exista o crearlo manualmente).

Page 11: Auditoria en Oracle

AUDITORÍA EN ORACLE

11

SGBD

Ahora debemos crear el diccionario que usa LogMiner para esto debemos asegurarnos

que estará en el mismo directorio que la ruta que dimos antes, por ejemplo: SQL > exec DBMS_LOGMNR_D.BUILD( DICTIONARY_FILENAME =>'logminer.ora',

DICTIONARY_LOCATION => 'C:\LogMiner');

Ahora solamente tenemos que indicarle a logminer los ficheros redo que necesitamos

estudiar, para ello escribimos las ordenes siguientes (agregar archivo redo y eliminarlo): SQL> exec DBMS_LOGMNR.add_logfile('nombrearchivo');

SQL> exec DBMS_LOGMNR.remove_logfile (LOGFILENAME => 'nombrearchivo');

Como vemos, añadimos dos archivos redo y eliminamos uno para que se vean las

sentencias ejecutándose, ahroa solo nos queda iniciar la sesión de LOGminer para ver el

redo02.log que es el redo que hemos montado.

SQL > exec DBMS_LOGMNR.START_LOGMNR(DICTFILENAME=>’ruta del

diccionario’) ;

Ahora tenemos algunas vistas que nos ayudaran a interpretar la información de los redo,

la principal es v$logmnr_contents, pero tambien tenemos algunas más:

V$LOGMNR_CONTENTS

V$LOGMNR_DICTIONARY

V$LOGMNR_LOGS

V$LOGMNR_PARAMETERS

Voy a mostrar un ejemplo (uno unas líneas para dar formato de salida a la select y así

poder verla desde la consola SQL PLUS)

Page 12: Auditoria en Oracle

AUDITORÍA EN ORACLE

12

SGBD

Obtendremos un resultado parecido a esto:

Para finalizar la sesión de LogMiner solo es necesario ejecutar el siguiente comando: SQL > exec DBMS_LOGMNR.END_LOGMNR; O salir de la sesión de SYS y automáticamente se cerrará la base de datos.

Auditoría “Fine-Grained” Oracle contempla 2 tipos generales de auditoría, Auditoría estándar y Auditoría FGA

(más concreta) la cual se realiza mediante procedimientos en PL/SQL a través del

paquete DBMS_FGA, este tipo de auditoría es independiente de la estándar y todos sus

registros se guardan en latabla FGA_LOG$, en este trabajo no vamos a tratar PL/SQL

pero voy a dejar un ejemplo de auditoría fine-grained sencillo, para ello usaremos el

usuario Juanla y crearemos una tabla con algunos datos:

Creamos la política en PL/SQL con la orden dbms_fga.add_policy();

La política controlará los salarios de más de 5550 de valor.

Page 13: Auditoria en Oracle

AUDITORÍA EN ORACLE

13

SGBD

Vamos a hacer alguna select con el usuario Juanla en la tabla finegrained para ver si las

registra o no.

Y ahora al conectarnos como SYS, podemos ver que hemos obtenido un registro:

Como vemos registro la select a la fila donde el salario era mayor a 5550, aparte del

texto sql ejecutado podemos ver más datos, entre ellos destaco los siguientes:

Obviamente podemos eliminar la política con la orden: dbms_fga.add_policy();

Como conclusión la auditoría fine-grained es mucho más avanzada que la normal,

obviamente consume más recursos y hay que tener claro por qué, dónde, cuanto tiempo

vamos a activarla, son más complejas pero merecen la pena por el resultado que dan y

que la auditoría estándar no puede ofrecer, por eso me pareció interesante comentar un

poco en el trabajo.

Enterprise Manager y las auditorías Enterprise manager nos brinda una consola web con miles de opciones, entre ellas las

relacionadas con la auditoría que lo que hacen es hacerla más cómoda al ojo del

administrador, para llegar a ella nos loguearemos y ireamos a las opciones de auditoría

desde la siguiente manera:

Nota: Decir que los campos de las select en los ejemplos son los m ás significativos, hay más campos que pueden ser ú til dependiendo del uso que se le esté dando.

Page 14: Auditoria en Oracle

AUDITORÍA EN ORACLE

14

SGBD

En la pestaña “Servidor”, vamos al apartado de seguridad y vemos “Configuración de

Auditoría” entramos en ella y tendremos abierto el apartado web relacionado con la

auditoría.

Como información principal vemos si la auditoría está activada, los usuarios

privilegiados están auditados y cual es el directorio de la auditoría (si la hacemos por

sistema operativo o XML)

Esta consola web, nos permite añadir políticas de auditoría así como lo hacemos desde

consola, vamos a ver algunos ejemplos. En primer lugar vamos a auditar un privilegio

desde la consola web, para el usuario JUANLA, para ello seleccionamos el usuario y

pulsamos en añadir, ahí elegimos el privilegio:

Ahora vamos más abajo y vemos que Oracle nos ha preparado un apartado donde

podemos auditar roles:

Y aún más abajo vemos que oracle nos da a a elegir las demás opciones de auditoría que

nos quedan, que son el filtrado por usuario, por resultado de ejecución (satisfactoria o

no) , o la exhaustivida del registro.

Page 15: Auditoria en Oracle

AUDITORÍA EN ORACLE

15

SGBD

Ahora solo tenemos que pulsar en el botón “Ok” y ya empezará a auditar sobre ese

privilegio. Si creamos una tabla con el usuario juanla y en la consola web vamos a

“Privilegios Auditado” podemos encontrarnos un resultado parecido a este:

Si necesitaramos auditar algún objeto (Vamos a partir de la tabla que acabamos de

crear, llamada prueba1) Vamos a “Añadir objeto auditado”:

Oracle nos permite elegir un tipo de objeto, entre ellos están: (Contexto, Directorio,

Función, Libreria, Vista materializada, tipo objeto, paquete, procedimiento, secuencia,

sinónimo, tabla y vista) Nosotros elegiremos tabla. La podemos añadir con la

herramienta de búsqueda de oracle:

Podemos elegir opciones de audición, como son las sentencias auditadas, filtro de

resultado, exhaustividad de la sentencia.. Probaremos a insertar un dato y hacer un

select de la misma tabla y vamos a “Objetos Auditados” donde encontraremos:

Page 16: Auditoria en Oracle

AUDITORÍA EN ORACLE

16

SGBD

Por último, la consola web de oracle nos permite auditar sentencias concretas, vamos a

ver un ejemplo con un update y un drop table de la tabla “prueba1”, y como tal

seguimos de la misma forma que en las demás opciones, vamos a “Añadir sentencia

auditada” y la consola nos mostrará lo que debemos elegir, muy amigable y sencillo

como en las demás opciones de auditoría:

Como vemos las opciones que podemos dar

son parecidas o las mismas de un modo u

otro a cada tipo de auditoría que ofrece la

consola web, vamos a hacer un update y un

drop table y vemos que nos muestra:

Como vemos es una manera más cómoda (pero más lenta) de hacer auditoría en nuestro

sistema, una alternativa que puede sernos útil en algnos momentos para crear políticas o

consultar registros. Eso sí, tiene limitaciones al mostrar los datos de registro pero no por

ello deja de ser útil para la administración de la base de datos.