Un programa chantajista defectuoso

A mediados del año pasado, mis colegas publicaron una entrada en el blog sobre una nueva generación de programas chantajistas compuestos por troyanos que cifran contenido, y pusieron como ejemplo la familia Onion (también conocida como CTB-Locker) para analizar el funcionamiento de estos programas.

A mediados del año pasado, descubrimos el primer ejemplar de un interesante programa cifrador : TorLocker (este es el nombre original que le dio su creador); después, TorLocker se comenzó a usar para lanzar ataques contra los usuarios japoneses. Cuando lo descubrimos el 24 de octubre de 2014, los componentes proactivos de los productos Kaspersky Lab ya detectaban este programa malicioso; después, se le asignó el veredicto ‘Trojan-Ransom.Win32.Scraper’.

Todas las muestras de TorLocker que tenemos son de alguna de estas dos versiones: 1.0.1 (en inglés) o 2.0 (en inglés y japonés). Ambas versiones tienen pequeñas diferencias: 1) en el método que usan para ofuscar el código y 2) en las fuentes que usan para conseguir módulos adicionales: en la primera versión, los módulos adicionales se extraen de la sección de datos, mientras que en la segunda, se descargan de Internet (de servicios de almacenamiento de datos o sitios comprometidos). La segunda versión también tiene algunas cadenas de caracteres que se reubicaron del sector de datos al sector de códigos y surgieron bytes colgantes (redundantes, sin uso). El algoritmo de cifrado de ficheros es el mismo en ambas versiones.

Características y peculiaridades comunes de esta familia de malware

Nuestro análisis indica que Trojan-Ransom.Win32.Scraper puede haberse escrito en assembler, lo que es muy inusual en este tipo de malware. El troyano usa la red Tor para ponerse en contacto con sus “dueños” – algo que al parecer se está volviendo una norma en la nueva generación de ransomware – y con el servidor proxy polipo. Este programa malicioso suele llegar a los equipos de los usuarios mediante la red zombi Andrómeda.

Trojan-Ransom.Win32.Scraper cifra los documentos de la víctima y exige un rescate (de 300 $ o más) para descifrarlos. Si un producto de seguridad elimina el programa malicioso después de que se han cifrado los datos, el troyano instala un fondo de pantalla rojo brillante en el escritorio con un enlace a su fichero ejecutable. Esto le da una oportunidad más a los usuarios de volver a instalar el troyano e informar a sus dueños que han pagado el rescate: para hacerlo, los usuarios deben escribir los detalles del pago en una ventana especial de TorLocker. Los datos se envían al servidor C&C que responde con una llave RSA privada o notifica que el pago no se ha realizado.

Este representante, típico de la familia Scraper, está empaquetado con UPX. La sección de los datos tiene un cifrado adicional AES con una llave de 256 bits. En la sección del código, entre las instrucciones del ensamblador, hay un gran número de bytes redundantes que no tienen ningún uso.

Bytes redundantes en el cuerpo del cifrador

El método para enviar argumentos tipo cadenas a las funciones es igual de inusual. Las cadenas de caracteres se ubican directo en el sector del código; para enviar una cadena como argumento a una función, el puntero que dirige a esa cadena se ubica en la pila mediante la forma de llamar (usando la instrucción ‘call’) a la instrucción que sigue a la cadena. Por ende, la dirección de retorno (que es idéntica al puntero de la cadena de caracteres) se ubica en la pila:

Manejo de las constantes de cadenas de caracteres como argumentos de las funciones

Principios operativos

Una vez que se lo ejecuta, el troyano comienza a descifrar su sector de datos con una llave AES de 256-bits. Los primeros 4 bytes de esta llave se usan como un identificador del ejemplar que se agrega al final de los ficheros cifrados. Después, el troyano se copia a una carpeta temporal y se crea una llave de registro para la ejecución automática de esa copia en la siguiente sección del registro:

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun]

Después, el troyano crea varios hilos para hacer lo siguiente:

  • Buscar y terminar los procesos taskmgr.exe, regedit.exe, procexp.exe y procexp64.exe.
  • Eliminar todos los puntos de recuperación del sistema.
  • Cifrar los documentos de office del usuario, sus ficheros de video y audio, imágenes, archivos comprimidos, bases de datos, copias de seguridad, llaves de cifrado de equipos virtuales, certificados y otros ficheros en todos los discos duros y de redes, excepto los que se encuentran en las carpetas %windir%, %temp%. No se alteran los nombres y extensiones de los ficheros cifrados.

    Esta es la lista completa de extensiones de los ficheros que se cifran:
    .3gp .7z .accdb .ai .aiff .arw .avi .backup .bay .bin .blend .cdr .cer .cr2 .crt .crw .dat .dbf .dcr .der .dit .dng .doc .docm .docx .dwg .dxf .dxg .edb .eps .erf .flac .gif .hdd .indd .jpe .jpg .jpeg .kdc .kwm .log .m2ts .m4p .mdb .mdf .mef .mkv .mov .mp3 .mp4 .mpg .mpeg .mrw .ndf .nef .nrw .nvram .odb .odm .odp .ods .odt .ogg .orf .p12 .p7b .p7c .pdd .pdf .pef .pem .pfx .pif .png .ppt .pptm .pptx .psd .pst .ptx .pwm .qcow .qcow2 .qed .r3d .raf .rar .raw .rtf .rvt .rw2 .rwl .sav .sql .srf .srw .stm .txt .vbox .vdi .vhd .vhdx .vmdk .vmsd .vmx .vmxf .vob .wav .wb2 .wma .wmv .wpd .wps .xlk .xls .xlsb .xlsm .xlsx .zip

  • Extrae una imagen BMP, la guarda en una carpeta temporal y la establece como fondo de pantalla del escritorio:
  • Descarga tor.exe y polipo.exe, los ficheros necesarios para comunicarse con los servidores C&C, de los enlaces especificados en la configuración del troyano (en el caso de TorLocker 2.0) o los extrae de la sección de datos (en el caso de TorLocker 1.0). Después, tor. exe se ejecuta con los siguientes argumentos:

    tor.exe -SOCKSPort 9150 -AvoidDiskWrites 1 -ExcludeSingleHopRelays 0 -FascistFirewall 1 -DirReqStatistics 0

    polipo.exe se ejecuta en la siguiente configuración:

    127.0.0.1:57223 proxyPort = 57223 socksParentProxy = 127.0.0.1:9150 socksProxyType = socks5

  • Crea una ventana GUI exigiendo que la víctima pague a los creadores de Trojan-Ransom.Win32.Scraper y la muestra en la esquina superior izquierda de la pantalla. Acepta pagos mediante BitCoin, UKash y PaySafeCard.

    Para apresurar al usuario a que pague el rescate, el programa amenaza con eliminar la llave privada necesaria para descifrar los ficheros si el usuario no envía el dinero durante un periodo de tiempo establecido. Pero en realidad las llaves RSA no se borran. Están asociadas con el ejemplar de malware y no con un usuario específico, así que la misma llave RSA se usa en varios usuarios a la vez.

  • La dirección IP del ordenador afectado se determina usando www.iplocation.net, www.seuip.com.br, whatismyipaddress.com o checkip.dyndns.org.
  • Establece una conexión con el servidor C&C en el dominio onion mediante el servidor proxy polipo 127.0.0.1:57223. Si la víctima ha pagado el rescate a los extorsionadores, el troyano se pone en contacto con el servidor C&C y le envía la información sobre el cliente (la llave RSA seleccionada, la cantidad de ficheros cifrados, la dirección IP e identificación del cliente, el método de pago seleccionado y el número de la tarjeta del banco), entonces, el troyano recibe la llave RSA privada para descifrar los ficheros – en este caso, se crea un hilo de ficheros de descifrado. Si el usuario no ha pagado el rescate, se envía un mensaje diciendo que el pago no se ha realizado todavía. En cada ejemplar de Trojan-Ransom.Win32.Scraper?, algunas decenas de nombres de dominio C&C están codificados de forma rígida; no están actualizados y pueden dirigir al mismo servidor C&C.

Cifrado

Cuando se ejecuta, Trojan-Ransom.Win32.Scraper elige una de las 128 llaves RSA públicas que tiene codificadas de forma rígida, en base al nombre y número de serie de la unidad lógica. El número (n) de la llave RSA pública se calcula de la siguiente manera:

n = (VolumeSerialNumber * strlen(ComputerName)) mod 128,
donde strlen (ComputerName) es tan largo como el nombre del equipo, y VolumeSerialNumber es
el número de serie de la unidad lógica en la que se instala Windows.

Cada ejemplar tiene su propio grupo de llaves públicas.

Los ficheros del usuario están cifrados con AES-256 con una llave de uso único que se genera de forma aleatoria; se crea una llave de cifrado para cada fichero. Después, se añade una sección de 512 bytes al final de cada fichero, que consta de 32 bytes de relleno, 4 bytes del identificador del troyano y 476 bytes de la llave AES que se usa con cifrado RSA-2048.

Si el tamaño del fichero es mayor a 512 MB + 1 byte, se cifran sus primeros 512MB. Los datos cifrados se escriben sobre los datos originales que no están cifrados; no se crean nuevos ficheros, y los antiguos tampoco se eliminan.

Estructura de un fichero cifrado

El troyano no necesita acceso a Internet para cifrar los ficheros.

Empaquetado

Para obstruir el análisis, algunos de los ejemplares de Trojan-Ransom.Win32.Scraper se empaquetaron además con los protectores KazyLoader y KazyRootkit para reforzar el cifrado de UPX.

KazyLoader es un protector de dos etapas de ficheros ejecutables, escrito en .NET Framework. El ejecutable protegido está cifrado con AES y después se guarda en el sector de recursos del protector como una paleta de color de una imagen BMP.

El módulo de descifrado de la imagen está cifrado por XORing con un byte, después se divide en partes y también se ubica en la sección de recursos del protector con la forma de las cadenas de caracteres LOADER0, LOADER1, … LOADER272.

El protector KazyRootkit también está escrito en .NET Framework y tiene una característica que puede esconder los procesos del Administrador de Recursos (taskmgr.exe) y las llaves de registro del Editor del Registro (regedit.exe) eliminando las cadenas de caracteres de los elementos GUI ListView con la ayuda de WinAPI. Dependiendo de su configuración, el protector puede cerrarse sin desempaquetar el fichero que tiene integrado si detecta Sandboxie, Wireshark, WPE PRO o algún emulador de código.

El fichero que debe protegerse está cifrado por XORing con una llave, y después se inyecta en el proceso del protector. Se almacena una gran variedad de bytes aleatorios en el protector.

Programa de Partners

El generador de Trojan-Ransom.Win32.Scraper (el programa que se usa para crear nuevos ejemplares del troyano con una configuración específica) se distribuye mediante un programa de Partners y se vende por unos cuantos bitcoins. Encontramos dos publicaciones que ofrecían vender TorLocker 2.0 en la tienda ilícita virtual ‘Evolution’ (ahora inactiva):

La captura de pantalla que publicaron del generador sugiere que el cibercriminal puede cambiar algunas de las configuraciones del programa, como las siguientes:

  • Permitir o bloquear la ejecución del Administrador de Tareas o Explorador de Procesos después de la infección;
  • Permitir o bloquear el uso de sistemas de pago como BitCoin, PaySafeCard y Ukash para pagar el rescate;
  • Permitir o rechazar que se eliminen los puntos de restauración de Windows;
  • Modificar los enlaces desde los que se descarga tor.exe y polipo.exe; modificar los nombres de estos ficheros después de descargarlos.

Captura de pantalla de la ventana del generador

La tienda ilegal en Internet tiene 11 reseñas del vendedor del generador Trojan-Ransom.Win32.Scraper, publicadas entre el 8 de mayo de 2014 y el 17 de enero de 2015.

Se publican enlaces con noticias sobre ataques exitosos en los que se usó Trojan-Ransom.Win32.Scraper como una especie de publicidad.

También se ofrece una breve descripción de las operaciones de TorLocker y una comparación con CryptoLocker.

Descifrado

En la etapa de descifrado, cuando se recibe el pago del rescate, Trojan-Ransom.Win32.Scraper se pone en contacto con los servidores C&C de los cibercriminales mediante la red Tor y el servidor proxy polipo para recibir una llave RSA privada. Con esta llave, el troyano descifra la llave AES para cada fichero cifrado y después los descifra.

Aunque Trojan-Ransom.Win32.Scraper cifra todos los ficheros con AES-256 + RSA-2048, más del 70% de las veces se pueden descifrar aprovechando los errores que se cometieron durante la implementación de algoritmos criptográficos. Kaspersky Lab ha desarrollado la herramienta ScraperDecryptor para restaurar los ficheros originales, que puede descargarse del sitio web de soporte técnico de Kaspersky Lab.

Publicaciones relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *