Seguridad en Oracle
y
A utenticación
de Usuarios
1
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
INDICE
7. ¿Por qué no se puede autenticar por medio de OpenLDAP o variantes solo OID? Pág. 14
Webgrafía Pág. 17
2
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Cuando los usuarios desean conectarse a la base de datos Oracle para realizar sus funciones,
esta se asegura de que están autorizados a acceder, por medio del proceso de autenticación. La
autenticación puede ser realizada de varias maneras, podemos definir el usuario en la base de datos
y autenticarlo, o definirlo en otro lugar, como por el ejemplo el sistema operativo o un servidor
LDAP como Oracle Internet Directory, y pasarle los credenciales como validos a la base de datos.
Hay dos maneras por las cuales las base de datos autentica usuarios:
• Por contraseña.
• Por autenticación por parte del sistema operativo (OS authentication).
Veamos las diferencias entre estos dos tipos de autenticación.
– Autenticación por medio de contraseña:
create user scott
identified by tiger;
Con esta instrucción creamos el usuarios “scott” autenticado el nuestra base de datos por
medio de la contraseña “tiger”. Esto nos crea la entrada de este usuario en el diccionario de datos en
la tabla USERS$ propiedad del usuario SYS. Cuando el usuario se conecta por medio de alguna
aplicación cliente este comprobara en el diccionario de datos si los datos introducidos son correctos.
Luego hablaremos sobre como se guardan estas contraseñas en la base de datos.
– Autenticación por medio del Sistema Operativo:
La autenticación por medio de sistema operativo son realizadas por las que en Oracle se
denominan cuentas de usuarios OPS$.
Create user ops$jesus
Identified externally;
Con esta instrucción creamos en Oracle el usuario “jesus” y le indicamos a la base de datos
de que este usuario se autenticará por parte del sistema operativo. Este usuario se conectara a la
base de datos usando la siguiente sentencia:
connect /
3
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Lo mas lógico es pensar que haciendo un SELECT password FROM dba_users podríamos ver la
versión encriptada de las contraseñas , pero esto dejo de ser posible en la versión 11g.
Oracle 11g ofrece la posibilidad de usar password de hasta 50 caracteres distinguiendo mayúsculas
de minúsculas. En Oracle 11g los passwords son encriptados con DES en la (columna password) y
usando SHA-1 (columna spare4).
En la nueva versión 11g el hash de la contraseña no es accesible vía dba_users ahora hay que
hacerlo mediante el usuario SYS con la siguiente SELECT:
SYS.USER$ : SELECT name,spare4 FROM SYS.USER$ WHERE password is not null;
SCOTT S:C67079C45E2703C6E4C5FBF4EAF0A48876227E142C58E3C60D1C4055C82D
La encriptación SHA-1 y DES a día de hoy no se ha roto aunque ya se aconseja usar cifrado
TRIPLE-DES, por lo que se considera bastante segura aunque no evitamos así ataques de
diccionario o mediante fuerza bruta.
4
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Oracle pese a ser un sistema con amplias opciones de seguridad presenta algunas
vulnerabilidades que podemos corregir.
Como vimos anteriormente el cifrado de las contraseñas de Oracle es SHA-1 con semilla,
este algoritmo es bastante seguro a día de hoy ya que no se ha roto, pero esto no impide a los
atacantes realizar ataques de fuerza bruta o de diccionario.
Como podemos ver nuestra base de datos esta expuesta a estos tipos de ataques y debemos intentar
mitigar sus efectos con algunas de las siguientes medidas.
Las dos siguientes declaraciones son muy importantes para evitar los ataques con
fuerza bruta o de diccionario:
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 10
Estableciendo un número determinado de veces que el login del usuario puede fallar
limitamos al atacante a que tenga que esperar que la cuenta se desbloquee después de
5
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
realizar 3 intentos de ataques con diccionario o fuerza bruta, lo que provoca que no
pueda realizar mas ataques a dicho usuario mientras su cuenta este bloqueada.
La autentificación contra bases de datos Oracle también posee de otras vulnerabilidades que el
administrador debe controlar después de la instalación de una base de datos Oracle:
Algunos administradores después de instalar una base de datos Oracle en sistemas Windows
se olvidan de que en la instalación se crea el grupo ora_dba y se añade automáticamente el usuario
que creo la base de datos. Esto provoca que el usuario del sistema operativo que creo la base de
datos pueda tener acceso a todos los datos entrando como SYSDBA y sin necesidad de introducir
contraseña alguna.
Para evitar esto debemos sacar del grupo ora_dba al usuario correspondiente.
Oracle trae por defecto numerosos usuarios por defecto con contraseñas ya establecidas que
se pueden encontrar por toda la red. Para ver los usuarios con password por defecto podemos usar la
vista del diccionario de datos siguiente:
Si el atacante tiene acceso directo físico a nuestro servidor de base de datos o logro entrar
remotamente puede atacarnos de diferente manera usando la aplicación cliente de nuestros usuarios.
6
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Una vulnerabilidad no propia de Oracle pero igualmente importante es que las contraseñas
de nuestros usuarios se manden en claro o permanezcan en claro en ficheros de configuración o
ficheros de código fuente de sus aplicaciones.
Por ejemplo para realizar una conexión desde una aplicación PHP a Oracle la contraseña y el
usuario debe estar indicado en el código PHP de la aplicación. Por lo tanto debemos proteger y
adecuar los permisos correspondientes a ficheros que contengan datos de identificación contra la
base de datos.
Otros métodos para proteger nuestra base de datos seria cifrar todo el contenido de la BD, el uso
de identificación biométrica vía reconocimiento facial, dactilar, vocal y otros métodos.
Si tenemos en cuenta todas estas vulnerabilidades y seguimos todos los pasos necesarios para
corregirlas e impedir al atacante el acceso del sistema tendremos nuestros datos más seguros.
7
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
cat /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/dbs/spfileXE.ora
Reiniciamos la DB:
shutdown immediate
Startup
4.- A continuación, tratamos de conectarnos a Oracle como un usuario del sistema operativo
autenticado. Esperamos que falle! Quizás sea necesario configurar algunas variable de entorno para
que SQL * PLUS funcione correctamente.
- Vemos la configuración actual de SQL * PLUS
#cat
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/config/scripts/sqlplus.sh
# su - tim_hall
8
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
En el ejemplo:
$export:ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
$export PATH=$PATH:$ORACLE_HOME/bin:$PATH
$export ORACLE_SID=XE
$sqlplus /
B) En Windows:
Sqlnet.authentication_services=(NTS)
9
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
-------------------------------------------------------------------
NOMBREDELAMAQUINA\LUCAS
Ahora creamos el usuario con el mismo nombre que vimos con la sentencia anterior,
incluido el nombre de la máquina, añadiendo la clausula identified by EXTERNALLY.
create user OPS$NOMBREDELAMAQUINA\LUCAS identified EXTERNALLY;
Nota: El nombre del usuario de Oracle debe tener obligatoriamente el mismo nombre que el usuario
y el nombre de máquina del sistema operativo y al crearlo debe comenzar con “OPS$”.
10
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Una de las medidas de seguridad que podemos tomar en para proteger nuestra base de datos
Oracle es asignarle una función de verificación a las contraseñas de nuestros usuario para
requerirles una contraseña lo suficientemente segura; como por ejemplo de una longitud
determinada, que contenga caracteres especiales, números, que no sea igual que el nombre de
usuario, etc.
En Oracle 11g podemos definir una función de verificación de contraseñas a los perfiles para ello
primero debemos crear una función de verificación de contraseñas, aunque Oracle trae esta
funcionalidad en el archivo $ORACLE_HOME/rbms/admin/utlpwdmg.sql
Debemos ejecutar dicho script SQL con SQLplus como sysdba, esto nos creara la función
verify_function_11G y nos alterara el perfil por defecto de la siguiente manera:
Esta función proporcionada por Oracle ya nos proporciona que nuestros passwords sean lo
suficientemente seguros, aunque también podemos crear nuestra propia función de verificación.
A continuación crearemos una función de verificación personalizada verifica_contra para que los
passwords cumplan las siguientes condiciones:
11
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Script SQL:
create or replace
FUNCTION verifica_contra
(nombreusuario varchar2,
passwordnuevo varchar2,
passwordviejo varchar2)
RETURN BOOLEAN IS
BEGIN
Con este script ejecutado como SYS crearemos la función y el perfil correspondiente que
podremos asignar a los usuarios de la base de datos.
Las ventajas de limitar los password a ciertas condiciones supondrá para los atacantes un
mayor esfuerzo para poder encontrar el HASH que corresponde con el password mediante ataque de
diccionario, a su vez aplicando FAILED_LOGIN_ATTEMPTS 4 evitamos los ataques de fuerza
bruta sobre nuestros usuarios aunque se les bloquerá la cuenta si se intentan realizar dicho ataque,
pero eso no supondrá un problema ya que nosotros como DBA podremos desbloquear la cuenta.
12
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Oracle Internet Directory es un LDAP versión 3 que abarca numerosas ventajas como son
escalabilidad, alta disponibilidad y funciones de seguridad para bases de datos de Oracle. Oracle
Internet Directory sirve como repositorio centralizado para Oracle Identity Management,
simplificando la administración de usuarios en entornos Oracle y proveyendo una aplicación base
estándar para diferentes aplicaciones. Adicionalmente, Oracle Direcory Synchronizacion permite a
Oracle Identity Management integrarse adecuadamente con otros servicios de directorio y
repositorios de usuarios, permitiendo a estos disponer de su información de identificación en
cualquier lugar donde está este colocada.
OID es el único servicio de directorios soportado por Oracle Database Enterprise User
Security (EUS) para centralizar usuario y administrar roles, y es el único directorio que provee de
completa integración automática con sistemas operativos Unix y Linux para centralizar la
administración de las cuentas de usuario de estos sistemas Oracle Authentication Services for
Operating Systems).
Esta es una de las razones de porque no podemos usar otro servidor LDAP para la
autenticación en Oracle.
Con Oracle Directory Integration Server podemos integrar el uso de otros servidores LDAP
como OpenLDAP con Oracle Internet Directory sincronizando sus datos.
Las ventajas más importantes que se pueden destacar de Oracle Internet Directory con
respecto a otros servicios LDAP son la siguientes:
– Alta Disponibilidad
– Sistema de seguridad basado en listas de control de acceso ACL.
– Alta escalabilidad para entornos empresariales muy amplios.
– Interfaz de administración vía web con Oracle Directory Services Manager (ODSM).
13
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
14
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
7. ¿Por qué no se puede autenticar por medio de OpenLDAP o variantes solo OID?
Para autenticar Oracle por medio de OpenLDAP después de solicitar información por parte
de algunos DBAs expertos he llegado a la conclusión de que no es posible realizarlo directamente.
Según la información obtenida por parte de gurús DBA también podría ser posible utilizar
los datos de otros LDAP usando la aplicación Middleware de Oracle OVD (Oracle Virtual
Directory).
Oracle Virtual Directory unifica datos de identificación ya existentes sin fusionarlos y reusa
los datos de identificación ya existentes sin copiarlos. Esto acelera el despliegue de aplicaciones y
simplifica la infraestructura de identificación.
15
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
Una estructura a utilizar para centralizar usuarios OpenLDAP con bases de datos y todo un sistema
Oracle seria la siguiente:
“La única solución. Consiste en tener instalado un Openldap (que funcionaría como maestro) y un
OID que funcionaría como esclavo. Hay que sincronizar openldap y OID mediante un modulo que
trae incorporado oracle. La sincronización puede ser en una sola dirección o en ambas
direcciones. En nuestro caso la sincronización es unidireccional y en el sentido Openldap -> OID,
es decir, todos los cambios que se producen en el Openldap se reflejarían en el OID pero no a la
inversa (la razón es que OID mete mucha información para la gestión propia que no nos interesa
que esté en el Openldap). Respecto a la gestión de claves, puedes decidir pasar todas las claves del
Openldap al OID o por el contrario dejar las claves en el openldap y el OID las consultará cuando
lo necesite. Por último le dices a tu SGDB que la autenticación de usuario será a través del OID.
Es un poco engorroso pero funciona perfectamente. El modulo de sincronización está muy bien
desarrollado y no da ningún problema. El gran inconveniente es tener que gestionar 2 ldap
(openldap y oid). Además OID necesita tener su propia bd oracle donde almacena su información
(aunque esto es una perogrullada porque todos los ldap necesitan tener una bd donde guardar su
información), pero claro una bd oracle es más difícil de instalar, configurar y mantener que una
Berkeley DB.”
16
Jesús Lucas Flores Seguridad en Oracle y Autenticación de Usuarios BBDD
WEBGRAFIA
• http://www.oracle.com
◦ http://www.oracle.com/technology/products/oid/index.html
• http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96521/secure.htm#2232
• http://www.dba-oracle.com/
◦ http://www.dba-oracle.com/t_password_security.htm
◦ http://www.dba-oracle.com/t_windows_external_user_authentication.htm
• http://www.dbasupport.com/oracle/ora11g/11gSecurityGuide08.shtml
• http://www.red-database-security.com
• http://www.petefinnigan.com/orasec.htm
• http://www.orafaq.com/
◦ http://www.orafaq.com/node/1027
◦ http://www.orafaq.com/forum/t/154584/149564/
• http://www.infor.uva.es/~jvegas/cursos/bd/oraseg/oraseg.html
• http://www.oraclerant.com/?p=23
• http://www.oracle-base.com
17