Instituto Profesional DuocUC Escuela de Ingeniería Oracle Database Security Jaime Amigo P. © 2006, Santiago - Chile Instituto Profesional DuocUC Escuela de Ingeniería Objetivos Después de completar esta lección, usted deberá saber lo siguiente: • Aplicar El Principio del Menor Privilegio • Administrar cuentas por defecto • Implementar características de seguridad estandares • Auditar la actividad de una base de datos 2 Instituto Profesional DuocUC Escuela de Ingeniería Seguridad de Base de Datos Un sistema seguro, garantiza la confidencialidad de los datos que contiene. Hay varios aspectos de seguridad a considerar: • Acceso restringido a datos y servicios • Autentificación de usuarios • Monitoreo de actividades sospechosas Seguridad de Base de Datos Oracle Database 10g provee el mejor framework de la industria para un sistema seguro, pero para que ese framework sea efectivo, el administrador de base de datos debe seguir buenas prácticas y estar continuamente monitoreando la actividad de la base de datos. Restringiendo acceso a los Datos y Servicios Todos los usuarios no pueden tener acceso a todos los datos. Dependiendo que está almacenado en la base de datos, restringuir el acceso a ellos debe ser una regla inquebrantable. Estas restricciones pueden ser por requerimientos del negocio, por restricciones legales o espectativas del cliente. Información de tarjetas de crédito, datos de salud, información de identidad, etc, deben ser protegidas para acceso no autorizado. Oracle provee una gran gama de controles para limitar el acceso a una base de datos. Restricción de acceso debe aplicar el “Principio del Menor Privilegio”. 3 Seguridad de Base de Datos (continuación) Autentificación de usuarios Para hacer cumplir los controles de acceso el sistema debe primero saber quién esta tratando de accesar los datos. Una autentificación comprometida puede hacer el resto de las otras precauciones de seguridad, inútiles. La manera mas simple de autentificar un usuario es a través del método de que este provee una password. Es preciso asegurarse que las password sigan cientras reglas simples para incrementar el nivel de seguridad de un sistema. Existen métodos de autentificación más robusta que solicitan al usuario algo, por ejemplo un certificado PKI (Public Key Infrastructure). Otro método de autentificación fuerte es utilizar un dispositivo biométrico como huella digital (fingerprint), lector de iris o diafragma (iris scan), patrones de la estructura del hueso (bone structure pattern), otros. Oracle soporta técnicas avanzadas de autentificación tales como token, biometría, certificados digitales y certificados basados a través de la opción Advanced Security del RDBMS. Las cuentas de usuario que no están en uso, deben ser bloqueadas pues comprometen la seguridad del sistema. Monitoreo para actividades sospechosas Usuario debidamente autentificados y autorizados algunas veces pueden comprometer la seguridad del sistema. Identificar actividades irregulares como un empleado que repentinamente comience a consultar grandes cantidades de información de tarjetas de créditos u otra información sensible en una empresa, puede ser el primer paso para detectar el hurto de información. Oracle provee un rico juego de herramientas de auditoria para seguir la pista a usuarios e identificar actividades sospechosas. 4 Instituto Profesional DuocUC Escuela de Ingeniería Aplicando el Principio del Menor Privilegio • • Proteger el diccionario de datos Revocar privilegios PUBLIC innecesarios • • • Restringir acceso a directorios a usuarios Limitar a los usuarios con privilegio de administrador Restringir autentificación de bases de datos remotas Aplicando el Principio del Menor Privilegio Oracle Database 10g es líder en la industria en seguridad. Sin embargo, para maximizar las características de seguridad ofrecidas en cualquier ambiente de negocios, es imperativo que Oracle Database 10g a si mismo sea protegido y adecuadamente configurado. El uso adecuado de las características de seguridad internas y buenas prácticas de seguridad ayudaran a proteger la base de datos de ataques y proveer un ambiente seguro para operar. Practica del Principio del Menor Privilegio Este principio indica que un usuario solo debe tener los privilegios mínimos que sea requeridos para completar una tareas eficientemente. Esto permite reducir la posibilidad que usuarios accidentalmente o maliciosamente pueden modificar o ver datos para los cuales ellos no tienen los privilegios respectivos. La mayoria de la organizaciones de IT desean para sus ambientes de producción una política cerrada o basada en la Política del Menor Privilegio. 5 Instituto Profesional DuocUC Escuela de Ingeniería Proteger el Diccionario de Datos • Proteger el diccionario de datos, para asegurarse este parámetro debe estar inicializado en FALSE: O7_DICTIONARY_ACCESSIBILITY = FALSE • • • Esto previene que usuarios con privilegio de sistemas ANY TABLE puedan accesar tablas del diccionario de datos. Un seteo a FALSE previene que el usuario SYS se logee de una manera difernte a SYSDBA El valor por defecto es FALSE. Si usted lo encuentra seteado a TRUE, asegurese de tener una buena razón de negocio para ello. Proteger el Diccionario de Datos Usuarios que no son administradores no necesitan tener acceso al diccionario de datos, pero pueden accederlo si se le otorgan privilegios de sistema * ANY TABLE tal como, SELECT ANY TABLE o UPDATE ANY TABLE. EL diccionario de datos contiene información con la que un usuario malicioso podría alterar o dañar el sistema. Para excluir las tables del diccionario de datos del privilegio * ANY TABLE, el parámetro de inicialización O7_DICTIONARY_ACCESSIBILITY debe estar en FALSE. Si existe un usuario no administrador que requiera por alguna razón, acceder al diccionario de datos, se le puede otrogar acceso: • Usando el comando estándar GRANT para permitir el objetivo específico del diccionario de datos a accesar • Otorgando un privilegio de sistema SELECT ANY DICTIONARY para dar acceso al diccionario de datos completo En Oracle 10g y Oracle 9i, el valor del parámetro O7_DICTIONARY_ACCESSIBILITY es FALSE; sin embargo, en Oracle 8i e inferior, era TRUE; por lo tanto, si dispone de una versión más vieja es preciso setear a FALSE dicho parámetro para habilitar la protección del diccionario de datos. Precacución: Si este parámetro esta en TRUE, cualquier usuario con privilegio de sistema DROP ANY TABLE podría maliciosamente o accidentalmente borrar parte del diccionario de datos de una base de datos. Algunas instalaciones tienen por defecto todo habilitado y solo cierran accesos en casos que se requieran. Esto es sencillamente una muy mala práctica que pone en riesgo la seguridad de la información. Típicamente nos encontramos con este tipo de configuraciones en ambientes de aprendizaje o académicos. 6 Instituto Profesional DuocUC Escuela de Ingeniería Revocar los Privilegios PUBLIC innecesarios • • • Revocar todos los privilegios y roles innecesarios de la base de datos del grupo PUBLIC. Muchos packages construidos tienen otorgrados EXECUTE TO PUBLIC. Execute sobre los siguientes package pueden ser revocados desde PUBLIC: – – – – – • UTL_SMTP UTL_TCP UTL_HTTP UTL_FILE DBMS_OBFUSCATION_TOOLKIT Ejemplo: SQL> REVOKE execute ON utl_file FROM PUBLIC; Revocar los Privilegios PUBLIC innecesarios Revoque todos aquellos privilegios y roles innecesarios asociados a los usuarios que sean de acceso PUBLIC, ya que este tipo de grant son peligros. Privilegios como EXECUTE sobre package PL/SQL podrían habilitar a un usuario a ejecutar procedimientos que usted no desea realiza, por tanto, se deben otorgar los mínimos privilegios para la acción que ellos requieren sobre la base de datos. Muchos de los paquetes DBMS_* y UTL_* son instalados con el privilegio EXECUTE y grant PUBLIC. Siguiendo el principio del mínimo privilegio, debe revocar esos permisos para algunos paquetes mas sensitivos y otorgar permisos de ejecución individuales a usuarios que requieran de dichos paquetes. Restringir el acceso a privilegios públicos afecta a todos los usuarios.. Los paquetes mas poderosos que pueden ser mal utilizados son: • UTL_SMTP: Permite enviar mensajes vía mail usando la base de datos como Servidor de Correo SMTP (Simple Mail Transfer Protocol). Dejar este procedimiento con grant PUBLIC permitiría a un usuario no autorizado intercambiar mensajes de mail. • UTL_TCP: Permite establecer conexiones de red entre el servidor de base de datos y cualquier otro servicio de red. Asi, datos arbitrariamente pueden ser enviados entre el servidor de base de datos y cualquier servicio de red de espera.. 7 Revoke Unnecessary Privileges from PUBLIC (continued) • UTL_HTTP: Permite que el servidor de base de datos solicite y recupere datos via HTTP (HyperText Transfer Protocol). Otorgando un gran PUBLIC a este paquete, permite enviar datos en formularios HTML (HyperText Markup Language) a sitios web maliciosos. • UTL_FILE: Si esta configurado incorrectamente, permite acceso a nivel de texto a cualquier archivo del sistema operativo del servidor. A menudo, cuando esta correctamente configurado, este paquete no distingue entre llamadas de aplicaciones. Una aplicación con acceso a UTL_FILE puede escribir datos arbitrariamente dentro de la misma localización que es escrita por otra aplicación. • DBMS_OBFUSCATION_TOOLKIT: Encripta datos. Generalmente, la mayoria de los usuarios no tiene privilegios para encriptar datos porque la encriptación de datos no es recuperable si los datos cifrados no son almacenados y administrados con seguridad. Este es un paquete muy útil para aplicaciones que lo utilizan, pero requiere una adecuada configuración para ser usado en forma segura. Por tanto, es absolutamente necesario revocar los grant PUBLIC y otorgarlo solo a aquellos usuarios o roles cuando lo requieran. Listando Objetos Ejecutables Públicos Use la siguiente consulta para listar los objetos propiedad del usuario SYS que tiene privilegio de EXECUTE con grant PUBLIC: SQL> SELECT table_name 2 FROM dba_tab_privs 3 WHERE owner='SYS' 4 AND privilege = 'EXECUTE' 5 AND grantee='PUBLIC' 6 / TABLE_NAME -------------------AGGXMLIMP AGGXMLINPUTTYPE ... XMLTYPEEXTRA XMLTYPEPI 437 rows selected. SQL> 8 Instituto Profesional DuocUC Escuela de Ingeniería Restringiendo Acceso a Directorios del Sistema Operativos a Usuarios Parámetro de configuración UTL_FILE_DIR: • • Indica cuáles directorios del SO estan disponibles para PL/SQL Habilita a usuarios de bases de datos a leer y escribir desde diretorios sobre el servidor de bases de datos Restringiendo Acceso a Directorios del Sistema Operativo a Usuarios El parámetro de configuración UTL_FILE_DIR indica en cual directorio del sistema operativo paquetes PL/SQL pueden leer o escribir. Por defecto, no hay directorios accesibles. Los privilegios del sistema operativo siguen aplicables. Los directorios que el usuario levanto en la base de datos solo pueden ser accesibles hasta que no se setee UTL_FILE_DIR. Para especificar múltiples directorios, el listado de directorios debe estar entre comillas y separado por comas (como se indica abajo). Este no es un parámetro dinámico y la instancia debe ser reiniciada para que los cambios tengan efecto. Recuerde no usar variables de ambiente en el path del directorio. La instancia no chequea que existan los directorios, por tanto, debe cambiar el parámetro o crear el directorio posteriormente. Todos los usuarios de PL/SQL pueden leer o escribir en los directorios especificados, todos los usuarios de PL/SQL deben confiar con la información en los directorios especificados por este parámtro. Los directorios listados deben también ser accesibles por la instancia Oracle. Precaución: Nunca setee UTL_FILE_DIR = *, porque esto habilita acceso a todos los directorios accesible por la instancia Oracle, incluyendo a los directorios de datos y redo log. 9 Instituto Profesional DuocUC Escuela de Ingeniería Limitar Usuarios con Privilegios Administrativos • Restringir los siguientes tipos de privilegios: – – – – • Grants de privilegios de sistema y objetos Conexiones privilegiadas, SYSDBA y SYSOPER Privilegios tipo DBA, tales como DROP ANY TABLE Permisos de tiempo de ejecución Ejemplo: Listar todos los usuarios con rol DBA: SQL> SELECT grantee FROM dba_role_privs 2 WHERE granted_role = 'DBA'; GRANTEE -----------------------------SYS SYSTEM Limitar Usuarios con Privilegios Administrativos No otorge a usuarios de bases de datos mas privilegios que los necesarios. Al implementar el Principio del Mínimo Privilegio, restringir los siguientes tipos de privilegios: • Gran a privilegios de Sistemas y Objetos • Conexiones privilegiadas SYS, tales como SYSDBA y SYSOPER • Otros privilegios de tipo DBA, tales como DROP ANY TABLE Es importante determinar muy bien qué privilegios necesita cada usuario o grupo de estos, para otorgar sólo aquellos que son necesarios a su función dentro de la base de datos. Ver los usuarios que les han sido otorgados los privilegios de SYSDBA o SYSOPER, use la siguiente consulta: SQL> SELECT * FROM V$PWFILE_USERS; USERNAME SYSDBA SYSOPER ------------------------------ ------ ------SYS TRUE TRUE Hay muy pocas razones para que algún usuario que no sea SYS tenga privilegios de SYSDBA. 10 Instituto Profesional DuocUC Escuela de Ingeniería Deshabilitar Autentificación Remota de Sistema Operativo • • Autentificación remota debe ser solo usada cuando se confia en todos los clientes para autentificar a los usuarios Proceso de Autentificación Remota: – El usuario de base de datos es autentificado externamente. – El sistema remoto autentifica al usuario. – El usuario ingresa a la base de datos sin autentificaciones adicionales. • Para deshabilitar, asegurese que el siguiente parámetro de inicialización esta seteado por defecto como sigue: REMOTE_OS_AUTHENT = FALSE Deshabilitar Autentificación Remota de Sistema Operativo Esta característica esta deshabilitada por defecto. Cuando se habilita (TRUE), la autentificación externa de usuarios de base de datos, esta se delega al sistema remoto. Esto significa que la instancia confía implícitamente que los usuarios han sido autentificados adecuadamente en el cliente PC y no solicita una nueva credencial de autentificación. Los usuarios pueden conectarse a la base de datos sin proveer una password. El username del sistema operativo debe ser el mismo que el de la base de datos para poder ser autentificado externamente. La mayoría de los sistemas operativos remotos, especialmente las conexsiones de usuarios desde PC’s, no debería ejecutar autentificación confiando en ellos. Estos es una pobre practica de seguridad que debería modificarse. 11 Instituto Profesional DuocUC Escuela de Ingeniería Administrar Cuentas de Usuarios por Defecto • DBCA expira y bloquea todas las cuentes excepto: – – – – • SYS SYSTEM SYSMAN DBSNMP Para una base de datos creada manualmente, bloquee y experire las cuentas no utilizadas. Administrar Cuentas de Usuario por Defecto Oracle Database 10g se instala con un número de cuentas de usuarios por defecto. Estas cuentas estan pensadas para almacenar datos, PL/SQL propio, Código de Objetos Java con el propósito de no permitir conexiones a la base de datos. Cuando el DBCA es usado para crear una base de datos, automáticamente bloquea y expira todas las cuentas por defecto de usuarios de la base de datos, excepto las siguientes: • SYS • SYSTEM • DBSNMP • SYSMAN Oracle soporta la creación de base de datos a través de scripts. Muchas aplicaciones esperan que la base de datos este configurada de cierta manera y se automatiza la creación a través de un script. Las bases de datos creadas de este forma, no bloquean las cuentas por defecto. Valide que las cuentas no bloqueadas estan siendo usadas por conexiones a la base de datos y no simplemente para almacenar datos. 12 Instituto Profesional DuocUC Escuela de Ingeniería Implementar Características Estandares de Seguridad de Password Historial de Password Cuentas Bloquedas Usuario Seteo de Perfiles Expiración y Envejecimiento de Password Verificación de Password Implementando Características Estandares de Seguridad de Password La administración de password Oracle esta implementada con perfiles de usuarios. Los perfiles proveen muchas características de seguridad incluyendo: • Account locking: Habilita el bloqueo automático de cuentas cuando el usuario falla un número especificado de intentos al momento de logearse al sistema. • Password aging and expiration: Habilita a la password de usuario a tener un tiempo de activación o duración, después de dicho periodo la password expira y debe ser cambiada. • Password history: Chequea la nuevas nueva password y verifica que no sean reusadas en un periodo de tiempo o un número específico de password a retener. • Password complexity verification: Hace un chequeo de la complejidad de la password y verifica que reuna ciertas características. El chequeo permite que las password sean lo suficientemente complejas para proveer protección de intrusos que puedan querer acceder al sistema. Recuerde que cuando se crea un nuevo usuario a ellos se les asigna el perfil DEFAULT a menos que otro perfil les sea asignado. 13 Instituto Profesional DuocUC Escuela de Ingeniería Bloqueo de Cuentas Parámetro Descripción FAILED_LOGIN_ATTEMPTS Número de intents fallidos de conexión antes de bloquearse la cuenta PASSWORD_LOCK_TIME Número de días que la cuenta esta bloqueda despues que el número de intentos fallidos se ha superado Bloqueo de Cuentas Oracle bloquea automáticamente cuentas después que el usuario ha fallado su logeo en el valor señalado en FAILED_LOGIN_ATTEMPTS. La cuenta es automáticamente desbloqueada después de un instante de tiempo señalado en el valor PASSWORD_LOCK_TIME o bien, desbloqueda por el Administrador usando el comando ALTER USER. La cuenta de usuario puede ser explícitamente bloqueada con el comando ALTER USER o con Enterprise Manager. Cuando esto sucede, la cuenta no es automáticamente desbloqueda despues del tiempo indicado en PASSWORD_LOCK_TIME, pero tanto, debe ser manual desbloqueda por el DBA. SQL> ALTER USER hr ACCOUNT LOCK; User altered. SQL> CONNECT hr/hr ERROR: ORA-28000: the account is locked Warning: You are no longer connected to ORACLE. SQL> CONNECT / as sysdba Connected. SQL> ALTER USER hr ACCOUNT UNLOCK; User altered. 14 Instituto Profesional DuocUC Escuela de Ingeniería Expiración y Envejecimiento de Password Parámetero Descripción PASSWORD_LIFE_TIME Tiempo de validez de la password en días después de ello, la password expira PASSWORD_GRACE_TIME Periodo de gracia en días para cambiar la password después del primer intento de sesión y después que la password ha expirado Expiración y Envejecimiento de Password El administrador de la base de datos puede especificar un periodo de gracia PASSWORD_GRACE_TIME, el que comienza después del primer intento de sesión después que la password a expirado. Se despliega un mensaje de advertencia cada vez que el usuario intenta logearse hasta que el periodo de gracia vence. Si un usuario no cambia la password dentro del periodo de gracia, su cuenta queda bloqueada. Nota: Si la cuenta es una cuenta de aplicación (no accesible a traves de SQL*Plus), vefrificar que la aplicación esta habilitada para cambiar password antes de habilitar expiración de password. Muchos DBAs asignan perfiles separados a cuentas de usuarios de aplicaciones. Una cuenta de usuario puede ser expirada manualmente seteando la password a expirada. SQL> ALTER USER hr PASSWORD EXPIRE; User altered. SQL> CONNECT hr/hr ERROR: ORA-28001: the password has expired Changing password for hr New password: ******** Retype new password: ******** Password changed 15 Instituto Profesional DuocUC Escuela de Ingeniería Historial de Password Parámetro Descripción PASSWORD_REUSE_TIME Número de dias antes que la password pueda ser reusada PASSWORD_REUSE_MAX Número de password modificadas requeridas antes que la actual password pueda ser reusada Historial de Password El Historial de Password se asegura que un usuario no pueda reusar una password después de un intervalo de tiempo. Estos chequeos pueden ser implementados usando uno de los siguientes valores: • PASSWORD_REUSE_TIME: Especifica que el usuario no puede reusar una password hasta el número de días indicado. • PASSWORD_REUSE_MAX: Específica el número de password modificadas antes que la password actual pueda ser reutilizada. Estos dos parámetros son mutuamente excluyentes, cuando un parámetro se setea a un valor el otro se setea a UNLIMITED (o DEFAULT si el perfil tiene seteado el valor UNLIMITED). 16 Instituto Profesional DuocUC Escuela de Ingeniería Verificación de Password Parámetro Descripción PASSWORD_VERIFY_ FUNCTION Una función PL/SQL que asegura la complejidad de la password es chequeada antes de ser asignada La funcion de verificación de password debe: • Ser propiedad del usuario SYS • Retornar un valor Boolean (true o false) Verificación de Password Antes de asignar una nueva password al usuario, una función PL/SQL puede ser invocada para verificar la validez de la password. Oracle provee una rutina de verificación por defecto que puede ser cargada ejecutando un script SQL localizado en $ORACLE_HOME/rdbms/admin/utlpwdmg.sql o el DBA puede escribir una función PL/SQL personalizada que reuna los requerimientos de seguridad necesarios. Además de las restricciones listadas en la diapositiva, funciones de verificación de password deben seguir las siguientes especificaciones para declarar variables de entrada: function_name(userid_parameter IN VARCHAR2, password_parameter IN VARCHAR2, old_password_parameter IN VARCHAR2) RETURN BOOLEAN Si la función de password levanta una excepción o llega a ser inválida, un mensaje de error es retornado cuando el comando ALTER USER o CREATE USER es finalizado. 17 Instituto Profesional DuocUC Escuela de Ingeniería Función Provista para Verificación de Password: VERIFY_FUNCTION La función provista para la verificación de password, fuerza restricciones donde el: • • • • Minimo largo es 4 caracteres Password no puede ser igual al nombre del usuario Password debe tener al menos un alfabético, un número y un caracter especial Password debe diferir de las 3 passsword previas en al menos 3 letras Función Provista para Verificación de Password: VERIFY_FUNCTION Oracle provee una función de verificación de complejidad de password llamada VERIFY_FUNCTION. Esta función es creada con el script $ORACLE_HOME/rdbms/admin/utlpwdmg.sql. Esta función debe ser creado con el esquema SYS. Además de crear VERIFY_FUNCTION, con el script utlpwdmg también debe cambiar el perfil DEFAULT con el siguiente comando ALTER PROFILE: ALTER PROFILE default LIMIT PASSWORD_LIFE_TIME 60 PASSWORD_GRACE_TIME 10 PASSWORD_REUSE_TIME 1800 PASSWORD_REUSE_MAX UNLIMITED FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1/1440 PASSWORD_VERIFY_FUNCTION verify_function; 18 Instituto Profesional DuocUC Escuela de Ingeniería Creando un Perfil de Password Creando un Perfil de Password Para crear un perfil de password, abra Enterprise Manager y navege hasta la página Administration. Seleccione Profile y haga click en el botón Create. Valores comúnes para cada configuración pueden seleccionarse desde un listado de valores (icono linterna) o bien se ingresa el valor deseado. Todos los períodos de tiempo están expresados en días, pero pueden ser expresados como fracciones. Hay 1440 minutos en un día, así 5/1440 son 5 minutos. Borrando Perfiles de Password Si desea eliminar un perfil, todos los usuarios asignados a ese perfil seran automáticamente asignados al perfil por defecto. 19 Instituto Profesional DuocUC Escuela de Ingeniería Asignando Usuarios a un Perfil de Password Asignando Usuarios a un Perfil de Password Para asignar un usuario a un perfile de password: 1. Abra Enterprise Manager y navege a la página Administration. 2. Seleccione Users. Seleccione el usuario que dese asignar a un perfil y haga click en el botón Edit. 3. Desde el listado drop-down en profile, seleccione el perfil que desea aplicar al usuario y haga click en el botón Apply. Recuerde que un usuario puede solo tener asignado un perfil a la vez. Si un usuario esta logeado cuando se realiza un cambio en su perfil, los cambios no tienen efecto en este usuario hasta la siguiente sesión. La cuenta de usuario puede también ser bloqueada o expirada desde la pagina Edit User. 20 Instituto Profesional DuocUC Escuela de Ingeniería Monitoreando Actividades Sospechosas Monitorear o auditar debe ser parte integral de los procedimientos de seguridad. Oracle incluye las siguientes herramientas para auditar: • Auditoria estándar de base de datos • Auditoria basada en valor • Auditoria fina (Fine-grained auditing (FGA)) Monitoreo para actividades sospechosas Oracle Database 10g provee 3 tipos diferentes de auditoria. El administrador puede auditar todas las acciones que tienen lugar dentro de una base de datos. Es importante recordar que la captura y registro de información sobre que esta aconteciendo en el sistema puede aumentar la carga de trabajo sobre el servidor. La auditoria puede ser focalizada sólo en aquellos eventos que nos interesa capturar o monitorear. De modo que la auditoria tenga el mínimo impacto en la performance del sistema. De cualquier otro modo, el impacto sobre el rendimiento del sistema es muy significativo. La auditoria estándar captura varias piezas de información acerca de eventos auditables, cuándo ocurrio el evento, qué usuario lo causo y cuál en máquina cliente estaba el usuario cuando sucedio el evento. La auditoria basada en valor, audita los cambios sobre los datos (insert, delete, update). Es una extensión a la auditoria estándar de base de datos, capturando no solo los eventos auditables cuando ocurren, sino también los valores que fueron insertados, borrados o modificados. La auditoria basada en valor se implementa a traves de triggers de base de datos. Auditoria fina (Fine-Grained Auditing (FGA)), audita sentencias SQL. FGA es una extensión a la auditoria estándar de base de datos, capturando la sentencia SQL actual que ha sido ejecutada. 21 Instituto Profesional DuocUC Escuela de Ingeniería Comparación de Herramientas de Auditoria Tipo de Auditoria ¿Qué es auditado? ¿Qué registra? Estándar Uso de Privilegios incluyendo acceso a Objetos Conjunto Fijo de Datos Basada en valores Datos cambiados por sentencias DML Definidas por el Administrador De Granja Fina Sentencias SQL (insert, update, delete, y select) basadas sobre el contenido Conjunto fijo de Datos incluyendo sentencias SQL 22 Instituto Profesional DuocUC Escuela de Ingeniería Auditoria Estándar de Base de Datos Habilitada a través del parámetro AUDIT_TRAIL • NONE: Deshabilita la recolección de registros auditables • DB: Habilita la auditoria con registros almacenados en la base de datos • OS: Habilita la auditoria con registros almacenados en el sistema operativo Se puede auditar: • Eventos de Login • Exercise of system privileges • Exercise of object privileges • Uso de sentencias SQL Auditoria Estándar de Base de Datos Antes de usar la auditoria es preciso setear primeramente el parámetro AUDIT_TRAIL que indica la localización en el sistema operativo donde se almacenaran los registros de auditoria. El seteo normal de este parámetro es DB, lo que indica que los registros auditables seran almacenados en la tabla DBA_AUDIT_TRIAL. La auditoria puede capturar información sobre eventos de logins, ejecución de privilegios de sistemas y ejecución de privilegios de objetos. La información de auditoria puede focalizarse en el evento generado por el usuario o en el estado del evento (exitóso o no). El siguiente comando genera información de auditoria pero esta mal focalizado. Esta opción captura cualquier operación que afecte a cualquier tabla: SQL> AUDIT TABLE; Audit succeeded. Un mejor ejemplo de un comando de auditoria es (ya esta mas focalizado) : SQL> AUDIT DELETE ON hr.employees WHENEVER SUCCESSFUL; Audit succeeded. 23 Instituto Profesional DuocUC Escuela de Ingeniería Opciones específicas auditables Auditando sentencias SQL AUDIT table; Auditando privilegios de sistema (focalizado o no focalizado) AUDIT select any table, create any trigger; AUDIT select any table BY hr BY SESSION; Auditando privilegios de objetos (focalizado o no focalizado) AUDIT ALL on hr.employees; AUDIT UPDATE,DELETE on hr.employees BY ACCESS; Auditando sesiones AUDIT session whenever not successful; Opciones específicas auditables Auditando sentencias SQL: La sentencia mostrada en la figura auditara cualquier sentencia que afecte a una tabla incluyendo CREATE TABLE, DROP TABLE, TRUNCATE TABLE, etc. Las auditorias sobre sentencias SQL pueden ser focalizadas al usuario o al estado (éxito o fracaso de la sentencia). SQL> AUDIT TABLE BY hr WHENEVER NOT SUCCESSFUL; Auditar el sistema de privilegios puede ser usado para chequear la ejecución de cualquier privilegio del sistema, por ejemplo, DROP ANY TABLE. La auditoria se puede focalizar por usuario o éxito o fracaso de la acción. Por defecto, cada vez que se ejecuta un privilegio de sistema un registro de auditoria es ejecutado. Es posible agrupar esos eventos para que solo se registre uno por sesión (de esta forma si hay 100,000 actualizaciones de registro en una tabla que realiza un usuario, por tanto solo se registra un evento de auditoria). Si la cláusula BY SESSION no especificada, el valor por defecto es BY ACCESS. Considere usar la cláusula BY SESSION para limitar el registro de eventos de auditoria y no afectar el rendimiento del sistema. Auditoria de objetos puede ser usada para auditar acciones sobre tablas, vistas, procedimientos, secuencias, directorios, etc. Este tipo de auditorias puede enfocarse por éxito o fracaso y agruparse por sesión o acceso. Semejante a la auditoria de privilegios de sistema, el valor por defecto de agrupamiento es por sesión, por tanto, implícitamente debe indicarse BY ACCESS si se desea separar el registro de auditoria generada por cada acción. 24 Especificando opciones de auditoria (Continuación) La opción AUDIT SESSION audita la creación de sesiones de usuario. Puede focalizarse la auditoria por usuario o éxito/fracaso. Esta opción es única ya que genera un registro de auditoria por cada sesión que se conecta a la base de datos. Un registro de auditoria es insertado en el registro de auditoria al momento de conexión y modificado al momento de desconectarse. La información acumulada sobre una sesión como el tiempo de conexión, tiempo de desconexión, I/O lógicos y físicos procesados y mucho mas, son almacenados en un simple registro de auditoria que corresponde a la sesión. En muchas bases de datos es común usar el comando AUDIT SESSION (no focalizado). En la mayoria de las bases de datos se debe configurar AUDIT SESSION WHENEVER NOT SUCCESSFUL porque permite detectar intentos indebidos de acceso a la base de datos. Nota: A menudo las opciones comienzan como no focalizadas porque no se tiene certeza que actividad debemos monitorear. La opción AUDIT ALL un “atajo” conveniente para auditar uma amplia gama de actividades en la base de datos. Alter Audit Comment Insert Si la opciónGrant AUDIT ALL es Index usado con un username: SQL> AUDIT ALL BY hr; Read Rename Select Delete Lock Update El usuario tendrá sentencias DDL auditables para los siguientes objetos: Alter System Cluster Context Create Session Database Link Dimension Directory Index Materialized View Not Exists Procedure Profile Public Database Link Public Synonym Role Rollback Segment Sequence Synonym System Audit System Grant Table Tablespace Trigger Type User View 25 Instituto Profesional DuocUC Escuela de Ingeniería Viendo Opciones de Auditoria Vista Diccionario de Datos Descripción ALL_DEF_AUDIT_OPTS Opciones por Defecto DBA_STMT_AUDIT_OPTS Opciones de auditoria de Sentencias DBA_PRIV_AUDIT_OPTS Opciones Auditoria de Privilegios DBA_OBJ_AUDIT_OPTS Opciones Auditoria Objetos del Esquema Viendo Opciones de Auditoria Para ver que opciones de auditoria se han seleccionado, liste las vistas mencionadas a continuación. DBA_STMT_AUDIT_OPTS y DBA_PRIV_AUDIT_OPTS contienen solo registros de sentencias y opciones de auditoria de privilegios que se han especificado. DBA_OBJ_AUDIT_OPTS contiene un registro por objeto auditable sin importar que opciones se han. La vista muestra una columna para cada opción auditable. Por ejemplo, opciones de auditoria para INSERT son mostradas en la columna INS. Opciones de auditoria son desplegadas como SUCCESSFUL/NOT SUCCESSFUL con 3 posibles valores para cada estado: • Not audited • S Collect audit records by session • A Collect audit records by access SQL> SELECT object_name, object_type, ins, upd FROM dba_obj_audit_opts WHERE object_name = 'EMPLOYEES‘ OBJECT_NAME OBJECT_TY INS UPD ------------ --------- --- --EMPLOYEES TABLE A/S -/- 26 Instituto Profesional DuocUC Escuela de Ingeniería Auditoria Estándar de Base de Datos Habilitar Auditoria de Base de Datos DBA Archivo de Parámetros Usuario Ejecutar Especificar opciones auditoria Comandos Database Opciones Auditoria Server process Generar Registro Auditoria Registros Auditoria Registrar Auditoria Revisar Información Auditoria SO Auditoria Estándar de Base de Datos Después que el administrador a habilitado la auditoria (con el parámetro AUDIT_TRAIL) y especificado sus opciones (con sentencias SQL como se mostro en páginas previas), la base de datos comienza a recolectar información de auditoria. Si AUDIT_TRAIL esta setea al Sistema Operativo, los registros de auditoria serán registrados en el sistema operativo en archivos. En un ambiente Windows, esto es un evento de log. En ambientes UNIX, los registros son almacenados en un archivo. La localización de este archivo esta especificado con el parámetro AUDIT_FILE_DEST. Asumiendo que AUDIT_TRAIL está setea a DB, los registros auditables son almacenados en una tabla que es parte del esquema SYS. El mantenimiento de los registros de auditoria es una tarea administrativa importante que debe ejecutar el DBA. Dependiendo den la focalización de la auditoria, la cantidad de información a registrar podría crecer enormemente de forma muy rápida. Sino se mantiene adecuadamente el registro de auditorias, esto puedo consumir mucho espacio de almacenamiento y puede afectar el rendimiento del sistema. 27 Instituto Profesional DuocUC Escuela de Ingeniería Viendo Resultados Auditables Vistas Auditables Descripción DBA_AUDIT_TRAIL Audita todas las entradas DBA_AUDIT_EXISTS Registros para AUDIT EXISTS/NOT EXISTS DBA_AUDIT_OBJECT Registros objetos del esquema DBA_AUDIT_SESSION Conexiones y desconexiones DBA_AUDIT_STATEMENT Sentencias Auditables Viendo Resultados Auditables El acceso a los registros auditables debe ser controlado rigurosamente pues puede contener información sensitiva para el negocio de la empresa. Usualmente la tarea de administrar los registros auditables es llevada por el DBA pero si necesita ser delegada se deben otorgar grant a DELETE_CATALOG_ROLE para borrar información. 28 Instituto Profesional DuocUC Escuela de Ingeniería Auditoria basada en Valores Cambios hechos por Usuario Dispara Triggers Cambios de Usuario Confirmados Registro Auditoria es creado por Trigger E Insertado en una tabla de auditoria Auditoria Basada en Valores Los registros de auditoria de base de datos que hacen insert y delete sobre objetos auditables, no capturan los valores reales que fueron cambiados o insertados. La auditoria basada en valores es una extensión de la auditoria estándar y capturan los valores actuales que han sido modificados. Se activan disparadores (triggers) construidos en PL/SQL. Cuando un usuario inserta, modifica o elimina datos desde una tabla con el adecuado trigger asociado, el trigger trabaja en background y copia la información a una tabla diseñada para contener información de auditoria. La auditoria basada en valores, tiende a degradar más el rendimiento que la auditoria estándar, porque el código del trigger debe ejecutarse cada vez que ocurre una operación de insert, delete o update. La degradación dependerá mucho del la eficiencia del código PL/SQL del trigger. Este tipo de auditorias solo debe ser usada en situación donde la información capturada por la auditoria estándar de base de datos es insuficiente. 29 Auditoria basada en Valores (continuación) La clave de la auditoría basada en valores es el trigger auditable. A continuación un ejemplo: CREATE OR REPLACE TRIGGER system.hrsalary_audit AFTER UPDATE OF salary ON hr.employees REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN IF :old.salary != :new.salary THEN INSERT INTO system.audit_employees VALUES (sys_context('userenv','os_user'), sysdate, sys_context('userenv','ip_address'), :new.employee_id ||' salary changed from '||:old.salary|| ' to '||:new.salary); END IF; END; / Este trigger se focaliza en auditar y capturar los cambios sobre la columna salary de la tabla hr.employees. Cuando una fila es modificada, el trigger verifica la columna salary. Si el salario anterior no es igual al nuevo valor, entonces el trigger inserta un registro de auditoria en la tabla audit_employees (tabla creada en el esquema SYSTEM). El regitro de auditoria incluirá username, IP address desde donde se hace el cambio, la clave primaria que identifica el registro modificado y el actual salario que se ha modificado. Los triggers de base de datos puede ser usados también para capturar información de conexiones de usuarios en casos donde la auditoria estándar no entrege los datos suficientes. Con trigger de logon, el DBA puede capturar: - IP address de la persona que se conecta - Los primeros 48 caracteres del programa usado para conectarse a la instancia - Nombre del terminal usado para conectarse a la instancia 30 Instituto Profesional DuocUC Escuela de Ingeniería Auditoria Fina (FGA) • • • • • Monitoreo de acceso a datos sobre contexto Audita SELECT or INSERT,UPDATE,DELETE Puede ser linqueado a tabla o vista Puede disparar un procedimiento Es gestionado con el paquete DBMS_FGA Policy: AUDIT_EMPS_SALARY SELECT name, salary FROM employees WHERE department_id = 10; employees 31 Auditoria Fina - Fine-Grained Auditing (FGA) Los registros de auditoria de base de datos registran que una operación ha sucedido pero no capturan la información de la sentencia SQL que genero la operación.. La auditoria fina es una extensión que tiene la capacidad de capturan la sentencia SQL que consulta o manipula datos. FGA permite también auditar mas detalladamente que la auditoria estándar o la auditoria basada en valores. Las opciones de auditoria fina puede focalizarse por columnas individuales dentr de una tabla o vista y a menudo puede ser condicionada a que los registros auditables sean capaturados solo si se reunen ciertas especificaciones indicadas por el administrador o DBA. A diferencia de la auditoria basada en valores, FGA no requiere del uso de triggers y el impacto en el rendimiento es similar a la auditoria estándar. El administrador usa el paquete DBMS_FGA PL/SQL para crear una política de auditoria sobre una tabla o vista. Si alguna de las filas retornadas de una consulta complete la condición establecida en la auditoria y afecta a la columna auditable, entonces se genera un registro y se almacena dicha información. Opcionalmente dicho evento puede ejecutar un procedimiento almacenado. FGA automáticamente focaliza la auditoria a sentencias SELECT, en aquellas que retornan cientos de filas se genera solo un registro auditable. 31 Instituto Profesional DuocUC Escuela de Ingeniería Politica FGA • Define: – Criterio Auditoria – Acción Auditoria • Es creado con DBMS_FGA .ADD_POLICY dbms_fga.add_policy object_schema => object_name => policy_name => audit_condition=> audit_column => handler_schema => handler_module => enable => statement_types=> ( 'hr', 'employees', 'audit_emps_salary', 'dept_id=10', 'salary', 'secure', 'log_emps_salary', TRUE, 'select' ); SELECT name, job_id FROM employees; SELECT name, salary FROM employees WHERE department_id = 10; SECURE.LOG_ EMPS_SALARY employees 32 Política FGA El ejemplo de la figura muestra una Política FGA creada con el procedimiento DBMS_FGA.ADD_POLICY. El procedimiento acepta los siguientes argumentos: Policy Name Usted asigna un nombre a cada vez que crea una Política FGA. El ejemplo muestra el nombre AUDIT_EMPS_SALARY, usando los siguientes argumentos: policy_name => 'audit_emps_salary' Audit Condition La condición de auditoria es el predicado de SQL que define cuando el evento de auditoria debe ser disparado o llamado. En el ejemplo, todas las filas en las ventas de departamentos están auditadas,usando el siguiente argumento en la condición: audit_condition => 'department_id = 10' Statement Type ¿Cuál tipo de sentencia será auditada? Se puede auditar sentencias SELECT y (todas en un solo string) INSERT,UPDATE,DELETE. 32 Política FGA (continuación) Audit Column La columna auditable define el dato que esta siendo auditado para dicha tabla. Un evento auditable ocurre solo si la columna es incluida en la cláusula SELECT. En el ejemplo es la columna SALARY, usando los siguientes argumentos: audit_column => 'salary' Este argumento es opcional. Sino se especifica, entonces el argumento AUDIT_CONDITION determina cuando ocurre un evento a auditar. Object El objeto es la tabla o vista que esta siendo auditada. Hay 2 argumentos passados: • El esquema que contiene el objeto • El nombre del objeto En el ejemplo la tabla auditable hr.employees usando los siguientes argumentos: object_schema => 'hr' object_name => 'employees' Handler Es opcional y determina el procedimiento PL/SQL a ejecutar si se requieren acciones adicionales a tomar cuando ocurra un evento auditable. Por ejemplo, el evento podría enviar una página de alerta al administrador. Sino se define el manejador de eventos, entonces la entrada del evento es insertada en el registro auditable. Si el manejador de eventos esta definido, entonces se inserta un registro en la bitacora de auditoria y se ejecuta el manejador de eventos. La entrada de auditoria incluye la política que causo el evento, el usuario que ejecuto la sentencia SQL y la sentencia SQL y sus variables o parámetros que la componen. El administrador de eventos es pasado como 2 argumentos: • El esquema que contiene el programa PL/SQL • El nomrbre del programa PL/SQL El ejemplo ejecuta el procedimiento SECURE.LOG_EMPS_SALARY usando los siguientes argumentos: handler_schema => 'secure' handler_module => 'log_emps_salary' Status El estado indica si la política FGA esta permitida o habilitada. En el ejemplo, los siguientes argumentos estan habilitados para la política: enable => TRUE 33 Instituto Profesional DuocUC Escuela de Ingeniería Paquete DBMS_FGA • Use DBMS_FGA Subprograma toDescripción maintain FGA policies • Grant the ADD_POLICY executeCrea privilege toeladministrators politica only usando predicado como la condición de auditoria • Includes the following subprograms: DROP_POLICY Borra una política ENABLE_POLICY Habilita una politica DISABLE_POLICY Deshabilita una política Paquete DBMS_FGA El paquete DBMS_FGA es la herramienta de administración para funciones de auditoria fina. Privilegios de Execute sobre DBMS_FGA son necesarios para administrar políticas de auditoria fina. Dado que este tipo de auditoria puede contener información sensible para el negocio. Esos privilegios de execute sobre este package deben estar reservados solo para el administrador o DBA. 34 Instituto Profesional DuocUC Escuela de Ingeniería Habilitando y Deshabilitando una Política FGA • Habilitando una Política: dbms_fga.enable_policy ( object_schema => 'hr', object_name => 'employees', policy_name => 'audit_emps_salary' ); • Deshabilitando una Política: dbms_fga.disable_policy ( object_schema => 'hr', object_name => 'employees', policy_name => 'audit_emps_salary' ); Habilitando y Deshabilitando una Política FGA Deshabilitar una política FGA significa que la política no generará eventos auditables. Si desea que la política comience a registrar eventos, ustede deberá habilitarla nuevamente. Por defecto la política queda habilitada al momento de la creación. En el ejemplo se muestra como habilitar y deshabilitar una política. Para ambos procedimientos, todos los argumentos son requeridos. 35 Instituto Profesional DuocUC Escuela de Ingeniería Borrando una Política FGA SQL> EXEC dbms_fga.drop_policy ( > object_schema => 'hr', > object_name => 'employees', > policy_name => 'audit_emps_salary'); PL/SQL procedure successfully completed. SQL> Borrando una Política Sino se desea seguir con una política, usted puede removerla con DBMS_FGA.DROP_POLICY. Todos los argumentos son requeridos. 36 Instituto Profesional DuocUC Escuela de Ingeniería Disparando Eventos Auditables • La siguiente sentencia SQL causa una auditoria: SELECT count(*) FROM hr.employees WHERE department_id = 10 AND salary > v_salary; SELECT salary FROM hr.employees; • La siguiente sentencia no causa una auditoria: SELECT last_name FROM hr.employees WHERE department_id = 10; 37 Disparando Eventos Auditables En general, la política de auditoria fina esta basada en columnas auditables y simpre predicados SQL definidos por el usuario. Durante el análisis de las condiciones de la política reunidas para la condición, la sentencia es auditada y si hay un evento a manejar, éste es disparado. La función de auditoria es ejecutada como una transacción autónoma. Cada política de auditoria se aplica individualmente. Es decir, mientras las filas estan siendo devueltas o modificadas, un registro de auditoria será generado y habrá un registro de auditoria por cada política para sentencias SQL. Ejemplos Los dos primeros ejemplos de la figura, producen un evento auditable perque accesan la columna salary y filas con department_id = 10. En el segundo ejemplo, Oracle se da cuenta que hay una política asociada a la columna salary que accesan a las filas del departamento 10, a pesar que department_id no es referenciado en la cláusila WHERE. En el último ejemplo, no se produce una auditoria porque no se accesa la columna salary. Si la columna salary no ha sido especificada como AUDIT_COLUMN cuando la política es creada, entonces la sentencia SELECT produciría un evento auditable. 37 Instituto Profesional DuocUC Escuela de Ingeniería Vistas Diccionario de Datos Nombre de Vista Descripción DBA_FGA_AUDIT_TRAIL Todos lso eventos FGA ALL_AUDIT_POLICIES Todas las políticas FGA para objetos accesados por el usuario actual DBA_AUDIT_POLICIES Todas las politicas en la base de datos USER_AUDIT_POLICIES Todas las politicas FGA para objetos en el esquema del usuario actual Vistas del Diccionario de datos Las entradas auditables de FGA se registran en una tabla separada de las auditorias de objetos y privilegios. Las entrada son registradas en la vista DBA_FGA_AUDIT_TRAIL. Hay otras 2 vistas que contienen definición de políticas: ALL_AUDIT_POLICIES, DBA_AUDIT_POLICIES, USER_AUDIT_POLICIES. 38 Instituto Profesional DuocUC Escuela de Ingeniería DBA_FGA_AUDIT_TRAIL SQL> SELECT to_char(timestamp, 'YYMMDDHH24MI') 2 AS timestamp, 3 db_user, 4 policy_name, 5 sql_bind, 6 sql_text 7 FROM dba_fga_audit_trail; TIMESTAMP DB_USER POLICY_NAME SQL_BIND ---------- ------- ----------------- ---------SQL_TEXT ----------------------------------------------0201221740 SYSTEM AUDIT_EMPS_SALARY #1(4):1000 SELECT count(*) FROM hr.employees WHERE department_id = 10 AND salary > :b1 DBA_FGA_AUDIT_TRAIL Nombre Descripción TIMESTAMP Fecha y Hora de Ejecución DB_USER Nombre del usuario de la base de datos OS_USER Nombre del usuario del Sistema Operativo OBJECT_SCHEMA Propietario del objeto auditable OBJECT_NAME Nombre del objeto auditables POLICY_NAME Nombre de la política que causo el evento auditable SCN El SCN de la transacción SQL_TEXT Sentencia SQL que causo el evento auditable SQL_BIND Variable del evento auditable formateada como: #n(s):v: Donde n es el número de la variable en la sentencia s es el largo de la variabley v es el valor de la variable COMMENT$TEXT Un comentario 39 DBA_FGA_AUDIT_TRAIL (continuación) Seleccionando desde la Auditoria FGA El siguiente ejemplo despliega 2 files de auditoria creadas para ejemplos válidos de páginas anteriores. La columna sql_bind en la segunda fila tiene un valor de #1(4):1000, que incluye las siguientes componentes: #1 Indica que este es la primera variable de ambiente en la sentencia. (4) Indica que la variable de ambiente tiene largo 4. 1000 indica que la variable de ambiente tiene valor 1000. Ejemplo Este ejemplo es similar al visto en la figura, a menos que también incluya una política para fila sin un manejador de auditoria. SQL> COL timestamp FORMAT A10 SQL> COL db_user FORMAT A7 SQL> COL policy_name FORMAT A20 SQL> COL sql_bind FORMAT A20 SQL> COL sql_text FORMAT A60 SQL> SQL> SELECT to_char(timestamp, 'YYMMDDHH24MI') 2 AS timestamp, 3 db_user, 4 policy_name, 5 sql_bind, 6 sql_text 7 FROM dba_fga_audit_trail; TIMESTAMP DB_USER POLICY_NAME SQL_BIND ---------- ------- -------------------- -----------------SQL_TEXT ---------------------------------------------------------0201221740 SYSTEM AUDIT_EMPS_SALARY #1(4):1000 SELECT count(*) FROM hr.employees WHERE department_id = 10 AND salary > :b1 0201221741 SYSTEM AUDIT_EMPS_SALARY SELECT salary FROM hr.employees SQL> 40 Instituto Profesional DuocUC Escuela de Ingeniería Pautas para FGA • Para auditar todas las sentencias, use la condición null. • Si intenta agregar una política que ya existe, aparecerá el error ORA-28101. Cuando se crea una política, la tabla o vista debe existir. Si la sintáxis de la condición de auditoria es inválida, un error ORA-28112 aparecerá cuando el objeto auditado sea accesado. Si la columna auditable no existe en la tabla, las filas no serán auditadas. Si el manejador de eventos no existe, no se devuelve ningún error y los registros auditables son creados. • • • • Pautas para FGA Condición de Auditoria Cuando se crea una nueva política FGA, la condición por defecto es null, lo que significa que todas las sentencias sera auditadas. Error en Nombre de Políticas El nombre de la política debe ser único dentro de la base de datos. Las políticas no tienen propietario. Si un nombre duplicado es usado, usted recibe un mensaje de error cuando esta creando la política: ORA-28101: policy already exists Errores de Objetos Auditados La tabla o vista auditada deben existir cuando se crea la política. Sino existe, usted recibe un error como el siguiente: ORA-00942: table or view does not exist 41 Pautas para FGA (continuación) Errores de Condiciones Auditables Si la sintáxis de la condición es inválida, la política se creará sin errores, pero el siguiente mensaje aparece cuando el objeto es accesado: ORA-28112: failed to execute policy function Si la sintáxis de la condición es válida, pero es incorrecta, entonces las filas incorrectas se auditan. Errores de Columnas Auditables Si la columna a auditar no existe en la tabla, entonces la política se creará, sin embargo, no hay filas que serán auditadas porque la columna nunca será accesada. Si la columna a auditar es válida, pero incorrecta, entonces las filas incorrectas serán auditadas. Errores de Manejador de Eventos (Event Handler) Cuando la política hace referencia a un manejador de eventos que no existe, la política se creará, sin embargo, no habrá filas retornadas cuando ocurra un evento auditable. 42 Instituto Profesional DuocUC Escuela de Ingeniería Auditando Usuarios SYSDBA y SYSOPER Usuarios con privilegios SYSDBA o SYSOPER privileges pueden conectarse a una base de datos cerrada. • El registro de auditoria debe ser almacenado fuera de la BD (es decir, SO). • Conexiones como SYSDBA o SYSOPER siempre deben ser auditadas. • Habilitar auditoria adicional de acciones de SYSDBA o SYSOPER con audit_sys_operations. • El control del registro de auditorias llevarlo con audit_file_dest. Default es: – $ORACLE_HOME/rdbms/audit (UNIX/Linux) – Windows Event Log (Windows) Auditando usuarios SYSDBA y SYSOPER Los usuarios con privilegios SYSDBA y SYSOPER pueden subir y bajar una base de datos. Debido a que pueden hacer cambios mientras una base de datos esta cerrada, el registro de auditorias (bitácora) debe ser almacenado fuera de la base de datos. Oracle captura los eventos de login automáticamente para usuarios SYSDBA y SYSOPER, pero no captura nada más que el login a menos que este habilitada una auditoria específica. Habilitar la auditoria para usuarios SYSDBA y SYSOPER, se hace seteando un parametro de inicialización: audit_sys_operations=TRUE (default es FALSE) Si las operaciones del usuario SYS son auditadas, el parámetro de inicialización audit_file_dest indica dónde los regitros de esta bitácora serán almacenados. En plataforma Windows quedan por defecto en el Windows Event Log. En plataformas UNIX, os registros son almacenados en $ORACLE_HOME/rdbms/audit. 43 Instituto Profesional DuocUC Escuela de Ingeniería Actualizaciones de Seguridad • Oracle coloca sus alertas de seguridad en su sitio web Oracle Technology Network Web: http://otn.oracle.com/deploy/security/alerts.htm • Los administradores y desarrolladores Oracle puede subscribirse para ser notificados sobre alertas críticas de seguridad a través de mail haciendo Click en el Link “Subscribe to Security Alerts Here”. Actualizaciones de Seguridad Las alertas de seguridad Oracle contienen una descripción de las vulnerabilidades, riesgos posibles y grado de exposición asociado a la vulnerabilidad, aplicaciones afectadas y los posibles parches de seguridad a aplicar. Las alertas de seguridad son colocadas en el Sitio Web Oracle Technology Network y en el sitio Web de OracleMetaLink (MetaLink). Aunque las alertas de seguridad son de público conocimiento, solo los clientes registrados (Customer Support Identification (CSI ))en Oracle puede accesar y bajar los parches de seguridad que corrigen las falencias de seguridad. 44 Instituto Profesional DuocUC Escuela de Ingeniería Fin de la Lección Jaime Amigo P. © 2006, Santiago - Chile