domingo, 6 de diciembre de 2009

Contraseñas en Windows I

Algo que es de cajón: En Windows se utilizan contraseñas.  Y éstas se almacenan en el sistema. Pero, si éstas se almacenaran en claro, del mismo modo que estamos leyendo este texto, sería muy, muy fácil obtenerlas. Sólo habría que encontrar el lugar donde están guardadas y abrir un bloq de notas. Ya está.

Y ahí está el quid de la cuestión. Que no es tan fácil hacer eso. Porque no se almacenan en claro. Estas se almacenan en lo que se llama (la) SAM (cuando se habla de eso se dice "la SAM esto, la SAM lo otro..."). La SAM es un fichero (no una BB.DD) que está en el registro de Windows donde se guarda la correspondencia usuario / contraseña utilizando hashes.

¿Qué es un hash? Un hash es un algoritmo que al aplicarlo sobre un elemento dado (en este caso, la contraseña), se bebería de obtener una codificación única. Y digo "se debería" porque si, dados dos elementos distintos, se produce el mismo hash, tenemos una colisión.

Ahora que sabemos dónde se guardan las usuarios y sus contraseñas (en la SAM) y qué usa para que no se vea la contraseña (un hash)... ¿Cuál es su algoritmo? Bueno. Yo puedo contar las características de los distintos algoritmos que utiliza. Porque, a lo largo del tiempo, Windows ha ido creando distintos formatos.


  • Hash LM (Lan Manager):


    • No se utiliza en red
    • Se mantiene por compatibilidad hacia atrás. Es decir, para mantener la compatibilidad con sistemas antiguos. 
    • La longitud máxima es de 14 caracteres. Si la contraseña tiene mayor longitud no se guarda con en este tipo de hash. Si es menor, se añaden nulos hasta alcanzar esta cifra máxima. 
    • No es case sensitive, sensible a mayúsculas / minúsculas. Se escriba como se escriba, se guardará en mayúsculas. 
    • Utiliza ASCII puro y duro. No valen las Ñs ni los acentos. Se pueden utilizar 142 símbolos.
    • La contraseña se separa en 2 mitades, cada una de 7 caracteres. (Por lo tanto, son 2 hashes, no 1). 
    • Como máximo, se puede conseguir una combinación de 6,8 · 1012 contraseñas.
    • A partir de GPOs (de las que puede que hable en otro post) se puede evitar utilizarlas
  • Hash NT
    • La contraseña tendrá una longitud no fija, pero como máximo podrá ser de 127 caracteres.
    • Es case sensitive, Permite utilizar 65.535 símbolos. 
    • Si nº caracteres es menor o igual a 14, llegamos aproximadamente a las 4,6 · 1025 contraseñas (set de caracteres de LM). Si es mayor, 2,7 * 1067 posibles contraseñas. (full charset). Si es igual a 127, podremos conseguir, 4,9  · 10611 combinaciones.
    • No se rellena si faltan carcateres para llegar a un valor determinado (lo contrario a lo que hacía LM).
    • Se utiliza el algorítmo MD4, por lo que hay colisiones. 

  • NTLM: v1 y v2
    • Permiten autenticación por red. 
    • Funcionan de un modo parecido al MS-CHAP, desafío / respuesta.
    • Se generan hashes de sesión, una vez se ha realizado la autenticación.
    • Entre la versión 1 y la 2, es preferible utilizar la 2 (capitán obvio al rescate!!). 
En general, los algoritmos de antes citados se pueden romper en mayor o menor medida por fuerza bruta. Si bien, los últimos, a nivel práctico, no sería viable por la gran cantidad de combinaciones existentes. Otra opción es utilizar unas rainbow tables. Unos ficheros con las contraseñas ya codificadas. (explicado de forma muy concisa). En otro post hablaré sobre las posibilidades de que esto puede brindar.

Espero que os gustara eso. Como siempre, se aceptan criticas. 

No hay comentarios:

Publicar un comentario