TEMARIO
Auditoría de contraseñas en Oracle Database (1 de 4). Introducción y primeros pasos
Auditoría de contraseñas en Oracle Database (2 de 4). Adivinación de Oracle SID (System ID)
Auditoría de contraseñas en Oracle Database (3 de 4). Fuerza bruta sobre claves Oracle
Auditoría de contraseñas en Oracle Database (4 de 4). Ataques de diccionario sobre claves Oracle
Buenas,
Continuando con lo explicado en los dos primeros artículos toca hablar de cómo utilizar ataques de fuerza bruta para evaluar la calidad de las claves Oracle. No obstante, antes de hacerlo, es preciso comprender dónde y cómo se almacenan las claves.
Distintas versiones, distintas ubicaciones
Las contraseñas Oracle se guardan, por norma general, en una tabla llamada DBA_USERS. Excepciones a esta norma hay muchas, así por ejemplo, SYS.USER$, o la tabla USERS$, lugar donde se almacenan en la versión XE que estamos utilizando para esta serie de artículos.
Históricamente la presencia de numerosos usuarios de sistema en la configuración de fábrica ha supuesto y sigue suponiendo muchos problemas para la seguridad Oracle. Me recuerda al caso de los servidores de largo y medio alcance de IBM, donde los sistemas operativos suelen venir con una cantidad ingente de usuarios creados que si no son modificados pueden provocar un problema cuando el sistema entre en producción.
A lo largo de los años, y según han ido cambiando las versiones de Oracle, también han ido cambiando los métodos de generación y conservación de claves. Desde el cifrado de la concatenación de usuario y clave en las versiones entre 7 y 10g R2 hasta el empleo de salts en 11g, donde se emplea SHA-1 para generar un hash de la concatenación de clave y salt. Para cada versión el auditor debe repasar la documentación y comprender cómo y dónde se conservan las claves. Tenéis un estupendo artículo al respecto en http://www.red-database-security.com/whitepaper/oracle_passwords.html que puede servir de orientación.
Es importante reseñar que desde la versión 11g en adelante los hashes no se almacenan en DBA_USERS. En esta versión hay que recuperar los campos name y spare4 de SYS.USER$.
SELECT name,spare4 FROM SYS.USER$ WHERE password is not null;
Tampoco entraremos a comentar otras ubicaciones donde puedan estar presentes los hashes de las claves, como las vistas que se hayan creado, duplicados de las tablas, rollbacks, copias de seguridad, etc. En definitiva, la misión del auditor es identificar dónde están las claves y obtener la relación usuario-hash para poder así realizar una verificación de calidad de las mismas. También es importante determinar quién puede obtener esos datos, qué permisos son necesarios y por supuesto, hay que indagar en todos los métodos posibles para obtenerlos, incluyendo el pentesting.
Caja negra, gris y blanca
En el primero de los casos, las pruebas irán encaminadas, mediante pentesting, a hacernos con un listado de usuarios y hash de clave para tratar de obtener claves en claro. El ataque constará de dos partes:
- Intrusión al sistema, habitualmente por cuentas con clave por defecto no modificadas o bien aprovechando algún exploit que nos permita el acceso.
- Extracción de relación de usuarios y hashes, bien por haber logrado acceso privilegiado que permita hacerlo directamente, bien por provocar escalada de privilegios que nos permita finalmente obtener la relación. En algunos casos, si la configuración de seguridad no es adecuada, bastará con tener los privilegios mínimos para obtener la relación.
En el caso de caja gris el auditor tratará de obtener la relación de usuarios empleando las credenciales no privilegiadas que le han sido entregadas. Es frecuente, por mala configuración, que incluso los perfiles más bajos puedan obtener la relación de usuarios y hashes. Este modelo es análogo al de caja negra, pero con la diferencia de que el auditor contará de partida con una cuenta en el sistema.
Para el caso de caja blanca, que será el que ejemplifiquemos, el auditor solicitará al DBA que extraiga la relación de usuarios y hashes para analizarlas.
Los usuarios especiales y los datos críticos, el botín más cotizado
Siempre que sea posible, habida cuenta de que por defecto son las cuentas más poderosas, el análisis tendrá en cuenta especialmente los siguientes usuarios: SYS, SYSTEM, SYSMAN y DBSNMP. En la documentación hallaréis descripciones de cada uno de estos usuarios.
No debemos perder de vista los usuarios con privilegios elevados (DBA y otros) que se hayan podido crear tras la instalación. Basta con descuidar un sólo perfil privilegiado para que un atacante tome control total de la instalación. Es tan importante que SYS disponga de una clave de alta calidad como cualquier otro usuario creado con perfil suficiente para acceder a los datos críticos. No olvidemos que en Oracle la seguridad debe siempre enfocarse a la seguridad de los datos, así pues, si el usuario SHERNANDO tiene privilegios mínimos globales pero es dueño de la tabla más importante del sistema, su compromiso es equivalente al de comprometer la cuenta SYS.
Fuerza bruta sobre las claves
En nuestro ejemplo vamos a crear algunos usuarios adicionales con distintas claves:
A continuación, sacaremos a fichero todas las relaciones usuario-hash, empleando el comando spool.
Recogemos el fichero, en este caso de C:\XEClient\bin y lo ponemos a buen recaudo. He dejado una copia del fichero en http://www.sahw.com/images/oracle_audit/usuarios.txt por si queréis utilizarlo.
Hay infinidad de programas para someter a los hashes obtenidos a fuerza bruta. Uno de los más populares es orabf, que incluye una lista de claves habituales y diversas opciones para construir los ataques de fuerza bruta. Veamos un ejemplo de cómo se utiliza:
En el ejemplo anterior vemos cómo el usuario SYS tiene una clave por defecto llamada password, que ni siquiera ha sido preciso romper mediante fuerza bruta puesto que estaba en el diccionario. Otro ejemplo:
En este caso ha bastado un minuto para averiguar la clave. Veamos qué pasa si cambiamos la clave de pass2 a clave2 (ampliamos de 5 a 6 caracteres)
Sometemos el nuevo hash a fuerza bruta:
Como era previsible, el tiempo de ataque se ha elevado a varios minutos. A mayor calidad de la clave, más tiempo. Por lo general el tiempo de cómputo elevado no hace rentable los intentos de fuerza bruta en claves complejas de 7 o más caracteres.
Existen infinidad de herramientas para fuerza bruta: herramientas W32 como la mostrada, UNIX, procedimientos PL/SQL, scripts Perl … Tenéis una buena selección de las mismas en http://www.petefinnigan.com/tools.htm, y cada día aparecen más. Cuestión de probarlas, y elegir la que más os guste.
Fuerza bruta con múltiples cuentas
Entre las muchas herramientas existentes siempre recomiendo Inguma, de Joxean Koret, un framework de seguridad bastante completo que además tiene funcionalidades específicas para Oracle. Además de su versatilidad, Inguma está escrita en Python, con lo que es multiplataforma, y para el caso que nos ocupa tiene un módulo de fuerza bruta para contraseñas Oracle llamado bruteora que podemos lanzar contra las cuentas usuales en la base de datos:
Al ser código abierto, es fácil incorporar las cuentas declaradas en la base de datos para complementar las cuentas frecuentes empleadas por Inguma, con lo que finalmente es posible obtener también una valoración de la calidad de todas las contraseñas que existan en el sistema. Este método, a diferencia de otros, es online, con lo que el auditor debe tener presente el impacto sobre el sistema a auditar.
Un saludo,
Quiero contactarme via mail con vos para hacerte algunas preguntas por favor mandame mail
@luna,
Usa el formulario de contacto, y si la duda es sobre Oracle, dejala aqui que la veamos todos, asi la podemos comentar mas personas.
Un saludo
Sergio excelente articulo y de mucha ayuda en nuestra labor de contribuir al aseguramiento de los sistemas de información. Me gustaria saber si tienes algun articulo sobre aseguramiento de bases de datos en sql server. Listado de usuarios genericos y hash respectivos y herramientas que se puedan utilizar para auditarla.
gracias