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 actor de amenazas utilizó un popular portal de noticias en Ucrania, ukr.net, para alojar la puerta trasera de Sheriff. La puerta trasera modular puede ejecutar comandos dirigidos por actores, recopilar capturas de pantalla y exfiltrar de forma encubierta los datos de las víctimas usando la API de almacenamiento en la nube de Dropbox. Durante la investigación, X-Force identificó actividades maliciosas similares a las de CloudWizard APT y Turla (también conocido como ITG12), dos grupos de amenazas vinculados a 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 "MyFunc". Contiene una ruta relativa codificada a la DLL del módulo Sheriff Downloader en un recurso en ruso con el nombre "LoaderPath". La ruta codificada es
que se concatena con la siguiente ruta: “%USERPROFILE%\AppData\”.
A continuación, el DLL utiliza la API CLRCreateInstance para alojar Common Language Runtime (CLR) de .NET. La función Loader.MainCycle.Run del módulo de DLL Sheriff Downloader se ejecuta con el método ExecuteInDefaultAppDomain.
Esta técnica se detalló recientemente en una entrada en el blog de X-Force como una técnica de equipo rojo.
Deputy Loader también proporciona las rutas de ambas DLL como argumentos separados por un punto y coma (";").
El módulo Sheriff Downloader es una DLL x86 .NET, que contiene una biblioteca (dotnetzip.dll) empaquetada en un recurso que utiliza Fody Costura.
La clase "MainCycle" contiene la función principal "Run", que comienza recuperando cuatro valores almacenados dentro de los recursos en ruso del binario:
Usando estos, la muestra intenta descargar un archivo desde
en la carpeta
Si el archivo ya existe, se omite el comportamiento de descarga y el malware actúa solo como cargador.
A continuación, descifra la carga útil a través de la biblioteca “SymmetricCrypt” implementada a medida 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 y revela al menos dos archivos que se ordenan por tamaño de archivo. Finalmente, el primer archivo (Módulo principal de Sheriff) se carga reflexivamente 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 suministra al ensamblado de ejecución como un argumento de objeto de lista, junto con las rutas de la DLL del cargador adjunto, la DLL del descargador de Sheriff y la carga útil descargada "RDZXVh".
La URL de descarga genera inquietudes de inmediato, ya que el host ukr.net está clasificado como el cuarto sitio web más visitado en 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 también servicios de alojamiento, por lo general los usuarios no pueden alojar archivos en directorios raíz arbitrarios en el servidor web principal. Por lo tanto, es probable que el actor de amenazas comprometiera ukr.net para organizar la carga útil de puerta trasera cifrada de 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 los posicionaría para llevar a cabo una serie de ataques de alto impacto y operar con mayor ofuscación. En este incidente concreto, el actor de amenazas pudo haber abusado del dominio de confianza para introducir malware sin levantar sospechas.
El módulo principal de Sheriff es una DLL x86 .NET, que nuevamente contiene una biblioteca (dotnetzip.dll) empaquetada en un recurso que utiliza Costura.
Cuando se ejecuta por primera vez, la función "Ejecutar" en la clase principal comienza leyendo 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 | Clave AES utilizada para descifrar la configuración |
ConfName | Nombre 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 empleada 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 son de dos conjuntos diferentes de claves, lo que impidió el descifrado de 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 (";"):
No se encontró ningún módulo "clave" durante la investigación. Este módulo podría haber sido responsable de establecer la persistencia de la DLL de Deputy Loader, que escribe la siguiente clave de registro:
La clave contiene el comando para ejecutar la exportación MyFunc del cargador adjunto:
La comunicación de comando y control se gestiona a través de una 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 vía la siguiente URL:
Estos endpoints de 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 está encriptado con XOR utilizando el ID de la víctima que consiste en el GUID (a partir de los argumentos o generado aleatoriamente) y el número de serie. Después del cifrado, el registro se sube a 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, analizaremos cómo el módulo principal maneja los archivos descargados.
El proceso de carga comienza enumerando todos los archivos locales en "UploadLocalFolder", en este caso codificado como "/gyTufW". Según 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 con una clave AES generada aleatoriamente que, a su vez, se cifra con 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 completamente comprimidos y cifrados. Luego, se cargan en la carpeta de Dropbox en /<victim_id>/Up/ mientras se eliminan localmente.
Tanto las funciones de carga como 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 alojaba 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, descifrándolos 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 separa en varios valores a través del símbolo de barra vertical ("|") y más adelante en subvalores separados por un 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 se pueden leer como un archivo de texto usando el comando "C":
Patrón de comando | Descripción |
(árbol) <path_1> <path_2> ... | Carga archivos desde una lista de rutas especificadas. |
(árbol) <path_1> <path_2> ... | Elimina archivos de una lista de rutas especificadas y carga un mensaje de registro “Los archivos se eliminaron: <number_of_files>” |
(cmd); | Ejecuta cada valor como un comando separado en un nuevo proceso “cmd.exe /c <value>“, lee stdout y stderr, y lo carga como un archivo cifrado RSA en Dropbox. |
[modname]; | Inserta 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 eliminará todos los módulos, quitará 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 "Ejecutar" del módulo principal iterará a través de cada módulo cargado e invocará el "ConfigMethod", proporcionando la configuración del módulo correspondiente analizada desde el archivo de configuración original. Es probable que esto permita a los operadores actualizar fácilmente las configuraciones de varios módulos mientras se están ejecutando.
Uno de los módulos recuperados durante la investigación es el módulo Captura 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. Con 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 verificará cada 5 segundos (TimerCount) si puede tomar una captura de pantalla. Para tomar una captura de pantalla, se debe cumplir una de las siguientes condiciones:
Durante cada disparo, si el número de disparos alcanza "ImageCount", las capturas de pantalla existentes se agregan 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 se formatea como {0:yyyy.MM.dd_HH.mm.ss.ffff}.<defaultZip> empleando 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 a continuación.
El módulo principal de Sheriff también contiene una función Suicidio, que se puede invocar de forma remota. La función detiene toda la actividad de descarga y carga y luego itera a través de cada módulo para invocar el "KillMethod" correspondiente. Luego procede a eliminar todo el directorio que contiene el módulo principal y la carpeta global en 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.
Finalmente, Sheriff inserta las rutas del "cargador" (Sheriff Downloader Module) y "LoadDll" (Advice Loader) en el siguiente archivo BAT, lo deja caer a %TMP% y lo ejecuta:
El script anterior eliminará los archivos tanto del módulo Sheriff Downloader como del cargador adjunto, así como sus respectivos directorios, antes de eliminarse a sí mismo.
Durante el análisis, varios indicadores iniciales apuntan a actores de amenazas con sede en Rusia, entre ellos:
X-Force evalúa que la puerta trasera de Sheriff es probablemente una herramienta diseñada para el espionaje cibernético y la recopilación de inteligencia frente a los delitos cibernéticos motivados financieramente. El malware se enfoca en exfiltrar datos y tomar capturas de pantalla mientras mantiene un perfil bajo diseñado para compromisos prolongados. Se desarrolló con la clara intención de permanecer lo más encubierto posible, garantizando que la comunicación y la mayoría de los artefactos que se depositan en el disco permanezcan encriptados. La comunicación de red sigue siendo sigilosa gracias al uso indebido de la API legítima de Dropbox, así como de ukr.net, un sitio web popular en Ucrania, que se utiliza para alojar el malware. Sheriff también implementa varias funciones autodestructivas para eliminar los rastros después de la ejecución. Por último, el código bien estructurado, la estructura de carpetas, la implementación modular, el registro y la funcionalidad y configurabilidad completas indican un mayor nivel de sofisticación, como cabría esperar de un grupo patrocinado por el Estado.
La investigación también reveló varias superposiciones menores con campañas previamente documentadas atribuidas al conocido grupo de actores de amenazas ruso-nexo Turla (alias ITG12). Por ejemplo, la puerta trasera Kazuar.NET del grupo muestra varias similitudes con Sheriff, incluyendo:
De manera notable, la puerta trasera Muletch atribuida a Turla por ESET también emplea la API de Dropbox para la comunicación C2 de forma similar a Sheriff, aunque no es . Basado en RED.
Investigaciones adicionales también revelaron las superposiciones de Sheriff con la puerta trasera Prikormka de la Operación Groundbait, que incluyen:
Kaspersky Labs documentó posteriormente fuertes superposiciones entre Prikormka y CloudWizard APT. X-Force también observó varias similitudes entre Sheriff y CloudWizard, entre ellas:
X-Force cree que la puerta trasera de Sheriff se utilizó como parte de una operación dirigida. El malware posiblemente esté relacionado con CloudWizard APT, alineado con Rusia, que se sabe que se dirigió a 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 dentro de las operaciones de espionaje cibernético detalladas en este informe muestra varias características interesantes. En primer lugar, la puerta trasera de 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 alojar el malware en ukr.net también es indicativa de las avanzadas capacidades del actor de amenazas.
X-Force recomienda que las personas y entidades asociadas con el gobierno, el ejército o el sector de defensa de Ucrania permanezcan en un estado de mayor seguridad defensiva y que:
Para que la atribución sea más transparente y fomentar una mayor colaboración entre los investigadores, IBM X-Force cargó las muestras en 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 captura de pantalla descifrado |
ec84ae8db92a88109bc68baefc3b | SHA256 | Módulo de captura de pantalla de Sheriff “NexSV” |
f9e237a939b998fe071e0101904f7d | SHA256 | Módulo de descarga de Sheriff “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, del que abusan con frecuencia los autores de malware. |
IBM X-Force Premier Threat Intelligence ahora está integrado con OpenCTI, lo que ofrece inteligencia de amenazas aplicable en la práctica sobre esta actividad de amenazas y más. Acceda a insights sobre los actores de amenazas, el malware y los riesgos de la industria. Instale el OpenCTI Connector para mejorar la detección y la respuesta, reforzando su ciberseguridad con la experiencia de IBM X-Force. Manténgase a la vanguardia e integre hoy mismo.