Investigadores de ESET han descubierto un ataque Lazarus contra una empresa aeroespacial en España, en el que el grupo desplegó varias herramientas, sobre todo un backdoor no documentado públicamente al que llamamos LightlessCan.
Los operadores de Lazarus obtuvieron el acceso inicial a la red de la empresa el año pasado tras una exitosa campaña de spearphishing, haciéndose pasar por un reclutador de Meta, la empresa detrás de Facebook, Instagram y WhatsApp.
El falso reclutador se puso en contacto con la víctima a través de LinkedIn Messaging, una función de la plataforma de la red social profesional LinkedIn, y le envió dos retos de codificación requeridos como parte de un proceso de contratación; La víctima los descargó y ejecutó en un dispositivo de la empresa.
El primer reto es un proyecto muy básico que muestra el texto "Hello, Word!", el segundo imprime una secuencia de Fibonacci - una serie de números en la que cada número es la suma de los dos anteriores.
ESET Research pudo reconstruir los pasos iniciales de acceso y analizar el conjunto de herramientas utilizadas por Lazarus gracias a la cooperación con la empresa aeroespacial afectada.
En este blogpost, describimos el método de infiltración y las herramientas desplegadas durante este ataque de Lazarus. También presentaremos algunos de nuestros hallazgos sobre este ataque en la conferencia de Virus Bulletin el 4 de octubre de 2023.
Puntos clave del blogpost:
- Los empleados de la empresa objetivo fueron contactados por un falso reclutador a través de LinkedIn y engañados para que abrieran un ejecutable malicioso que se presentaba como un desafío o prueba de codificación.
- Hemos identificado cuatro cadenas de ejecución diferentes, que distribuyen tres tipos de cargas útiles a través de la carga lateral de DLL.
- La carga útil más notable es el backdoor LightlessCan, que implementa técnicas para dificultar la detección por parte de software de monitorización de seguridad en tiempo real y el análisis por parte de profesionales de la ciberseguridad; esto supone un cambio importante en comparación con su predecesor BlindingCan, una RAT HTTP(S) Lazarus emblemática.
- Atribuimos esta actividad con un alto nivel de confianza a Lazarus, en particular a sus campañas relacionadas con la Operación DreamJob.
- El objetivo final del ataque era el ciberespionaje.
Lazarus envió varias cargas útiles a los sistemas de las víctimas; la más notable es un troyano de acceso remoto (RAT) sofisticado y no documentado públicamente al que denominamos LightlessCan, y que representa un avance significativo en comparación con su predecesor, BlindingCan.
LightlessCan imita las funcionalidades de una amplia gama de comandos nativos de Windows, permitiendo una ejecución discreta dentro de la propia RAT en lugar de ruidosas ejecuciones de consola. Este cambio estratégico aumenta el sigilo, lo que dificulta la detección y el análisis de las actividades del atacante.
Otro mecanismo utilizado para minimizar la exposición es el empleo de barandas de ejecución; Lazarus se aseguró de que la carga útil sólo pudiera descifrarse en la máquina de la víctima prevista. Los barandas de ejecución son un conjunto de protocolos y mecanismos de protección implementados para salvaguardar la integridad y confidencialidad de la carga útil durante su despliegue y ejecución, impidiendo eficazmente el descifrado no autorizado en máquinas no deseadas, como las de los investigadores de seguridad. Describimos la implementación de este mecanismo en la sección Cadena de ejecución 3: LightlessCan (versión compleja) .
Atribución al grupo Lazarus
El grupo Lazarus (también conocido como HIDDEN COBRA) es un grupo de ciberespionaje vinculado a Corea del Norte que lleva activo al menos desde 2009. Es responsable de incidentes de gran repercusión, como el hackeo de Sony Pictures Entertainment y los ciberataques de decenas de millones de dólares en 2016, el brote de WannaCryptor (también conocido como WannaCry) en 2017, los ataques a la cadena de suministro 3CX y X_TRADER, y un largo historial de ataques contra infraestructuras públicas y críticas de Corea del Sur desde al menos 2011. La diversidad, el número y la excentricidad en la ejecución de las campañas de Lazarus definen a este grupo, así como que lleva a cabo los tres pilares de las actividades ciberdelictivas: ciberespionaje, cibersabotaje y búsqueda de beneficios económicos.
Las empresas aeroespaciales no son un objetivo inusual para los grupos de amenazas persistentes avanzadas (APT) alineados con Corea del Norte. El país ha realizado múltiples pruebas nucleares y ha lanzado misiles balísticos intercontinentales, lo que viola las resoluciones del Consejo de Seguridad de las Naciones Unidas (ONU). La ONU vigila las actividades nucleares de Corea del Norte para impedir que se sigan desarrollando y proliferando armas nucleares o de destrucción masiva, y publica informes semestrales de seguimiento de dichas actividades. Según estos informes, los grupos APT alineados con Corea del Norte atacan a empresas aeroespaciales en un intento de acceder a tecnología sensible y conocimientos aeroespaciales, ya que los misiles balísticos intercontinentales pasan su fase de curso medio en el espacio fuera de la atmósfera terrestre. Estos informes también afirman que el dinero obtenido de los ciberataques representa una parte de los costes de desarrollo de misiles de Corea del Norte.
Atribuimos el ataque en España al grupo Lazarus, concretamente a la Operación DreamJob, con un alto nivel de confianza. El nombre de la Operación DreamJob fue acuñado en un blog de ClearSky de agosto de 2020, en el que se describía una campaña de Lazarus dirigida a empresas de defensa y aeroespaciales, con el objetivo del ciberespionaje. Desde entonces, hemos utilizado el término de forma imprecisa para referirnos a varias operaciones de Lazarus con señuelos de oferta de empleo, pero sin desplegar herramientas claramente similares a las implicadas en sus otras actividades, como la Operación In(ter)cepción. Por ejemplo, la campaña que implicaba herramientas firmadas con certificados de 2 TOY GUYS (véase ESET Threat Report T1 2021, página 11), y el caso de señuelos con temática de Amazon en los Países Bajos y Bélgica publicado en septiembre de 2022.
Nuestra atribución se basa en los siguientes factores, que muestran una relación principalmente con la campaña temática de Amazon mencionada anteriormente:
1. Malware (el conjunto de intrusiones):
- El acceso inicial se obtuvo estableciendo contacto a través de LinkedIn y luego convenciendo al objetivo de que ejecutara malware, disfrazado de prueba, para tener éxito en un proceso de contratación. Se trata de una táctica conocida de Lazarus, utilizada al menos desde la operación DreamJob.
- Observamos nuevas variantes de cargas útiles que ya se habían identificado en el caso holandés del año pasado, como cargadores intermedios y el backdoor trasera BlindingCan vinculada a Lazarus.
- En las herramientas de esta campaña de Lazarus se utilizaron varios tipos de cifrado fuerte - AES-128 y RC6 con una clave de 256 bits - que también se utilizaron en la campaña de Amazon.
2. Infraestructura:
- Para los servidores de C&C de primer nivel (listados en la sección Red al final de este blogpost), los atacantes no instalan sus propios servidores, sino que comprometen los existentes, normalmente aquellos que tienen una seguridad pobre y que alojan sitios con un mantenimiento descuidado. Este es un comportamiento típico, aunque de poca confianza, de Lazarus.
3. Cui bono:
- Hurtar el know-how de una empresa aeroespacial está alineado con los objetivos a largo plazo manifestados por Lazarus.
Acceso inicial
El grupo se dirigió a varios empleados de la empresa a través de la mensajería de LinkedIn. Haciéndose pasar por un reclutador de Meta, el atacante utilizó un señuelo de oferta de trabajo para atraer la atención y la confianza del objetivo; en la Figura 1 se muestra una captura de pantalla de esta conversación, que obtuvimos durante nuestra cooperación con la empresa aeroespacial española.
Al principio de los ataques Lazarus, se suele convencer a los objetivos desprevenidos para que autocomprometan sus sistemas de forma temeraria. Para ello, los atacantes emplean diferentes estrategias; por ejemplo, se atrae al objetivo para que ejecute un visor de PDF proporcionado por el atacante (y troyanizado) para ver el contenido completo de una oferta de trabajo. Alternativamente, se anima al objetivo a conectarse con un cliente SSL/VPN troyanizado, proporcionándole una dirección IP y datos de acceso. Ambos escenarios se describen en una entrada de blog de Microsoft publicada en septiembre de 2022. La narración en este caso era la petición del estafador de demostrar la competencia de la víctima en el lenguaje de programación C++.
Para ello se proporcionaron dos ejecutables maliciosos, Quiz1.exe y Quiz2.exe, que se entregaron a través de las imágenes Quiz1.iso y Quiz2.iso alojadas en una plataforma de almacenamiento en la nube de terceros. Ambos ejecutables son aplicaciones de línea de comandos muy sencillas que solicitan entradas.
El primero es un proyecto Hello World, que es un programa muy básico, a menudo compuesto por una sola línea de código, que muestra el texto "¡Hola, mundo!" cuando se ejecuta. El segundo imprime una secuencia de Fibonacci hasta el mayor elemento menor que el número introducido. Una secuencia de Fibonacci es una serie de números en la que cada número es la suma de los dos anteriores, y que suele empezar por 0 y 1; sin embargo, en este reto malintencionado, la secuencia empieza por 1 y 2. En la figura 2 se muestra un ejemplo de la secuencia Fibonacci. Una vez impresa la salida, ambos ejecutables desencadenan la acción maliciosa de instalar cargas útiles adicionales de las imágenes ISO en el sistema del objetivo. La tarea para un desarrollador objetivo es entender la lógica del programa y reescribirlo en el lenguaje de programación C++.
La cadena de acontecimientos que condujo al ataque inicial se esboza en la Figura 3. La primera carga útil enviada al sistema del objetivo es un descargador HTTP(S) que hemos denominado NickelLoader. La herramienta permite a los atacantes desplegar cualquier programa deseado en la memoria del ordenador de la víctima.
Conjunto de herramientas post-compromiso
Una vez que NickelLoader se ejecuta en el sistema del objetivo, los atacantes lo utilizan para distribuir dos tipos de RAT. Una de estas RAT ya se conoce por formar parte del conjunto de herramientas Lazarus, concretamente una variante del backdoor BlindingCan con funcionalidad limitada pero idéntica lógica de procesamiento de comandos. Para distinguirla, antepusimos el prefijo mini- al nombre de la variante. Además, los atacantes introdujeron una RAT no documentada públicamente con anterioridad, que hemos denominado LightlessCan.
Las RAT se despliegan como paso final de cadenas de etapas con distintos niveles de complejidad y van precedidas de ejecutables de ayuda, como droppers y loaders. Denominamos dropper a un ejecutable que contiene una carga útil incrustada, aunque no se descargue en el sistema de archivos, sino que se cargue directamente en la memoria y se ejecute. Los programas maliciosos que no tienen una matriz de datos cifrada incrustada, sino que cargan una carga útil desde el sistema de archivos, se denominan cargadores.
Además de los señuelos iniciales relacionados con el cuestionario, la Tabla 1 resume los archivos ejecutables (EXE) y las bibliotecas de vínculos dinámicos (DLL) entregados al sistema de la víctima. Todas las muestras de malware de la tercera columna son aplicaciones de código abierto troyanizadas (véase la cuarta columna para el proyecto subyacente), con un ejecutable legítimo que carga lateralmente una DLL maliciosa. Por ejemplo, el mscoree.dll malicioso es una versión troyanizada del NppyPluginDll legítimo; el DLL contiene un NickelLoader incrustado y es cargado por un PresentationHost.exe legítimo, ambos ubicados en el directorio C:\ProgramShared.
Tabla 1. Resumen de los binarios implicados en el ataque
Location directory |
Legitimate parent process |
Malicious side-loaded DLL |
Trojanized project |
C:\ProgramShared\ |
PresentationHost.exe |
mscoree.dll |
NppyPluginDll |
C:\ProgramData\Adobe\ |
colorcpl.exe |
colorui.dll |
LibreSSL 2.6.5 |
C:\ProgramData\Oracle\Java\ |
fixmapi.exe |
mapistub.dll |
Lua plugin for Notepad++ 1.4.0.0 |
C:\ProgramData\Adobe\ARM\ |
tabcal.exe |
HID.dll |
MZC8051 for Notepad++ 3.2 |
LightlessCan - nuevo Backdoor
El payload más interesante utilizado en esta campaña es LightlessCan, un sucesor del RAT HTTP(S) Lazarus insignia del grupo llamado BlindingCan. LightlessCan es una nueva RAT compleja que soporta hasta 68 comandos distintos, indexados en una tabla de funciones personalizada, pero en la versión actual, 1.0, sólo 43 de esos comandos están implementados con alguna funcionalidad. Los comandos restantes están presentes pero tienen una implementación formal en forma de marcadores de posición, careciendo de funcionalidad real. El proyecto detrás de la RAT se basa definitivamente en el código fuente de BlindingCan, ya que el orden de los comandos compartidos se conserva de forma significativa, aunque puede haber diferencias en su indexación.
La actualización más significativa es la funcionalidad imitada de muchos comandos nativos de Windows como ping, ipconfig, systeminfo, sc, net, etc. La cadena codificada "La operación se ha completado con éxito", el mensaje estándar del sistema para el resultado ERROR_SUCCESS, nos llevó a esa idea. La Tabla 2 contiene una lista de esos comandos que están implementados en LightlessCan. En ataques Lazarus previamente reportados, como se documenta en blogposts por Positive Technologies en abril de 2021 y HvS Consulting en diciembre de 2020, estos comandos nativos a menudo se ejecutan en muchos casos después de que los atacantes han conseguido un punto de apoyo en el sistema del objetivo. Sin embargo, en este caso, estos comandos se ejecutan discretamente dentro de la propia RAT, en lugar de ejecutarse de forma visible en la consola del sistema. Este enfoque ofrece una ventaja significativa en términos de sigilo, tanto para evadir soluciones de monitorización en tiempo real como EDRs, como herramientas forenses digitales postmortem. El número de versión interno (1.0) indica que se trata de un nuevo esfuerzo de desarrollo por parte de los atacantes.
Como las utilidades básicas de Windows son privativas y no de código abierto, los desarrolladores de LightlessCan se enfrentaron a una disyuntiva: o bien aplicar ingeniería inversa a los binarios del sistema de código cerrado o bien inspirarse en el código disponible a través del proyecto Wine, donde se reescriben muchos programas para imitar su ejecución en otras plataformas como Linux, macOS o ChromeOS. Nos inclinamos a creer que los desarrolladores eligieron la primera opción, ya que los correspondientes programas de Wine que imitaron en LightlessCan se implementaron de forma un poco diferente o no se implementaron en absoluto (por ejemplo, netsh).
Curiosamente, en uno de los casos que analizamos, la carga útil de LightlessCan se almacena en un archivo cifrado en la máquina comprometida, que sólo puede descifrarse utilizando una clave dependiente del entorno. Se pueden encontrar más detalles sobre esto en la sección Cadena de ejecución 3: LightlessCan (versión compleja). De este modo se garantiza que la carga útil sólo pueda descifrarse en el ordenador de la víctima prevista y no, por ejemplo, en el dispositivo de un investigador de seguridad.
Tabla 2. Lista de comandos LightlessCan Lista de comandos de LightlessCan que imitan a los del símbolo del sistema de Windows
Index |
Description |
33 |
Mimic the ipconfig command from the Windows command prompt; see Figure 4. |
34 |
Mimic the net command from the Windows prompt; see Figure 5. |
35 |
Mimic the netshadvfirewall firewall command from the Windows prompt; see Figure 4. |
36 |
Mimic the netstat command from the Windows prompt. |
37 |
Mimic the ping -6 command from the Windows prompt. |
38 |
Mimic the reg command from the Windows prompt; see Figure 7. |
39 |
Mimic the sc command from the Windows prompt; see Figure 8. |
40 |
Mimic the ping command from the Windows prompt. |
41 |
Mimic the tasklist command from the Windows prompt. |
42 |
Mimic the wmic process call create command from the Windows prompt; see Figure 9. |
43 |
Mimic the nslookup command from the Windows Server prompt. |
44 |
Mimic the schstasks command from the Windows prompt; see Figure 10. |
45 |
Mimic the systeminfo command from the Windows prompt. |
46 |
Mimic the arp command from the Windows prompt. |
47 |
Mimic the mkdir command from the Windows prompt. |
Además, un examen de la configuración interna del RAT sugiere que, en comparación con BlindingCan, Lazarus aumentó la sofisticación del código en LightlessCan.
Análisis técnico
En esta sección, proporcionamos detalles técnicos sobre la cadena de compromiso que entrega el descargador NickelLoader, y las tres cadenas de ejecución que Lazarus utilizó para entregar sus cargas útiles en el sistema comprometido.
Cadena de compromiso: NickelLoader
NickelLoader es un descargador HTTP(S) que se ejecuta en el sistema comprometido a través de la carga lateral de DLL, y que posteriormente se utiliza para entregar otras cargas útiles de Lazarus.
El proceso de entrega de NickelLoader se desarrolla en una serie de etapas, comenzando con la ejecución de PresentationHost.exe, que se activa automáticamente después de que el objetivo ejecuta manualmente los retos iniciales del cuestionario; el caso Quiz1 se representa en la Figura 3. Una biblioteca maliciosa vinculada dinámicamente, mscoree.dll, es cargada lateralmente por el legítimo PresentationHost .ex e, ambos ubicados en C:\ProgramShared\. Esta DLL es una NppyPluginDll.dll troyanizada, del proyecto inactivo General Python Plugins DLL for Notepad++ de 2011. Sirve como dropper y tiene varias exportaciones: todas las exportaciones copiadas del NppyPluginDll.dll original más todas las exportaciones del mscoree.dll legítimo. Una de estas exportaciones legítimas, CorExitProcess, contiene el código malicioso responsable del descifrado y la ejecución de la siguiente fase del malware.
Para descifrar correctamente un conjunto de datos cifrados incrustados en el dropper, éste necesita tres palabras clave de 16 caracteres. Estas palabras clave son las siguientes
- el nombre del proceso padre(PresentationHost),
- el parámetro interno codificado en el binario(9zCnQP6o78753qg8), y
- el parámetro externo pasado en la línea de comandos(-embeddingObject), que se hereda del proceso padre de PresentationHost .exe, siendo proporcionado por Quiz1.exe o Quiz2.exe.
Las palabras clave se XOR-ed byte a byte y la salida forma la clave de descifrado AES-128.
La carga útil es un descargador HTTP(S) que reconoce cuatro comandos, todos ellos de cinco letras, que se muestran en la Tabla 3. Debido a estos comandos de cinco letras, decidimos llamar a esta carga útil "NickelLoader", inspirándonos en el término coloquial para la moneda estadounidense de cinco céntimos: una moneda de cinco céntimos. Los comandos más importantes son avdrq y gabnc. Cuando se emiten estos comandos, cada uno de ellos carga los datos recibidos del servidor de C&C como una DLL. Para este propósito, los atacantes probablemente utilizaron MemoryModule, una biblioteca que se puede utilizar para cargar una DLL completamente desde la memoria.
Tabla 3. Lista de palabras clave mágicas reconocidas en los búferes recibidos
Keyword |
Description |
abcde |
Requests another immediate command without the usual long sleep delay that separates the execution of the commands. |
avdrq |
Loads a DLL contained in the received buffer and executes its hardcoded export info. |
gabnc |
Loads a DLL contained in the received buffer. |
dcrqv |
Terminates itself. |
Cadena de ejecución 1: miniBlindingCan
Uno de los payloads descargados y ejecutados por NickelLoader es miniBlindingCan, una versión simplificada de la RAT BlindingCan, buque insignia del grupo. Fue reportado por primera vez por Mandiant en septiembre de 2022, bajo el nombre AIRDRY.V2.
Para cargar miniBlindingCan, una biblioteca maliciosa de 64 bits colorui.dll, vinculada dinámicamente, es cargada lateralmente por un colorcpl.exe legítimo ejecutado desde C:\ProgramData\Adobe\ y sirve como gotero. La DLL está ofuscada utilizando VMProtect y contiene miles de exportaciones de las cuales LaunchColorCpl es la más importante, ya que se encarga de la ejecución de la siguiente etapa. Hay una matriz de datos encriptada en el cuerpo volcado de la DLL, junto con múltiples símbolos de depuración que revelan el directorio raíz y el proyecto desde el que se construyó:
W:\Develop\aTool\ShellCodeLoader\App\libressl-2.6.5\\
Como sugiere el nombre ShellCodeLoader , el objetivo principal de esta etapa inicial es descifrar y cargar la matriz de datos de su cuerpo, que contiene shellcode. Al principio de su ejecución, ShellCodeLoader emplea técnicas antidepuración inspeccionando el valor BeingDebugged dentro de la estructura Process Environment Block (PEB) para determinar si está siendo examinado o analizado por herramientas de depuración, y utiliza técnicas anti-sandbox para evitar ser detectado dentro de entornos sandboxed diseñados para análisis de seguridad. El malware también comprueba explícitamente si su proceso padre es colorcpl.exe; en caso contrario, sale inmediatamente.
La matriz de datos descifrada no es una DLL completa, sino que forma un blob intermedio con dos partes: shellcode seguido de otra matriz de datos cifrada, que representa el último paso de la cadena. El shellcode parece ser producido por una instancia del proyecto de código abierto ShellcodeRDI - en particular, el código ShellcodeRDI.c. Probablemente se produjo ejecutando el script de Python ConvertToShellcode.py de este proyecto en una DLL de carga útil que actuaba como fuente para la inyección reflexiva de DLL.
La carga útil final se extrae y descifra usando XOR con una clave larga, que es una cadena construida concatenando el nombre del proceso padre(colorcpl.exe), el nombre de archivo del dropper(colorui.dll), y el parámetro externo de línea de comandos - en este caso resultando COLORCPL.EXECOLORUI.DLL669498484488D3F22712CC5BACA6B7A7. Este proceso es similar al que observamos con el backdoor BlindingCan en el caso holandés que describimos anteriormente en este blog de WeLiveSecurity. El descifrado revela un ejecutable con funcionalidad de descarga y ejecución, cuya lógica interna de envío y análisis sintáctico de comandos recuerda mucho a BlindingCan, una RAT HTTP(S) Lazarus emblemática. A diferencia del caso de los Países Bajos, no está protegido por VMProtect y sólo admite un pequeño subconjunto de comandos disponibles anteriormente: compárese la Tabla 4 en este blogpost y la Tabla 3 en el blogpost sobre el caso de los Países Bajos de septiembre de 2022. Debido a que las características de esta RAT son notablemente reducidas en comparación con las de BlindingCan, y sin embargo parecen compartir la misma infraestructura del lado del servidor, hemos optado por distinguirla añadiendo el prefijo "mini-" a su nombre, destacando su funcionalidad reducida en comparación con su contraparte RAT con todas las funciones.
Tabla 4. Comandos de miniBlindingCan Comandos de miniBlindingCan
Command ID |
Description |
8201 |
Send system information like computer name, Windows version, and code page. |
8232 |
Update the current communication interval with a value provided by the C&C server. |
8233 |
Discontinue the command execution. |
8241 |
Send the current configuration of size 9,392 bytes to the C&C server. |
8242 |
Update the configuration of size 9,392 bytes, stored encrypted on the file system. |
8247 |
Wait for the next command. |
8248 |
Update the current communication interval with a value stored in the configuration. |
8274 |
Download and decrypt a file from the C&C server. |
8279 |
Execute shellcode passed as a parameter. |
La Figura 11 muestra el estado descifrado de una configuración de 9.392 bytes incrustada en la RAT. Contiene cinco URL, en este caso sitios web comprometidos, cada uno limitado por un tamaño máximo de 260 caracteres de ancho.
Cadena de ejecución 2: LightlessCan (versión simple)
Otro payload que hemos visto ejecutado por NickelLoader es LightlessCan, un nuevo backdoor de Lazarus. Hemos observado dos cadenas diferentes cargando este backdoor.
En la versión simple de la cadena, el dropper de este payload es la librería maliciosa mapistub.dll enlazada dinámicamente que es cargada lateralmente por el legítimo fixmapi.exe ejecutado desde C:\ProgramData\Oracle\Java\. La DLL es un plugin Lua troyanizado, versión 1.4, con todas las exportaciones copiadas del mapi32.dll legítimo de Windows. La exportación FixMAPI contiene código malicioso responsable de descifrar y cargar la siguiente etapa; todas las demás exportaciones contienen código benigno procedente de un proyecto de muestra de MineSweeper disponible públicamente. Este dropper mapistub.dll tiene persistencia establecida a través de una tarea programada. Desafortunadamente, carecemos de detalles adicionales sobre esta tarea, excepto que su proceso padre aparece como %WINDOWS%\system32\svchost.exe -k netsvcs -p -s Schedule.
Para descifrar con éxito la matriz de datos incrustada, el dropper necesita que se proporcionen correctamente tres palabras clave
- el nombre del proceso padre(fixmapi.exe),
- el parámetro interno codificado en el binario(IP7pdINfE9uMz63n), y
- el parámetro externo pasado en la línea de comandos(AudioEndpointBuilder).
Las palabras clave se XOR-ed byte a byte y la salida forma una clave AES de 128 bits que se utilizará para el descifrado. Tenga en cuenta que la longitud de las palabras clave no son exactamente 16 bytes, pero el proceso de descifrado seguirá funcionando si la cadena de gran tamaño se trunca a una longitud de 16 bytes (por ejemplo, AudioEndpointBuilder a AudioEndpointBui), y la cadena de tamaño inferior, fixmapi.exe, se trata como fixmapi.exe\x00\x00\x00\x00\x00\x00, porque la cadena se inicializó como 260 instancias del carácter NUL.
Cadena de ejecución 3: LightlessCan (versión compleja)
La cadena más compleja que observamos en el sistema comprometido también entrega LightlessCan, con varios componentes implicados en la cadena completa de etapas de instalación: una aplicación legítima, un dropper inicial, un dropper completo (que contiene la configuración), un dropper intermedio, un archivo de configuración, un archivo con información del sistema (para el descifrado de las cargas útiles cifradas en el sistema de archivos), un cargador intermedio y el paso final, la RAT LightlessCan. Las conexiones y relaciones entre estos archivos se ilustran en la Figura 12.
El dropper inicial de la cuarta cadena es una librería maliciosa de enlace dinámico HID.dll que es cargada lateralmente por un ejecutable legítimo, tabcal.exe, ejecutado desde C:\ProgramData\Adobe\ARM\. La DLL es una versión troyanizada de MZC8051.dll, un archivo legítimo del proyecto 8051 C compiler plugin para Notepad++. Contiene todas las exportaciones del proyecto original, pero también las exportaciones necesarias de la legítima Hid User Library de Microsoft, para que la carga lateral por tabcal.exe tenga éxito. La exportación HidD_GetHidGuid contiene el código malicioso responsable de soltar la siguiente etapa y, como en el caso del dropper de la cadena anterior (Cadena de ejecución 2), todas las demás exportaciones contienen el código benigno de MineSweeper.
Como en los casos anteriores, se deben proporcionar tres palabras clave largas para descifrar la carga útil incrustada:
- el nombre del proceso padre(tabcal.exe),
- el parámetro interno codificado en el binario(9zCnQP6o78753qg8), y
- el parámetro externo(LocalServiceNetworkRestricted) - esta vez no expresado como un parámetro de línea de comandos, sino como el contenido de un archivo ubicado en %WINDOWS%\system32\thumbs.db.
De nuevo, las palabras clave se combinan mediante XOR byte a byte y el resultado es una clave AES de 128 bits que se utilizará para el descifrado. Como en el caso anterior, las longitudes de las palabras clave no son todas exactamente 16 bytes, pero el descifrado seguirá funcionando si la cadena sobredimensionada se trunca (por ejemplo, a LocalServiceNetw) y la cadena infradimensionada se extiende con nulos (por ejemplo, a tabcal.exe\x00\x00\x00\x00\x00\x00\x00).
El ejecutable producido por la receta anterior es el dropper completo de la Figura 12 y tiene el recurso InternalName AppResolver.dll (que se encuentra en el recurso VERSIONINFO). Contiene dos matrices de datos cifrados: una pequeña de 126 bytes y otra grande de 1.807.464 bytes (que contiene tres subpartes). En primer lugar, descifra la matriz pequeña utilizando el algoritmo RC6 con la clave de 256 bits codificada DA 48 A3 14 8D BF E2 D2 EF 91 12 11 FF 75 59 A3 E1 6E A0 64 B8 78 89 77 A0 37 91 58 5A FF FF 07. La salida representa las rutas a las que se lanzan las dos primeras subpartes del blob grande (es decir, LightlessCan y el dropper intermedio), y arroja las cadenas C: \windows\system32\oci .dll y C:\windows\system32\grpedit.dat.
A continuación, continúa con el descifrado de la segunda matriz de datos -el blob grande- utilizando la misma clave de cifrado que antes. El resultado es un blob descifrado que contiene tres subpartes: una DLL correspondiente a grpedit .dat (LightlessCan), una DLL correspondiente a oci.dll (el dropper intermedio), y un archivo cifrado de 14.948 bytes caído a %WINDOWS%\System32\wlansvc.cpl (configuración); como se muestra en la Figura 13.
Además, el dropper completo también almacena varias características que identifican el sistema comprometido en el archivo %WINDOWS%\System32\4F59FB87DF2F, cuyo nombre está codificado en el binario. Estas características se recuperan principalmente de la ruta de registro Computer\HKLM\HARDWARE\DESCRIPTION\System\BIOS. Aquí están los valores específicos de estas características, junto con un comando PowerShell proporcionado entre paréntesis que se puede utilizar para mostrar el valor correspondiente en cualquier máquina Windows:
- SystemBIOSDate(Get-ItemProperty "HKLM:\HARDWARE\Description\System\BIOS" -Name BIOSReleaseDate | Select-Object -Property BIOSReleaseDate)
- SystemBIOSVersion(Get-CimInstance -ClassName Win32_Bios | Select-Object -Property Version)
- SystemManufacturer (Get-CimInstance-ClassName Win32_ComputerSystem | Select-Object -Property Fabricante)
- SystemProductName (Get-CimInstance-ClassName Win32_ComputerSystemProduct | Select-Object -Property Name)
- Identificador en Computer\HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\0\DiskController\0\DiskPeripheral\0
La concatenación de los valores es necesaria para descifrar el grpedit.dat cifrado del sistema de archivos. En una máquina de prueba que ejecuta una imagen de Windows 10 en VMWare, la salida puede ser:
11/12/20INTEL - 6040000VMware, Inc.VMware Virtual Platform656ba047-20b25a2a-A
El archivo oci.dll es otra capa de caída: el dropper intermedio que deja caer el cargador intermedio, que es una carga útil similar a la descrita en el caso holandés mencionado anteriormente. De nuevo, los atacantes utilizaron un proyecto de código abierto, el plugin Flashing Tip para Notepad++, que ya no está disponible online. A diferencia de los casos anteriores, sólo hay que proporcionar dos palabras clave largas para descifrar con éxito la carga útil incrustada utilizando AES-128
- el nombre del proceso padre(msdtc.exe), y
- el parámetro interno codificado en el binario(fb5XPNCr8v83Y85P).
Ambas palabras clave se combinan mediante XOR byte a byte (el nombre del proceso padre se trunca, o se rellena con NULLs, según sea necesario para llenar 16 bytes). El producto de la desencriptación es el cargador intermedio(LLTMapperAPI.dll). Utiliza la información del sistema (igual que los valores almacenados en 4F59FB87DF2F) para desencriptar el archivo de configuración wlansvc.cpl y para localizar, desencriptar y cargar el grpedit.dat encriptado, que es LightlessCan, la nueva RAT con todas las funciones.
Conclusión
Hemos descrito un nuevo ataque Lazarus que se originó en LinkedIn, donde falsos reclutadores se acercaban a sus víctimas potenciales, que utilizaban ordenadores corporativos para fines personales. Aunque la concienciación pública sobre este tipo de ataques debería ser alta, las tasas de éxito de estas campañas aún no han descendido a cero.
El aspecto más preocupante del ataque es el nuevo tipo de carga útil, LightlessCan, una herramienta compleja y posiblemente en evolución que exhibe un alto nivel de sofisticación en su diseño y funcionamiento, lo que representa un avance significativo en las capacidades maliciosas en comparación con su predecesor, BlindingCan.
Los atacantes pueden ahora limitar significativamente los rastros de ejecución de sus programas favoritos de la línea de comandos de Windows, muy utilizados en su actividad posterior al compromiso. Esta maniobra tiene implicaciones de gran alcance, ya que afecta a la eficacia tanto de las soluciones de monitorización en tiempo real como de las herramientas forenses digitales post-mortem.
IoCs
Archivos
SHA-1 |
Filename |
Detection |
Description |
C273B244EA7DFF20B1D6B1C7FD97F343201984B3 |
%TEMP%\7zOC35416EE\Quiz1.exe |
Win64/NukeSped.KT |
An initial dropper disguised as a “Hello World” challenge that triggers the compromise. |
38736CA46D7FC9B9E5C74D192EEC26F951E45752 |
%TEMP%\7zOCB3CC96D\Quiz2.exe |
Win64/NukeSped.KT |
An initial dropper disguised as a “Fibonacci sequence” challenge that triggers the compromise. |
C830B895FB934291507E490280164CC4234929F0 |
%ALLUSERSPROFILE%\Adobe\colorui.dll |
Win64/NukeSped.KV |
A VMProtect-ed dropper side-loaded by the legitimate colorcpl.exe. It contains the debug information string W:\Develop\aTool\ShellCodeLoader\App\libressl-2.6.5. |
8CB37FA97E936F45FA8ECD7EB5CFB68545810A22 |
N/A |
Win64/NukeSped.KU |
The miniBlindingCan backdoor dropped by colorui.dll. |
0F33ECE7C32074520FBEA46314D7D5AB9265EC52 |
%ALLUSERSPROFILE%\Oracle\Java\mapistub.dll |
Win64/NukeSped.KW |
A dropper of LightlessCan, side-loaded by the legitimate fixmapi.exe. |
C7C6027ABDCED3093288AB75FAB907C598E0237D |
N/A |
Win64/NukeSped.KW |
A LightlessCan backdoor dropped by mapistub.dll. |
C136DD71F45EAEF3206BF5C03412195227D15F38 |
C:\ProgramShared\mscoree.dll |
Win64/NukeSped.KT |
A dropper of NickelLoader, side-loaded by PresentationHost.exe. It is dropped by both quiz-related samples: C273B244EA7DFF20B1D6B1C7FD97F343201984B3 and 38736CA46D7FC9B9E5C74D192EEC26F951E45752. |
E61672B23DBD03FE3B97EE469FA0895ED1F9185D |
N/A |
Win64/NukeSped.KT |
An HTTPS downloader we’ve named NickelLoader, dropped by mscoree.dll. |
E18B9743EC203AB49D3B57FED6DF5A99061F80E0 |
%ALLUSERSPROFILE%\Adobe\ARM\HID.dll |
Win64/NukeSped.KX |
An initial dropper side-loaded by the legitimate tabcal.exe. |
10BD3E6BA6A48D3F2E056C4F974D90549AED1B96 |
N/A |
Win64/NukeSped.KT |
The complete dropper AppResolver.dll dropped by HID.dll in the complex chain of LightlessCan delivery. |
3007DDA05CA8C7DE85CD169F3773D43B1A009318 |
%WINDIR%\system32\grpedit.dat |
Win64/NukeSped.KW |
A LightlessCan backdoor dropped in the complex chain of its delivery. |
247C5F59CFFBAF099203F5BA3680F82A95C51E6E |
%WINDIR%\system32\oci.dll |
@Trojan.Win64/NukeSped.MI |
The intermediate dropper dropping the intermediate loader in the complex chain of the LightlessCan delivery. |
EBD3EF268C71A0ED11AE103AA745F1D8A63DDF13 |
N/A |
Win64/NukeSped.KT |
The intermediate loader of LightlessCan. |
Red
IP |
Domain |
Hosting provider |
First seen |
Details |
46.105.57[.]169 |
bug.restoroad[.]com |
OVH SAS |
2021‑10‑10 |
A compromised legitimate site hosting the C&C server: http://bug.restoroad[.]com/admin/view_status.php |
50.192.28[.]29 |
hurricanepub[.]com |
Comcast Cable Communications, LLC |
2020‑01‑06 |
A compromised legitimate site hosting the C&C server: https://hurricanepub[.]com/include/include.php |
67.225.140[.]4 |
turnscor[.]com |
Liquid Web, L.L.C |
2020‑01‑03 |
A compromised legitimate WordPress-based site hosting the C&C server: https://turnscor[.]com/wp-includes/contacts.php |
78.11.12[.]13 |
mantis.quick.net[.]pl |
Netia SA |
2021‑03‑22 |
A compromised legitimate site hosting the C&C server: http://mantis.quick.net[.]pl/library/securimage/index.php |
89.187.86[.]214 |
www.radiographers[.]org |
Coreix Ltd |
2020‑10‑23 |
A compromised legitimate site hosting the C&C server: https://www.radiographers[.]org/aboutus/aboutus.php |
118.98.221[.]14 |
kapata-arkeologi.kemdikbud.go[.]id |
Pustekkom |
2020‑01‑02 |
A compromised legitimate site hosting the C&C server: https://kapata-arkeologi.kemdikbud.go[.]id/pages/payment/payment.php |
160.153.33[.]195 |
barsaji.com[.]mx |
GoDaddy.com, LLC |
2020‑03‑27 |
A compromised legitimate site hosting the C&C server: http://barsaji.com[.]mx/src/recaptcha/index.php |
175.207.13[.]231 |
www.keewoom.co[.]kr |
Korea Telecom |
2021‑01‑17 |
A compromised legitimate site hosting the C&C server: http://www.keewoom.co[.]kr/prod_img/201409/prod.php |
178.251.26[.]65 |
kerstpakketten.horesca-meppel[.]nl |
InterRacks B.V. |
2020‑11‑02 |
A compromised legitimate WordPress-based site hosting the C&C server: https://kerstpakketten.horesca-meppel[.]nl/wp-content/plugins/woocommerce/lib.php |
185.51.65[.]233 |
kittimasszazs[.]hu |
DoclerNet Operations, ORG-DHK1-RIPE |
2020‑02‑22 |
A compromised legitimate site hosting the C&C server: https://kittimasszazs[.]hu/images/virag.php |
199.188.206[.]75 |
nrfm[.]lk |
Namecheap, Inc. |
2021‑03‑13 |
A compromised legitimate WordPress-based site hosting the C&C server: https://nrfm[.]lk/wp-includes/SimplePie/content.php |
Técnicas ATT&CK de MITRE
Esta tabla se ha elaborado utilizando la versión 13 del marco MITRE ATT&CK.
Tactic |
ID |
Name |
Description |
Reconnaissance |
Search Open Websites/Domains: Social Media |
Lazarus attackers used LinkedIn to identify and contact specific employees of a company of interest. |
|
Resource Development |
Acquire Infrastructure: Server |
Compromised servers were used by the Lazarus HTTP(S) backdoors and the downloader for C&C. |
|
Establish Accounts: Social Media Accounts |
Lazarus attackers created a fake LinkedIn identity of a headhunter from Meta. |
||
Establish Accounts: Cloud Accounts |
Lazarus attackers had to create an account on a third-party cloud storage in order to deliver the initial ISO images. |
||
Develop Capabilities: Malware |
Custom tools from the attack are likely developed by the attackers. Some exhibit highly specific kernel development capacities seen earlier in Lazarus tools. |
||
Stage Capabilities: Upload Malware |
Lazarus attackers uploaded the initial ISO images to a cloud storage. |
||
Initial Access |
Phishing: Spearphishing Link |
The target received a link to a third-party remote storage with malicious ISO images. |
|
Phishing: Spearphishing via Service |
The target was contacted via LinkedIn Messaging. |
||
Execution |
Native API |
Windows APIs are essential for miniBlindingCan and LightlessCan to function and are resolved dynamically at runtime. |
|
Scheduled Task/Job |
Based on the parent process, a scheduled task was probably created to trigger thesimple chain of the LightlessCan execution. |
||
Shared Modules |
NickelLoader can load and execute an arbitrary DLL within memory. |
||
User Execution: Malicious File |
Lazarus attackers relied on the execution of Quiz1.exe and Quiz2.exe from the ISO files. |
||
Windows Management Instrumentation |
One of the LightlessCan commands allows creation of a new process via WMI. |
||
Persistence |
Scheduled Task/Job |
Based on the parent process, a scheduled task was probably created to trigger the simple chain of the LightlessCan execution. Moreover, LightlessCan can mimic the schtasks command. |
|
Defense Evasion |
Access Token Manipulation: Create Process with Token |
LightlessCan can create a new process in the security context of the user represented by the specified token and collect the output. |
|
Debugger Evasion |
There’s an anti-debug check in the dropper of miniBlindingCan. |
||
Execution Guardrails |
There’s a parent process check in the miniBlindingCan dropper. The concatenation of the values is required for decryption of the encrypted LightlessCan from the file system. |
||
Deobfuscate/Decode Files or Information |
Many of these Lazarus tools and configurations are encrypted on the file system, e.g., LightlessCan in grpedit.dat and its configuration in wlansvc.cpl. |
||
Hijack Execution Flow: DLL Side-Loading |
Many of the Lazarus droppers and loaders use a legitimate program for their loading. |
||
Obfuscated Files or Information: Software Packing |
Lazarus obfuscated several executables by VMProtect in this attack, e.g., colorui.dll |
||
Obfuscated Files or Information: Dynamic API Resolution |
Both LightlessCan and miniBlindingCan resolve Windows APIs dynamically. |
||
Obfuscated Files or Information: Embedded Payloads |
The droppers of all malicious chains contain an embedded data array with an additional stage. |
||
Impair Defenses: Impair Command History Logging |
New features of LightlessCan mimic the most useful Windows command line utilities, to avoid executing the original console utilities. |
||
Impair Defenses: Disable or Modify System Firewall |
LightlessCan can mimic the netsh command and interact with firewall rules. |
||
Indicator Removal: File Deletion |
LightlessCan has the ability to delete files securely. |
||
Indicator Removal: Timestomp |
LightlessCan can alter the modification timestamps of files. |
||
Indirect Command Execution |
LightlessCan bypasses command execution by implementing their functionality. |
||
Process Injection |
LightlessCan and miniBlindingCan use various types of process injection. |
||
Virtualization/Sandbox Evasion: Time Based Evasion |
The miniBlindingCan dropper has an intentional initial execution delay. |
||
Reflective Code Loading |
Most of the droppers use reflective DLL injection. |
||
Discovery |
File and Directory Discovery |
LightlessCan can locate a file by its name. |
|
Network Share Discovery |
LightlessCan can mimic the net share command. |
||
Process Discovery |
LightlessCan identifies processes by name. |
||
Query Registry |
LightlessCan queries the registry for various system information it uses for encryption. |
||
Remote System Discovery |
LightlessCan can mimic the net view command. |
||
System Network Configuration Discovery |
LightlessCan can mimic the arp and ipconfig commands. |
||
System Network Connections Discovery |
LightlessCan can mimic the netstat command. |
||
System Service Discovery |
LightlessCan can mimic the sc query and tasklist commands. |
||
Command and Control |
Application Layer Protocol: Web Protocols |
NickelLoader, LightlessCan, and miniBlindingCan use HTTP and HTTPS for C&C. |
|
Encrypted Channel: Symmetric Cryptography |
LightlessCan and miniBlindingCan encrypt C&C traffic using the AES-128 algorithm. |
||
Data Encoding: Standard Encoding |
LightlessCan and miniBlindingCan encode C&C traffic using base64. |
||
Exfiltration |
Exfiltration Over C2 Channel |
LightlessCan can exfiltrate data to its C&C server. |
Referencias
[1] Microsoft Security Threat Intelligence, "ZINC weaponizing open-source software", 29 de septiembre de 2022. [En línea]. Disponible: https://www.microsoft.com/en-us/security/blog/2022/09/29/zinc-weaponizing-open-source-software/.
[2] D. Breitenbacher y O. Kaspars, "Operación In(ter)cepción: Empresas aeroespaciales y militares en el punto de mira de los ciberespías", junio de 2020. [En línea]. Disponible: https://www.welivesecurity.com/wp-content/uploads/2020/06/ESET_Operation_Interception.pdf.
[3] HvS-Consulting AG, "Greetings from Lazarus: Anatomy of a cyber-espionage campaign", 15 de diciembre de 2020. [En línea]. Disponible: https://www.hvs-consulting.de/media/downloads/ThreatReport-Lazarus.pdf.
[4] Positive Technologies Expert Security Center, "Lazarus Group Recruitment: Cazadores de amenazas contra cazadores de cabezas", Positive Technologies, 27 de abril de 2021. [En línea]. Disponible: https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/lazarus-recruitment/.
[5] P. Kálnai, "Campañas de temática amazónica de Lazarus en los Países Bajos", 30 de septiembre de 2022. [En línea]. Disponible: https://www.welivesecurity.com/2022/09/30/amazon-themed-campaigns-lazarus-netherlands-belgium.
[6] P. Kálnai, "Campañas y backdoors de Lazarus en 2022-2023", en Virus Bulletin International Conference, Londres, 2023.
[7] A. Martin, "Sony Pictures hacking traced to Thai hotel as North Korea denies involvement", WeLiveSecurity.com, 08 de diciembre de 2014. [En línea]. Disponible: https://www.welivesecurity.com/2014/12/08/sony-pictures-hacking-traced-thai-hotel-north-korea-denies-involvement/.
[8] P. Kálnai y M.-É. M.Leveillé, "Linux malware strengthens links between Lazarus and the 3CX supply chain attack", ESET, 20 de abril de 2023. [En línea]. Disponible: https://www.welivesecurity.com/2023/04/20/linux-malware-strengthens-links-lazarus-3cx-supply-chain-attack/.
[9] Agencia de Inteligencia de Defensa, North Korea military power : a growing regional and global threat, Washington, D.C.: U.S. Government Publishing Office, 2021, p. 98.
[10] Grupo de Expertos de la ONU, "Resoluciones del Consejo de Seguridad de la ONU", 1993-2023. [En línea]. Disponible: https://www.securitycouncilreport.org/un-documents/dprk-north-korea/.
[11] Editor de ESET, "WannaCryptor aka WannaCry: Preguntas clave respondidas", WeLiveSecurity.com, 15 de mayo de 2017. [En línea]. Disponible: https://www.welivesecurity.com/2017/05/15/wannacryptor-key-questions-answered/.
[12] Comité del Consejo de Seguridad, "Comité de Sanciones (RPDC), Grupo de Expertos, Informes", Consejo de Seguridad de las Naciones Unidas, 2010-2023. [En línea]. Disponible: https://www.un.org/securitycouncil/sanctions/1718/panel_experts/reports.
[13] ClearSky Research Team, "Operation 'Dream Job' Widespread North Korean Espionage Campaign", 13 de agosto de 2020. [En línea]. Disponible: https://www.clearskysec.com/wp-content/uploads/2020/08/Dream-Job-Campaign.pdf.
[14] ESET Research, "Informe sobre amenazas T1", ESET, junio de 2022. [En línea]. Disponible: https://web-assets.esetstatic.com/wls/2022/06/eset_threat_report_t12022.pdf.
[15] D. Staples, "An Improved Reflective DLL Injection Technique", 30 de enero de 2015. [En línea]. Disponible: https://disman.tl/2015/01/30/an-improved-reflective-dll-injection-technique.html.
[16] J. Maclachlan, M. Potaczek, N. Isakovic, M. Williams e Y. Gupta, "It's Time to PuTTY! DPRK Job Opportunity Phishing via WhatsApp", Mandiant, 14 de septiembre de 2022. [En línea]. Disponible: https://www.mandiant.com/resources/blog/dprk-whatsapp-phishing.
[17] S. Tomonaga, "Windows Commands Abused by Attackers," JPCERT/CC, 26 de enero de 2016. [En línea]. Disponible: https://blogs.jpcert.or.jp/en/2016/01/windows-commands-abused-by-attackers.html.