Tema: Auditoria de Base de atos. Parte II Facultad: Ingeniería Escuela: Computación Asignatura: Base de Datos II Objetivo Especifico Que el estudiante: Aprenda a utilizar los diferentes mecanismos disponibles en ORACLE para auditar la base de datos. Introduccion Teorica Esta práctica está orientada a conocer y aprender cómo realizar un monitoreo selectivo de las acciones de los usuarios para ayudar en la investigación de usos maliciosos de la base de datos. El monitoreo puede realizarse a cuatro niveles distintos: Monitoreo de sentencias: Es el monitoreo de sentencias SQL específicas sin atender concretamente a los objetos. Este tipo de monitoreo puede hacerse para todos los usuarios del sistema o se puede enfocar sólo a algunos usuarios seleccionados. Monitoreo de privilegios: Es el monitoreo de los privilegios del sistema sin atender concretamente a los objetos. Este tipo de monitoreo puede hacerse para todos los usuarios del sistema o se puede enfocar sólo a algunos usuarios seleccionados. Monitoreo de objetos: Es el monitoreo de los accesos a esquemas específicos sin considerar el usuario. Monitorea las sentencias permitidas por los privilegios. Monitoreo minucioso: Permite una auditoría a nivel más granular, acceso a datos y las acciones basadas en el contenido, utilizando cualquier sentencia booleana, por ejemplo value > 1,000,000. La auditoría se activa con el acceso o con cambios en una columna. Para todos los tipos de monitoreo, ORACLE permite el monitoreo selectivo de sentencias ejecutadas con éxito, sentencias ejecutadas sin éxito o ambas. Los resultados del monitoreo son registrados en una tabla llamada "the audit trail" (la pista de auditoría). Monitoreo minucioso Fine-Grained Auditing (FGA) FGA proporciona una interfaz extensible para la creación de políticas para auditar los estados SELECT y DML en tablas y vistas. El paquete DBMS_FGA administra estos valores basados en las políticas de auditoría. El uso de este paquete le da al administrador una herramienta de seguridad donde puede crear políticas de auditoría sobre un objeto. Si todas las filas devueltas de una consulta coinciden con la condición de auditoría, entonces se crea una entrada que registra el evento de auditoría insertando una pista de auditoría minuciosa. Esta entrada incluye todos los datos reportados en la pista de auditoría regular. Sólo una fila de información de auditoría se inserta en la pista de auditoría para todas las políticas FGA que se evalúa como verdadera. El marco de extensibilidad de FGA también permite a los administradores, opcionalmente, definir un controlador de eventos de auditoría apropiados para procesar el caso, por ejemplo mediante el
2 envío de un alerta al administrador. El administrador utiliza la interfaz de DBMS_FGA.ADD_POLICY para definir la política de cada FGA para una tabla o vista, la identificación de cualquier combinación de SELECT, UPDATE, DELETE o INSERT Las políticas FGA asociadas con una tabla o vista también puede especificar las columnas más relevantes o importantes, por lo que cuando se audita cualquier tipo de declaración se debe especificar que columnas se verán afectadas o de cuales se desean llevar la auditoria. Si no se especifica la columna, la auditoría se aplica a todas las columnas, es decir, la auditoría se produce cuando cualquier tipo de sentencia especifica afecta a cualquier columna, independientemente de si se devuelve o no información. Un beneficio añadido es que los registros de auditoría creados son pertinentes, porque se refieren a los datos específicos de interés o preocupación. Adicionalmente el numero de registros generados es mucho menor debido a que se tiene un mejor control sobre lo que se desea auditar, es decir sobre lo más importante o privado y que no todos los empleados deben tener acceso, por ejemplo el salario, el número de seguro, el saldo en una cuenta, etc. FGA es independiente de AUDIT_TRAIL, todos los registros de auditoría se almacenan en tabla FGA_LOG$, en lugar de la tabla AUD$. El paquete DBMS_FGA contiene los siguientes procedimientos: ADD_POLICY DROP_POLICY ENABLE_POLICY DISABLE_POLICY Protegiendo los Registros de Auditoría Los registros de la tabla SYS.AUD$ pueden ser objeto de intentos de acceso para ser eliminados ya que pueden reflejar acciones no autorizadas en la BD. Así, resulta interesante reflejar ese tipo de acciones. Esto se consigue con el siguiente comando: audit all on sys.aud$ by access; De este modo cualquier acción contra la tabla SYS.AUD$ quedará registrado. Además, las acciones contra la tabla SYS.AUD$ sólo pueden ser borradas por los usuarios que puedan conectarse como INTERNAL.
Material y Equipo Computadora con Oracle 10G XE. Guía de Laboratorio. Procedimiento El desarrollo de esta práctica está orientado a continuar con el aprendizaje de la auditoria en la base de datos de oracle, ahora a un nivel mucho más minucioso. Monitoreo minucioso Fine-Grained Auditing (FGA) Mientras los trigger de Base de datos ayudan a potenciar acciones DML como insert, update y delete, el monitoreo sobre sentencias SELECT se puede volver muy costoso. Ya que generan demasiados registros el tratar de ver quienes están accesando la base de datos, sin embargo es algo que puede volverse crucial a la hora de auditoría, por lo que el monitoreo minucioso se vuelve muy importante. En esta práctica realizaremos este tipo de auditoría, donde es muy similar a la realizada la semana pasada, con la diferencia de que se puede agregar filtros y columnas al monitoreo. Lo primero que hay que comprobar es si la auditoría de la base de datos está activada por lo que ejecutaremos el siguiente comando SQL: select name, value from v$parameter where name like 'audit_trail' Para activar la auditoria ejecutaremos el siguiente comando: ALTER SYSTEM SET audit_trail = "DB" SCOPE=SPFILE; Cuando se realiza un cambio en el archivo spfile, es necesario bajar la base de datos, en nuestro caso reiniciar la maquina. Para conocer el funcionamiento de FGA realizaremos lo siguiente. Crearemos el usuario MICARNET y nos logueamos con él una vez que le hayamos otorgado los privilegios necesarios, luego creamos la tabla tpl_empleado con sus respectivos campos, e insertamos dos o más las filas, en donde más de un registro tenga como sueldo una cantidad mayor a 5000. Create table TPL_EMPLEADO( Tpl_Codcia Varchar2(15) Not Null, --Código de la empresa Tpl_CodEmp Varchar2(15) Not Null, --Código del empleado Tpl_NomEmp Varchar2(40) Not Null, --Nombre del empleado Tpl_ApeEmp Varchar2(40) Not Null, --Apellido del empleado Tpl_CodSex Varchar2(1) Not Null, --Sexo del empleado Tpl_Direcc Varchar2(100) Not Null, --Dirección del empleado tpl_numtel Varchar2(15) Not Null, --Numero de Teléfono tpl_numdui Varchar2(15) Not Null, --Numero de DUI tpl_numnit Varchar2(15) Not Null, --Numero de NIT Tpl_Salari Number(16,4) Not Null, --Salario actual del empleado Tpl_FecNac Date Not Null, --Fecha de nacimiento
4 Tpl_FecIng Date Not Null, --Fecha de ingreso Tpl_Estado Varchar2(1) Not Null, --Estado del Empleado Tpl_CodDep Number(3) Not Null, --código del depto. en que labora Tpl_CodCar Number(2) Not Null, --Código del cargo Tpl_codusu Varchar2(15) Not Null, --Usuario asignado al empleado Tpl_codusc Varchar2(15) Not Null, --Usuario que crea el registro Tpl_f_crea Date Not Null, --fecha en que se crea el registro Tpl_codusm Varchar2(15), --usuario que modifica el registro Tpl_f_modi Date --fecha en que se mod. el registro ); A continuación crearemos una política de auditoría, con el fin de auditar los sueldos superiores a 5000. Para lo cual nos conectaremos como sysdba. begin dbms_fga.add_policy( object_schema=> MICARNET, object_name => 'TPL_EMPLEADO', policy_name => 'SAL_CHK_AUDIT', audit_condition => 'TPL_SALARI > 5000', audit_column => 'TPL_SALARI' ); end; Para probar la auditoria nos conectaremos con el usuario MICARNET y consultaremos los registros ingresados tanto los que tienen un sueldo superior a 5000 como los que tienen un sueldo menor. Posteriormente conectados como sysdba ejecutamos la siguiente consulta para revisar la auditoria. select sql_text from dba_fga_audit_trail; Si lo que se desea es auditar sentencias DML, se puede realizar la siguiente política donde se realizará la auditoria para una sola columna de la tabla. begin dbms_fga.add_policy( object_schema => 'MICARNET', object_name => 'TPL_EMPLEADO', policy_name => 'sal_audit', audit_condition => null, -- equivalent to true audit_column => 'TPL_SALARI', statement_types => 'select,insert,update,delete'); end; Para comprobar la política anteriormente aplicada, realizaremos sobre la tabla tpl_empleado, inserciones, actualizaciones, eliminaciones y consultas conectados con el usuario MICARNET y en lugar de realizar un commit haremos un rollback, posteriormente consultaremos la auditoria. Si se desea eliminar una política, es necesario conectarse con el usuario sysdba, y ejecutar el siguiente comando. begin dbms_fga.drop_policy(
object_schema => 'MICARNET', object_name => 'TPL_EMPLEADO', policy_name => 'sal_audit'); end; Posteriormente realizaremos acciones sobre la tabla tlp_empleado y revisaremos la pista de auditoría para verificar que realmente ha sido eliminado.
6 Tarea Proteger los registros de auditoría, posteriormente borrar algunos registros de la tabla de auditoría y mostrar las pistas de auditoría generadas por la acción realizada.