La familia de programas cifradores-extorsionadores TeslaCrypt es una amenaza relativamente nueva. Sus primeros ejemplares se detectaron en febrero de 2015. Desde entonces este programa malicioso ha resonado en los medios de comunicación masiva como el “terror” de los jugadores de juegos informáticos, ya que lanza ataques selectivos contra los tipos de archivos relacionados con éstos (de almacenamiento, perfiles de usuario, etc.). Los blancos del troyano eran los habitantes de EE.UU. Alemania, España y otros países; en Rusia se detectaron solo unas decenas de intentos de infección.
TeslaCrypt todavía se encuentra en su fase de desarrollo activo: en los meses pasados han cambiado su diseño gráfico, que muestra a la víctima un nombre (el programa malicioso se disfraza de CryptoLocker, toma el nombre de TeslaCrypt y AlphaCrypt), las extensiones de los archivos cifrados (.ecc, .ezz, .exx), y los detalles de su ejecución.
Hace poco, Kaspersky Lab detectó una novísima versión del troyano, TeslaCrypt 2.0. Esta versión se diferencia de sus predecesores por tener un esquema criptográfico sustancialmente mejorado, gracias al que en este momento no se pueden descifrar los archivos cifrados por TeslaCrypt y por haber dejado de lado el GUI para reemplazarlo por una página HTML, copiada de otro troyano llamado Cryptowall.
Los productos de Kaspersky Lab detectan a los representantes de la familia TeslaCrypt como Trojan-Ransom.Win32.Bitman. La versión más nueva del troyano, que analizaremos en este artículo se detecta como Trojan-Ransom.Win32.Bitman.tk y su hash MD5 es: 1dd542bf3c1781df9a335f74eacc82a4
Evolución de la amenaza
Cada muestra de TeslaCrypt contiene el número de versión interno del programa malicioso. La primera versión que detectamos tenía el número 0.2.5 y su interfaz gráfico, incluyendo el título de la ventana, lo habían tomado de otro programa cifrador-extorsionador, CryptoLocker.
TeslaCrypt 0.2.5
Pero ya en la versión 0.4.0 los creadores de TeslaCrypt modificaron toda la apariencia externa del programa malicioso.
TeslaCrypt 0.4.0
Pero, independientemente de la versión, siguen intactos los siguientes rasgos de la familia:
- El troyano genera por sí mismo una dirección única de Bitcoin y una llave secreta para ésta. La dirección se usa como ID para la víctima y para recibir el pago.
- Para cifrar los archivos se aplica el algoritmo AES-256-CBC. Todos los archivos se cifran con una sola llave.
- No se cifran los archivos mayores a 0x10000000 (~268 MB).
- Los servidores de administración están ubicados en la red Tor y la comunicación con ellos se realiza mediante los servicios de tor2web.
- Entre los archivos cifrados hay muchas extensiones de archivos de juegos de computadoras.
- El troyano borra las copias shadow.
- A pesar de que se intenta intimidar a la víctima con el protocolo RSA-2048, este algoritmo no se usa de ninguna manera en el código.
- El troyano está escrito en C++, habilitado mediante un compilador de Microsoft y la realización de los algoritmos de cifrado se toma de la biblioteca OpenSSL.
Hechos dignos de interés
- Las primeras versiones de TeslaCrypt (0.2.5 – 0.3.x) comprobaban en el sitio http://blockchain.info si se había realizado el pago de bitcoin, y si la respuesta era positiva, informaban a su servidor de administración y recibían la clave para descifrar los archivos. Este esquema era vulnerable, ya que cualquier especialista podía enviar por su cuenta una solicitud al servidor de administración y recibir la llave sin hacer ningún pago.
- Las versiones 0.2.5 – 0.3 guardaban la llave de descifrado (junto con otros datos) en un archivo propio llamado key.dat. El sector de la llave de este archivo se borraba (reemplazando los valores por ceros) sólo después de que se terminase el cifrado, lo que daba la posibilidad de conservar la llave interrumpiendo el funcionamiento del cifrador (por ejemplo, apagando el PC). Más adelante se podía extraer la llave del archivo key.dat y descifrar todos los archivos.
- En la versión 0.4.0 el archivo key.dat había cambiado de nombre a storage.bin y la llave de descifrado no se guardaba de forma abierta, sino cifrada según el módulo de orden de la curva elíptica estándar secp256k1. Una vez terminado el cifrado, no se borraba la llave reemplazando sus valores con ceros, sino con bites aleatorios, pero a pesar de esto, mientras este sector no estuviese borrado, era posible extraer la llave con nuestro utilitario RakhniDecryptor.
El día de hoy
Hace poco nos llamó la atención una muestra de este troyano que tenía el número de versión interno 2.0.0. ¿Qué ha cambiado esta vez?
Lo primero que salta a la vista es que de TeslaCrypt ha desaparecido el código de visualización del GUI (la ventana de la aplicación). En su lugar, después de terminar el cifrado, el troyano muestra en el navegador una página HTML copiada en su totalidad de otro extorsionador de amplia fama, CryptoWall 3.0.
La página que se abre al seguir los enlaces que se proponen a la víctima también son idénticos a la página de pago de CryptoWall, pero por supuesto las URL llevan al servidor de TeslaCrypt, porque es evidente que los autores de este programa malicioso no quieren que el dinero de las víctimas llegue a sus competidores.
TeslaCrypt rellena el renglón con un texto referente a CryptoWall
Pero ¿para qué sirve este disfraz? Aquí sólo podemos hacer conjeturas. Es posible que los delincuentes hayan querido de esta manera convencer a la víctima de que la situación es muy seria. Porque los archivos cifrados por CryptoWall hasta ahora son imposibles de descifrar, a diferencia de muchos casos de infección causada por TeslaCrypt.
En cualquier caso, este no es el único cambio de la nueva versión de TeslaCrypt. Una vez más se optimizó el esquema criptográfico, que ahora es mucho más sofisticado. Para generar las llaves se usa el algoritmo ECDH (los delincuentes introdujeron su uso en las versiones 0.3.x), pero a diferencia de las versiones anteriores, en esta parece más en su sitio, ya que sirve para determinado objetivo: dar a los delincuentes la posibilidad de descifrar los archivos usando sólo una “llave maestra”. Pero contaremos todo en orden.
Esquema criptográfico TeslaCrypt 2.0
Generación de datos de la llave
El troyano usa dos juegos de llaves: las “llaves maestras” que son únicas en el sistema infectado y las “llaves de sesión” que se generan cada vez que se reinicia el programa malicioso en el sistema.
Generación de las llaves maestras
Supongamos que Q es una curva elíptica estándar secp256k1 (“SECG curve over a 256 bit prime field”) y G un elemento formador del subgrupo cíclico de puntos en la curva.
Supongamos que malware_pub es la llave abierta de los delincuentes contenida en el cuerpo del troyano (es un punto en la curva Q y se guarda en forma de coordenadas x, y separadas).
Al infectar el sistema el troyano genera:
- install_id, el identificador de infección, 8 bytes al azar.
- master_btc_priv, llave maestra secreta, 32 bytes al azar, se envía al servidor de administración.
- master_btc_pub = master_btc_priv * G (punto en la curva), llave maestra abierta que se guarda en los archivos cifrados.
- btc_address, dirección bitcoin para recibir el rescate, se genera según el algoritmo estándar de bitcoin basándose en master_btc_pub.
- master_ecdh_secret = ECDH(malware_pub, master_btc_priv), “llave maestra común”, necesaria para descifrar si master_btc_priv se perdió o no llegó al servidor de administración, en este formato no se guarda en ninguna parte.
- master_ecdh_secret_mul = master_ecdh_secret * master_btc_priv, cifra que permite recuperar master_ecdh_secret_mul, se guarda en el sistema.
Notas
master_btc_priv (según el principio de funcionamiento de bitcoin) es una llave secreta necesaria para “sacar” los bitcoins enviados a la dirección btc_address recién creada.
Generación de llaves de sesión
Cada vez que se inicia (durante la primera infección, o por ejemplo, después de reiniciarse el PC), el troyano genera de nuevo:
- session_priv – una llave de sesión secreta, 32 bytes al azar. Se usa para cifrar los archivos y no se guarda en ninguna parte.
- session_pub = session_priv * G, llave de sesión abierta. Se guarda en los archivos cifrados.
- session_ecdh_secret = ECDH(master_btc_pub, session_priv), “llave maestra de sesión”, necesaria para descifrar los archivos, en este formato no se guarda en ningún lugar.
- session_ecdh_secret_mul = session_ecdh_secret * session_priv , cifra que permite recuperar session_ecdh_secret. Se guarda en los archivos cifrados.
Datos de las llaves que se guardan en el sistema
A diferencia de sus anteriores versiones, TeslaCrypt 2.0.0 no usa ni key.dat ni storage.bin para guardar datos. En vez de estos archivos, se usa el registro: en HKCUSoftwaremsysID se guarda el valor install_id, y en HKCUSoftware<install_id>data se pone la siguiente estructura:
En la sintaxis común del lenguaje C, la estructura se puede describir de la siguiente forma:
Y así es como luce en el sistema infectado:
Cifrado de los archivos
TeslaCrypt, empezando desde la versión 0.3.5, infecta tanto las memorias comunes conectadas al sistema, como todos los recursos de red compartidos (shares), incluso si no están montados como discos con letras asignadas. Y ya que lo mencionamos, son pocos los cifradores que pueden presumir de tener esta función.
Cada archivo se cifra usando el algoritmo AES-256-CBC con la llave session_priv. El archivo cifrado recibe la extensión adicional “.zzz”. Al principio del fichero se coloca la estructura de servicio y después el contenido cifrado. El formato de la estructura es el siguiente:
La misma estructura en la sintaxis del lenguaje C:
Descifrado de los archivos
Los autores de TeslaCrypt 2.0.0 quitaron totalmente del programa malicioso la función de descifrado de archivos, que estaba presente en las versiones anteriores. Partiendo del análisis del esquema criptográfico descrito más arriba, vemos los siguientes algoritmos de descifrado de los archivos.
- Si se conoce master_btc_priv, es necesario:
- Leer session_pub del archivo cifrado;
- Calcular session_ecdh_secret = ECDH(session_pub, master_btc_priv);
- Leer del archivo cifrado session_ecdh_secret_mul;
- Calcular session_priv = session_ecdh_secret_mul / session_ecdh_secret;
- Descifrar el archivo con la llave session_priv.
- Si master_btc_priv está ausente, pero se conoce malware_priv (y sólo lo conocen los delincuentes que han puesto en el cuerpo del troyano el malware_pub correspondiente):
- Leer del registro o fichero cifrado master_btc_pub;
- Calcular master_ecdh_secret = ECDH(master_btc_pub, malware_priv);
- Leer master_ecdh_secret_mul del fichero cifrado;
- Calcular master_btc_priv = master_ecdh_secret_mul / master_ecdh_secret;
- Sabiendo el valor de master_btc_priv, seguir los pasos del punto 1.
Para tener una comprensión completa de este fenómeno, hay que familiarizarse con el algoritmo de Diffie-Hellman y su versión para curvas elípticas ECDH, por ejemplo aquí.
Otras peculiaridades
Evasión de la detección
En el troyano se usa una técnica de evasión de la detección basada en el uso de objetos COM. Nuestra compañía detectó su uso por primera vez en TeslaCrypt vesión 0.4.0, pero desde entonces ha experimentado pequeñas modificaciones. El seudocódigo generado según el ejemplo de la versión 2.0.0 tiene el siguiente aspecto:
Comunicación con el servidor de administración
En la imagen del troyano hay una lista estática de direcciones de servidores de administración. Los servidores se encuentran en la red Tor, pero la comunicación se lleva a cabo mediante la web con la ayuda de los servicios tor2web.
Antes de TeslaCrypt versión 0.4.1, las solicitudes se enviaban al servidor de forma abierta, pero en las siguientes versiones se empezaron a cifrar con el algoritmo AES-256-CBC. Como llave se toma el hash SHA256 de un renglón estático en el cuerpo del programa malicioso.
La formación de la solicitud HTTP enviada por el troyano al infectar el sistema se muestra en la captura de pantalla del seudocódigo.
Propagación
Se ha tenido noticias de que los programas maliciosos de la familia TeslaCrypt se propagaron mediante los exploits kits Angler y Sweet Orange. Cuando se usa este esquema de propagación, la víctima entra a un sitio web infectado y el código malicioso del exploit instala malware selectivo usando las vulnerabilidades del navegador (con mayor frecuencia, de sus plugins).
Distribución geográfica de los usuarios atacados por los programas maliciosos de la familia TeslaCrypt
Recomendaciones
Para proteger los datos de las acciones del cifrador, le recomendamos hacer una copia de seguridad de todos sus datos importantes. Hay que crear copias a intervalos regulares y guardarlas en medios que no estén disponibles para la escritura todo el tiempo, sino sólo durante el proceso de almacenamiento de la copia de seguridad. Por ejemplo, los usuarios particulares deben hacerlo en un disco duro externo, que hay que desconectar inmediatamente después de terminada la copia de seguridad.
Es de suma importancia actualizar a tiempo el software (sobre todo los plugins del navegador y el navegador mismo), ya que los fabricantes todo el tiempo están cerrando las vulnerabilidades detectadas y explotadas por los delincuentes.
Pero si el programa malicioso ya está en el sistema, puede detenerlo un producto antivirus moderno, con bases de datos actualizadas y módulos de protección activados. Esto último se refiere al módulo de defensa proactiva que en caso de las amenazas de día 0 se convierte en la última línea de defensa.
TeslaCrypt 2.0 se disfraza de CryptoWall
kurono
¿Hay alguna solucion para recuperar los archivos cifrados con la extension .ccc, aunque la solucion sea de pago? ¿si se paga la cantidad que piden, se soluciona el problema?¿cuanto tiempo habra que esperar hasta tener una solucion gratuita?¿algun sitio donde poder ir para recuperar los datos?