Ataque de Tabla Arcoíris, De Qué Trata
Ataque de Tabla Arcoíris, De Qué Trata

Ataque de Tabla Arcoíris, ¿De Qué Trata?

La llegada de la criptografía y, en particular, del hashing, ha innovado significativamente las políticas de protección de datos sensibles dentro de los sistemas. Estas tecnologías son fundamentales para asegurar la seguridad de las contraseñas dentro de las bases de datos y se vuelven cada vez más cruciales con el aumento de la innovación digital y, naturalmente, de las amenazas informáticas.

Sin embargo, como bien sabemos, en el campo de la ciberseguridad no existen remedios universales e infalibles. Las tablas arcoíris (tablas Rainbow o Rainbow Table) representan la principal amenaza para las soluciones ofrecidas por este tipo de herramientas. Es evidente, por lo tanto, la necesidad de estudiar y comprender las implicaciones que estas tablas tienen para la seguridad de nuestros datos y qué precauciones adoptar en consecuencia.

¿Qué es una Tabla Arcoíris?

Concepto de Tabla Arcoíris
Concepto de Tabla Arcoíris

Las tablas arcoíris son utilizadas por los atacantes para descifrar las contraseñas almacenadas dentro de un sistema.

En los sistemas modernos, las contraseñas no se almacenan, o no deberían almacenarse, en texto claro. Es una buena práctica que el sistema realice el hashing de la contraseña elegida y almacene directamente el resumen producido por la función. Cuando un usuario ingresa posteriormente su contraseña para autenticarse, el sistema vuelve a realizar el hashing de esta y compara el resumen con el almacenado. De esta manera, las contraseñas de los usuarios se preservan en caso de una fuga de datos.

Básicamente, una tabla arcoíris es una tabla precompilada de asociaciones entre posibles, a menudo probables, contraseñas y sus respectivos hash. Una vez que un atacante ha obtenido el hash de la contraseña de la víctima designada, un paso preliminar dentro de la cadena de ataque, solo necesita compararlo con las entradas de la tabla para buscar una coincidencia.

Estas tablas suelen contener un número considerable de registros, apuntando a maximizar la probabilidad de una coincidencia. Para esto, se recopilan e insertan las contraseñas más comúnmente utilizadas, como en un ataque de diccionario normal, y se generan masivamente nuevas contraseñas de manera aleatoria e impredecible. Por esta razón, las tablas arcoíris generalmente no se implementan como simples archivos de texto o bases de datos, sino de manera que optimicen la búsqueda y la extracción posterior de un registro.

Cadena Arcoíris, ¿de qué hablamos?

Las tablas arcoíris se compilan a partir de un conjunto muy amplio de contraseñas comunes, que luego se extiende con una lista de contraseñas generadas automáticamente de manera aleatoria.

A cada una de estas contraseñas no se le asocia inmediatamente su hash respectivo, como se podría pensar, sino que se utiliza una técnica para optimizar la búsqueda de una coincidencia, basada en el concepto de cadena arcoíris (Rainbow Chain).

Las cadenas arcoíris, a su vez, se basan en el concepto de

  • funciones de hashing, que transforman un texto de longitud variable en una cadena de longitud fija, de modo que no se pueda remontar al texto original ni encontrar fácilmente dos textos que produzcan el mismo hash.
  • funciones de reducción, diseñadas, por el contrario, para mapear un hash en una contraseña.

Para ser más precisos, las funciones de reducción transforman un hash dado en una secuencia de texto potencialmente utilizable como contraseña dentro de un sistema, es decir, una cadena de texto que cumple con ciertas propiedades como la longitud típica de las contraseñas o el uso de los caracteres previstos en una contraseña. Una función de reducción muy simple podría ser, por ejemplo, la función de truncamiento del hash a los primeros seis u ocho caracteres.

En este punto, podemos pensar en una cadena arcoíris como una secuencia alternada de texto en claro y cifrado: cada cadena comienza con una contraseña, seguida de su hash respectivo, a su vez seguido por una nueva contraseña obtenida reduciendo el hash, y así sucesivamente.

Dada una contraseña inicial p, una función de reducción r y una función de hashing h, podemos representar una tabla arcoíris de manera más formal como la siguiente cadena de transformaciones:

p → h1 = h(p) → p2 = r(h1) → h2 = h(p2) → p3 = r(h2) → h3 = h(p3) → … → pn = r(hn-1) → hn = h(pn).

En realidad, para aumentar las posibilidades de éxito del ataque y reducir al mínimo las posibilidades de colisión, en cada paso de reducción se utiliza una función de reducción diferente. Esto da nombre a las cadenas arcoíris y, por lo tanto, a las tablas arcoíris: podemos representar cada columna de texto en claro con un color diferente, uno por cada función de reducción utilizada, creando así una secuencia de colores diferentes que recuerda a la de los arcoíris.

Búsqueda de una Coincidencia

Ilustración de Hash
Ilustración de Hash

Como se mencionó antes, la búsqueda de un hash dentro de una tabla arcoíris puede ser un problema computacionalmente muy costoso, especialmente en el caso de tablas muy grandes como las que se utilizan efectivamente en los ataques. En este contexto, el almacenamiento de toda la tabla arcoíris no mejoraría la situación, la haría más compleja sin proporcionar ninguna ventaja.

Sin embargo, dentro de la tabla, no se almacena toda la cadena, sino solo los dos extremos. Dado el ejemplo anterior, el registro correspondiente en la tabla arcoíris estará formado por la pareja <p, hn>.

Cuando se intenta descifrar el hash de una contraseña utilizando la tabla arcoíris, este se comparará con los hash ya presentes en la tabla, es decir, los miembros derechos de las diversas parejas.

Si el hash en posesión del atacante coincide con uno de los hash presentes en la tabla, se tomará la contraseña asociada a este, es decir, la contraseña que inició la cadena correspondiente, y se seguirá la cadena hasta obtener la cadena que originó el hash objetivo. Una de las propiedades clave que deben tener tanto las funciones de hash como las funciones de reducción, de hecho, es la velocidad de computación.

La cadena debe poder recorrerse rápidamente y, al no almacenarse explícitamente dentro de la tabla, debe ser computacionalmente fácil recalcular los hash y las reducciones cuando sea necesario. Esta técnica aprovecha un concepto conocido en informática como el compromiso tiempo-memoria.

Naturalmente, el hash podría no estar presente dentro de un registro como paso final de la computación, sino que podría aparecer como paso intermedio en una cadena. En este caso, el simple algoritmo de búsqueda descrito no podría encontrar la coincidencia, terminando con una falta de coincidencia.

Para evitar este comportamiento e incluir también los cálculos ocultos e intermedios de cada cadena, en caso de falta de coincidencia, el hash objetivo se reduce a una cadena mediante una de las funciones de reducción utilizadas en la creación de la tabla arcoíris y el resultado se vuelve a hashear. El hash recién obtenido se compara nuevamente con todos los registros de la tabla, en un proceso iterativo fácilmente automatizable.

Naturalmente, el número de iteraciones y transformaciones a las que someter el hash en caso de falta de coincidencia, así como la longitud de las cadenas, son factores importantes en el éxito del descifrado: cuanto mayor sea este valor, más hashes cubrirá la tabla. Sin embargo, cadenas demasiado largas pueden afectar negativamente el rendimiento del sistema.

Sal (o salting) Según sea Necesario

Las tablas arcoíris son una herramienta peligrosa en manos de los atacantes, permitiéndoles llevar a cabo cálculos intratables con el método tradicional de fuerza bruta.

Afortunadamente, sin embargo, existen medidas simples que pueden hacer que las tablas arcoíris sean completamente inutilizables, protegiendo una vez más nuestros datos.

La técnica más común se llama salting y consiste en la introducción de una secuencia de caracteres generada aleatoriamente en el momento en que se define una contraseña e insertarla al principio o al final de la misma. La función de hash calculará entonces no el hash de la contraseña, sino el hash de la contraseña con sal. En caso de que un atacante lograra acceder al archivo que contiene los hashes de las contraseñas, ya no le bastaría con una tabla arcoíris que contenga una lista de contraseñas, sino que necesitaría haber almacenado dentro de la tabla arcoíris las contraseñas con sal. La probabilidad de éxito del ataque se vuelve muy baja si se utiliza una sal larga y altamente aleatoria.

Además, esta técnica permite fortalecer incluso las contraseñas más débiles, a menudo elegidas porque son fácilmente memorizables, permitiendo a los usuarios almacenar contraseñas más simples sin exponerse a mayores riesgos.

Naturalmente, para aumentar la robustez del sistema y la eficacia del salting, es necesario:

  • utilizar sales diferentes para cada contraseña, especialmente en el caso de contraseñas iguales; de lo contrario, las contraseñas iguales se asociarían al mismo hash, disminuyendo la eficacia del salting
  • que los valores de sal se guarden en un archivo o base de datos separado de aquel en el que se almacenan las contraseñas, para mantenerlos secretos en caso de que un atacante logre obtener los hashes de las contraseñas.

Conclusiones

Las tablas arcoíris representan una amenaza para la protección de contraseñas protegidas por codificación hash. Estas herramientas proporcionan una ayuda importante para los atacantes que, al poseer un archivo de hash, quieren descifrar su contenido con fines maliciosos.

Afortunadamente, se han estudiado contramedidas y precauciones para prevenir el ataque. El salting es el más común y efectivo, y es fácilmente implementable, en los escenarios más comunes, por los administradores del sistema.

Para reducir las posibilidades de éxito del ataque, también se deben utilizar algoritmos de hash avanzados, como bcrypt o scrypt, especialmente diseñados para la protección de contraseñas, además de elegir contraseñas complejas y diferentes para cada sistema.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda