IBM X-Force descubre una nueva puerta trasera utilizada para atacar a Ucrania
IBM X-Force descubrió un conjunto de malware desconocido hasta ahora (Sheriff backdoor) utilizado en un ataque de ciberespionaje contra una entidad del sector de la defensa de Ucrania durante la primera mitad de 2024. El autor de la amenaza utilizó un popular portal de noticias ucraniano, ukr.net, para alojar la puerta trasera Sheriff. La puerta trasera modular puede ejecutar comandos dirigidos por el atacante, recopilar capturas de pantalla y extraer de forma encubierta los datos de la víctima utilizando la API de almacenamiento en la nube de Dropbox. Durante la investigación, X-Force identificó actividad de amenazas similar a CloudWizard APT y Turla (alias ITG12), ambos grupos de amenazas relacionados con Rusia que tenían como objetivo entidades ucranianas.
Durante la investigación, X-Force reconstruyó la siguiente cadena de infección:
La muestra analizada es una DLL x86 que contiene una única exportación denominada "MyFunc". En ella se encuentra una ruta relativa codificada de forma fija al módulo DLL Sheriff Downloader, en un recurso en ruso denominado "LoaderPath". La ruta codificada es
que se concatena con la siguiente ruta: “%USERPROFILE%\AppData\”.
A continuación, la DLL utiliza la API CLRCreateInstance para alojar el Common Language Runtime (CLR) de .NET. La función Loader.MainCycle.Run de la DLL del módulo Sheriff Downloader se ejecuta mediante el método ExecuteInDefaultAppDomain .
Esta técnica se detalló recientemente en una entrada de blog de X-Force como una técnica de red team.
Deputy Loader también proporciona las rutas de ambas DLL como argumentos separados por punto y coma ("; ").
El módulo Sheriff Downloader es una DLL .NET x86 que contiene una biblioteca (dotnetzip.dll) empaquetada en un recurso mediante Fody Costura.
La clase "MainCycle" contiene la función principal "Run", que comienza recuperando cuatro valores almacenados en los recursos en ruso del binario.
Con ellos, la muestra intenta descargar un archivo desde
en la carpeta
Si el archivo ya existe, se omite la descarga y el malware actúa únicamente como cargador.
A continuación, se descifra la carga útil mediante la biblioteca "SymmetricCrypt" implementada de forma personalizada y la contraseña "BS7imxwRXueassn". El algoritmo parece ser idéntico al cifrado AES integrado en .NET (https://gist.github.com/jbtule/4336842#file-aesthenhmac-cs).
El archivo ZIP resultante se extrae en la memoria, revelando al menos dos archivos que se ordenan por tamaño. Por último, el primer archivo (Sheriff Main Module) se carga de forma reflexiva como un ensamblado .NET, llamando al método "MainClass.Run". El último archivo (Sheriff Init File) se lee línea por línea y se proporciona al ensamblado en ejecución como un argumento de objeto de lista, junto con las rutas de la DLL Deputy Loader, la DLL Sheriff Downloader y la carga útil descargada "RDZXVh".
La URL de descarga suscita inquietudes de inmediato, ya que ukr.net ocupa el cuarto lugar entre los sitios web más visitados de Ucrania, según Semrush. Ukr.net también es un proveedor de servicios de internet (ISP), un popular proveedor de correo electrónico y aloja uno de los portales de noticias más grandes de Ucrania, con más de 100 millones de visitas al mes. Aunque ukr.net parece ofrecer servicios de alojamiento, los usuarios no suelen poder alojar archivos en directorios raíz arbitrarios del servidor web principal. Por tanto, es probable que el actor amenazas haya comprometido ukr.net para instalar la carga útil cifrada de la puerta trasera Sheriff a principios de marzo de 2024.
En el momento de la investigación, la carga útil no estaba disponible y X-Force no pudo identificar otras cargas útiles maliciosas alojadas en ukr.net. Es posible que el acceso del actor de amenazas fuera limitado en alcance, solo disponible por un corto periodo de tiempo, o que se usara intencionadamente con moderación. El acceso de un actor de amenazas al portal de noticias más grande de Ucrania le permitiría llevar a cabo una serie de ciberataques de gran impacto y operar con mayor ocultación. En este incidente concreto, el actor de amenazas pudo haber abusado del dominio de confianza para instalar malware sin levantar sospechas.
El módulo principal Sheriff es una DLL x86 .NET que, a su vez, contiene una biblioteca (dotnetzip.dll) empaquetada en un recurso mediante Costura.
Al ejecutarse por primera vez, la función "Run" de la clase principal lee los argumentos recibidos como una lista del archivo de inicialización de Sheriff. Asigna los siguientes valores:
La siguiente tabla enumera una explicación para cada uno de los argumentos:
Nombre | Explicación |
| _symKey | La clave AES utilizada para descifrar la configuración |
ConfName | Nombre de archivo del archivo de configuración |
ModulsFolder | Nombre de la carpeta utilizada para descargar más módulos |
UploadLocalFolder | Nombre de la carpeta utilizada para exfiltrar datos |
_defaultZipExt | Extensión predeterminada utilizada para identificar archivos ZIP |
RefreshToken | Token de actualización de OAuth para la autenticación con la API de Dropbox |
_guid | Cadena utilizada junto con el número de serie como ID de víctima |
_asymPrivKey | Clave privada RSA utilizada para descifrar los módulos descargados |
_asymPubKey | Clave pública RSA utilizada para cifrar datos antes de la exfiltración |
Las claves asimétricas provienen de dos conjuntos de claves diferentes, lo que impidió descifrar los datos de exfiltración durante la investigación.
A continuación, Sheriff crea las carpetas locales de carga y descarga. Si no está presente, el archivo de configuración mlvn.cfg se escribe cuando se ejecuta por primera vez el módulo principal de Sheriff. Después de eso, se puede leer y modificar para mantener configuraciones separadas para cada módulo. El archivo de configuración descifrado contiene los siguientes valores para el módulo "principal", separados por un punto y coma (";"):
Durante la investigación no se encontró ningún módulo "clave". Este módulo podría haber sido el responsable de establecer la persistencia del cargador secundario DLL, que escribe la siguiente clave de registro:
La clave contiene el comando para ejecutar la exportación MyFunc del Deputy Loader:
Las comunicaciones de comando y control se gestionan a través de la clase "DbApiV2", que utiliza la API de Dropbox para crear, buscar, descargar, cargar, mover y analizar archivos y carpetas remotos en Dropbox. Utiliza el token de actualización para obtener un token de acceso temporal para la autenticación a través de la siguiente URL:
Estos endpoints de la API se utilizan para gestionar archivos y carpetas remotos:
Antes de intentar descargar archivos, el módulo principal de Sheriff carga un mensaje de registro que contiene la dirección IP pública de la víctima y la lista de módulos cargados. El registro se cifra por XOR usando el ID de la víctima, que consiste en el GUID (de los argumentos o generados aleatoriamente) y el número de serie. Tras el cifrado, el registro se carga en una carpeta de Dropbox cuyo nombre coincide con el ID de la víctima.
Todos los archivos se recuperan de la carpeta de Dropbox en /<victim_id>/Dow/ y se descargan en la "ModulsFolder" local codificada como "/DxyVS1". Después de la descarga, todos los archivos se eliminan instantáneamente de Dropbox. A continuación, hablaremos de cómo el módulo principal gestiona los archivos descargados.
El proceso de carga comienza enumerando todos los archivos locales en "UploadLocalFolder", en este caso codificado como "/gyTufW". Dependiendo de sus extensiones, se clasifican en tres categorías:
La función "PreparingForUpload" comprimirá todos los archivos de texto sin cifrar en un nuevo archivo ZIP. Todos los archivos ZIP se cifran posteriormente utilizando una clave AES generada aleatoriamente que, a su vez, se cifra utilizando la clave RSA pública y se concatena con el archivo cifrado. Durante la ejecución, la función elimina todos los archivos residuales de la carpeta hasta que solo quedan archivos totalmente comprimidos y cifrados. A continuación, se cargan en la carpeta de Dropbox en /<victim_id>/Up/ mientras se eliminan localmente.
Tanto la función de carga como la de descarga se ejecutan de forma asíncrona y se ejecutan con un temporizador codificado a 30 segundos en la muestra analizada.
En el momento de la investigación, la cuenta de Dropbox ya no albergaba ningún archivo, como indica el uso del espacio:
La cuenta de Dropbox asociada muestra la siguiente información:
La tarea del módulo principal de Sheriff es actuar como orquestador para lanzar y gestionar diferentes módulos. Estos módulos se pueden descargar a través del proceso descrito anteriormente, uno de los cuales se descubrió durante la investigación ("./DxyVS1/dowtuxZml").
La función "LoadModuls" itera a través de los archivos descargados, y los descifra utilizando la clave privada RSA y la clave AES resultante. El archivo ZIP descifrado contiene una cadena de comentarios, que se utiliza para analizar el módulo:
El comentario se divide en varios valores mediante el símbolo de barra vertical ("|") y, a su vez, en subvalores separados por punto y coma (";").
La siguiente es una descripción de los valores después del análisis:
Sheriff acepta los siguientes comandos:
Comando y descripción
La segunda tabla detalla una lista de comandos que pueden leerse como un archivo de texto usando el comando "C":
Patrón de comandos | Descripción |
(tree) <path_1> <path_2> ... | Carga archivos desde una lista de rutas especificadas. |
(treedel) <path_1> <path_2> ... | Elimina archivos de una lista de rutas especificadas y carga un mensaje de registro “Files were deleted: <number_of_files>” |
(cmd); | Ejecuta cada valor como un comando independiente en un nuevo proceso "cmd.exe /c <value> ", lee stdout y stderr, y lo carga como un archivo cifrado RSA en Dropbox. |
[modname]; | Inserte la cadena completa en el archivo de configuración. Tenga en cuenta que el "modname" es idéntico al marcador de un módulo. |
{modname}; | Si el “modname” es “Suicide”, Sheriff matará todos los módulos, eliminará todos los archivos y ejecutará un script de limpieza. Si el “modname” coincide con un módulo cargado, invocará el “KillMethod” y eliminará su archivo correspondiente. |
Una vez cargados todos los módulos, la función "Run" del módulo principal recorrerá cada módulo cargado e invocará "ConfigMethod", proporcionando la configuración del módulo correspondiente, tal y como se ha analizado en el archivo de configuración original. Es probable que esto permita a los operadores actualizar fácilmente las configuraciones de varios módulos mientras están en ejecución.
Uno de los módulos recuperados durante la investigación es el módulo de capturas de pantalla. Cuando se carga el módulo, recibe los siguientes argumentos del módulo principal:
El módulo aún contiene un valor predeterminado "tgr" para "defaultZip", que se sobrescribe en ese punto. Utilizando el "ConfigMethod" del módulo, el módulo principal también puede especificar los siguientes valores de configuración:
Una vez iniciado, el módulo comprobará cada 5 segundos (TimerCount) si puede realizar una captura de pantalla. Para hacer una captura de pantalla, debe cumplirse una de las siguientes condiciones:
Durante cada captura, si el número de capturas alcanza "ImageCount", las capturas de pantalla existentes se añaden a un archivo ZIP con formato {0:yyyy.MM.dd_HH.mm.ss}.jpg utilizando el objeto "DateTime" de la captura de pantalla.
El nombre del archivo ZIP tiene el formato {0:yyyy.MM.dd_HH.mm.ss.ffff}.<defaultZip> utilizando el objeto "DateTime" en el que se crea el ZIP. El archivo ZIP también recibe un comentario que consiste en el marcador del módulo ("scr"), como se muestra en la captura de pantalla siguiente.
El módulo principal de Sheriff también contiene una función Suicide que se puede invocar de forma remota. Esta función detiene toda la actividad de descarga y carga, y luego recorre cada módulo para invocar el "KillMethod" correspondiente. A continuación, procede a eliminar todo el directorio que contiene el módulo principal y la carpeta global de Dropbox utilizada para la comunicación C2. A continuación, la función busca la ruta de la DLL del cargador de primera etapa (cargador adjunto) dentro de las subclaves del registro a continuación:
Cualquier subclave que contenga la ruta se elimina posteriormente.
Por último, Sheriff inserta las rutas del "cargador" (módulo Sheriff Downloader) y "loadDll" (cargador adjunto) en el siguiente archivo BAT, lo coloca en %TMP% y lo ejecuta.
El script anterior eliminará los archivos de los módulos Sheriff Downloader y Deputy Loader, así como sus respectivos directorios, antes de eliminarse a sí mismo.
Durante el análisis, varios indicadores iniciales apuntan a actores de amenazas con base en Rusia, entre ellos:
X-Force considera que la puerta trasera Sheriff probablemente se diseñó para el ciberespionaje y la recopilación de información, más que para cometer delitos cibernéticos con fines económicos. El malware se centra en exfiltrar datos y tomar capturas de pantalla, manteniendo un perfil bajo diseñado para compromisos prolongados. Se desarrolló con la clara intención de mantenerse lo más encubierta posible, asegurando que la comunicación y la mayoría de los artefactos que se depositan en el disco permanezcan cifrados. La comunicación en la red se mantiene sigilosa mediante el abuso de la API legítima de Dropbox, así como de ukr.net, un sitio web popular en Ucrania, que se utiliza para escenificar el malware. Sheriff también implementa varias funciones autodestructivas para borrar los rastros después de la ejecución. Por último, el código bien estructurado, la estructura de carpetas, la implementación modular, la información de registro y la amplia funcionalidad y configurabilidad indican un mayor nivel de sofisticación, como cabría esperar de un grupo patrocinado por el Estado.
La investigación también ha revelado varios solapamientos menores con campañas anteriormente documentadas y atribuidas al conocido grupo de actores de amenazas rusos Turla (también conocido como ITG12). Por ejemplo, la puerta trasera Kazuar .NET del grupo presenta varias similitudes con Sheriff, entre ellas:
Cabe destacar que la puerta trasera Crutch, atribuida a Turla por ESET, también utiliza la API de Dropbox para la comunicación C2, de forma similar a Sheriff, aunque no está basada en .NET.
Investigaciones posteriores también revelaron coincidencias entre Sheriff y la puerta trasera Prikormka de la operación Groundbait, entre ellas:
Kaspersky Labs documentó posteriormente fuertes superposiciones entre Prikormka y CloudWizard APT. X-Force también notó varias similitudes entre Sheriff y CloudWizard, incluyendo:
X-Force cree que la puerta trasera de Sheriff se utilizó como parte de una operación selectiva. Es posible que el malware esté relacionado con el APT CloudWizard, alineado con Rusia, que se sabe que ha atacado entidades en Ucrania en el pasado. Existe una menor posibilidad de conexión con el clúster de amenazas Turla (ITG12) debido a superposiciones menores en TTP y malware.
La puerta trasera de Sheriff y su uso en las operaciones de ciberespionaje detalladas en este informe presenta varias características interesantes. En primer lugar, la puerta trasera Sheriff es una herramienta de espionaje modular bien diseñada que permite el acceso a largo plazo al entorno de la víctima. En segundo lugar, su estructura modular y sus características de autodestrucción ponen de manifiesto la preocupación de los desarrolladores por la detección y el análisis de sus herramientas. Además, la capacidad de escenificar el malware en ukr.net también es indicativa de las capacidades avanzadas del actor de amenazas.
X-Force recomienda que las personas y entidades asociadas al gobierno, el ejército o el sector de defensa de Ucrania permanezcan en un estado elevado de seguridad defensiva y que:
Con el fin de que la atribución sea más transparente y de fomentar una mayor colaboración entre los investigadores, IBM X-Force subió las muestras a VirusTotal.
Indicador | Tipo de indicador | Contexto |
60f20be29cafea3402c8cb396 | SHA256 | Módulo principal cifrado "RDZxvh" |
86b8d48df5787d57836276219 | SHA256 | Archivo de inicialización de Sheriff “n5K3B” |
8832fb7ef434a56f9d151d8e1eb | SHA256 | Cargador adjunto “t5cby.dll” |
8c22326d08a6334181c06e25c6 | SHA256 | Módulo de captura de pantalla cifrada “dowtuxZmI” |
8d4df90f4e7fc6d9d08d4b5a27 | SHA256 | Módulo principal de Sheriff “1Pr3v” |
92b9ef4e81610487ea9df255fa83 | SHA256 | Archivo de configuración de Sheriff "mInv.cfg" |
e2b892533bd4135004778783b95 | SHA256 | Archivo ZIP del módulo de capturas de pantalla desencriptado |
ec84ae8db92a88109bc68baefc3b | SHA256 | Módulo de captura de pantalla del Sheriff "NeXSv" |
f9e237a939b998fe071e0101904f7d | SHA256 | Módulo Sheriff Downloader "DZtdI.dll" |
http://ukr[.]net/8V3fDJ0U/RDZXV | URL | URL de descarga de Sheriff. Tenga en cuenta que ukr.net es un sitio web legítimo. |
https://api.ipify[.]org | URL | Servicio legítimo utilizado para determinar la dirección IP pública, frecuentemente utilizado de forma indebida por los autores de malware. |
IBM® X-Force Premier Threat Intelligence ahora está integrado con OpenCTI, brindando inteligencia de amenazas procesable sobre esta actividad de amenazas y más. Acceda a conocimientos sobre los actores de amenazas, el malware y los riesgos del sector. Instale OpenCTI Connector para mejorar la detección y la respuesta, y refuerce su ciberseguridad con la experiencia de IBM X-Force. Manténgase a la vanguardia, integre hoy mismo.