Durante los últimos meses hemos visto como se lanzaban campañas de propagación de ransomware prácticamente todas las semanas, campañas que tenían sus peculiaridades y que iban mejorando sus técnicas de infección y ofuscación para tratar de evadir las detecciones de los antivirus y alcanzar al mayor número de usuarios posibles.
Uno de los ransomware que más quebraderos de cabeza ha ocasionado en meses recientes ha sido Locky, malware que analizamos en repetidas ocasiones en este blog. Este malware estaba estrechamente relacionado con Nemucod el “descargador” o “downloader” utilizado por los delincuentes para descargar y ejecutar Locky en el sistema de la víctima. Sabiendo que sus creaciones estaban en el punto de mira de investigadores de todo el mundo, los criminales han dedicado muchos esfuerzos para depurar su código.
Una de las versiones más recientes de Nemucod muestra cambios importantes con respecto a versiones anteriores. Hasta no hace mucho, el proceso de infección era bastante simple: “El usuario abre el fichero malicioso → Este fichero descarga la carga maliciosa o payload → El payload se ejecuta”. Sin embargo, en versiones más recientes los pasos son menos directos.
Gracias a las investigaciones realizadas por nuestro compañero Doony Maasland, Director de investigación y de los servicios de Ciberseguridad de ESET Holanda, podemos ver que hace este código malicioso con más detalle. Para hacerlo más legible, este código fue desofuscado partiendo de su formato original altamente ofuscado.
Primer paso: Elección del método de conexión correcto
Las primeras versiones de Nemucod tan solo utilizaban un método para conectarse a Internet. Sin embargo, esto podía hacer que el malware no funcionase correctamente por culpa de las diferentes configuraciones existentes (versión de Windows, servidores pruxy, etc.).
Para poder disfrutar de una mayor compatibilidad, los autores de Nemucod crearon una función que intenta conectarse usando múltiples métodos.
El primer método que funcione es el que utilizará en malware.
Segundo Paso: Probando diferentes sitios de descarga
Hasta ahora, Nemucod venía con solo una dirección predefinida (normalmente un servidor web comprometido) desde la cual intentaba descargar la carga maliciosa. Esto representaba una posibilidad de fallo muy grande puesto que, una vez el malware fuera eliminado de esa ubicación, el ataque fallaría. Quizas con la esperanza de incrementar sus posibilidades de éxito, versiones recientes han incluido múltiples ubicaciones de descarga, tal y como podemos observar en los siguientes ejemplos:
El código malicioso va probando las diferentes direcciones hasta que consigue conectar con una de ellas:
Tercer paso: Primera pasada de desofuscación
En versiones anteriores, los payloads descargados por Nemucod eran ficheros .exe normales. Estos ficheros podían ser ejecutados directamente. No obstante, la descarga de ficheros con extensión “.exe” siginifica que dispositivos como cortafuegos, sistemas IDS y UTM eran capaces de interceptar el payload para poder realizar un análisis de seguridad o incluso rechazarlo.
Para impedir estas barreras de seguridad, la versión más reciente de Nemucod descarga un fichero ofuscado, ubicándolo originalmente en la carpeta %TEMP% de la víctima:
Tras guardar este payload, esta función traslada el contenido del fichero a una función que realiza la primera ronda de desofuscación:
Resulta que el primer paso de desofuscación es un simple cifrado de sustitución. Todos los caracteres en la fila son convertidos a sus valores decimales y, si el valor decimal de un carácter es mayor de 127, el carácter es sustituido por su valor correspondiente desde un array predefinido de caracteres. En caso contrario, el carácter permanece inalterado:
Cuarto paso: Segunda ronda de desofuscación
Tras completar la primera ronda de desofuscación, el contenido del fichero es trasladado a una función que realiza una segunda pasada de desofuscación. Esta ronda consiste en tres pasos:
- Elimina los últimos 4 caracteres del contenido del fichero
- Realiza una operación XOR en cada character con la letra “s” (0x73)
- Descifra el contenido del fichero
Quinto paso: Comprobación de validez
En este punto se realiza una comprobación rudimentaria del contenido del fichero resultante para comprobar si es un payload válido. Comprueba si el tamaño del fichero se encuentra entre 174.080 y 189.440 bytes y si el fichero empieza por “MZ” (0x4D5A), los “bytes mágicos” que determinan que estamos ante un fichero PE o Portable Executable. Si alguna de estas comprobaciones falla, vuelve al paso dos e intenta descargar un payload desde el siguiente enlace disponible:
Sexto paso: Ronda final de desofuscación
Si el fichero pasa todas las comprobaciones se ubica en el fichero %TEMP% del usuario:
La función con el nombre deobRound3 que aparece durante el proceso de desofuscación procesa el contenido del fichero a otra ronda de sustitución de caracteres similar la realizada en el tercer paso. Esta ronda de sustitución de caracteres se ejecuta probablemente para evitar problemas con “Caracteres Amplios” durante la segunda ronda de desofuscado.
Finalmente, todos los caracteres son convertidos desde su valor decimal y el contenido resultante debería ser un fichero ejecutable válido de Windows:
Séptimo paso: Ejecución
Ahora que el payload está listo necesita ser ejecutado. En lugar de ejecutar el fichero “.exe” directamente, las versiones más recientes de Nemucod generan una fichero “.bat” que arranca el ejecutable y luego ejecuta el fichero “.bat”:
Si todo “funciona correctamente” el malware habrá cumplido su objetivo y el usuario se habrá infectado.
Conclusión
Como hemos podido ver, los autores de Nemucod han estado ocupados mejorando su descargador para incrementar las posibilidades de que su carga maliciosa pueda ejecutarse sin ser detectada. Con todas estas nuevas características podríamos incluso especular que están trabajando duro para mejorer sus ratios de éxito en entornos corporativos, donde los servidores proxy y gateways UTM podrían haber estado bloqueando sus payloads en el pasado.
Ficheros analizados
customers 366.wsf [JS/TrojanDownloader.Nemucod.ABI trojan]
MD5: 4DEDF4085E6D2F74CB879AD2E9680AFB
SHA1: EF2A9C6A61E98091A952328592D45214F6E44178
cstomers 9679.js [JS/TrojanDownloader.Nemucod.ABI trojan]
MD5: 42D054143A67DE14EE10F7B8C91D8A1A
SHA1: D3DC6E3D066BFA8E1F4408DE471BC95B001D0D25
Yhnpl47OMCLJm.exe [a variant of Win32/Kryptik.EYIB trojan]
MD5: C1F95ADBCAF520BF182F9014970D33E5
SHA1: 80B96F0207B9C5D1DAA3A6E6CF646F5AFA7BBA2C