viernes, 11 de mayo de 2012

Guardando contraseñas de forma correcta (hashes + salts) y Lista de Algoritmos (Password )Ocupados en Los mas Famosos CMS


Guardando contraseñas de forma correcta (hashes + salts) 

Siempre que tenemos que hacer un sistema que maneje usuarios,
necesitamos tener algún método para identificar que realmente sea el
usuario el que va a entrar al sistema, para eso lo mas usado siempre
es el metodo de usuario / contraseña. Y lo mas común es que usemos una
base de datos para guardarlos.
El tema es, que pasa si alguien por algún método puede leer la base de
datos donde guardamos nuestras contraseñas, puede hacerce no solo con
su usuario en nuestro sistema, sino con la contraseña del usuario que
puede ser utilizada en varios sitios aparte del nuestro, es una
cuestion tanto técnica como ética nunca guardar la contraseña de
nuestros usuarios en texto claro. Pero ¿que métodos podemos usar? Aca
van algunos…
La clave consiste en no guardar la contraseña del usuario,
sino algo con lo que podamos compararla pero no leerla, para los que
no saben nada de criptología (el 99,9999% de nosotros) aparte de la
encriptación, existe la generación de codigos (o hashes)
irreversibles, osea que no se pueden dar marcha atras.
Supongamos que queremos encriptar la contraseña, entonces para
comparar la que tenemos almacenada con la que nos proporciona el
usuario, tenemos que desencriptar la contraseña encriptada y
compararla, de esta forma si alguien consigue las contraseñas, podria
encontrar la forma de desencriptarlas y al encontrarla, podria ver
todas las contraseñas almacenadas, mas alla que pueden haber
contraseñas débiles (123456, abc123, etc) las cuales servirían para
delatar al resto.
¿Alternativa? ¿Si en vez de tener que desencriptar la contraseña para
compararla, no la sometemos a un proceso que genere algún codigo que
no puede ser desencriptado? ¿Como? Hasheandola!
Unos de los ejemplos de un hash irreversible, muy usado es el método
MD5, este es soportado tanto por PHP, como por MySQL, y casi todos los
lenguajes de programación, no requiere mucho micro a la hora de
trabajar y es muy seguro, en este caso, por ejemplo, si nuestra
contraseña es 123456, si la sometemos a un md5, quedaria:
1echo md5("123456");
2// esto da e10adc3949ba59abbe56e057f20f883e
No hay forma de volver atras ese hash e10adc3949ba59abbe56e057f20f883e
para llegar al resultado “123456″. Sin enbargo aca tenemos otro
problema, y es que el método lo puede utilizar el que tenga nuestras
contraseñas, para usar un ataque del tipo diccionario, o fuerza bruta,
de hecho 123456 es tan utilizada como contraseña, que si buscamos en google su hash, veremos muchas páginas
que nos revelarian la contraseña. De hecho hay bases de datos de
hashes donde estan las contraseñas mas debiles.
Una solución seria obligar a los usuarios a usar una contraseña mas
fuerte, pero esto se vuelve molesto para ellos y el que use el mismo
mecanismo para crackearla podra hacerlo algún día, hay métodos para
romper estos hashes que llegan a probar millones de contraseñas por
segundo, asi que necesitamos otra solución.
Y que mejor solución que “un salto”!
¿Y que quiere decir salto?, es algo que se le agrega a la contraseña
para hacerla mas fuerte, y por sobretodo tiene 2 ventajas:
  1. Mas bytes para codificar (lo que es igual a retrasar el
    trabajo de los crackers)
  2. El que quiera obtener la contraseña no solo necesita el hash,
    sino tambien el salt, y el cómo, lo utilizamos.
Para un salt, se recomienda utilizar un string largo y al azar, para
eso podemos generar una contraseña con algun sistema que las haga al
azar, por ejemplo: http://strongpasswordgenerator.com/ ahí podemos
generar una contraseña de 30 caracteres con simbolos, supongamos que
tengo:
1wP.:bjl](_/7/B(P;T/[B{'<6/}[$s
Podemos usarla para sumarla a la contraseña del usuario:
1$salt 'wP.:bjl](_/7/B(P;T/[B{\'<6/}[$s';
2$password_claro "123456";
3 
4$password_guardado = md5($salt.$password_claro);
Y hasta lo podemos hacer mas complejo para que nunca sepan el metodo:
1$password_guardado = md5($salt.md5($password_claro).$salt);
También hay otras practicas que se pueden utilizar como salts,
temporales (va cambiando cada x tiempo) o utilzar algun dato del
usuario que sabemos que no va a cambiar, como su fecha de
registración:
1$password_guardado = md5($salt.md5($password_claro.$fecha_registro));
En fin, de esta forma hasta la contraseña mas debil y utilizada será
practicamente imposible de romper, conservando la seguridad de nuestro
sistema aunque lleguen a estas.


Fuente: http://web2.0-tips.com.ar/248-guardando-contrasenas-de-forma-correcta.html




Lista de Algoritmos (Password )Ocupados en Los mas Famosos CMS
-------------------------------------------------------------------------|     Title      |    Hash Algorithm    |    Prefix    |      Table     |-------------------------------------------------------------------------
| Beehive           | md5($pass)                 | нет          | USER             || Intellect Board   | md5($pass)                 | нет          | User             || IPB 1.x.x         | md5($pass)                 | ibf_         | members          || IPB 2.x.x         | md5(md5($salt).md5($pass)) | ibf_         | members_converge || ITA Forum         | md5($pass)                 | itaf_        | user             || MercuryBoard      | md5($pass)                 | mb_          | users            || MiniBB            | md5($pass)                 | minibbtable_ | users            || myBB 1.2.x        | md5(md5($salt).md5($pass)) | mybb_        | users            || phpBB             | md5($pass)                 | phpbb_       | users            || phpBB > 3.0.0 RC5 | md5(phpbb3)                | phpbb_       | users            || PhpMyForum        | md5($pass)                 | pmf_         | user             || PunBB 1.2.x       | SHA-1                      | нет          | users            || SMF 1.0.x         | md5(HMAC)                  | smf_         | members          || SMF 1.1.x         | sha1($username.$pass)      | smf_         | members          || Snitz forums 2000 | SHA-256                    | FORUM_       | MEMBERS          || QuickSilver Forum | md5($pass)                 | qsf_         | users            || UseBB             | md5($pass)                 | usebb_       | members          || Vanilla           | md5($pass)                 | LUM_         | User             || VBulletin         | md5(md5($pass).$salt)      | нет          | user             || VikingBoard       | md5($pass)                 | vboard_      | member           || W-Agora           | md5($pass)                 | [название]_  | users            || WWWThreads        | DES(unix)                  | w3t_         | users            || XMB Forum         | md5($pass)                 | нет          | members          || YaBB              | md5(HMAC)                  | yabbse_      | members          |------------------------------------------------------------------------List of algorithms used in CMS, online shops, etc.------------------------------------------------------------------------|      Title          |    Hash Algorithm    |        Prefix    |        Table     |------------------------------------------------------------------------| AboCMS            | md5($pass)                 | нет          | users            || Bitrix            | md5($pass)                 | | DaneoCMS          | md5($pass)                 | dn[версия]_  | users| DataLife Engine   | md5(md5($pass))            | dle_         | users            || e107              | md5(md5($pass))            | e107_        | user             || Joomla            | md5($pass)                 | jos_         | users            || Joomla >=1.0.13   | md5($pass.$salt)           | jos_         | users            || Koobi CMS         | md5($pass)                 | koobi_       | user             || Koobi CMS >= 6    | md5(md5($pass))            | koobi_       | user             || osCommerce        | md5($salt.$pass)           | нет          | сustomers        || PHP-Nuke          | md5($pass)                 | nuke_        | authors          || RunCMS            | sha1($username.$pass)      | runcms_      | users            || Slaed CMS         | md5($pass)                 | slaed_       | users            || Wordpress         | md5($pass)                 | wp_          | users            || Wordpress >= 2.5  | md5(phpbb3)                | wp_          | users            || XOOPS             | md5($pass)                 | xoops_       | users            |--------------------------------------------------------------------

Fuente: http://foro.undersecurity.net/read.php?15,1428

No hay comentarios:

Publicar un comentario