Exportando las tablas de auditoria

Hoy vamos a volver a las entradas rapidas para dummies.

Una de las tareas que podemos tener que hacer es el respaldar las tablas de auditoria para eliminarlas posteriormente. La primera opción que nos viene a la cabeza es hacer un export (expdp), pero si lo intentamos recibiremos el error:

ORA-39166: Object SYS.AUD$ was not found.
ORA-31655: no data or metadata objects selected for job

¿Que estamos haciendo mal?
Realmente no estamos haciendo nada mal , el problema es que el nuevo expdp no nos va a dejar exportar estas tablas (asi como objetos de los esquemas SYS,SYSTEM … )

¿Como los solucionamos ?

Con un CTAS ( create table as select)

Esta es la opcion mas extendida en los foros de soporte de oracle, los pasos serian

  • CREATE TABLE MIAUDIT AS SELECT * FROM SYS.AUD$
  • TRUNCATE SYS.AUD$
  • EXPDP xxxxx table=MIAUDIT
  • DROP TABLE MIAUDIT

¿Cual es el problema de esta opcion ?
Seguramente, si neceistamos exportar y truncar la tabla de auditoria es por que ya esta ocupando demasiado espacio, por lo que la opción de duplicar este espacio en la base de datos no siempre es viable.

Usar el export clasico

Cuando la opción del CTAS no es valida, nos queda siempre el uso del exp clásico.
La herraienta antigua de exportación no tiene estas limitaciones respecto a os objetos del sistema y si que nos permitira exportar los datos

Mas información como siempre en los foros de soporte de oracle o en la nota :

  • How to Export the AUD$ Table (Doc ID 745540.1)

Securizando el listener

Vamos a ver una serie de entradas sencillas sobre securización básica de la base de datos

La securización del listener es una de las tareas mas sencillas y de las primeas que tenemos que hacer con la instalación de la base de datos.
Esta securización consta de varias partes:

  • Securizacion del S.O
  • Restringir las IPs desde las que se permite el acceso
  • Añadir autenticacion al listener.
  • Auditar listeners
  • Parametrizar conexiones
  • Cifrar tráfico

Securización del S.O

Como en todo componente de Oracle, la securización del Sistema Operativo es primordial.
Oracle por defecto cuenta con una estructura de permisos en directorios que no deben de variarse.
En cualquier caso siempre es conveniente seguir los aparatados de managing security de los documentos de instalacion de los productos

Restringir las IPs desde las que se permite el acceso

Este apartado es muy relativo, ya que puede no aplicar a nuestro sistema, sin embargo, en la mayoría de los casos estaremos tratando arquitecturas de 3 capas donde los accesos a las bases de datos son desde nuestra capa de servidor de aplicación.

Para habilitar las whitelists usaremos los parámetros tcp.invited_nodes y tcp.validnode_checking en el fichero $TNS_ADMIN/sqlnet.ora de la siguiente manera

tcp.validnode_checking = YES
tcp.invited_nodes = ( X.X.X.X, hostname, ... )

La documentación de estos parámetros la tenemos en Configuring Database Access Control

Añadir autenticación al listener.

Esta opcion está desoportada en la version 12c Desupport of Oracle Net Listener Password
Una de las primeras vulnerabilidades que van a encontrarte en una auditoria de seguridad es la falta de autenticacion del listener.
Poner password al listener previene a la base de datos de ejecución de los comandos de control del mismo desde ubicaciones remotas. Es importante destacar que , desde la version 10g «the listener password is no longer required as the listener implements OSAuthentication,«, esto quiere decir que el usuario del sistema operativo propietario del listener no necesita el password para pararlo o arrancarlo ( que es el principal miedo del DBA cuando pone password al listener)

Para poner password al listener ejecutaremos:

$ lsnrctl
LSNRCTL> change_password
Old password:
New password:
Reenter new password: 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=BBDD1)(PORT=1521)))
Password changed for LISTENER
The command completed successfully
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=BBDD1)(PORT=1521)))
Saved DBLSNR configuration parameters.
Listener Parameter File /oracle/product/BBDD/network/admin/listener.ora
Old Parameter File /oracle/product/BBDD/network/admin/listener.bak
The command completed successfully

Esto nos habrá añadido unas lineas al listener.ora

This added the following lines to listener.ora:
#----ADDED BY TNSLSNR 21-JUN-2016 13:47:56---
PASSWORDS_VSEC = D911537DUT5E6546

Auditar el listener

Toda securizacion de un elemento debe incluir la habilitación de un registro del mismo.
Para habilitar el regitro del log de listener añadiremos al fichero $TNS_ADMIN/listener.ora las siguientes lineas :

LOG_STATUS = ON
LOG_DIRECTORY_ = $TNS_ADMIN
LOG_FILE_ = $ORACLE_SID

Esto ya se lleva a cabo por defecto a partir de la versión 11.5.10.

Parametrizar conexiones

El ultimo y no menos importante de los apartados es el de parametrizar los parámetros del listener ,un ejemplo de uno de estos parámetros es CONNECT_TIMEOUT
Añafiendo en el $TNS_ADMIN/listener.ora el parámetro

CONNECT_TIMEOUT_ = 10

Especificamos el tiempo en segundos que el listener esperará para que se complete una conexion de cliente.

Cifrar tráfico

El cifrado del tráfico de la base de datos es posiblemente uno de los puntos mas importantes a la hora de securizar una conexion.
¿Por que la hemos dejado para el final?
La respuesta es sencilla, por que este cifrado implica una opcion de pago que es la Advanced Security
Option (ASO).

Si estás interesado en ahondar en esta opcion tienes la informacion en el grupo Advanced Security Option del MSOC