Auditoria en Oracle 11g

Introducción

En esta entrada se trata un poco los concepto de auditoria sobre Oracle, algunos “modos” que existen diferentes y como recabar la información desde las tablas dedicadas para dicho fin. Averiguar las operaciones DML de un usuario en concreto, los intentos fallidos de sesión al sistema y la auditoria sobre una inserción en concreto sobre una tabla determinada, entre otras.

Requisitos:

  • Oracle 11g

Creación de un usuario de prueba:

1) Habilitar auditoria de los intentos de acceso fallidos al sistema

Activa desde SQL*Plus la auditoría de los intentos de acceso fallidos al sistema. Comprueba su funcionamiento.

En primer lugar podemos consultar el estado de auditoria de Oracle, para saber en que estado se encuentra con la siguiente consulta:

Si nos devuelve:

Quiere decir que esta activa la auditoria, en el caso de que el campo value devuelva NONE, estaría desactivada.

Para desactivar la auditoria sobre la base de datos:

Para activarla:

Ahora para auditar los intentos fallidos de sesión, iniciamos sesión como system desde SQL Plus y ejecutamos la siguiente instrucción:

A partir de ahora los intentos de acceso fallidos, serán almacenados en una vista llamada dba_audit_session. 

Simulamos unos fallos de acceso con el usuario charlie y consultamos dicha vista:

Si ahora consultamos la vista que he comentado antes, veremos que se ha registrado el intento fallido:

Consulta a la vista:

Salida:

Esto sería solamente para los intento de sesión, si queremos auditar todos los tipos de accesos:

Y si quisiéramos solo auditar los accesos correctos y no los incorrectos como hemos habilitado antes:

2) Procedimiento que muestra los intentos fallidos

Para este caso vamos habilitar la auditoria completa y vamos a filtrar en el procedimiento que el código returncode sea diferente a 0.

Habilitar salida por pantalla en sql plus:

Procedimiento:

Comprobación

3) Habilitar auditoria operaciones DML por el usuario SCOTT

Las operaciones DML a auditar son:  insert, update y delete.

Activamos dicha auditoria:

Vamos a realizar varias de estas operaciones con el usuario SCOTT y posteriormente consultaremos la auditoria:

Consulta

Salida

 

Warning: Si en el campo action_name, nos aparecería session rec y no la operación DML, se debe a que la auditoria se esta ejecutando by session y no by access.

4) Auditoria de grano fino para la información referente a la inserción de empleados del departamento 10 en la tabla emp de SCOTT

Auditoria de grano fino

La auditoria de grano fino digamos que desmenuza más el contenido o acciones que se van a capturar. Incluso pudiendo disparar un evento cuando se trate de realizar una acción definida en una política.

Para comprobar esto, vamos a llevar a cabo el enunciado de este apartado, primero necesitaremos crear un procedimiento para guardar ciertos datos:

Acto seguido vamos a insertar un nuevo empleado en la tabla emp del usuario SCOTT:

Y ahora si hacemos una consulta a la vista de auditoria de grano fino, debería aparecer el registro que acabamos de ingresar:

Consulta

Salida

Para eliminar la auditoria creada, habría que crear otro procedimiento utilizando “drop_policy”:

5) Diferencia entre auditar una operación by access o by session

Cuando se ejecuta una auditoria by access, la escritura de un registro en las tablas / vistas de auditoria se realizan cada vez que se ejecuta la sentencia. Cuando se realizan auditorias de sentencias DDL o privilegios del sistema, la auditoría por defecto es by access. Por el contrario cuando se auditan sobre objetos o sentencias DML por defecto es by session.

Por otro lado cuando se audita by session, oracle inserta un único registro en la vista de auditoria independientemente de las veces que se haya ejecutado esa misma sentencia en esa sesión.

 

6) Diferencias entre los valores db, extended del parámetro audit_trail de ORACLE.

Según la página de www.oracle.com 

Cuando habilitamos la auditoria con el valor de parámetro:

DB

Redirige todos los registros de la auditoria registrados, a la base de datos SYS.AUD$, exceptuando los registros que se escriben siempre en la auditoria del sistema operativo.

Cuando se habilita la auditoria con el valor:

DB extended 

Captura exactamente todas las acciones que se realizan con DB, pero además puebla las columnas SQL Text SQL bind de la tabla SYS.AUD$.

Habilitar DB / DB Extended

Para auditar con DB:

Para auditar con DB extended:

Una vez activada la auditoria, recordar reiniciar el servicio:

Oracle Linux

Windows

Prueba de funcionamiento

Ahora vamos a probar a insertar un nuevo registro con el usuario SCOTT en su esquema, teniendo el parámetro como valor de auditoria en extended y vamos a realizar una consulta sobre dicho usuario:

Habilitamos:

Reiniciamos el servicio de Oracle:

Comprobamos que ha surgido efecto el cambio en la base de datos:

 

Habilitamos la auditoria by access para el usuario charlie:

Nos conectamos como el usuario charlie y hacemos algunas operaciones:

Ahora con el usuario SYSTEM, hacemos esta consulta:

Resultado:

 

7) Realiza el apartado 1, 3 y 4 con Enterprise Manager

Acceder desde el navegador con https://nombremaquina:1158/em e introducir el usuario sys , la contraseña que hayamos asignado a dicho usuario y conectar como SYSDBA.

Una vez iniciemos sesión en el panel, nos vamos a la pestaña Servidor -> Valores de auditoría -> Conexiones Fallidas Auditadas

El pase de diapositivas requiere JavaScript.

Servidor -> Valores de auditoría -> Pistas de auditoría -> Agregar Sentencia Auditada

El pase de diapositivas requiere JavaScript.

Servidor -> Valores de Auditoría -> Objetos Auditados -> Agregar 

El pase de diapositivas requiere JavaScript.

8) ¿Se pueden realizar en PostgreSQL los apartados 1, 3 y 4?

En PostgreSQL si un usuario hace un inicio de sesion incorrecto o intenta conectarse a una base de datos a la cual no pertenece, se refleja en el log del sistema:

Para poder auditar tablas, por ejemplo tendríamos que hacer uso de procedimientos y triggers:

Tablas

Procedimiento

Trigger

Para una auditoria completa en postgreSQL es necesario usar por ejemplo, pgAudit:

https://www.pgaudit.org/#section_one

 

9) ¿Se pueden realizar en MySQL los apartados 1, 3 y 4?

En MYSQL se pueden recoger los intentos fallidos de inicio de sesión, vía fichero log, habilitando dicha opción previamente en el fichero de configuración:

/etc/mysql/my.cnf

Otra posibilidad es hacer nosotros una tabla, para guardar la información y crear un trigger para que salte en el caso de inicio con x usuario.

Por defecto MySQL no incluye auditoria de tablas, a no ser que compremos el paquete MySQL Enterprise Audit, que incluye auditorías completas.

 

10) Posibilidades que ofrece MongoDB para auditar los cambios que sufre un documento.

La versión de MongoDB Enterprise si soporta varias operaciones de auditoria, por defecto registra todas las operaciones auditables como se indica aquí.

Si quisiéramos auditar un evento en concreto, tendríamos que hacer uso de la opción –auditFilter. 

Por defecto las salidas de la auditoria se detallan en formato JSON, pero también es posible configurarlo en formato syslog, consola o bson.

A dicha opción hay que pasarle como parámetro:

  • El <field> que será el campo que quedemos auditar.
  • <expression> donde le indicamos la condición sobre el campo anterior.

Sintaxis

Ejemplos

Auditar solo las acciones createCollection dropCollection:

Si quisiéramos auditar esta opción y mostrarlo en formato bson, tendríamos que indicar el filtro entre comillas simples y pasarle el parámetro –auditFormat BSON:

Auditar operaciones de usuario con el rol ReadWrite en la base de datos test:

Para auditar las operaciones de lectura y escritura sobre una colección concreta:

 

11) ¿Se puede auditar los accesos al sistema en MongoDB?

El siguiente ejemplo auditoria todo lo relacionado con autenticación sobre una base de datos denominada test:

Versión completa

 

Problemas

Si el usuario SCOTT estuviera bloqueado, para desbloquearlo:

Referencias

http://surachartopun.com/2010/08/audit-sql-with-audittrail-dbextended.html

http://www.dba-oracle.com/forensics/t_forensics_audit.htm

https://docs.mongodb.com/manual/tutorial/configure-audit-filters/

Autor entrada: CharlieJ

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *