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

Detectar trabajos suspendidos

Vamso a ver una entrada rápida y sencilla.

¿Como sabemos cuando y por que se nos ah quedado parado un impdp?

La respuesta es muy sencilla, y es chequeando la table DBA_RESUMABLE


SELECT NAME,STATUS, TIMEOUT, ERROR_NUMBER, ERROR_MSG FROM DBA_RESUMABLE;

Esto nos dará una salida del estilo :

NAME                                STATUS            TIMEOUT, ERROR_NUMBER, ERROR_MSG
SYSTEM.IMPORT_REGENERACION2	NORMAL	       7200	0
SYSTEM.IMPORT_REGENERACION2.1	SUSPENDED	7200	1652	ORA-01652:      no se ha podido ampliar el segmento temporal con 1024 en el tablespace USERS

Donde podemos ver claramente que estamos parados por un ORA-01652 por culpa de espacio en un tabelspace