Vulnerando un Algoritmo de Hash
Una función de hash convierte una cadena de longitud variable en una cadena de longitud fija única e irreversible. Si bien esta es una aseveración que podría darle un carácter de invulnerabilidad a las funciones hash no es así. Las funciones de hash también tienen debilidades y son susceptibles a cierto ataques, a continuación los enseñaremos:
Fuerza bruta
Teniendo el hash de una contraseña una forma de obtener dicho password sería probar con todas las combinaciones posibles, hasta dar con la correcta. A este método se le conoce como “fuerza bruta” porque se utiliza la fuerza en lugar de la lógica.
La gran desventaja de este método, es el tiempo que lleva probar con absolutamente todas las contraseñas posibles. Actualmente, la mayoría de los sistemas requieren, por lo menos, contraseñas de 8 caracteres.
Es de suma importancia el juego de caracteres que estemos utilizando para componer la contraseña, por ejemplo, si utilizamos solamente letras minúsculas y números, tendremos un juego de 36 caracteres (26 letras + 10 números). Si asumimos que la contraseña posee exactamente 8 caracteres, podemos obtener la cantidad de contraseñas posibles realizando el siguiente cálculo:
36^8 = 2821109907456
Este cálculo (36 elevado a la 8va potencia), puede ser modificado para representar la cantidad de contraseñas, reemplazando el primer valor (en este caso, 36) por la cantidad de caracteres disponibles y el segundo (en este caso, 8) por la cantidad de caracteres de la contraseña).
Por ejemplo, si fueran contraseñas de 10 caracteres, que pueden contener mayúsculas, minúsculas y números (62 caracteres diferentes):
62^10 = 839299365868340224
Como podemos observar, son muchísimos millones de posibles contraseñas. Esto hace que la fuerza bruta sea un método muy poco efectivo, si la contraseña está compuesta por una buena cantidad de caracteres diferentes y posee una buena longitud.
En la imagen podemos ver una representación del proceso de ataque por fuerza bruta.
Ataques de Diccionario
Este tipo de ataque es similar al de fuerza bruta pero, en lugar de tratar con todas las contraseñas posibles, se buscan palabras dentro de un diccionario. Es un ataque mucho más rápido (porque se prueban muchísimas menos combinaciones) aunque, si la contraseña es compleja, tiene muy pocas probabilidades de éxito.
Rainbow Tables
Las tablas Rainbow son tablas de consulta que ofrecen un compromiso entre tiempo y espacio para obtener claves en texto simple a partir del resultado de una función de hash.
Funcionamiento
A continuación se explica mediante un ejemplo el funcionamiento de las Tablas Rainbow. El ejemplo consiste en averiguar cuál es la contraseña que produce el hash re3xes
- Lo primero consiste en aplicar la reducción (aplicar una función hash pero en sentido contrario) que se utilizó por última vez en la tabla y comprobar si la contraseña obtenida aparece en la última columna de la tabla (paso 1).
- Si no resulta (en nuestro caso, rambo no aparece en la tabla) se vuelve a repetir el proceso, pero en este caso con las dos últimas reducciones (paso 2).
- Si en este proceso se falla de nuevo, se volvería a repetir el proceso pero aplicando 3 reducciones, después 4 reducciones y así hasta que se encontrase la contraseña. En el caso de no ser así, el ataque habrá fracasado.
- Si el proceso ha sido positivo (paso 3, en este caso linux23 aparece en la tabla al final de la cadena), la contraseña se recupera en el principio de la cadena que produce linux23. Aquí nos encontramos con passwd al principio de la cadena almacenada en la tabla.
- En este punto (paso 4) se genera una cadena y en cada iteración se compara el hash con el que queremos obtener. En este caso nos encontramos con el hash re3xes en la cadena. Por tanto la contraseña actual (cultura) genera este hash que es la que se busca.
Es importante saber que las tablas rainbow son creadas a partir de una función de hash específica, por ejemplo, para romper los hashes de MD5 necesitaremos unas tablas rainbow basadas en hashes de MD5 y para SHA, tablas rainbow SHA.
Esta técnica fue desarrollada por Philippe Oechslin como un método basado en el compromiso espacio-tiempo o tiempo-memoria.
Aplicaciones
Los programas que utilizan las tablas rainbow siempre han de utilizarse como auditoría de tus contraseñas en lo que se llama hacking ético.
Un ejemplo de herramienta que utiliza estas tablas es el programa Ophcrack, el cual permite crackear las contraseñas de Windows. Para evitar que aplicaciones como esta no rompan contraseñas tan fácilmente, es aconsejable utilizar Salts.
Salts
Se denomina salt (o 'sal', en español) a un fragmento aleatorio (caracteres, números...) que se le añade a un hash dado para conseguir que si dos usuarios generan una misma contraseña, su hash no sea idéntico. Los datos con sal complican los ataques de diccionario que cifran cada una de las entradas del mismo: cada bit de sal duplica la cantidad de almacenamiento y computación requeridas. Las sales también ayudan contra las tablas rainbow ya que extienden la longitud y con ello la complejidad de la contraseña.
Para mayor seguridad, el valor de sal se guarda en secreto, separado de la base de datos de contraseñas. Esto aporta una gran ventaja cuando la base de datos es robada, pero la sal no. Para determinar una contraseña a partir de un hash robado, el atacante no puede simplemente probar contraseñas comunes (como palabras del idioma inglés o nombres), sino calcular los hashes de caracteres aleatorios (al menos la porción de la entrada que se sabe es la sal), lo que es mucho más lento.
Por ejemplo, supongamos que la clave secreta (cifrada) de un usuario es robada, y se sabe que usa una de 200.000 palabras inglesas como contraseña. El sistema usa una sal de 32 bits. La clave salada es ahora la contraseña original unida a una sal aleatoria de 32 bits. A causa de esto, los hashes precalculados del atacante carecen de valor. Deberá calcular el hash de cada palabra junto con cada una de las 2 a la 32 (4,294,967,296) posibles combinaciones de sales hasta que se encuentre una coincidencia. El número total de posibles entradas se puede obtener multiplicando el número de palabras en el diccionario por el número de posibles sales:
2 a la 32 x 200000 = 8.58993459 x 10 a la 14
Para completar un ataque por fuerza bruta, el atacante deberá ahora computar cerca de 860 billones de hashes, en lugar de sólo 200.000. Incluso cuando la contraseña en sí misma sea simple, la sal secreta hace que romper la contraseña sea radicalmente más difícil.
0 Comentarios