BitCrypt y el malware fácil de descifrar (II): El porqué

viernes, 14 de marzo de 2014

El ransomware ha venido para quedarse. Existen fundamentalmente dos tipos: los que bloquean el acceso al sistema (que populariza todavía el "virus de la policía") y los que (incluso adicionalmente) cifran los contenidos. En ambos casos, el negocio se basa en pedir un "rescate" (bien por el control, bien por el contenido). En esta entrada se relatará técnica y matemáticamente el funcionamiento de uno de ellos, bitCrypt y cómo (y por qué) un error de cálculo ha permitido descifrar el contenido de los archivos que "secuestra".

Un rápido repaso al RSA

BitCrypt alardea de usar claves RSA de 1024. RSA es un algoritmo criptográfico de clave asimétrica, basado en una clave pública y en una privada (también un algoritmo de firma). Los parámetros necesarios que configuran este sistema se resumen como sigue:
  • m = número que representa el mensaje original que se desea cifrar.
  • c = mensaje cifrado.
  • n = pq = módulo para las claves.
  • p, q = factores de n.
  • e = clave pública o exponente público.
  • d = clave privada o exponente privado.
Para llevar a cabo la operación de cifrado se realiza el siguiente cálculo:

De la misma forma, para descifrar se utiliza:
Finalmente, se deben considerar las siguientes observaciones:


BitCrypt también dice que usa el RSA para cifrar la clave AES. Respecto a AES, únicamente mencionar que es un algoritmo de cifrado simétrico (usa la misma clave para cifrar y descifrar) con un tamaño de bloque fijo de 128 bits y variable de la clave entre 128 y 256 bits. Es bastante robusto y eficiente.

Cómo lo hace BitCrypt

Repasemos los pasos:
  • En primer lugar se genera una contraseña aleatoria para el archivo actual que será utilizada posteriormente por AES.
  • Se cifra con AES todo el fichero original con la contraseña anterior y se añade la extensión .bitcrypt.
  • Seguidamente se cifra con RSA la contraseña utilizada y se anexa al final del fichero. Junto con esto, se guarda información importante para el descifrado como el módulo de la clave pública (n), que se almacena codificada en algo que parece base64, pero no es más que un alfabeto de sustitución. El exponente público utilizado es siempre el mismo (el típico 0x10001). El uso tan frecuente de este valor se debe principalmente a la eficiencia de la exponenciación, llevada a cabo mediante 16 desplazamientos de bits a la izquierda sumando 1. Además, este número es lo suficientemente grande para evitar problemas con implementaciones incorrectas que no hagan un buen uso del padding.
En Cassidian Ciberscurity, analizaron los ficheros afectados y se dieron cuenta de que no era cierto lo indicado en la información proporcionada sobre el uso de RSA de 1024. La verdad era que se estaba utilizando RSA 426, lo que modificaba completamente el panorama. Al usar una clave tan corta resulta factible abordar su factorización, "rompiendo" por fuerza bruta el cifrado RSA. De hecho, la longitud mínima de n recomendada hoy en día es de 2048 bits.

Sabiendo que los atacantes usan criptografía fuerte, pero con claves débiles, ¿cómo (en la teoría) se produciría la ruptura?

Cómo se rompen las claves RSA

El objetivo de los algoritmos que intentar romper RSA consiste en determinar los valores correspondientes a los números d, p y q desconocidos en un comienzo. Una vez tengamos estos datos en nuestras manos se podría llevar a cabo el proceso de descifrado explicado anteriormente y recuperar por tanto el mensaje original.

Sin embargo, generalmente no resulta computacionalmente factible obtener estos valores. Lo más cómodo sería conseguir d, por lo que se hace uso de la observación 2 de RSA:


Por tanto, el objetivo principal se resume en resolver un problema de factorización de grandes números, es decir, encontrar los valores de p y q tales que satisfagan n = pq. Para ello usaron CADO-NFS.

La manera en la que el algoritmo CADO-NFS se encarga de romper el proceso de cifrado RSA utilizado por bitCrypt se basa en hacer cálculos matemáticos para llegar a encontrar la factorización (p y q) del número n (módulo utilizado en el algoritmo RSA).

En el caso de un módulo de 426 bits, tardará un promedio de unas 14 horas en un servidor de 24 núcleos y unas 43 horas en un ordenador doméstico de 4 núcleos. Comparado con los cientos o incluso miles de años que necesitaríamos para factorizar una clave de mayor tamaño, el método deja la puerta abierta a la recuperación de los archivos más importantes para los afectados por esta versión del troyano. Las instrucciones para conseguirlo pasan por utilizar este script.

Una vez encontrados p y q se obtiene el exponente privado d y se puede recuperar la contraseña aleatoria utilizada por AES que había sido cifrada con RSA de 426 bits anteriormente. Siguiendo los pasos del proceso de descifrado fichero a fichero se puede obtener la información original.

BitCrypt y el malware fácil de descifrar (I): El qué
Julia Llanos
julia.llanos@11paths.com

2 comentarios:

  1. Perfecta la explicacion...lastima que ya lo han solucionado en la 2 version del malware...bitcript2 rsa1024.

    ResponderEliminar
  2. y que pasa con la version 2? todos se centran en repetir la explicacion de los franceses pero no dicen nada de la nueva version. la que no tiene solucion

    ResponderEliminar