Anatomía de un desastre contraseña – tamaño gigante error criptográfico de Adobe

Hace un mes hoy, que escribió acerca de Adobe violación de datos gigante .

Hasta donde se sabía, incluyendo Adobe, que afectó a cerca de 3 millones de registros de clientes, lo que hizo sonar bastante mal desde el principio.

Pero lo peor estaba por llegar, como actualizaciones recientes de la historia chocaron el número de clientes afectados a una friolera de 38 millones .

Tomamos Adobe a la tarea de la falta de claridad en su notificación de las infracciones.

Nuestra queja

Una de nuestras quejas fue que Adobe dijo que había perdido las contraseñas encriptadas, cuando pensábamos que la compañía debería haber dicho que había perdido las contraseñas hash y salado.

Como explicamos en su momento:

[L] os contraseñas probablemente no estaban encriptados, lo que implicaría que Adobe podría descifrarlos y así aprender lo que la contraseña que escogió.

Las normas actuales para el almacenamiento de contraseñas Utilice una función matemática de una vía llamada hash que [...] depende únicamente de la contraseña. [...] Esto significa que en realidad nunca se almacena la contraseña en absoluto, cifrado o no.

[... Y] también se suele añadir un poco de sal: una cadena aleatoria que guarde con el ID del usuario y la mezcla en la contraseña cuando usted calcula el hash. Incluso si dos usuarios eligen la misma contraseña, sus sales serán diferentes, por lo que va a terminar con diferentes hashes, que hace las cosas mucho más difícil para un atacante.

Parece que tienes todo mal, en más de una forma.

He aquí cómo y por qué.

Los datos de incumplimiento

Un enorme basurero de la base de datos del cliente infractor fue publicado recientemente en línea, con un peso de 4 GB comprimido, o simplemente un poco menos de 10 GB sin compresión, enumerando no sólo incumplieron 38.000.000 registros, pero 150 millones de ellos.

Como van las infracciones, es muy posible que vea este en el libro de Guinness World Records el próximo año, lo que haría sorprendente suficiente por sí solo.

Pero hay más.

Se utilizó una muestra de 1.000.000 artículos del vertedero publicada para ayudarle a entender lo mucho más.

→ La muestra no fue seleccionado estrictamente al azar. Tomamos cada décimo registro de la primera 300MB del vertedero comressed hasta llegar a 1.000.000 de registros. Creemos que esto proporciona una muestra representativa sin necesidad de nosotros para ir a buscar los 150 millones de discos.

El vertedero es la siguiente:

Por inspección, los campos son los siguientes:

Menos de uno de cada 10.000 de las entradas tienen un nombre de usuario – aquellos que son casi exclusivamente limitado a cuentas en adobe.com y stream.com (una empresa de análisis web).

Los ID de usuario, las direcciones de correo electrónico y los nombres de usuario son innecesarias para nuestro propósito, por lo que ignoramos, la simplificación de los datos, como se muestra a continuación.

Seguimos los consejos de contraseña, porque eran muy práctico, y se convierten los datos de la contraseña de la codificación base64 para hexadecimal recta, por lo que la longitud de cada entrada más evidente, de esta manera:

Cifrado frente hashing

La primera pregunta es: "¿Se Adobe diciendo la verdad, después de todo, llamando a las contraseñas cifradas y no hash?"

Recuerde que los hashes producen una cantidad fija de salida, independientemente del tiempo que es la entrada, por lo que una tabla de las longitudes de datos de contraseñas sugiere que no son ordenadas:

Los datos de la contraseña sin duda se ve pseudoaleatorio, ya pesar de que ha sido codificado de alguna manera, y desde Adobe dijo oficialmente que estaba cifrada, no se aplica un algoritmo hash, que deberán ahora tomar ese reclamo a su valor nominal.

El algoritmo de cifrado

La siguiente pregunta es: "¿Qué algoritmo de cifrado?"

Podemos descartar un cifrado de flujo como RC4 o Salsa-20, donde las cadenas cifradas son la misma longitud que el texto plano.

Cifrados de flujo se utilizan comúnmente en los protocolos de red para que pueda cifrar un byte a la vez, sin tener que mantener el relleno de longitud de entrada a un múltiplo de un número fijo de bytes.

Con todas las longitudes de datos de un múltiplo de ocho, que estamos casi seguro que mirando a un cifrado de bloques que funciona ocho bytes (64 bits) a la vez.

Eso, a su vez, sugiere que estamos viendo DES, o su mayor capacidad de recuperación derivado moderno, Triple DES, generalmente abreviado como 3DES.

→ Otros cifrados de bloque de 64 bits, como IDEA , eran comunes, y la ineptitud que estamos a punto de revelar sin duda no descarta un sistema de cifrado de fabricación casera de la propia imaginación de Adobe. Pero DES o 3DES son los sospechosos más probables.

El uso de un cifrado simétrico aquí, suponiendo que estamos en lo cierto, es un error astonshing, sobre todo porque es innecesario y peligroso.

Cualquiera que calcula, conjeturas o adquiere la clave de descifrado obtiene inmediatamente el acceso a todas las contraseñas en la base de datos.

Por otro lado, un hash criptográfico protegería a cada contraseña individual, sin "talla única" llave maestra que podía descifrar todas las contraseñas de una sola vez – por lo que los sistemas UNIX han estado almacenando contraseñas así durante unos 40 años ya.

El modo de cifrado

Ahora tenemos que preguntarnos a nosotros mismos: "¿Qué se utiliza el modo de cifrado?"

Hay dos modos que nos interesa: el "modo de cifrado de bloques en bruto" fundamental conocido como Electronic Code Book (BCE), donde los patrones en el texto plano se revelan en el texto cifrado, y todos los demás, que enmascaran los patrones de entrada, incluso cuando el mismos datos de entrada se cifran por la misma tecla.

La razón por la que no se usa nunca BCE que no sea como la base para los modos de encriptación más complejos es que el mismo bloque de entrada cifrado con la misma clave siempre da la misma salida.

Incluso las repeticiones que no están alineados con el tamaño de bloque conservan sorprendentemente patrones reconocibles, como muestran las siguientes imágenes.

Tomamos una imagen RGB del logotipo Sophos, donde cada pixel (la mayoría de los cuales son una especie de blanco o algún tipo de azul) lleva tres bytes, divididos en bloques de 8 bytes, y cada uno codificado con DES en modo ECB.

Tratar el archivo de salida resultante como una imagen RGB proporciona casi ningún disfraz:

Modos de cifrado que disfrazan los patrones de texto plano requieren algo más que una clave para ponerlos en marcha – que necesitan un vector de inicialización única, o nonce (número utilizado una vez), para cada elemento cifrado.

El nonce se combina con la clave y el texto en claro, de alguna manera, de modo que la misma entrada que conduce a una salida diferente cada vez.

Si la longitud más corta de datos contraseña anterior, había sido, por ejemplo, 16 bytes, una buena suposición habría sido que cada elemento de datos contraseña contenía un nonce de 8 bytes y entonces al menos uno de bloque vale la pena – otros ocho bytes – de los datos cifrados.

Dado el menor blob de datos contraseña es exactamente una longitud de bloque, sin dejar espacio para un nonce, que claramente no es así como funciona.

Tal vez el cifrado utiliza el ID de usuario de cada entrada, que podemos suponer es único, como un nonce-tipo de contador?

Pero podemos decir rápidamente que Adobe no lo hizo mediante la búsqueda de patrones de texto plano que se repiten en los blobs cifrados.

Debido a que hay 2 64 – cerca de 20 millones de millones de millones de dólares – valores posibles de 64 bits para cada bloque cipertext, deberíamos esperar ningún bloques repetidos en cualquier lugar de los 1.000.000 de registros de nuestra muestra.

Eso no es lo que encontramos, ya que el siguiente conteo de repetición revelan:

Recuerde que si no se usa el modo de BCE, se hubiera podido esperar cada bloque a aparecer sólo una vez cada 2 64 veces, para una prevalencia minúscula de aproximadamente 5 x 10 -18%.

Recuperar la contraseña

Ahora vamos a trabajar hacia fuera, "¿Cuál es la contraseña que cifra como 110edf2294fb8bf4 y las otras repeticiones comunes?"

Si el pasado, todo lo demás es igual, es el mejor indicador de la presente, puede ser que también empezamos con algunas estadísticas de una violación anterior.

Cuando Gawker Media hackeado hace tres años, por ejemplo, las principales claves que fueron extraídos de los hashes robados salieron así:

(La palabra lifehack es un caso especial aquí – Lifehacker siendo una de las marcas de Gawker – pero los otros son fácilmente-escribió y comúnmente elegido, si es muy pobre, las contraseñas.)

Estos datos combinados con los anteriores consejos contraseña filtrados por Adobe hace que la construcción de una hoja bastante fácil cuna:

Tenga en cuenta que las contraseñas de 8 caracteres 12345678 y la contraseña son en realidad cifran en 16 bytes, lo que denota que el texto plano por lo menos 9 bytes de longitud.

No debería ser ninguna sorpresa descubrir que esto es debido a que el texto de entrada consistió en: la contraseña, seguida de un byte cero (ASCII NUL), que sirve para indicar el final de una cadena en C, seguido de siete bytes NUL para rellenar el de entrada a un múltiplo de 8 bytes para que coincida con el tamaño de bloque de cifrado.

En otras palabras, ahora sabemos que e2a311ba09ab4707 es el texto cifrado que indica un bloque de entrada de ocho cero bytes.

Esos datos se muestra en el segundo bloque de texto cifrado en la friolera de 27% de todas las contraseñas, que se escapa a nosotros inmediatamente que todos los que 27% son exactamente ocho caracteres de longitud.

La magnitud del error

Con muy poco esfuerzo, ya hemos recuperado una gran cantidad de información acerca de las contraseñas violado, incluyendo: la identificación de los cinco principales contraseñas precisamente, más el 2.75% de los usuarios que los han elegido, y la determinación de la longitud de la contraseña exacta de casi un tercio de la base de datos.

Así que, ahora que hemos te mostramos cómo iniciarse en un caso como éste, es probable que pueda imaginar cuánto más se espera de ser expulsados ​​de "el mayor crucigrama en la historia del mundo", como satírico IT sitio historieta XKCD denominó.

Tenga en cuenta que los hashes salados – el enfoque programático recomendado aquí – no se han dado a dicha información – y apreciar la magnitud del error de Adobe.

Hay más en ti mismo con preocupación.

Adobe también lo describen los datos de la tarjeta de crédito del cliente y otra PII (información de identificación personal) que le fue robada en el mismo ataque como "cifrado".

Y, como pidió compañero Naked Seguridad guionista Mark Stockley, "fue que los datos cifrados con cuidado y experiencia similares, qué te parece?

Si usted estuviera en la lista incumplimiento de Adobe (y el lado positivo es que todas las contraseñas han sido ahora reinicio, te obliga a elegir uno nuevo), ¿por qué no ponerse en contacto y pedir una aclaración?