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.

Figure_01
El contacto inicial del atacante haciéndose pasar por un reclutador de Meta

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++.

Figure_03
Salida del programa señuelo Quiz2.exe

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.

Figure_03
Figura 3. La cadena de acontecimientos que completa el acceso inicial

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
(payload)

C:\ProgramShared\

PresentationHost.exe

mscoree.dll

NppyPluginDll
(NickelLoader)

C:\ProgramData\Adobe\

colorcpl.exe

colorui.dll

LibreSSL 2.6.5
(miniBlindingCan)

C:\ProgramData\Oracle\Java\

fixmapi.exe

mapistub.dll

Lua plugin for Notepad++ 1.4.0.0
(LightlessCan)

C:\ProgramData\Adobe\ARM\

tabcal.exe

HID.dll

MZC8051 for Notepad++ 3.2
(LightlessCan)

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.

Figure_04_ipconfig
Figura 4. Cadenas codificadas que revelan el subconjunto de la funcionalidad ipconfig
Figure_05_net
Figura 5. Cadenas codificadas que revelan el subconjunto de la funcionalidad net
Figure_06_netsh
Figura 6. Cadenas codificadas que revelan la funcionalidad netsh firewall
Figure_03
Figura 7. Cadenas codificadas que revelan la funcionalidad (parcial) reg
Figure_03
Figura 8. Cadenas codificadas que revelan la funcionalidad (parcial) sc
Figure_03
Figura 9. Cadenas codificadas que revelan la funcionalidad de creación de llamada a proceso wmic
Figure_03
Figura 10. Cadenas codificadas que revelan la funcionalidad (parcial) de Schtasks

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

  1. el nombre del proceso padre(PresentationHost),
  2. el parámetro interno codificado en el binario(9zCnQP6o78753qg8), y
  3. 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.

Figure_03
Figura 11. Configuración de la bac trasera miniBlindingCan. El valor resaltado es el recuento de URLs, pero aquí sólo se muestran la primera y la última de las cinco URLs. Se desconoce el propósito de las dos últimas cadenas anchas.

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

  1. el nombre del proceso padre(fixmapi.exe),
  2. el parámetro interno codificado en el binario(IP7pdINfE9uMz63n), y
  3. 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.

Figure_12_chain
Figura 12. Una compleja cadena de etapas entregando la cuarta carga útil

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:

  1. el nombre del proceso padre(tabcal.exe),
  2. el parámetro interno codificado en el binario(9zCnQP6o78753qg8), y
  3. 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.

Figure_03
Figura 13. La configuración descifrada almacenada en wlansvc.

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

  1. el nombre del proceso padre(msdtc.exe), y
  2. 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

T1593.001

Search Open Websites/Domains: Social Media

Lazarus attackers used LinkedIn to identify and contact specific employees of a company of interest.

Resource Development

T1584.004

Acquire Infrastructure: Server

Compromised servers were used by the Lazarus HTTP(S) backdoors and the downloader for C&C.

T1585.001

Establish Accounts: Social Media Accounts

Lazarus attackers created a fake LinkedIn identity of a headhunter from Meta.

T1585.003

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.

T1587.001

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.

T1608.001

Stage Capabilities: Upload Malware

Lazarus attackers uploaded the initial ISO images to a cloud storage.

Initial Access

T1566.002

Phishing: Spearphishing Link

The target received a link to a third-party remote storage with malicious ISO images.

T1566.003

Phishing: Spearphishing via Service

The target was contacted via LinkedIn Messaging.

Execution

T1106

Native API

Windows APIs are essential for miniBlindingCan and LightlessCan to function and are resolved dynamically at runtime.

T1053

Scheduled Task/Job

Based on the parent process, a scheduled task was probably created to trigger thesimple chain of the LightlessCan execution.

T1129

Shared Modules

NickelLoader can load and execute an arbitrary DLL within memory.

T1204.002

User Execution: Malicious File

Lazarus attackers relied on the execution of Quiz1.exe and Quiz2.exe from the ISO files.

T1047

Windows Management Instrumentation

One of the LightlessCan commands allows creation of a new process via WMI.

Persistence

T1053

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

T1134.002

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.

T1622

Debugger Evasion

There’s an anti-debug check in the dropper of miniBlindingCan.

T1480

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.

T1140

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.

T1574.002

Hijack Execution Flow: DLL Side-Loading

Many of the Lazarus droppers and loaders use a legitimate program for their loading.

T1027.002

Obfuscated Files or Information: Software Packing

Lazarus obfuscated several executables by VMProtect in this attack, e.g., colorui.dll

T1027.007

Obfuscated Files or Information: Dynamic API Resolution

Both LightlessCan and miniBlindingCan resolve Windows APIs dynamically.

T1027.009

Obfuscated Files or Information: Embedded Payloads

The droppers of all malicious chains contain an embedded data array with an additional stage.

T1562.003

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.

T1562.004

Impair Defenses: Disable or Modify System Firewall

LightlessCan can mimic the netsh command and interact with firewall rules.

T1070.004

Indicator Removal: File Deletion

LightlessCan has the ability to delete files securely.

T1070.006

Indicator Removal: Timestomp

LightlessCan can alter the modification timestamps of files.

T1202

Indirect Command Execution

LightlessCan bypasses command execution by implementing their functionality.

T1055

Process Injection

LightlessCan and miniBlindingCan use various types of process injection.

T1497.003

Virtualization/Sandbox Evasion: Time Based Evasion

The miniBlindingCan dropper has an intentional initial execution delay.

T1620

Reflective Code Loading

Most of the droppers use reflective DLL injection.

Discovery

T1083

File and Directory Discovery

LightlessCan can locate a file by its name.

T1135

Network Share Discovery

LightlessCan can mimic the net share command.

T1057

Process Discovery

LightlessCan identifies processes by name.

T1012

Query Registry

LightlessCan queries the registry for various system information it uses for encryption.

T1018

Remote System Discovery

LightlessCan can mimic the net view command.

T1016

System Network Configuration Discovery

LightlessCan can mimic the arp and ipconfig commands.

T1049

System Network Connections Discovery

LightlessCan can mimic the netstat command.

T1007

System Service Discovery

LightlessCan can mimic the sc query and tasklist commands.

Command and Control

T1071.001

Application Layer Protocol: Web Protocols

NickelLoader, LightlessCan, and miniBlindingCan use HTTP and HTTPS for C&C.

T1573.001

Encrypted Channel: Symmetric Cryptography

LightlessCan and miniBlindingCan encrypt C&C traffic using the AES-128 algorithm.

T1132.001

Data Encoding: Standard Encoding

LightlessCan and miniBlindingCan encode C&C traffic using base64.

Exfiltration

T1041

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.