martes, octubre 02, 2007

Oracle 11g algoritmo del hash

En la versión 11g Oracle está mejorando el sistema de gestión de la contraseña de los usuarios que ya fue atacado hasta el extremo de aparecer en programas como CAIN que incorporan un crackeador para los hashes de Oracle. En este post os dejé linkados los documentos dónde lo explicaban con mucho cariño “La clave del oráculo”.

Imagen: Cain cracker. Passwords de Oracle

Con la aparición de las primeras versiones de Oracle 11g se han puesto manos a la obra y ya tienen el algoritmo para generar el hash. Para evitar que dos usuarios con la misma password tengan el mismo valor en hash Oracle ha añadido el uso de los sistemas de salting. Esto también prevendría el famoso problema de tener el usuario "mali" con contraseña "gno" y un usuario "mal" con contraseña "igno" que generaban el mismo hash.

Toda la información del usuario se almacena en la tabla sys.user$ dónde solo tienen acceso los administradores del sistema. En esa tabla aparte de mantener para cada usuario el campo Password con el hash calculad como se hace en la versión Oracle 10g por compatibilidad hay una serie de columnas que almacenan hashes. Una de ellas es Spare4 dónde se almacena un valor que comienza por S: y continúa con un hash de 240 bits. Bien, ahí se almacena un derivado de la contraseña que puede ser calculado como:

Spare4 = SHA1(contraseña+salt)+salt

Es decir, del carácter 3 al 42 de Spare4 está el SHA1 de la contraseña más la cadena de salting y del 43 al 62 está la cadena de salting. Hacer un programa que rompa por fuerza bruta las contraseñas de Oracle a partir del hash consistiría en los siguientes pasos:

1.- Obtener el hash
2.- Sacar el valor del Salting de los últimos bits
3.- Generar un posible_pass
4.- Concaternar posible_pass con salting y generar SHA1 de esta cadena.
5.- Sumar SHA1 generado con Salt
6.- Comprobar si el resultado obtenido es igual al hash.

La primera cuestión que todo el mundo se plantea es: se sigue guardando el hash antiguo, así que parece que el problema va a ser como el de los hashes NTLM en Windows y la segunda cuestión, ¿por qué no se ha usado SHA2 para la versión 11g?

En esta URL tenéis un ejemplo de código en PL/SQL para “testear” las passwords en Oracle 11g.

"Oracle 11g Password algorithm revealed"

Saludos Malignos!

5 comentarios:

  1. Hijo mío lo que dices de 'mali' + 'igno' y tal está ya solucionadao desde la versión 8. Así que no digas muchas tonterias en esto. Venga vamos a infornarnos primero antes de hablar.

    ResponderEliminar
  2. @anónimo tontolhaba, este post es del 2007.

    ResponderEliminar
  3. Lo que dices de 'malig' + 'igno' y tonterias de esas está solucionado desde la versión 8. Infórmate primero antes de escribir, para no escribir tonterias de que ahora en la 11g se ha solventado.

    ResponderEliminar
  4. @anónimo tontolhaba2, este post es del 2007.

    ResponderEliminar