Resumen ejecutivo
No importa si eres una organización pequeña, una organización sin fines de lucro o una empresa Fortune 500: siempre habrá alguien que quiera acceder a tu información. En muchos casos, este acceso busca principalmente un beneficio financiero; sin embargo, para muchas organizaciones sin fines de lucro y organizaciones pequeñas, la dura realidad es que la naturaleza de su trabajo, o de sus clientes, también las convierte en un objetivo ideal para actores de amenazas motivados por la recopilación de inteligencia y el espionaje.
Los analistas del SOC de Huntress descubrieron recientemente una intrusión en el equipo de un defensor de derechos humanos vietnamita, que se sospecha estuvo activa durante al menos cuatro años. Esta intrusión presenta varias coincidencias con técnicas conocidas usadas por el actor de amenazas APT32/OceanLotus, y un perfil de objetivo conocido que coincide con los objetivos de APT32/OceanLotus. Esta publicación destaca hasta dónde llegan las amenazas avanzadas con fines de recopilación de información cuando esto se alinea con sus intereses estratégicos.
Contexto
Huntress realiza regularmente operaciones de caza de amenazas para encontrar intrusiones que puedan haber pasado desapercibidas por las defensas de seguridad habituales. En un caso reciente, los analistas de Huntress identificaron una intrusión contra una organización sin fines de lucro que apoya los derechos humanos en Vietnam, la cual probablemente se extendió durante al menos cuatro años. Si bien las detecciones en la plataforma de Huntress encontraron cierta actividad anómala que fue reportada al socio de Huntress, el equipo del SOC pudo encontrar persistencia bien oculta y acciones tomadas por el actor de amenazas. Esta información se usó luego para reconstruir la intrusión y rastrearla hasta mucho antes de que se implementara el Huntress Agent.
Metodología de caza
Huntress está en una posición única para buscar actores de amenazas en millones de sistemas. Esto se logra combinando información sobre el comportamiento de los procesos con puntos de persistencia recopilados mediante el Huntress EDR. Aprovechando la información sobre el comportamiento de los procesos, los analistas del SOC usan inteligencia, o una hipótesis, y su conocimiento de lo que es normal en un sistema para crear reglas de caza de amenazas. Estas reglas difieren de las detecciones de producto, ya que generalmente tienen mayor frecuencia y menor eficacia, dado que apuntan a técnicas usadas por actores de amenazas que intentan mezclarse con el entorno. Usando las reglas de caza creadas, el equipo del SOC suele adoptar tres enfoques distintos para la caza de amenazas: buscar señales de caza poco comunes, conjuntos de múltiples señales y anomalías estadísticas.
El Managed EDR de Huntress identifica de forma constante puntos de persistencia en un sistema. Esto permite al equipo del SOC localizar anomalías donde puede encontrarse un punto de persistencia en un pequeño subconjunto de los sistemas protegidos por Huntress. Estas anomalías podrían ser una diferencia en el mecanismo de persistencia, el nombre, el binario u otro atributo respecto a lo que normalmente se observa en otros entornos de socios de Huntress. Mientras se investigaba una nueva señal de caza, se descubrió que un sistema ejecutaba de forma infrecuente e inconsistente una pequeña cantidad de comandos administrativos desde un proceso inusual.
Los comandos administrativos ejecutados fueron deliberados y rara vez superaron los tres comandos en un período de diez minutos, con un máximo de doce ejecutados en un sistema durante un día determinado. A pesar de esto, la actividad inusual fue suficiente para llamar la atención de los analistas del SOC de Huntress, quienes procedieron a revisar los puntos de persistencia en el entorno del socio y reconstruir la magnitud real de esta intrusión.
Investigación y análisis
Host 1
Mecanismos de persistencia
Durante la incorporación a Huntress, el endpoint 1 presentó una tarea programada titulada Adobe Flash Updater:
Tarea programada 1
Ejecutable:
c:\windows\system32\wscript.exe
Argumentos:
/Nologo /E:VBScript C:\ProgramData\AppData\Roaming\Adobe\Updater\scheduler\scheduler.ps1:log.txtEl archivo referenciado scheduler.ps1:log.txt es un flujo de datos alternativo llamado log.txt dentro de un archivo llamado scheduler.ps1. Este archivo ya había sido eliminado antes de que se implementara el agente de Huntress; sin embargo, la convención de nombres y el uso de un flujo de datos alternativo tienen cierta similitud con un informe público de Cybereason que detalla un cargador basado en VBS y PowerShell usado para cargar payloads de Metasploit y Cobalt Strike.
En las semanas siguientes, se crearon nuevas tareas programadas en el endpoint, identificadas por el agente de Huntress con una diferencia de aproximadamente 10 días entre sí:
Tarea programada 2
AdobeUpdateTaskUser<SID>
Ejecutable:
C:\Users\<REDACTED>\AppData\Roaming\Java\bin\javaw.exe
Argumentos:
-jar C:\Users\<REDACTED>\AppData\Roaming\Adobe\Acrobat\adobe.jar mi54giwp
Esta tarea programada hacía referencia a un archivo Java Archive (JAR) malicioso creado específicamente para el usuario y el sistema en cuestión. El malware contenía una referencia codificada de forma fija a un archivo C:\Users\<REDACTED>\Appdata\Roaming\Adobe\Acrobat\adobe.png que contenía shellcode o configuración potencialmente cifrados, los cuales debían ser cargados por una DLL incorporada dentro del Java Archive llamada mi54giwp.dll. La tarea programada anterior fue posteriormente iniciada de forma interactiva por el actor de amenazas mediante el ejecutable nativo de Windows schtasks.exe:
schtasks /run /TN "AdobeUpdateTaskUser<SID>"
Tarea programada 3
WinDefenderAntivirusUpdateTaskUser<SID2>Core
Ejecutable:
wscript
Argumentos:
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Windows\CloudStore\MSSharePoint.vbsEsta tarea programada contenía un SID de usuario diferente al que se encontró en la tarea programada AdobeUpdateTaskUser . El script MSSharePoint.vbs estaba diseñado para usar una clave privada ya colocada en el disco, autenticarse en un servidor SFTP remoto, y descargar / ejecutar un script llamado cloud.bat.
El archivo por lotes cloud.bat utilizó la misma clave privada para autenticarse en el mismo servidor SFTP remoto, y descargó un archivo llamado cloudlog.txt.
Al momento de la investigación no había ningún archivo cloudlog.txt en el disco. Las marcas de tiempo de modificación en la clave privada, los binarios de SFTP y SSH indican que posiblemente estuvieron presentes desde noviembre de 2023.
Menos de un día después, se usó schtasks.exe para crear persistencia que ejecutaría cloud.bat una vez cada 5 horas.
schtasks /create /sc minute /mo 300 /tn
Handler{60396-307392-03497-03790-3702046} /tr
"C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Windows\CloudStore\cloud.bat" /f
Tarea programada 4
Handler{60396-307392-03497-03790-3702046}
Ejecutable:
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Windows\CloudStore\cloud.batSe descubrió que la creación de la tarea programada Handler se originó más tarde a partir de un proceso sustituto de DllHost que ejecutaba una DLL de un objeto COM almacenado en el registro con el identificador {1F7CFAF8-B558-4EBD-9526-203135A79B1D}.
C:\WINDOWS\SysWOW64\DllHost.exe /Processid:{1F7CFAF8-B558-4EBD-9526-203135A79B1D}
cmd /c schtasks /create /sc minute /mo 300 /tn
Handler{60396-307392-03497-03790-3702046} /tr
"%AppData%\Microsoft\Windows\CloudStore\cloud.bat" /f
Se descubrió que este proceso se lanzaba desde otra tarea programada que ya existía antes de la implementación de Huntress.
Tarea programada 5
UpdateLibrary_{1F7CFAF8-B558-4EBD-9526-203135A79B1D}
Descripción: Esta tarea actualiza la lista almacenada en caché de carpetas y los permisos de seguridad de cualquier archivo nuevo en la biblioteca de medios compartida de un usuario.
Controlador COM:
{1F7CFAF8-B558-4EBD-9526-203135A79B1D}
Fecha de creación del archivo de la tarea: 2020-06-04
Esta tarea intentó hacerse pasar por la tarea legítima UpdateLibrary del sistema y tenía una descripción idéntica a la de la tarea programada legítima UpdateLibrary que también existía en el sistema. Las marcas de tiempo de creación y modificación de la tarea indican que se configuró por primera vez en junio de 2020. El StartBoundary dentro del archivo XML usado para esta tarea programada también tenía un valor de marca de tiempo de 2020-01-01T00:00:00 que indica que se esperaba que la tarea se ejecutara desde el inicio de 2020 en adelante.
Aunque la tarea programada no tenía un ejecutable configurado para ejecutarse, sí tenía un controlador COM que debía invocarse. El análisis del endpoint encontró un objeto COM configurado mediante claves de registro.
Objeto COM
Clave de registro:
HKU\<SID>\Software\Classes\AppID\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}.
Valor de la entrada del registro: DllSurrogate
Datos de la entrada del registro: 0
Clave de registro:
HKU\<SID>\Software\Classes\WOW6432Node\CLSID\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}
Valor de la entrada del registro: AppID
Datos de la entrada del registro:
{1F7CFAF8-B558-4EBD-9526-203135A79B1D}
Clave de registro:
HKU\<SID>\Software\Classes\WOW6432Node\CLSID\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\InProcServer32
Valor de la entrada del registro: (Default)
Datos de la entrada del registro:
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\cachuri.dll
Esta DLL del objeto COM configurada para ejecutarse era una iisutil.dll legítima y firmada, usada por IIS Express, que coincidía con una regla creada por Florian Roth de Nextron Systems hace 5 años llamada APT_OceanLotus_ISSUTIL_Sep18. Aunque esta coincidencia fue un falso positivo, se encontró una muestra maliciosa en VirusTotal que coincidía con esta regla, la cual fue enviada con los nombres iisutil.dll e iisutil2.dll.
Algunos motores antivirus han marcado esta muestra como vinculada a APT32/OceanLotus, y tiene un notable solapamiento con otra DLL encontrada en el disco llamada iisutil2.dll. El análisis adicional de la DLL y otros 2 archivos, que juntos actúan como una puerta trasera, se presenta en la sección: "Análisis de malware".
Unas semanas después de la creación de estas tareas programadas, se observó un comando de enumeración en el endpoint que buscaba los privilegios del usuario actual.
whoami /priv
Al día siguiente, se realizó un reinicio forzado en un endpoint remoto. Esta misma acción se realizó en otro sistema aproximadamente dos semanas después de la ejecución en el primero.
cmd /c shutdown /r /m \\<remote ip> /t 0 /fNo sabemos la intención de esta acción, pero especulamos que pudo haber sido para asegurar la ejecución de malware en un sistema remoto o para asegurar que se aplicaran cambios de configuración del sistema.
Durante los meses siguientes, se ejecutaron varios comandos de descubrimiento para garantizar el acceso a estaciones de trabajo remotas desde el endpoint 1. Se tomaron acciones para asegurar que la conectividad de red siguiera activa en el endpoint y en los endpoints remotos.
net view \\<remote ip> /all
net use \\<remote ip> /u:"<domain>\<user>" "<password>"
netstat -ano
ipconfig /all
Se encontró una clave de ejecución en el equipo 1 que hacía referencia a un binario del módulo OEM de McAfee (mcoemcpy.exe) que se hacía pasar por WdiServiceHost. No se encontró en el momento de la investigación la DLL usada para la carga lateral; sin embargo, existe un informe público de ESET que indica que este ejecutable es vulnerable a la carga de una DLL maliciosa llamada McUtil.dll.
Clave de ejecución 1
Clave del registro:
HKU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Valor de la entrada del registro:
WdiServiceHost
Datos de la entrada del registro:
C:\Users\<REDACTED>\AppData\Roaming\WdiServiceHost_339453944\WdiServiceHost.exeSe encontró una segunda clave de ejecución en el equipo 1 que hacía referencia a un binario de software de Apple (SoftwareUpdate.exe) con una firma de código revocada. Este mecanismo de persistencia era único entre los clientes de Huntress y se cree que se usó para cargar lateralmente una DLL maliciosa. No se encontró en el momento de la investigación la DLL usada para la carga lateral; sin embargo, existe un informe público de Recorded Future que indica que este ejecutable es vulnerable a la carga de una DLL maliciosa llamada SoftwareUpdateFilesLocalized.dll.
Clave de ejecución 2
Clave del registro:
HKU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Valor de la entrada del registro:
Apple Software Update Cache
Datos de la entrada del registro:
C:\ProgramData\Apple\Installer Cache\SoftwareUpdate.exeSe encontró otra clave de ejecución más en el equipo 1 que hacía referencia a un script por lotes llamado connection.bat. Este tenía una funcionalidad idéntica a MSSharePoint.vbs, excepto que ejecutaba PowerShell para correr SFTP en lugar de un script VBS.
Clave de ejecución 3
Clave del registro:
HKU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Valor de la entrada del registro:
ChromeUptodate
Datos de la entrada del registro:
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Windows\CloudStore\connection.batJusto antes de que ocurriera el aislamiento en este sistema, se observó que el actor de amenazas intentaba robar las cookies de Google Chrome de todos los perfiles de usuario del sistema desde la puerta trasera del objeto COM DllHost.
cmd /c for /f "tokens=*" %G in ('dir /b "%localappdata%\Google\Chrome\User
Data\Profile *"') do copy "%localappdata%\Google\Chrome\User
Data\%G\Network\Cookies.bak" "%localappdata%\Google\Chrome\User
Data\%G\Cookies" /y
Equipo 2
Mecanismo de persistencia
En un equipo distinto, el equipo 2, se ejecutaron comandos remotos mediante Windows Management Instrumentation para ejecutar un script por lotes aproximadamente 1,5 meses después de la primera acción observada en el equipo 1. Este script por lotes se usó para consultar los procesos en ejecución en el equipo.
cmd.exe /c C:\Users\Public\Downloads\1.bat
El contenido del script por lotes se muestra a continuación:
Poco después también se observaron comandos de descubrimiento de dominio en este sistema.
net group "Domain Admins" /domain
nltest /dclist:<REDACTED>.local
El proceso que inició esto fue una versión legítima del ejecutable de gestión de libros electrónicos calibre calibre.exe que había sido configurado para ejecutarse como una tarea. A través de la telemetría de Huntress, se observó que se intentó crear una tarea programada para ejecutar este ejecutable calibre.exe desde una ubicación inusual.
schtasks /create /sc MINUTE /mo 300 /tn
"Microsoft\Windows\WindowsColorSystem\Calibration_Update" /tr
"C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\Calibre.exe
" /f
Tarea programada 1
Microsoft\Windows\WindowsColorSystem\Calibration_Update
Ejecutable:
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\Calibre.exeCabe notar que esto es un intento de pasar desapercibido imitando la tarea legítima “Calibration Loader”, que generalmente se encuentra en C:\Windows\System32\Tasks\Microsoft\Windows\WindowsColorSystem\Calibration Loader. Especulamos que se eligió la tarea “Calibration Loader” por su nombre similar al archivo calibre.exe.
Poco después de esta ejecución, se intentó una escalada de privilegios mediante tuberías con nombre (named pipes), realizada a través del proceso calibre. Esto probablemente implicó una inyección en el proceso legítimo de Windows gpupdate.exe, un proceso conocido que suele recibir inyecciones mediante perfiles maleables de Cobalt Strike y que se observa con frecuencia al ejecutar el comando “getsystem” de Cobalt Strike.
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\calibre.exe
Padre:
C:\windows\sysnative\gpupdate.exe
Proceso:
C:\Windows\system32\cmd.exe /c echo a0e3d8a67d0 > \\.\pipe\a64009El análisis de este equipo reveló que el ejecutable calibre estaba ejecutando una DLL maliciosa llamada calibre-launcher.dll en el disco; sin embargo, en cuestión de minutos, antes de que se pudieran obtener la DLL y el ejecutable, el actor de amenazas parece haber terminado el proceso en ejecución y haber eliminado todo el directorio SPMigration incluyendo el implante. Al momento de la investigación, todavía había una entrada sospechosa en la caché DNS del sistema:
| IP | Entradas DNS |
|---|---|
| 91.231.182[.]18 | kpi.msccloudapp[.]com |
Aunque no pudimos confirmar que esta búsqueda estuviera relacionada con la intrusión en cuestión, el dominio era similar a uno visto anteriormente (msteamsapi[.]com) y el subdominio también coincidía parcialmente con un subdominio visto en el endpoint 4.
Endpoint 3
Mecanismo de persistencia
Poco después de realizar la suplantación de named pipe en el endpoint 2, se ejecutó un comando usando el mismo beacon de Cobalt Strike en un intento de crear una tarea programada en un tercer sistema. Esta tarea programada se configuró para ejecutarse cada 15 minutos como la cuenta de usuario SYSTEM (Nota: el nombre de la tarea se asemeja a una clave de licencia y, por lo tanto, se ha redactado como precaución).
schtasks.exe /u "<REDACTED>\<REDACTED>" /p "<REDACTED>" /S
<REDACTED> /create /SC MINUTE /MO 15 /TN "<REDACTED>" /TR
"C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\calibre.exe"
/RU "NT AUTHORITY\SYSTEM" /K /f
Tarea programada 1
<REDACTED>
Ejecutable:
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\calibre.exePoco después de esto, se ejecutó un comando para invocar el ejecutable calibre.
wmic /node:<REDACTED> /user:<REDACTED> /password:<REDACTED>
process call create "cmd.exe /c start
c:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\calibre.exe"
En el momento de la investigación, el ejecutable y la DLL no se encontraron en el disco.
Endpoint 4
Mecanismos de persistencia
Usando la telemetría disponible de Huntress, se realizó una búsqueda para encontrar cualquier otra instancia donde el ejecutable calibre estuviera configurado para ejecutarse al inicio. Se encontraron tres tareas programadas en el sistema, dos de las cuales se hacían pasar por ejecutables legítimos de Adobe, y la otra se hacía pasar por una tarea de actualización de Microsoft.
Tarea programada 1
Adobe Acrobat Update Task
Ejecutable:
C:\Program Files (x86)\Common Files\Adobe\ARM\1.0\AdobeARM.exe
Tarea programada 2
MicrosoftOne\Uptodate
Ejecutable:
C:\programdata\Microsoft\AppV\ins-findstr.exe
Tarea programada 3
Adobe Acrobat Update Task_v2
Ejecutable:
C:\Program Files (x86)\Common Files\Adobe\ARM\1.0\AdobeUpdate.exe
El análisis de las conexiones de red en el sistema mostró que uno de los ejecutables calibre que se hacía pasar por Adobe (AdobeARM.exe) tuvo previamente una conexión de red a una dirección IP remota.
| IP | Entradas DNS |
|---|---|
| 51.81.29[.]44 | kpi.adcconnect[.]me |
Según el análisis de esta infraestructura y de los archivos maliciosos calibre-loader.dll enviados a VirusTotal, esta dirección IP y el implante calibre.exe probablemente estaban vinculados a un Cobalt Strike Team Server.
Meses después de nuestra detección inicial en el endpoint 1, se observó un descubrimiento de privilegios de usuario mediante un proceso calibre.exe diferente.
whoami /priv
Semanas después de este comando, observamos la creación de un nuevo servicio para ejecutar un ejecutable node legítimo. Este ejecutable estaba configurado para lanzar un binario de Node addon malicioso para evadir la detección en el sistema.
Servicio 1
Adobe_Reader
Ejecutable:
C:\programdata\adobe\node.exe
Argumentos:
-e require('C:\ProgramData\adobe\1lpiozkc.node')El Node addon fue creado específicamente para apuntar al sistema y a la cuenta de usuario, e incluía una ruta codificada a un archivo en disco en C:\Programdata\Adobe\ms-adobe.bin. Esto también incluía un nombre de servicio codificado que se crearía llamado SrvAdobeUpd; sin embargo, en el momento de la investigación, este no se encontró en el sistema. El análisis de las conexiones de red en el sistema mostró que este ejecutable node se conectó previamente a una dirección IP remota.
| IP | Entradas DNS |
|---|---|
| 5.230.35[.]192 | dupleanalytics[.]net get.dupbleanalytics[.]net |
Según el análisis de esta infraestructura y del archivo node malicioso, se cree que esto probablemente estaba vinculado a un Cobalt Strike Team Server.
Aproximadamente un mes después del lanzamiento del Node addon, observamos la creación de una tarea programada que se originaba desde el proceso node.exe.
C:\programdata\adobe\node.exe -e require('C:\\ProgramData\\adobe\\1lpiozkc.node')
Proceso:
C:\WINDOWS\system32\cmd.exe /C schtasks /create /sc MINUTE /mo 15 /tn
"96d09a49-98ed-4b12-936a-c8715d2d2c0e" /tr
"C:\Users\<REDACTED>\Appdata\Roaming\Adobe\bin\javaw.exe -jar
C:\Users\<REDACTED>\Appdata\Roaming\Adobe\msadobe.jar zfhqq01v" /fEsta tarea programada estaba configurada para ejecutar un archivo jar que cargaría una DLL incrustada en memoria.
Tarea programada 4
96d09a49-98ed-4b12-936a-c8715d2d2c0e
Ejecutable:
C:\Users\<REDACTED>\Appdata\Roaming\Adobe\bin\javaw.exe
Argumentos:
-jar C:\Users\<REDACTED>\Appdata\Roaming\Adobe\msadobe.jar zfhqq01v)Se menciona un análisis más detallado sobre msadobe.jar en la siguiente sección.
Análisis de respaldo
Lo más probable es que esto sea solo la punta del iceberg y que el verdadero alcance de esta intrusión se extienda mucho más allá de los sistemas con el agente de Huntress. Se realizó un análisis preliminar del malware encontrado en estos sistemas y de la infraestructura usada en la intrusión. Esto se hizo para determinar si existía alguna coincidencia conocida con técnicas de actores de amenazas que se alinearan con la industria objetivo o el perfil de la organización víctima.
Análisis del malware
Esta intrusión involucró varios binarios y archivos. A continuación se incluye un resumen de estos archivos.
| Ubicación | Hash (SHA256) | Notas |
|---|---|---|
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\cachuri.dll | aa5ff1126a869b8b5a0aa72f609215d8e3b73e833c60e4576f2d3583cc5af4f4 | DLL legítima y firmada que usa IIS Express para ejecutarse como objeto COM. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Microsoft Compatibility Appraiser\{8BCC608C-CE2C-475E-85CB-AE0EC95EAC64}\cachuri.dll | aa5ff1126a869b8b5a0aa72f609215d8e3b73e833c60e4576f2d3583cc5af4f4 | DLL legítima y firmada que usa IIS Express para ejecutarse como objeto COM. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\AD RMS Rights Policy Template Management (Automated)\{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}\cachuri.dll | aa5ff1126a869b8b5a0aa72f609215d8e3b73e833c60e4576f2d3583cc5af4f4 | DLL legítima y firmada que usa IIS Express para ejecutarse como objeto COM. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Microsoft Compatibility Appraiser\{8BCC608C-CE2C-475E-85CB-AE0EC95EAC64}\iisexpressshim.sdb | 09f53e68e55a38c3e989841f59a9c4738c34c308e569d23315fd0e2341195856 | Código cifrado cargado por iisutil2.dll. Esto se descifra en una DLL que carga código desde dentro de logo.png. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\iisexpressshim.sdb | 09f53e68e55a38c3e989841f59a9c4738c34c308e569d23315fd0e2341195856 | Código cifrado cargado por iisutil2.dll. Esto se descifra en una DLL que carga código desde dentro de logo.png. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\AD RMS Rights Policy Template Management (Automated)\{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}\iisexpressshim.sdb | a217fe01b34479c71d3a7a524cb3857809e575cd223d2dd6666cdd47bd286cd6 | Código cifrado cargado por iisutil2.dll. Esto se descifra en una DLL que carga código desde dentro de logo.png. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\iisutil2.dll | 47af8a33aac2e70ab6491a4c0a94fd7840ff8014ad43b441d01bfaf9bf6c4ab7 | Archivo grande con código adicional agregado. Un cargador de malware que descifra y carga código desde el archivo iisexpressshim.sdb. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\logo.png | 82e94417a4c4a6a0be843ddc60f5e595733ed99bbfed6ac508a5ac6d4dd31813 | Archivo PNG legítimo que usa esteganografía para ocultar código escondido, el cual es cargado por el archivo iisexpressshim.sdb descifrado. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Microsoft Compatibility Appraiser\{8BCC608C-CE2C-475E-85CB-AE0EC95EAC64}\logo.png | f8773628cdeb821bd7a1c7235bb855e9b41aa808fed1510418a7461f7b82fd6c | Archivo PNG legítimo que usa esteganografía para ocultar código escondido, el cual es cargado por el archivo iisexpressshim.sdb descifrado. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\AD RMS Rights Policy Template Management (Automated)\{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}\logo.png | aa69c6c22f1931d90032a2d825dbee266954fac33f16c6f9ce7714e012404ec1 | Archivo PNG legítimo que usa esteganografía para ocultar código escondido, el cual es cargado por el archivo iisexpressshim.sdb descifrado. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\calibre.exe | 735e7b33b97bff3cf6416ed3b8ed7213d7258eec05202cbf8f8f8002c6435fd1 | Ejecutable legítimo calibre.exe usado para cargar una calibre-launcher.dll probablemente maliciosa. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\calibre-launcher.dll | Desconocido | El archivo no estaba presente en el disco: Se sospecha que es un cargador de baliza de Cobalt Strike. |
| C:\Users\<REDACTED>\Appdata\Roaming\Adobe\msadobe.jar | 300ef93872cc574024f2402b5b899c834908a0c7da70477a3aeeaee2e458a891 | Archivo JAR malicioso con una DLL incrustada zfhqq01v.dll que se carga en memoria. |
| zfhqq01v.dll (dentro de msadobe.jar) | 6719175208cb6d630cf0307f31e41e0e0308988c57772f25494c9d2a2b84e2a1 | DLL maliciosa cargada en memoria; hace referencia a C:\Users\<REDACTED>\Appdata\Roaming\Adobe\msreader.bin en las cadenas. Esto ejecuta una verificación para ver desde qué directorio se está ejecutando. Parece tener la marca de tiempo alterada al 11 de noviembre de 2005, 23:08:38. |
| C:\Users\<REDACTED>\AppData\Roaming\Adobe\Acrobat\adobe.jar | efc373b0cda3f426d25085938cd02b7344098e773037a70404c6028c76cc16fc | Archivo JAR malicioso con una DLL incrustada mi54giwp.dll que se carga en memoria |
| mi54giwp.dll (dentro de adobe.jar) | a79ced63bdf0ea69d84153b926450cf3119bdea4426476b37dfde2a48a6ede0a | DLL maliciosa cargada en memoria; hace referencia a C:\Users\<REDACTED>\Appdata\Roaming\Adobe\Acrobat\adobe.png en las cadenas. Esto ejecuta una verificación para ver desde qué directorio se está ejecutando. Marca de tiempo del 9 de noviembre de 2018, 22:47:55 |
| C:\Users\<REDACTED>\AppData\Roaming\Adobe\Acrobat\adobe.png | a6072e7b0fafb5f09fd02c37328091abfede86c7c8cb802852985a37147bfa19 | Potencialmente shellcode cifrado o archivo de configuración. |
| C:\Users\<REDACTED>\Appdata\Roaming\Adobe\msreader.bin | Desconocido | El archivo no estaba presente en el disco: Potencialmente shellcode cifrado o archivo de configuración. |
| C:\ProgramData\adobe\ms-adobe.bin | 8e2e9e7b93f4ed67377f7b9df9523c695f1d7e768c3301db6c653948766ff4c3 | Potencialmente shellcode cifrado o archivo de configuración. |
| C:\ProgramData\adobe\1lpiozkc.node | b31bfa8782cb691178081d6685d8429a2a2787b1130c6620d3486b4c3e02d441 | Archivo de complemento Node. Hace referencia a SrvAdobeUpd, que es el nombre de un servicio que intenta crear, y carga código desde C:\Programdata\Adobe\ms-adobe.bin |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Installer\{02594FE8-1152-E41E-A75E-923494C7B453}\DropboxUpdate.bin | c7e2dbc3df04554daa19ef125bc07a6fa52b5ea0ba010f187a082dc9fc2e97ed | Probablemente shellcode cifrado ejecutado desde el goopdate.dll malicioso. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Installer\{02594FE8-1152-E41E-A75E-923494C7B453}\DropboxUpdate.exe | 47839789332aaf8861f7731bf2d3fbb5e0991ea0d0b457bb4c8c1784f76c73dc | Ejecutable legítimo relacionado con Dropbox usado para cargar un goopdate.dll malicioso. |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Installer\{02594FE8-1152-E41E-A75E-923494C7B453}\goopdate.dll | c03cc808b64645455aba526be1ea018242fcd39278acbbf5ec3df544f9cf9595 | DLL maliciosa probablemente usada para cargar DropboxUpdate.bin. Posiblemente con marca de tiempo alterada Marca de tiempo del 17 de mayo de 2011, 19:10:24 |
Durante el análisis del sistema 1, se descubrió que el cachuri.dll legítimo, configurado para ejecutarse como un objeto COM, importaba y ejecutaba código explícitamente desde iisutil2.dll. Aunque iisutil2.dll tenía información casi idéntica a una copia firmada y válida de iisutil.dll, este había sido parchado para ejecutar código diferente, y se modificó para aumentar el tamaño del archivo por encima de 50 MB. Se cree que esto se hizo para evadir varias reglas YARA que a menudo tienen restricciones de tamaño de archivo, y para evitar enviar el archivo a herramientas de análisis en un entorno aislado en línea, muchas de las cuales tienen un límite de tamaño de archivo de 50 MB. Esta modificación causó diferencias notables en el NT Header, el Optional Header y, más significativamente, en la sección .text .
El punto de entrada de esta DLL también había sido modificado al desplazamiento 0x00025FB0 (155568), que difería del punto de entrada original de 0x00027FB0 (163760). Un breve análisis de este binario mostró que colocaba la dirección de retorno en la pila y luego ejecutaba una función en 0x1002711e.
Esto es significativo porque estas operaciones, el punto de entrada y la dirección de la función que se va a ejecutar son todos idénticos al malware mencionado anteriormente, enviado a VirusTotal y vinculado a APT32/OceanLotus. Una inspección más detallada mostró que este archivo era en realidad idéntico a la muestra en VirusTotal vinculada a OceanLotus mencionada anteriormente, con la única diferencia de que se le añadieron datos para que su tamaño de archivo creciera por encima de 50 MB.
En contraste, la DLL legítima comenzaba configurando los registros necesarios antes de tener una condición de bifurcación dependiendo de los argumentos pasados al ejecutable que ejecuta la DLL.
El DLL malicioso buscaría en el Process Environment Block (PEB) una estructura PEB_LDR_DATA para poder identificar el InLoadOrderModuleList. Esta estructura contiene una lista de DLL en el orden en que se cargaron.
El código incluye múltiples operaciones de salto, como la que se muestra en la figura 10, que nunca se ejecutarían, o que solo se usarían para correr una pequeña cantidad de instrucciones, antes de volver al flujo original de ejecución.
Curiosamente, este malware contiene varios códigos de operación basura y ofuscación del flujo de control para confundir el análisis estático y dificultar el desensamblado. Esto coincide con técnicas que se sabe que usa APT32/OceanLotus, como se informó previamente en un reporte de ESET.
Este malware examina los DLL cargados y sus exportaciones para poder resolver dinámicamente las API que se usan para facilitar el descifrado y la inyección de un payload en memoria. Esto coincide de forma significativa con el malware reportado por BlackBerry/Cylance, llamado Steganography Loader #2 (cargador de esteganografía n.º 2).
El análisis reveló que esta DLL finalmente leía iisexpressshim.sdb, lo descifraba usando una clave XOR de 0xFF, y luego descomprimía los datos usando el algoritmo de compresión LZNT1. El archivo descifrado iisexpressshim.sdb mostró más instancias de códigos de operación basura que nunca se evaluarían.
La DLL descifrada en memoria luego cargaba logo.png, usaba una rutina personalizada de esteganografía, y luego hacía una llamada a la API CryptDecrypt de Windows para descifrar y cargar la DLL final en memoria. El uso de una rutina personalizada de esteganografía para ocultar código malicioso en un archivo PNG aparentemente inofensivo, además del uso de una clave XOR y compresión, coincide con el Steganography Loader mencionado anteriormente, usado por APT32/OceanLotus. Se observa que hubo varias diferencias entre esta versión del Steganography Loader y la reportada anteriormente, entre ellas el uso de LZNT1 en lugar de LZMA, y una clave XOR fija de 0xFF en lugar de obtenerla de un archivo en disco.
El malware también mostró un alto grado de coincidencia con una muestra analizada por un investigador de seguridad en marzo de 2019, y es muy probable que ambas muestras de malware pertenezcan a la misma familia de malware. Al momento de la investigación, el equipo tenía conexiones activas a 185.198.57[.]184 y 185.43.220[.]188 en el puerto 8888 desde el proceso DllHost que ejecutaba la puerta trasera del objeto COM.
La información de DNS pasivo para la dirección IP 185.198.57[.]184 mostró que los dominios mencionados en el blog del investigador de seguridad de 2019 resolvían a esta dirección IP. Esto ayuda a validar que el malware descrito en su blog es el mismo malware encontrado en este sistema 5 años después. También vale la pena mencionar que ninguno de los dominios parece haber caducado ni haber sido registrado de nuevo, y todos los dominios se registraron originalmente a finales de 2017. Esto indica que los dominios a continuación probablemente han estado bajo el control del mismo actor de amenazas durante casi 7 años.
- cdn.arlialter[.]com - Dominio registrado originalmente: 2017-10-27
- fbcn.enantor[.]com - Dominio registrado originalmente: 2017-10-27
- ww1.erabend[.]com - Dominio registrado originalmente: 2017-10-27
- var.alieras[.]com - Dominio registrado originalmente: 2017-10-27
Los dominios también parecen hacerse pasar por dominios legítimos, lo cual es notable dado que APT32/OceanLotus ha usado anteriormente esta técnica en sus intrusiones.
| Dominio | Dominio legítimo |
|---|---|
| alieras[.]com | alier[.]com |
| enantor[.]com | emantor[.]com |
| erabend[.]com | erbend[.]com |
También se descubrió que el equipo tenía otras cuatro tareas programadas que se hacían pasar por varios servicios con descripciones idénticas. Estas tareas tenían una convención de nombres similar a las tareas programadas vistas anteriormente. Además, una clave de ejecución de usuario también tenía una convención de nombres similar:
Tarea programada 1
Microsoft Compatibility Appraiser_{8BCC608C-CE2C-475E-85CB-AE0EC95EAC64}
Descripción: Recopila información de telemetría de programas si se ha optado por participar en el Programa de mejora de la experiencia del cliente de Microsoft.
Controlador COM:
{8BCC608C-CE2C-475E-85CB-AE0EC95EAC64}
Fecha de creación del archivo de tarea: 2020-01-14
Tarea programada 2
Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Automated)_{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}
Descripción: Actualiza las plantillas de política de derechos de AD RMS para el usuario. Este trabajo no muestra una solicitud de credenciales si falla la autenticación con el servicio web de distribución de plantillas en el servidor. En ese caso, falla en silencio.
Controlador COM:
{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}
Fecha de creación del archivo de tarea: 2019-08-13
Tarea programada 3
AD RMS Rights Policy Template Management (Automated)_{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}
Descripción: Actualiza las plantillas de política de derechos de AD RMS para el usuario. Este trabajo no muestra una solicitud de credenciales si falla la autenticación con el servicio web de distribución de plantillas en el servidor. En ese caso, falla en silencio.
Controlador COM:
{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}
Fecha de creación del archivo de tarea: 2019-08-13
Tarea programada 4
Microsoft\Windows\Active Directory Rights Management Services Client\AD RMS Rights Policy Template Management (Automated)_{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}
Descripción: Actualiza las plantillas de política de derechos de AD RMS para el usuario. Este trabajo no muestra una solicitud de credenciales si falla la autenticación con el servicio web de distribución de plantillas en el servidor. En ese caso, falla en silencio.
Controlador COM:
{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}
Fecha de creación del archivo de tarea:
2019-08-13
Nota: Esta tarea programada es idéntica a otra tarea programada creada, excepto que tiene el carácter de control 0x9d al final.
Clave de ejecución 1
HKU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Nombre:
DropboxUpdate_{02594FE8-1152-E41E-A75E-923494C7B453}
Ruta:
c:\users\<REDACTED>\appdata\roaming\microsoft\installer\{02594fe8-1152-e41e-a75e-923494c7b453}\dropboxupdate.exe
Comando:
C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Installer\{02594FE8-1152-E41E-A75E-923494C7B453}\DropboxUpdate.exe /installsource taggedmi
Fecha de creación del binario: 2019-11-14
El análisis de las tareas programadas del equipo 1 encontró otras dos instancias de la puerta trasera COM maliciosa registrada. Estas ya no ejecutarían el código malicioso oculto dentro de logo.png ya que el archivo malicioso necesario iisutil2.dll había sido eliminado del sistema. Se sospecha que se establecieron múltiples variantes de la puerta trasera en el sistema a lo largo del tiempo para ayudar a garantizar que el acceso se mantuviera incluso si los productos antivirus detectaban algunas de las puertas traseras existentes.
Entre las tareas programadas había una tarea DropboxUpdate que apuntaba a un ejecutable legítimo. Aunque DropboxUpdate no importa ni usa directamente goopdate.dll, este es llamado y cargado indirectamente por DropboxUpdate, que luego se usa para cargar un archivo malicioso DropboxUpdate.bin en el mismo directorio, como se muestra a continuación en la Figura 15.
El análisis de la memoria del proceso encontró múltiples dominios y detalles de configuración de C2 para este malware:
Estos dominios, una vez más, se hacían pasar por dominios legítimos.
| Domain | Legitimate Domain |
|---|---|
| popfan[.]com | Various |
| setalz[.]com | setabz[.]com |
| riceaub[.]com | riceau[.]com |
| eatherurg[.]com | ethereum[.]org |
La DLL maliciosa goopdate.dll tiene un tamaño de más de 20 MB y verifica si existe una variable de entorno GUID codificada en el sistema. Si no está presente, se establecerá. Esto se hace antes de configurar los permisos de memoria como RWX para permitir inyectar el payload .bin en memoria.
Cabe destacar que esta DLL tiene una función en el desplazamiento 0x0001010 que usa una lista codificada de nombres en esta rutina de inyección. Específicamente, toma el último nombre del arreglo y lo concatena con todos los demás nombres, lo cual luego se evalúa antes de la inyección.
No se observaron coincidencias específicas con archivos maliciosos goopdate.dll reportados previamente y utilizados por APT32/OceanLotus. A pesar de esto, Facebook, Cybereason, y Volexity han reportado previamente el uso de APT32/OceanLotus con una goopdate.dll maliciosa que se cargaba en un ejecutable benigno. Vale la pena señalar que esta técnica y el nombre de la DLL también se usan entre otros actores de amenazas.
Al examinar los archivos JAR adobe.jar y msadobe.jar se encontró que eran simples cargadores que ejecutarían DLL integradas específicas en la memoria desde una clase principal llamada UpdateData.
Al observar la DLL mi54giwp.dll se encontró que crearía un Mutex con el valor okSSjZzAlnNOlQaGoDWx antes de apuntar a un archivo .bin ubicado dentro de un directorio codificado en la DLL. Esto resalta que el malware se había creado específicamente para apuntar al sistema en el que se ejecutó.
Se encontró un comportamiento similar en la DLL zfhqq01v.dll, que crea un Mutex con el valor sbvjJpGLbbmnHNfWEetm antes de apuntar a un archivo .bin ubicado en el directorio de otra cuenta de usuario codificado de forma fija dentro de la DLL.
Al examinar el equipo 1 se descubrió que previamente se había configurado persistencia para ejecutar un ejecutable sospechoso desde una clave de ejecución de usuario. Windows Defender puso este ejecutable en cuarentena.
Clave de ejecución 2
HKU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Nombre:
Trusted Platform Console
Comando:
C:\Users\<REDACTED>\AppData\Local\TPM Console\TpmInit.exeCabe destacar que el directorio “TPM Console” tenía tres archivos con marcas de tiempo de modificación distintas, que son de interés al momento de establecer la cronología de este incidente.
| Archivo | Marca de tiempo de modificación |
|---|---|
| TpmInit.db | <REDACTED> |
| TpmInit.mdb | 2017-02-07 23:54:29 |
| TpmInit.mdf | 2017-02-07 23:54:29 |
El análisis del archivo en cuarentena TpmInit.exe reveló que se trataba de una versión modificada de un ejecutable legítimo de TpmInit . Al ejecutarse por primera vez, este ejecutable crea dos archivos, TpmInit.mdb y TpmInit.mdf en el disco si no están presentes, antes de finalizar, momento en el cual estos archivos ya no se modifican.
Aunque se desconoce si este ejecutable estuvo relacionado con la misma intrusión, las marcas de tiempo de modificación indican que este malware pudo haber estado presente y en ejecución en el sistema afectado desde 2017. Si tanto TPMInit.mdb como TPMInit.mdf están presentes cuando se ejecuta el ejecutable, TpmInit.db (una DLL) se extrae de TpmInit.exe y se ejecuta usando rundll32.exe después de inyectarse primero en otro proceso rundll32 . Este archivo cambiará su marca de tiempo de modificación cada vez que se ejecute el ejecutable, lo que indica una posible primera y última vez que este malware se ejecutó en el sistema.
Para ejecutar TpmInit.db, el malware aprovecha la aplicación legítima rundll32 para ejecutar una función exportada llamada 'TpmVCardCreate'. Vale la pena señalar que las exportaciones de esta DLL llevan el nombre de un subconjunto de exportaciones que se encuentran en un tpmvsc.dll legítimo que normalmente se encuentra en Windows.
Después de la ejecución, esto obtendría un identificador de kernel32.dll para obtener la dirección de los módulos que se usarán y verificar si Kaspersky AV se estaba ejecutando en el sistema (avp.exe) y avg (avghookx.dll) como se ve en la figura 28.
C:\Users\<username>\AppData\Roaming\Microsoft\MicrosoftEdge\container.dat. Al momento de la investigación, este archivo no se encontró en disco.Análisis de la infraestructura
Al examinar las dos direcciones IP sospechosas del Cobalt Strike Team Server, se encontró que ambas estaban firmadas con certificados de Let's Encrypt y se ubicaban detrás de un Cloudflare Load Balancer. Resulta interesante que los servidores presentaban un mensaje de 404 Not Found con un Content-Length de 0 cada vez que se enviaba una solicitud GET con un URI que contenía un '/'. Los servidores también presentaban una respuesta 200 con un Content-Length de 0, y los métodos permitidos OPTIONS, GET, HEAD, POST cada vez que se enviaba una solicitud OPTIONS . Esto es importante porque se espera el mismo comportamiento al interactuar con un Cobalt Strike Team Server, como lo reportó anteriormente Palo Alto Networks.
La combinación de encabezados de respuesta específicos y el Cloudflare Load Balancer dio lugar a un banner de servicio único que se observó en ambas direcciones IP sospechosas del C2 de Cobalt Strike mediante una búsqueda en Censys, como se ve en la Figura 30.
Una búsqueda de este banner encontró solo siete hosts, lo que lo convierte en una huella digital bastante única. Al buscar únicamente los hosts identificados tanto por un nombre como por una dirección IP, se encontraron tres direcciones IP y dominios únicos, de los cuales solo uno no se había visto en esta intrusión.
Resulta interesante que todas estas direcciones IP tenían nombres de dominio que parecían hacerse pasar por sitios web o software legítimos, y ninguno de los ASN ni de los proveedores de servicio coincidía entre sí.
Objetivos y atribución
Desde hace tiempo se ha informado que periodistas, bloggers, disidentes y defensores de los derechos humanos vietnamitas han sido blanco de malware y tácticas consistentes con las operaciones de APT32/OceanLotus, que se remontan al menos a 2013. Esto ha sido reportado por empresas como Google, la Electronic Frontier Foundation, Amnistía Internacional, y muchos otros proveedores de seguridad. Durante nuestra investigación se encontraron varias coincidencias entre las técnicas conocidas que usa APT32/OceanLotus, los sectores e intereses objetivo de este actor de amenazas, y lo que se encontró en esta intrusión:
- El objetivo fue una organización sin fines de lucro que apoya los derechos humanos en Vietnam
- El malware en cuestión usaba una DLL maliciosa que era cargada por una DLL de IIS Express llamada iisutil.dll. Esto coincide con una regla YARA creada por Nextron Systems que apunta al actor de amenazas APT32/OceanLotus.
- La DLL maliciosa usada en esta intrusión usaba una versión modificada de iisutil con el punto de entrada 0x00025FB0 (155568) y una función en 0x1002711e. Todo el código del malware es idéntico al malware subido a VirusTotal que se sabe está asociado con APT32/OceanLotus, salvo por un relleno adicional agregado al final.
- Los puertos 8888 y 8531 se usaron en la configuración de C2 del malware. El backdoor de objeto COM coincide con un informe público de un investigador de seguridad de 2019, donde el payload final contenía ocho posibles direcciones de servidor C2 con números de puerto idénticos.
- El uso de direcciones C2 codificadas en un recurso DLL tiene una coincidencia conocida con el malware usado por APT32/OceanLotus, según lo reportado por BlackBerry/Cylance.
- El uso de objetos COM y esteganografía con archivos PNG es una técnica conocida que se reporta como usada por APT32/OceanLotus, según lo reportado por BlackBerry/Cylance.
- Se agregaron flujos de datos alternativos (Alternate Data Streams) con el nombre log.txt a un script de PowerShell y fueron cargados por wscript mediante una tarea programada. Esto tiene una convención de nombres similar a una campaña reportada públicamente y atribuida a APT32/OceanLotus, 'Operation Cobalt Kitty', por Cybereason.
- Se sospecha que el actor de amenazas usó Cobalt Strike al cargar una DLL maliciosa en un ejecutable legítimo, una técnica conocida usada por APT32/OceanLotus.
- Facebook, Cybereason y Volexity han reportado que APT32/OceanLotus usa una goopdate.dll maliciosa que se carga en un ejecutable benigno.
- Se sabe que APT32/OceanLotus usa CLSID únicos, relleno binario, compresión y tareas programadas en sus intrusiones, según lo reportado por ESET. Las convenciones de nombres usadas en su malware también son similares.
- Se sabe que APT32/OceanLotus usa muchos dominios e infraestructura únicos con una coincidencia mínima para ayudar a permanecer en los entornos por periodos prolongados, lo cual coincide con lo que hemos visto aquí.
- Se sabe que APT32/OceanLotus incorpora malware basado en Java en sus operaciones.
- APT32/OceanLotus ha usado anteriormente códigos de operación basura en su malware para desviar el análisis, además de ofuscación del flujo de control, según lo reportado por ESET.
- APT32/OceanLotus ha usado anteriormente el módulo OEM de McAfee para cargar lateralmente DLL maliciosas, según lo reportado por ESET.
- APT32/OceanLotus ha usado anteriormente servidores de Cobalt Strike detrás de Cloudflare, según lo reportado por Cybereason y Volexity
- APT32/OceanLotus ha usado anteriormente el binario de Apple Software Update para cargar lateralmente DLL maliciosas, según lo reportado por Recorded Future.
- APT32/OceanLotus ha usado anteriormente, de manera intensiva, certificados TLS de Let's Encrypt en su infraestructura, según lo reportado por Volexity.
Indicadores de compromiso
| Indicador | Tipo | Detalles |
|---|---|---|
| msadobe.jar | SHA256 | 300ef93872cc574024f2402b5b899c834908a0c7da70477a3aeeaee2e458a891 |
| 1lpiozkc.node | SHA256 | b31bfa8782cb691178081d6685d8429a2a2787b1130c6620d3486b4c3e02d441 |
| ms-adobe.bin | SHA256 | 8e2e9e7b93f4ed67377f7b9df9523c695f1d7e768c3301db6c653948766ff4c3 |
| 1.bat | SHA256 | 1bd17369848c297fb30e424e613c10ccae44aa0556b9c88f6bf51d84d2cbf327 |
| 1.txt | SHA256 | 6cf19d0582c6c31b9e198cd0a3d714b397484a3b16518981d935af9fd6cdb2eb |
| logo.png | SHA256 | f8773628cdeb821bd7a1c7235bb855e9b41aa808fed1510418a7461f7b82fd6c |
| goopdate.dll | SHA256 | c03cc808b64645455aba526be1ea018242fcd39278acbbf5ec3df544f9cf9595 |
| logo.png | SHA256 | aa69c6c22f1931d90032a2d825dbee266954fac33f16c6f9ce7714e012404ec1 |
| adobe.png | SHA256 | a6072e7b0fafb5f09fd02c37328091abfede86c7c8cb802852985a37147bfa19 |
| iisexpressshim.sdb | SHA256 | 09f53e68e55a38c3e989841f59a9c4738c34c308e569d23315fd0e2341195856 |
| cachuri.dll | SHA256 | aa5ff1126a869b8b5a0aa72f609215d8e3b73e833c60e4576f2d3583cc5af4f4 |
| DropboxUpdate.bin | SHA256 | c7e2dbc3df04554daa19ef125bc07a6fa52b5ea0ba010f187a082dc9fc2e97ed |
| iisexpressshim.sdb | SHA256 | a217fe01b34479c71d3a7a524cb3857809e575cd223d2dd6666cdd47bd286cd6 |
| adobe.jar | SHA256 | efc373b0cda3f426d25085938cd02b7344098e773037a70404c6028c76cc16fc |
| MSSharePoint.vbs | SHA256 | 6c08a004a915ade561aee4a4bec7dc588c185bd945621ec8468575a399ab81f4 |
| cloud.bat | SHA256 | ea8a00813853038820ba50360c5c1d57a47d72237e3f76c581d316f0f1c6e85f |
| logo.png | SHA256 | 82e94417a4c4a6a0be843ddc60f5e595733ed99bbfed6ac508a5ac6d4dd31813 |
| iisutil2.dll | SHA256 | 47af8a33aac2e70ab6491a4c0a94fd7840ff8014ad43b441d01bfaf9bf6c4ab7 |
| SoftwareUpdate.exe | SHA256 | a166751b82eac59a44fd54cf74295e71e7e95474fc038fc8cca069da05158586 |
| Wdiservicehost.exe (renombrado mcoemcpy.exe) | SHA256 | 3124fcb79da0bdf9d0d1995e37b06f7929d83c1c4b60e38c104743be71170efe |
| TpmInit.exe | SHA256 | 29863f612d2da283148cb327a1d57d0a658d75c8e65f9ef4e5b19835855e981e |
| 51.81.29[.]44 | IP | DNS: kpi.adcconnect[.]me ASN: OVH SAS |
| 5.230.35[.]192 | IP | DNS: dupbleanalytics[.]net DNS: get.dupbleanalytics[.]net NS: 3-get.njalla[.]fo NS: 2-can.njalla[.]in NS: 1-you.njalla[.]no SOA: you.can-get-no[.]info ASN: GHOSTnet GmbH |
| 185.198.57[.]184 | IP | DNS: fbcn.enantor[.]com DNS: cdn.arlialter[.]com DNS: ww1.erabend[.]com DNS: var.alieras[.]com ASN: Host Sailor Ltd |
| 185.43.220[.]188 | IP | ASN: WIBO Baltic UAB |
| 193.107.109[.]148 | IP | DNS: base.msteamsapi[.]com |
| 46.183.223[.]79 | IP | DNS: cds55[.]lax8[.]setalz[.]com DNS: hx-in-f211[.]popfan[.]org DNS: adobe[.]riceaub[.]com |
| 176.103.63[.]48 | IP | DNS: priv[.]manuelleake[.]com DNS: blank[.]eatherurg[.]com |
| hx-in-f211[.]popfan[.]org | Dominio | A: 46.183.223[.]79 |
| cds55[.]lax8[.]setalz[.]com | Dominio | A: 46.183.223[.]79 |
| adobe[.]riceaub[.]com | Dominio | A: 46.183.223[.]79 |
| priv[.]manuelleake[.]com | Dominio | A: 176.103.63[.]48 |
| blank[.]eatherurg[.]com | Dominio | A: 176.103.63[.]48 |
| cdn.arlialter[.]com | Dominio | 185.198.57[.]184 |
| fbcn.enantor[.]com | Dominio | 185.198.57[.]184 |
| ww1.erabend[.]com | Dominio | 185.198.57[.]184 |
| var.alieras[.]com | Dominio | 185.198.57[.]184 |
Mapeo de MITRE ATT&CK
| Indicador | MITRE ATT&CK | Nota |
|---|---|---|
| whoami /priv | T1033: System Owner/User Discovery | |
| schtasks /create /sc minute /mo 300 /tn Handler{60396-307392-03497-03790-3702046} /tr "C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Windows\CloudStore\cloud.bat" /f | T1053.005: Scheduled Task/Job: Scheduled Task | |
| cmd.exe /c C:\Users\Public\Downloads\1.bat | T1059.003: Command and Scripting Interpreter: Windows Command Shell T1047: Windows Management Instrumentation T1057: Process Discovery | 1.bat se estaba ejecutando mediante Windows Management Instrumentation para enumerar procesos |
| net group "Domain Admins" /domain | T1087.002: Account Discovery: Domain Account T1069.002: Permission Groups Discovery: Domain Groups | |
| nltest /dclist:<REDACTED>.local | T1018: Remote System Discovery | |
| schtasks /create /sc MINUTE /mo 300 /tn "Microsoft\Windows\WindowsColorSystem\Calibration_Update" /tr "C:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\Calibre.exe" /f | T1053.005: Scheduled Task/Job: Scheduled Task T1574.002: Hijack Execution Flow: DLL Side-Loading T1036.004: Masquerading: Masquerade Task or Service T1036.005: Masquerading: Match Legitimate Name or Location | |
| cmd.exe /c echo a0e3d8a67d0 > \.\pipe\a64009 | T1134.001: Access Token Manipulation: Token Impersonation/Theft T1559: Inter-Process Communication | |
| wmic /node:<REDACTED> /user:<REDACTED> /password:<REDACTED> process call create "cmd.exe /c start c:\Users\<REDACTED>\AppData\Roaming\Microsoft\SPMigration\Bin\calibre.exe" | T1047: Windows Management Instrumentation T1078.002: Valid Accounts: Domain Accounts | |
| cmd /c shutdown /r /m \\<REDACTED> /t 0 /f | T1529: System Shutdown/Reboot | |
| ipconfig /all | T1016: System Network Configuration Discovery | |
| net view | T1135: Network Share Discovery | |
| net use | T1021.002: Remote Services: SMB/Windows Admin Shares | |
| netstat -ano | T1049: System Network Connections Discovery | |
| schtasks /create /sc MINUTE /mo 15 /tn "96d09a49-98ed-4b12-936a-c8715d2d2c0e" /tr "C:\Users\<REDACTED>\Appdata\Roaming\Adobe\bin\javaw.exe -jar C:\Users\<REDACTED>\Appdata\Roaming\Adobe\msadobe.jar zfhqq01v" /f | T1053.005: Scheduled Task/Job: Scheduled Task T1036.005: Masquerading: Match Legitimate Name or Location | |
| net view \\<REDACTED> /all | T1135: Network Share Discovery | |
| net use \\<REDACTED> /u:<REDACTED> <REDACTED> | T1021.002: Remote Services: SMB/Windows Admin Shares T1078.002: Valid Accounts: Domain Accounts | |
| cmd /c for /f "tokens=*" %G in ('dir /b "%localappdata%\Google\Chrome\User Data\Profile *"') do copy "%localappdata%\Google\Chrome\User Data%G\Network\Cookies.bak" "%localappdata%\Google\Chrome\User Data%G\Cookies" /y | T1555.003: Credentials from Password Stores: Credentials from Web Browsers T1539: Steal Web Session Cookie | |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Microsoft Compatibility Appraiser\{8BCC608C-CE2C-475E-85CB-AE0EC95EAC64}\cachuri.dll | T1546.015: Event Triggered Execution: Component Object Model Hijacking T1559.001: Inter-Process Communication: Component Object Model T1036.004: Masquerading: Masquerade Task or Service T1036.005: Masquerading: Match Legitimate Name or Location | HKU |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\cachuri.dll | T1546.015: Event Triggered Execution: Component Object Model Hijacking T1559.001: Inter-Process Communication: Component Object Model T1036.004: Masquerading: Masquerade Task or Service T1036.005: Masquerading: Match Legitimate Name or Location | HKU |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\AD RMS Rights Policy Template Management (Automated)\{2A918D97-CCFE-4BE6-AB0E-D56A2E3F503D}\cachuri.dll | T1546.015: Event Triggered Execution: Component Object Model Hijacking T1559.001: Inter-Process Communication: Component Object Model T1036.004: Masquerading: Masquerade Task or Service T1036.005: Masquerading: Match Legitimate Name or Location | HKU |
| c:\users\<REDACTED>\appdata\roaming\microsoft\installer\{02594fe8-1152-e41e-a75e-923494c7b453}\dropboxupdate.exe | T1547.001: Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder T1574.002: Hijack Execution Flow: DLL Side-Loading | DropboxUpdate_{02594FE8-1152-E41E-A75E-923494C7B453} |
| c:\windows\sysnative\gpupdate.exe | T1055: Process Injection | Cobalt Strike usa un método Fork and Run para inyectarse en gpupdate.exe |
| C:\programdata\adobe\node.exe -e require('C:\ProgramData\adobe\1lpiozkc.node') | T1218.007: System Binary Proxy Execution: JavaScript | |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\iisutil2.dll | T1027.001: Obfuscated Files or Information: Binary Padding T1129: Shared Modules T1027.007: Obfuscated Files or Information: Dynamic API Resolution T1027.013: Obfuscated Files or Information: Encrypted/Encoded File T1036.004: Masquerading: Masquerade Task or Service T1036.005: Masquerading: Match Legitimate Name or Location | |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Microsoft Compatibility Appraiser\{8BCC608C-CE2C-475E-85CB-AE0EC95EAC64}\iisexpressshim.sdb C:\Users\<REDACTED>\AppData\Roaming\Microsoft\UpdateLibrary\{1F7CFAF8-B558-4EBD-9526-203135A79B1D}\logo.png | T1027.003: Obfuscated Files or Information: esteganografía T1036.008: Masquerading: Masquerade File Type | Se disfrazó como un archivo sdb legítimo basándose únicamente en la extensión |
| C:\Users\<REDACTED>\AppData\Roaming\Microsoft\Windows\CloudStore\MSSharePoint.vbs | T1105: Ingress Tool Transfer T1059.005: Command and Scripting Interpreter: Visual Basic | Se usó un script VBS para descargar archivos desde un servidor C2 remoto a través de SSH |
| C:\Users\<REDACTED>\AppData\Roaming\WdiServiceHost_339453944\WdiServiceHost.exe | T1574.002: Hijack Execution Flow: DLL Side-Loading T1036.004: Masquerading: Masquerade Task or Service T1036.005: Masquerading: Match Legitimate Name or Location | |
| C:\ProgramData\Apple\Installer Cache\SoftwareUpdate.exe | T1574.002: Hijack Execution Flow: DLL Side-Loading T1036.004: Masquerading: Masquerade Task or Service | |
| Service: Adobe_Reader | T1543.003: Create or Modify System Process: Windows Service | |
| TpmInit.exe | T1218.011: System Binary Proxy Execution: Rundll32 T1036.005: Masquerading: Match Legitimate Name or Location | TpmInit.exe se ejecutó y lanzó una DLL maliciosa mediante el uso de Rundll32.exe |
| 51.81.29[.]44 | T1573.002: Asymmetric Cryptography | La infraestructura detrás de las direcciones IP usadas por Cobalt Strike aprovecha certificados TLS para el tráfico de C2 |
| 51.81.29[.]44 cdn.arlialter[.]com fbcn.enantor[.]com ww1.erabend[.]com var.alieras[.]com | T1583.004: Acquire Infrastructure: Server T1583.001: Acquire Infrastructure: Domains |