{"id":231,"date":"2025-06-08T20:17:17","date_gmt":"2025-06-08T20:17:17","guid":{"rendered":"https:\/\/aldomonges.com\/aldomonges\/?p=231"},"modified":"2025-06-08T20:17:17","modified_gmt":"2025-06-08T20:17:17","slug":"bladedfeline-campana-de-ciberespionaje-probablemente-vinculada-a-oilrig","status":"publish","type":"post","link":"https:\/\/aldomonges.com\/aldomonges\/?p=231","title":{"rendered":"BladedFeline: campa\u00f1a de ciberespionaje probablemente vinculada a OilRig"},"content":{"rendered":"<p>En 2024, investigadores de la empresa de seguridad: ESET descubrieron varias herramientas maliciosas en los sistemas utilizados por funcionarios del gobierno kurdo e iraqu\u00ed. El grupo APT detr\u00e1s de los ataques es BladedFeline, un actor de amenazas iran\u00ed que ha estado activo desde al menos 2017, cuando comprometi\u00f3 a funcionarios dentro del Gobierno Regional del Kurdist\u00e1n (KRG). Este grupo desarrolla malware para mantener y ampliar el acceso dentro de las organizaciones en Irak y el GRK. Si bien este es nuestro primer blogpost sobre BladedFeline, descubrimos al grupo en 2023, despu\u00e9s de que atac\u00f3 a funcionarios diplom\u00e1ticos kurdos con el backdoor Shahmaran, y anteriormente informamos sobre sus actividades en los informes de ESET APT Activity Q4 2023-Q1 2024 y Q2 2024-Q3 2024.<\/p>\n<p>El conjunto de herramientas utilizadas en la reciente campa\u00f1a muestra que, desde el despliegue de Shahmaran, BladedFeline ha seguido desarrollando su arsenal. Encontramos dos t\u00faneles inversos, diversas herramientas complementarias y, sobre todo, un backdoor que denominamos Whisper y un m\u00f3dulo IIS malicioso que denominamos PrimeCache. Whisper es un backdoor que se conecta a una cuenta de correo web comprometida en un servidor Microsoft Exchange y la utiliza para comunicarse con los atacantes a trav\u00e9s de archivos adjuntos de correo electr\u00f3nico. PrimeCache tambi\u00e9n sirve como backdoor: es un m\u00f3dulo IIS malicioso relacionado con lo que denominamos Grupo 2 en nuestro art\u00edculo de 2021 Anatomy of native IIS malware. Resulta significativo que PrimeCache tambi\u00e9n tenga similitudes con el backdoor RDAT utilizada por el grupo APT OilRig, alineado con Ir\u00e1n.<\/p>\n<p>Bas\u00e1ndonos en estas similitudes de c\u00f3digo, as\u00ed como en otras pruebas presentadas en este blogpost, evaluamos con confianza media que BladedFeline es un subgrupo de OilRig, un grupo APT alineado con Ir\u00e1n que persigue a gobiernos y empresas de Oriente Medio. Ya hemos informado anteriormente sobre otras actividades vinculadas a OilRig. Para evitar confusiones, desde entonces hemos refinado nuestro seguimiento de OilRig, y ahora rastreamos ambas operaciones bajo un subgrupo separado &#8211; Lyceum &#8211; dentro de OilRig.<\/p>\n<p>BladedFeline ha trabajado constantemente para mantener el acceso il\u00edcito a funcionarios diplom\u00e1ticos kurdos, al tiempo que explotaba un proveedor regional de telecomunicaciones en Uzbekist\u00e1n y desarrollaba y manten\u00eda el acceso a funcionarios del gobierno de Irak. Este blogpost detalla los aspectos t\u00e9cnicos de los implantes iniciales entregados a los objetivos de BladedFeline, los v\u00ednculos entre las v\u00edctimas, y sienta las bases para asociar a este subgrupo con OilRig.<\/p>\n<p>Puntos clave del blogpost:<br \/>\nBladedFeline comprometi\u00f3 a funcionarios del Gobierno Regional del Kurdist\u00e1n al menos desde 2017.<br \/>\nLos implantes iniciales utilizados all\u00ed pueden rastrearse hasta OilRig.<br \/>\nDescubrimos BladedFeline despu\u00e9s de que sus operadores comprometieran a funcionarios diplom\u00e1ticos kurdos con el backdoor de firma Shahmaran del grupo en 2023.<br \/>\nEste grupo APT tambi\u00e9n se ha infiltrado en altos cargos del Gobierno de Irak.<br \/>\nEvaluamos con confianza media que BladedFeline es un subgrupo dentro de OilRig.<br \/>\nAnalizamos dos t\u00faneles inversos (Laret y Pinar), un backdoor (Whisper), un m\u00f3dulo IIS malicioso (PrimeCache) y varias herramientas complementarias.<br \/>\nVisi\u00f3n general de BladedFeline<br \/>\nBladedFeline es un grupo de ciberespionaje alineado con Ir\u00e1n, activo desde al menos 2017 seg\u00fan la telemetr\u00eda de ESET. Descubrimos al grupo en 2023 cuando despleg\u00f3 su backdoor Shahmaran contra funcionarios diplom\u00e1ticos kurdos. Shahmaran, llamado as\u00ed por una criatura m\u00edtica mitad serpiente, mitad mujer del folclore iran\u00ed, es un ejecutable portable de 64 bits que encontramos en el directorio de inicio del objetivo. Este sencillo backdoor no utiliza ning\u00fan tipo de compresi\u00f3n o cifrado para las comunicaciones de red. Tras registrarse en el servidor de C&amp;C, el backdoor ejecuta cualquier comando operador que se le proporcione, entre los que se incluyen la carga y descarga de archivos adicionales, solicitando atributos espec\u00edficos de archivo y proporicionando API de manipulaci\u00f3n de archivos y directorios.<\/p>\n<p>Como demuestra el conjunto de herramientas de la campa\u00f1a que describimos en este blogpost, desde el despliegue de Shahmaran, BladedFeline ha seguido desarrollando su malware con el fin de mantener y ampliar a\u00fan m\u00e1s su acceso al Gobierno Regional del Kurdist\u00e1n y a los altos niveles del Gobierno de Irak. Descubrimos la campa\u00f1a en 2024 tras encontrar el backdoor Whisper de BladedFeline, el backdoor PrimeCache IIS y un conjunto de herramientas poscompromiso en las redes de funcionarios diplom\u00e1ticos kurdos, funcionarios del gobierno iraqu\u00ed y un proveedor regional de telecomunicaciones en Uzbekist\u00e1n.<\/p>\n<p>Detectamos y recogimos una versi\u00f3n de Whisper y encontramos otra en VirusTotal, subida por un usuario de Irak. Son pr\u00e1cticamente id\u00e9nticas, y pudimos determinar la identidad probable de quien las subi\u00f3 a VirusTotal, bas\u00e1ndonos en los datos de la muestra de Whisper y otras muestras subidas con el mismo ID de remitente. PrimeCache, Flog (un webshell) y Hawking Listener (un implante en fase inicial que escucha en un puerto espec\u00edfico) fueron subidos a VirusTotal por el mismo remitente que subi\u00f3 las muestras de Whisper. Bas\u00e1ndonos en el enlace de Whisper y en la proximidad temporal (ambos fueron subidos en cuesti\u00f3n de minutos) creemos que fue desplegado por BladedFeline a una v\u00edctima del gobierno de Irak. Algunas de las herramientas que se mencionan a continuaci\u00f3n en la cronolog\u00eda se analizan m\u00e1s adelante en el informe (por ejemplo, Slippery Snakelet).<\/p>\n<p>Cronolog\u00eda<br \/>\n2017-09-21 \u25cf VideoSRV reverse shell on KRG system<br \/>\n|<br \/>\n2018-01-30 \u25cf RDAT backdoor on KRG system<br \/>\n|<br \/>\n2019-07-09 \u25cf Custom Plink on KRG system<br \/>\n|<br \/>\n2021-05-01 \u25cf Sheep Tunneler on KRG system<br \/>\n|<br \/>\n2023-01-23 \u25cf LSASS dumped on KRG system<br \/>\n|<br \/>\n2023-02-01 \u25cf Shahmaran backdoor on KRG system<br \/>\n|<br \/>\n2023-03-25 \u25cf First victim targeted at a telecommunications company in Uzbekistan<br \/>\n|<br \/>\n2023-06-12 \u25cf Shahmaran version 2 on KRG system for access maintenance<br \/>\n|<br \/>\n2023-12-14 \u25cf BladedFeline operators executing CLI commands on KRG system<br \/>\n|<br \/>\n2023-12-16 \u25cf Slippery Snakelet backdoor on KRG system<br \/>\n|<br \/>\n2023-12-20 \u25cf P.S. Olala (a PowerShell executor) on KRG system<br \/>\n|<br \/>\n2023-12-20 \u25cf PsExec on KRG system<br \/>\n|<br \/>\n2024-01-07 \u25cf Whisper backdoor on KRG system<br \/>\n|<br \/>\n2024-02-01 \u25cf Laret reverse tunnel on KRG system<br \/>\n|<br \/>\n2024-02-20 \u25cf Pinar reverse tunnel on KRG system<br \/>\n|<br \/>\n2024-02-29 \u25cf PrimeCache malicious IIS module uploaded to VirusTotal<br \/>\n|<br \/>\n2024-03-11 \u25cf Whisper version 2, Flog, and Hawking Listener uploaded to VirusTotal<br \/>\nAtribuci\u00f3n<br \/>\nNuestra atribuci\u00f3n de esta campa\u00f1a a BladedFeline se basa en lo siguiente:<\/p>\n<p>La campa\u00f1a est\u00e1 dirigida a miembros del Gobierno Regional del Kurdist\u00e1n, al igual que ataques anteriores realizados por BladedFeline.<br \/>\nLa actividad de ataque original dirigida a la organizaci\u00f3n KRG nos permiti\u00f3 identificar malware sucesivo, ya que BladedFeline ha intentado mantener y ampliar el acceso a la organizaci\u00f3n.<br \/>\nUn an\u00e1lisis m\u00e1s detallado de los ataques nos llev\u00f3 a identificar a la v\u00edctima de telecomunicaciones en Uzbekist\u00e1n.<br \/>\nAl mismo tiempo, investigar el backdoor Whisper nos ayud\u00f3 a identificar a la v\u00edctima del Gobierno de la India.<br \/>\nCreemos que BladedFeline tiene como objetivo al Gobierno Regional del Kurdist\u00e1n y al Gobierno de la India con fines de ciberespionaje, con la vista puesta en mantener el acceso estrat\u00e9gico a altos cargos de ambas entidades gubernamentales. La relaci\u00f3n diplom\u00e1tica del GRK con las naciones occidentales, junto con las reservas de petr\u00f3leo de la regi\u00f3n del Kurdist\u00e1n, lo convierten en un objetivo atractivo para que los actores de amenazas alineados con Ir\u00e1n esp\u00eden y potencialmente manipulen. En Irak, lo m\u00e1s probable es que estos actores intenten contrarrestar la influencia de los gobiernos occidentales tras la invasi\u00f3n y ocupaci\u00f3n estadounidense del pa\u00eds.<\/p>\n<p>Creemos con una confianza media que BladedFeline es un subgrupo de OilRig:<\/p>\n<p>Al igual que OilRig, BladedFeline tiene como objetivo organizaciones de Oriente Medio con fines de ciberespionaje.<br \/>\nHemos encontrado herramientas de OilRig (VideoSRV y RDAT) en un sistema comprometido del KRG.<br \/>\nEl m\u00f3dulo IIS malicioso PrimeCache de BladedFeline comparte similitudes de c\u00f3digo con RDAT de OilRig.<br \/>\nBladedFeline no es el \u00fanico subgrupo de OilRig que estamos vigilando: ya hemos estado siguiendo a Lyceum, tambi\u00e9n conocido como HEXANE o Storm-0133, como otro subgrupo de OilRig. Lyceum se centra en atacar a diversas organizaciones israel\u00edes, incluidas entidades gubernamentales y de la administraci\u00f3n local y organizaciones del sector sanitario. Las principales herramientas que atribuimos a Lyceum incluyen DanBot, los backdoors Shark, Milan y Marlin, Solar y Mango, OilForceGTX y una variedad de downloaders que utilizan servicios leg\u00edtimos en la nube para la comunicaci\u00f3n C&amp;C.<\/p>\n<p>Seguiremos utilizando el nombre OilRig para referirnos al grupo matriz, tambi\u00e9n conocido como APT34 o Hazel Sandstorm (antes EUROPIUM). OilRig es un grupo de ciberespionaje que lleva activo al menos desde 2014 y del que se cree que tiene su sede en Ir\u00e1n. Su objetivo son los gobiernos de Oriente Medio y diversos sectores empresariales, como el qu\u00edmico, el energ\u00e9tico, el financiero y el de las telecomunicaciones. Las campa\u00f1as de OilRig m\u00e1s destacadas incluyen la campa\u00f1a de DNSpionage de 2018 y 2019, dirigida a v\u00edctimas en el L\u00edbano y los Emiratos \u00c1rabes Unidos; la campa\u00f1a HardPass de 2019-2020, que utiliza LinkedIn para atacar a v\u00edctimas de Oriente Medio en los sectores energ\u00e9tico y gubernamental; el ataque de 2020 contra una organizaci\u00f3n de telecomunicaciones en Oriente Medio utilizando la puerta trasera RDAT; y los ataques de 2023 dirigidos a organizaciones en Oriente Medio con las puertas traseras PowerExchange y MrPerfectionManager.<\/p>\n<p>Herramientas OilRig utilizadas por BladedFeline<br \/>\nHemos encontrado dos herramientas OilRig en las m\u00e1quinas del KRG comprometidas por BladedFeline.<\/p>\n<p>RDAT<br \/>\nHemos descubierto una versi\u00f3n del backdoor RDAT de OilRig de la que no se hab\u00eda informado anteriormente en dos sistemas v\u00edctimas del KRG. Al analizar el RDAT, descubrimos que el flujo operativo (v\u00e9ase el informe de la Unidad 42 para m\u00e1s detalles), la marca de tiempo de compilaci\u00f3n (2017-12-26 10:49:35) y la hora de escritura del archivo (2018-01-30) coinciden con la actividad y los objetivos de OilRig, en particular con respecto a la actividad del grupo en 2017. Observamos un archivo con un SHA-1 de 562E1678EC8FDC1D83A3F73EB511A6DDA08F3B3D y una ruta de C:\\Windows\\System32\\LogonUl.exe en ambos sistemas. La ruta PDB tambi\u00e9n corrobora que este binario es RDAT: C:\\sers\\Void\\Desktop\\RDAT\\client\\x64\\Release\\client.pdb. Hasta la fecha, s\u00f3lo hemos observado RDAT en uso por OilRig. Adem\u00e1s, no hemos visto ning\u00fan implante personalizado compartido entre OilRig y otros grupos de Oriente Medio, y rara vez ocurre entre actores de amenazas alineados con Ir\u00e1n.<\/p>\n<p>El an\u00e1lisis que vincula RDAT con PrimeCache, un m\u00f3dulo malicioso de IIS que fue subido a VirusTotal presumiblemente por la v\u00edctima del Gobierno de la India, refuerza a\u00fan m\u00e1s la idea de que BladedFeline es un subgrupo de OilRig, al igual que Lyceum. Este v\u00ednculo se explora en mayor profundidad en la secci\u00f3n V\u00ednculos con OilRig del blogpost.<\/p>\n<p>VideoSRV<br \/>\nUn dato adicional sobre la conexi\u00f3n entre OilRig y BladedFeline es una shell inversa desplegada en una de las v\u00edctimas del Gobierno Regional del Kurdist\u00e1n (21 de septiembre de 2017) antes de que RDAT cayera en el mismo sistema (30 de enero de 2018). VideoSRV (SHA-1: BE0AD25B7B48347984908175404996531CFD74B7), llamado as\u00ed por su nombre de archivo videosrv.exe, tiene la cadena PDB C:\\sers\\v0id\\Desktop\\reverseShell\\clientProxy\\x64\\Release\\ConsoleApplication1.pdb, que tiene algunas similitudes con la cadena PDB RDAT C:\\Users\\Void\\Desktop\\RDAT\\client\\x64\\Release\\client.pdb.<\/p>\n<p>An\u00e1lisis t\u00e9cnico<br \/>\nAcceso inicial<br \/>\nA\u00fan no est\u00e1 claro c\u00f3mo BladedFeline desarrolla el acceso a sus v\u00edctimas. Lo que sabemos es que en el caso de las v\u00edctimas del GRK, los actores de la amenaza obtuvieron acceso al menos en 2017 y lo han mantenido desde entonces. En cuanto a las v\u00edctimas del GOI, sospechamos que el grupo explot\u00f3 una vulnerabilidad en una aplicaci\u00f3n en un servidor web orientado a Internet, lo que les permiti\u00f3 desplegar el webshell Flog.<\/p>\n<p>Conjunto de herramientas<br \/>\nPrimeCache &#8211; m\u00f3dulo IIS malicioso<br \/>\nPrimeCache, cuyo nombre derivamos del RTTI AVRSAPrimeSelector y su nombre de archivo(cachehttp.dll), es un backdoor pasivo implementado como un m\u00f3dulo IIS nativo con un nombre interno de HttpModule.dll. Fue subido a VirusTotal por el mismo usuario que subi\u00f3 una de las muestras del backdoor Whisper. Es una DLL C++ de 64 bits con una fecha de compilaci\u00f3n de 2023-05-14 06:55:52 y tiene una cadena PDB minimizada de s\u00f3lo HttpModule.pdb. Tiene una \u00fanica exportaci\u00f3n: RegisterModule.<\/p>\n<p>PrimeCache es el sucesor de una colecci\u00f3n de backdoors IIS no atribuidos que hemos reportado previamente como Grupo 2 (backdoors IIS simples) en nuestro blogpost de 2021, Anatomy of native IIS malware. Obtuvimos esas muestras originales de VirusTotal, donde fueron subidas por usuarios de Bahr\u00e9in, Israel y Pakist\u00e1n, entre 2018 y 2020. Bas\u00e1ndonos \u00fanicamente en la ubicaci\u00f3n de las presuntas v\u00edctimas, es posible que esos casos tambi\u00e9n estuvieran relacionados con las actividades de BladedFeline -o, m\u00e1s ampliamente, OilRig-.<\/p>\n<p>Funcionalidad principal<br \/>\nLa funcionalidad principal de PrimeCache se implementa en el manejador CGlobalModule::OnGlobalPreBeginRequest. Se trata de una implementaci\u00f3n \u00fanica, a diferencia de sus predecesores, que utilizaban el controlador CHttpModule::OnBeginRequest. PrimeCache filtra las peticiones HTTP entrantes, procesando s\u00f3lo las de los operadores BladedFeline, que son reconocidos por tener una cabecera cookie con la estructura<\/p>\n<p>F=&lt;command_ID&gt;,&lt;param&gt;;<\/p>\n<p>Tenga en cuenta que este valor puede ser independiente o estar incrustado en una cookie m\u00e1s larga, rodeada de caracteres de punto y coma (;).<\/p>\n<p>El backdoor funciona de una forma inusual (nueva en esta versi\u00f3n en comparaci\u00f3n con nuestro an\u00e1lisis de 2021). En lugar de aceptar un comando backdoor y todos sus par\u00e1metros en una \u00fanica petici\u00f3n HTTP, cada acci\u00f3n se divide en varias peticiones. En primer lugar, el operador BladedFeline env\u00eda una solicitud individual para cada par\u00e1metro; estos par\u00e1metros se almacenan en una estructura global. A continuaci\u00f3n, el operador env\u00eda otra petici\u00f3n para activar el comando backdoor. Por \u00faltimo, PrimeCache utiliza los par\u00e1metros recibidos anteriormente para ejecutar la acci\u00f3n especificada y, a continuaci\u00f3n, borra los par\u00e1metros almacenados en cach\u00e9.<\/p>\n<p>Comandos de operador<br \/>\nHay tres tipos de peticiones que pueden ser recibidas por el backdoor, como se muestra en la Tabla 1.<\/p>\n<p>Tabla 1. Comandos de operador de PrimeCache<\/p>\n<p>&lt;command_ID&gt; Parameter Description<br \/>\n1 Format: &lt;key&gt;=&lt;value&gt; Clears the list of previously stored parameters and adds the new value. Most parameters are encrypted; see Encryption below.<br \/>\n0 Not used. Triggers the backdoor action, using previously transmitted backdoor parameters.<br \/>\nOther Format: &lt;key&gt;=&lt;value&gt; Adds the specified value to the list of stored parameters (doesn\u2019t clear the list). Most parameters are encrypted; see Encryption below.<br \/>\nUna vez que la acci\u00f3n se activa (a trav\u00e9s de &lt;command_ID&gt;=0), PrimeCache realiza una acci\u00f3n, basada en los par\u00e1metros obtenidos previamente, como se muestra en la Tabla 2. Una nota en la tabla de abajo:<\/p>\n<p>La acci\u00f3n PrimeCache es comando de operador (OpCom) a, la clave de sesi\u00f3n es OpCom k, datos binarios es OpCom b, y el nombre de archivo es OpCom f.<\/p>\n<p>Tabla 2. PrimeCache post-operador s<\/p>\n<p>PrimeCache action Session key Binary data Filename Command description Return value<br \/>\nr RSA-encrypted session key AES-encrypted command line Null Runs the specified command via popen. Command output<br \/>\nr2 Runs the specified command via CreateProcessW.<br \/>\nr3 (Presumably) runs the specified command by sending it to another (unknown) process via the named pipe \\\\.\\pipe\\iis, then reads (presumably) the command output from the same pipe.<br \/>\nu AES-encrypted file content Local filename Creates a local file with the specified name and content. OK<br \/>\nd Null Exfiltrates the given file from the compromised IIS server. File content<br \/>\nCifrado<br \/>\nAl igual que sus predecesores, PrimeCache utiliza tanto RSA como AES-CBC para su comunicaci\u00f3n C&amp;C. Los par\u00e1metros y los valores de retorno siempre se cifran mediante AES-CBC utilizando la clave de sesi\u00f3n y, a continuaci\u00f3n, se codifican en base64. La clave de sesi\u00f3n est\u00e1 encriptada con RSA; el backdoor tiene una clave RSA p\u00fablica y otra privada codificadas (no un par) para manejar ambas direcciones de la comunicaci\u00f3n.<\/p>\n<p>Se utiliza una biblioteca Crypto++ vinculada est\u00e1ticamente para manejar las operaciones de cifrado y descifrado.<\/p>\n<p>Comunicaciones C&amp;C<br \/>\nLos comandos del operador se transmiten en la cabecera de la cookie (otra desviaci\u00f3n de las versiones anteriores, que utilizaban la URL o el cuerpo de la petici\u00f3n HTTP). Las respuestas PrimeCache se a\u00f1aden al cuerpo de la respuesta HTTP. Si se est\u00e1 exfiltrando un archivo, el encabezado Content-Type se establece como attachment, igualando la funcionalidad de las versiones anteriores.<\/p>\n<p>Los predecesores de PrimeCache tambi\u00e9n utilizaban el mismo esquema de cifrado y nombres de par\u00e1metros similares(a, c, f, k), pero todos se enviaban a la puerta trasera en una \u00fanica petici\u00f3n. Los \u00fanicos comandos soportados eran r, u y d.<\/p>\n<p>V\u00ednculos con OilRig<br \/>\nCuando comparamos PrimeCache con RDAT, como se describe en la subsecci\u00f3n de atribuci\u00f3n de RDAT, vemos varias similitudes que apoyan nuestra suposici\u00f3n de que BladedFeline es un subgrupo de OilRig.<\/p>\n<p>Tanto RDAT como PrimeCache utilizan la biblioteca Crypto++, y ambos analizan los comandos de puerta trasera utilizando la expresi\u00f3n regular [^,]+<br \/>\nLa carga \u00fatil intenta analizar el texto claro descifrado utilizando la expresi\u00f3n regular [^,]+ para obtener el valor del comando y los argumentos del comando que se dividen con una coma.<br \/>\nAmbos comparten una funci\u00f3n, mostrada en la Figura 1, que ejecuta un comando shell y lee la salida, que, a trav\u00e9s de nuestro corpus, s\u00f3lo se encuentra en estas dos piezas de malware.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/05-25\/bladedfeline\/figure-1.png\" alt=\"Figure 1. A unique function to execute a shell command\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>La puerta trasera Whisper<br \/>\nWhisper es un binario de Windows de 32 bits escrito en C#\/.NET, cuyo nombre proviene de sus cadenas PDB G:\\csharp\\Whisper_Trojan_winform\\Whisper_Trojan_winform\\Whisper_Trojan_winform\\obj\\Release\\Veaty.pdb y Z:\\csharp\\Whisper_Trojan_winform_for_release\\Whisper_Trojan_winform\\Whisper_Trojan_winform\\obj\\Release\\Veaty.pdb. Utiliza un servidor Microsoft Exchange para comunicarse con los atacantes mediante el env\u00edo de archivos adjuntos de correo electr\u00f3nico a trav\u00e9s de una cuenta de correo web comprometida. Hemos visto dos versiones del backdoor: detectamos y recogimos una versi\u00f3n, y fue subida a VirusTotal desde Irak. Estas muestras son pr\u00e1cticamente id\u00e9nticas, pero pudimos determinar la identidad probable de quien las subi\u00f3 a VirusTotal bas\u00e1ndonos en los datos de la muestra de Whisper y otras muestras subidas por ese usuario.<\/p>\n<p>Ambas versiones de Whisper tienen marcas de tiempo de compilaci\u00f3n (2090-04-11 23:38:14 y 2080-12-11 03:50:47). Se compilan utilizando Costura, presumiblemente para garantizar que el sistema de la v\u00edctima utiliza las DLL empaquetadas con el binario y no las DLL de la cach\u00e9 global de ensamblados.<\/p>\n<p>La operaci\u00f3n de Whisper no es la primera vez que observamos que un subgrupo de OilRig utiliza servicios en la nube para su protocolo de C&amp;C. Aunque, a diferencia de Whisper, no se enviaron correos electr\u00f3nicos reales, Lyceum utiliz\u00f3 borradores de correo electr\u00f3nico para la comunicaci\u00f3n entre su malware y los operadores a lo largo de 2022, como describimos en una entrada anterior.<\/p>\n<p>Workflow operativo<br \/>\nWhisper no requiere ni acepta argumentos. En su lugar, su dropper -al que hemos denominado Protocolo Whisper por su nombre de archivo, Protocol.pdf.exe- escribe su archivo de configuraci\u00f3n en el disco junto con \u00e9l (v\u00e9ase la secci\u00f3n Protocolo Whisper ). El archivo de configuraci\u00f3n, que se muestra en la Figura 2, est\u00e1 en formato XML con sus cadenas de claves y valores codificadas en base64. Es llamado por la clase Specs de Whisper, que utiliza una funci\u00f3n &#8211; DelockItems &#8211; para decodificar en base64 las variables de configuraci\u00f3n.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/05-25\/bladedfeline\/figure-2.jpeg\" alt=\"Figure 2. Whisper configuration file with its base64-encoded elements (left) and decoded (right)\" \/><\/p>\n<p>La figura 3 muestra el workflow operativo de Whisper, que detallamos en los p\u00e1rrafos siguientes.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/05-25\/bladedfeline\/figure-3.png\" alt=\"Image 3 of 6\" \/><\/p>\n<p>El workflow operativo de Whisper puede dividirse en siete pasos:<\/p>\n<p>En el paso 1, Whisper utiliza las credenciales del archivo de configuraci\u00f3n (l\u00ednea 15 de la figura 2) y la clase\u00a0ExchangeService\u00a0de\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/microsoft.exchange.webservices.data.exchangeservice?view=exchange-ews-api\" target=\"_blank\" rel=\"noopener\">Microsoft Exchange Web Services<\/a>\u00a0para intentar iniciar sesi\u00f3n en las cuentas de correo web comprometidas. Una vez que Whisper inicia sesi\u00f3n con \u00e9xito en una cuenta, guarda las credenciales en la memoria y escribe lo siguiente en el archivo de registro\u00a0c:\\Windows\\Temp\\WindowsEventLogs.txt:<\/p>\n<p>&#8212;&#8212;&#8212;&#8212; ItemContext is set: user name [&lt;user_name&gt;] , use_defaultCred: [credentials&gt;]<\/p>\n<p>Si no hay credenciales v\u00e1lidas en el archivo de configuraci\u00f3n, Whisper registra los siguientes mensajes de error en el archivo de registro:<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- there was No Way to access any Mailbox.<\/p>\n<p>__________ Extraction function is called.<\/p>\n<p>Si se detecta un error inesperado, Whisper escribe lo siguiente en el archivo de registro (n\u00f3tese el error ortogr\u00e1fico de la palabra\u00a0happened, indicativo de un hablante no nativo de ingl\u00e9s) y sale utilizando el m\u00e9todo\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/system.environment.exit?view=net-8.0\" target=\"_blank\" rel=\"noopener\">Environment.Exit(Int32)<\/a>. Extra\u00f1amente, el\u00a0exitCode\u00a0utilizado,\u00a00, indica que el proceso finaliz\u00f3 con \u00e9xito.<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-__ an unknown Exception happend. program turned off<\/p>\n<p>A continuaci\u00f3n, en el Paso 2, Whisper utiliza las credenciales del paso anterior para buscar reglas de bandeja\u00a0<em>de<\/em>\u00a0entrada utilizando el m\u00e9todo\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/microsoft.exchange.webservices.data.exchangeservice.getinboxrules?view=exchange-ews-api\" target=\"_blank\" rel=\"noopener\">ExchangeService.GetInboxRules<\/a>\u00a0(que\u00a0<em>[r]ecobra una colecci\u00f3n de reglas de bandeja de entrada que est\u00e1n asociadas con el usuario especificado<\/em>). Utilizando el valor de la l\u00ednea 13 del archivo de configuraci\u00f3n(key=\u00bbreceive_sign\u00bb, value=\u00bbPMO\u00bb), Whisper itera sobre las reglas de la bandeja de entrada buscando que ese valor se especifique en uno de estos tres lugares:\u00a0subject,\u00a0body, o\u00a0subjectorbody\u00a0y que los correos que coincidan con ese valor se env\u00eden a una ubicaci\u00f3n especificada(deleteditems\u00a0o\u00a0inbox, dependiendo de la versi\u00f3n de Whisper). Si la bandeja de entrada tiene una regla de este tipo, Whisper pasa al siguiente paso; de lo contrario, Whisper crea una regla con los par\u00e1metros indicados:<\/p>\n<ul>\n<li>Rule name:\u00a0MicosoftDefaultRules.<\/li>\n<li>Move to folder:\u00a0deleteditems\u00a0o\u00a0inbox\n<ul>\n<li>Una versi\u00f3n de Whisper especifica la carpeta\u00a0deleteditems; la otra apunta a la\u00a0inbox. Ambos est\u00e1n codificados en los binarios separados.<\/li>\n<\/ul>\n<\/li>\n<li>Mark as read:\u00a0true.<\/li>\n<li>Condition: el\u00a0subject\u00a0contiene\u00a0PMO\n<ul>\n<li>La ubicaci\u00f3n para buscar el string,\u00a0subject, est\u00e1 codificada en ambas versiones de Whisper. El string a buscar,\u00a0PMO, se encuentra en el archivo de configuraci\u00f3n utilizado por Whisper; no hemos podido obtener el otro archivo de configuraci\u00f3n.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>En el Paso 3, Whisper inicia un loop interminable que env\u00eda un mensaje de correo electr\u00f3nico de confirmaci\u00f3n desde la cuenta de correo electr\u00f3nico comprometida en el Paso 1 a una direcci\u00f3n de correo electr\u00f3nico especificada en el archivo de configuraci\u00f3n (l\u00ednea 16,\u00a0key=\u00bbalive_mail\u00bb). El mensaje de check-in se env\u00eda cada 10 horas (l\u00ednea 10 del archivo de configuraci\u00f3n,\u00a0key=\u00a0\u00abal_time\u00bb; en minutos), el asunto (l\u00ednea 17,\u00a0key=\u00bbalive_msg_subj\u00bb) es\u00a0Content, y el cuerpo del mensaje contiene el string definida a continuaci\u00f3n:<\/p>\n<p>\u00abContent ID: \u00bb\u00a0+ base64_encode(\u00abCOMPUTERNAME:USERDNSDOMAIN:USERNAME\u00bb)<\/p>\n<p>A continuaci\u00f3n, en el paso 4, Whisper obtiene los comandos del operador. Para ello, busca en la bandeja de entrada identificada en el paso 1 archivos en una carpeta determinada(deleteditems\u00a0o\u00a0inbox, seg\u00fan la versi\u00f3n de Whisper) con archivos adjuntos cuyo asunto coincida con una cadena (suministrada en el archivo de configuraci\u00f3n;\u00a0PMO\u00a0en el \u00fanico archivo de configuraci\u00f3n que recopilamos). Para los correos electr\u00f3nicos con archivos adjuntos que coincidan, Whisper raspa el cuerpo del adjunto (que deber\u00eda contener comandos cifrados) y almacena la direcci\u00f3n de correo electr\u00f3nico del remitente para utilizarla posteriormente como servidor C&amp;C al que se cargan los resultados de los comandos del operador.<\/p>\n<p>En el paso 5, Whisper descifra los comandos del operador. Para ello, primero descodifica en base64 la cadena que contiene el comando y, a continuaci\u00f3n, descifra el resultado utilizando la\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/system.security.cryptography.aes?view=net-8.0\" target=\"_blank\" rel=\"noopener\">clase .NET AES<\/a>\u00a0con un vector de inicializaci\u00f3n de 16 bytes y la clave de cifrado que se encuentra en el archivo de configuraci\u00f3n (l\u00ednea 18,\u00a0key=\u00bbenc_key\u00bb value=\u00bbcXdlcmFzZHp4Y3ZmZ2d0aGhsZGZvZ2g\/bHZtZ2xrZyE=\u00bb). Los comandos desencriptados tienen la forma\u00a0&lt;id_comando&gt;;&lt;comando_a_ejecutar&gt;.\u00a0El ID del comando, los comandos y la salida del comando se guardan en el siguiente formato:<\/p>\n<p>base64-encoded(&lt;command_id&gt;: &lt;cmd_id&gt;cn&lt;cmd_output&gt;\\n)<\/p>\n<p>A continuaci\u00f3n, en el paso 6, Whisper ejecuta los comandos backdoor y registra los resultados. Los posibles comandos incluyen:<\/p>\n<ul>\n<li>Write a file to disk<\/li>\n<\/ul>\n<p>Los datos escritos en el disco son<\/p>\n<p>this is my file content<\/p>\n<p>&lt;filepath&gt;<\/p>\n<p>&lt;filename&gt;<\/p>\n<p>&lt;nbytes-to-write&gt;<\/p>\n<p>Los bytes a escribir est\u00e1n codificados en base64 (y decodificados antes de escribir en disco). La ejecuci\u00f3n exitosa devuelve:<\/p>\n<p>archifile received properly. wrote to: &lt;filepath&gt; &lt;filename&gt;<\/p>\n<ul>\n<li>Send a file to the C&amp;C server<\/li>\n<\/ul>\n<p>Este comando lleva el prefijo\u00a0this is my required file path\u00a0seguido de\u00a0\\n&lt;unknown_variable&gt;\\n&lt;filepath&gt;\\&lt;filename&gt;.\u00a0Whisper lee el contenido del archivo en memoria, lo codifica en base64 y lo devuelve:<\/p>\n<p>this is my required file &lt;path&gt;\\n&lt;unknown_variable&gt;\\n&lt;filename&gt;\\n&lt;base64_encoded_file_contents&gt;.<\/p>\n<ul>\n<li>Ejecutar un script PowerShell<\/li>\n<\/ul>\n<p>Este comando no tiene prefijo y en su lugar s\u00f3lo contiene un comando en texto plano que PowerShell es capaz de ejecutar, postfixed con una pipe despu\u00e9s de lo cual Whisper a\u00f1ade\u00a0Out-String. La salida se guarda de esta forma:<\/p>\n<p>base64-encoded(&lt;command_id&gt;: &lt;cmd_id&gt;\\n&lt;cmd_output&gt;\\n)<\/p>\n<p>Finalmente, en el Paso 7, Whisper env\u00eda la salida del comando en un mensaje de correo electr\u00f3nico a la bandeja de entrada del C&amp;C encontrada en el Paso 4. El correo electr\u00f3nico tiene el siguiente formato<\/p>\n<ul>\n<li>direcci\u00f3n de correo electr\u00f3nico remitente: bandeja de entrada del Paso 1,<\/li>\n<li>destinatario: direcci\u00f3n de correo electr\u00f3nico del Paso 4,<\/li>\n<li>asunto:\u00a0Email(del archivo de configuraci\u00f3n, l\u00ednea 14,\u00a0key=\u00bbsend_sign\u00bb),<\/li>\n<li>cuerpo del mensaje:\u00a0Hey there! find your results in the attachment\u00a0(codificado en el binario), y<\/li>\n<li>adjunto: salida de los comandos del paso 6, cifrada con la misma clave de cifrado del paso 5 (archivo de configuraci\u00f3n, l\u00ednea 18,\u00a0key=\u00bbenc_key\u00bb value=\u00bbcXdlcmFzZHp4Y3ZmZ2d0aGhsZGZvZ2g\/bHZtZ2xrZyE=\u00bb).<\/li>\n<\/ul>\n<p>Los pasos del 4 al 7 contin\u00faan en un loop utilizando el mismo programa de comprobaci\u00f3n del paso 3 hasta que se cambien las credenciales codificadas en el archivo de configuraci\u00f3n.<\/p>\n<h4>Backdoor Shahmaran<\/h4>\n<p>El backdoor Shahmaran, llamado as\u00ed por una m\u00edtica criatura mitad serpiente, mitad mujer del\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Shahmaran\" target=\"_blank\" rel=\"noopener\">folclore iran\u00ed<\/a>, es un PE de 64 bits que se encontr\u00f3 en la carpeta de inicio como:<\/p>\n<p>%ROAMINGAPPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\adobeupdater.exe<\/p>\n<p>Al iniciar el sistema, Shahmaran crea un\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/synchapi\/nf-synchapi-createeventw\" target=\"_blank\" rel=\"noopener\">objeto de evento de<\/a>\u00a0Windows,\u00a0SysPrep. Es posible que los desarrolladores de Shahmaran eligieran\u00a0SysPrep\u00a0como nombre del evento para mezclarse con el ruido de fondo, ya que\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-hardware\/manufacture\/desktop\/sysprep--system-preparation--overview?view=windows-11\" target=\"_blank\" rel=\"noopener\">SysPrep<\/a>\u00a0forma parte del proceso de creaci\u00f3n de im\u00e1genes de Windows. Los administradores de Windows lo utilizan para crear una imagen est\u00e1ndar de Windows (a menudo denominada imagen Gold o Golden) antes de su despliegue en los sistemas de la empresa. La Figura 4 muestra el objeto de evento\u00a0SysPrep\u00a0en un sistema comprometido, visto por\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/sysinternals\/downloads\/winobj\" target=\"_blank\" rel=\"noopener\">WinObj de Sysinternals<\/a>.<\/p>\n<figure class=\"image\"><img loading=\"lazy\" decoding=\"async\" title=\"Figure 4. Sysinternals\u2019 WinObj showing the SysPrep event object on a compromised system\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/05-25\/bladedfeline\/figure-4.jpeg\" alt=\"Figure 4. Sysinternals\u2019 WinObj showing the SysPrep event object on a compromised system\" width=\"735\" height=\"402\" data-fancybox=\"article\" \/><figcaption spellcheck=\"false\" data-lt-tmp-id=\"lt-419772\" data-gramm=\"false\"><em>Figura 4.\u00a0<\/em><em>WinObj de Sysinternals mostrando el\u00a0<\/em><em>objeto de evento<\/em>SysPrep\u00a0<em>en un sistema comprometido<\/em><\/figcaption><\/figure>\n<p>El dominio del C&amp;C est\u00e1 codificado,\u00a0olinpa[.]com, al igual que el puerto,\u00a080, y la cadena User-Agent, que son dos. La conexi\u00f3n inicial al C&amp;C utiliza una cadena User-Agent incompleta (le falta el par\u00e9ntesis de cierre):<\/p>\n<p>Mozilla\/4.0 (compatible; MSIE 6.0; Windows NT 5.0<\/p>\n<p>La comunicaci\u00f3n posterior con el C&amp;C utiliza la cadena User-Agent corregida:<\/p>\n<p>Mozilla\/4.0 (compatible; MSIE 6.0; Windows NT 5.0)<\/p>\n<p>Shahmaran no utiliza ning\u00fan tipo de compresi\u00f3n o cifrado para las comunicaciones de red. Y aunque el puerto est\u00e1 codificado(80), hay fragmentos de c\u00f3digo que comprueban el puerto en uso y actualizan las variables de comunicaci\u00f3n si se utiliza el puerto\u00a0443.<\/p>\n<p>Despu\u00e9s de registrarse en el servidor de C&amp;C, Shahmaran ejecuta cualquier comando de operador proporcionado, devuelve cualquier salida de esos comandos, luego duerme durante 30 segundos antes de registrarse de nuevo en el servidor de C&amp;C, ad infinitum. La Tabla 3 muestra los comandos de operador disponibles y sus funciones.<\/p>\n<p><em>Tabla 3. Comandos de operador y sus descripciones Comandos de operador y sus descripciones<\/em><\/p>\n<p>&nbsp;<\/p>\n<div class=\"table-container\">\n<table border=\"1\" width=\"643\" cellspacing=\"0\" cellpadding=\"0\">\n<thead>\n<tr>\n<td width=\"217\"><strong>Operator command<\/strong><\/td>\n<td width=\"426\"><strong>Description<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"217\">1 &lt;path\/filename&gt;<\/td>\n<td width=\"426\">Returns the datetime that the specified file was written to disk in UTC, prepended with\u00a0id=\u00a0and in the format\u00a0YYYY\/MM\/DD HH:MM:SS.<\/td>\n<\/tr>\n<tr>\n<td width=\"217\">2 &lt;filename&gt; &lt;source&gt; &lt;destination&gt;<\/td>\n<td width=\"426\">Moves the specified file to the specified location. Returns the output of the file move operation prepended with\u00a0id=.<\/td>\n<\/tr>\n<tr>\n<td width=\"217\">3 &lt;path\/filename&gt;<\/td>\n<td width=\"426\">Deletes the specified file. Returns the output of the file delete operation prepended with\u00a0id=.<\/td>\n<\/tr>\n<tr>\n<td width=\"217\">4 &lt;path\/directory&gt;<\/td>\n<td width=\"426\">Creates the specified directory. Returns the output of the directory creation operation prepended with\u00a0id=.<\/td>\n<\/tr>\n<tr>\n<td width=\"217\">5<\/td>\n<td width=\"426\">Creates a log file in the hardcoded location\u00a0c:\\programdata\\~tmp.log, if it does not already exist.<br \/>\nIf the file already exists, reads the contents and returns them to the C&amp;C server with the file\u2019s timestamp in UTC and in the format\u00a0YYYY\/MM\/DD HH:MM:SS, then deletes the file.<br \/>\nIf the file does not exist, returns the filename and path.<br \/>\nIf an error occurs, returns the error.<br \/>\nAll returned data is prepended with\u00a0s=.<\/td>\n<\/tr>\n<tr>\n<td width=\"217\">6 &lt;path\/filename&gt; &lt;data&gt;<\/td>\n<td width=\"426\">Checks for the specified file. If found, writes the provided data to the file and returns\u00a0s=&lt;provided_filename&gt;. If not found, returns\u00a0u=&lt;error_code&gt;.<\/td>\n<\/tr>\n<tr>\n<td width=\"217\">7 &lt;path\/filename&gt;<\/td>\n<td width=\"426\">Creates the specified file. Returns\u00a0s=\u00a0appended with either the filename (success) or an error code.<\/td>\n<\/tr>\n<tr>\n<td width=\"217\">8 &lt;path\/filename&gt;<\/td>\n<td width=\"426\">Checks for the presence of the specified filename in a compressed folder in the specified location on disk and creates it if it does not exist. Returns\u00a0s=\u00a0appended with the filename and the timestamp in UTC in the format\u00a0YYYY\/MM\/DD HH:MM:SS. The timestamp is used to determine whether the file was already present or was just created.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Despu\u00e9s de ejecutar un comando de operador, Shahmaran env\u00eda la salida al servidor de C&amp;C utilizando el formato\u00a0t=&lt;comando_operador&gt;&amp;&lt;salida_comando&gt;,\u00a0como\u00a0t=1&amp;s=&lt;fecha_fecha_archivo&gt;.<\/p>\n<h4>Backdoor Slippery Snakelet<\/h4>\n<p>Slippery Snakelet es un peque\u00f1o backdoor basado en Python con capacidades limitadas:<\/p>\n<p>1. ejecuta un comando a trav\u00e9s de\u00a0cmd.exe,<\/p>\n<p>2. descarga un archivo desde una URL, y<\/p>\n<p>3. sube un archivo a la ruta\u00a0\/newfile\/URI.<\/p>\n<p>Slippery Snakelet tiene un servidor de C&amp;C hardcoded,\u00a0zaincell[.]store, y se comunica con \u00e9l a trav\u00e9s de URLs de la forma\u00a0https:\/\/zaincell[.]store\/request\/&lt;UID&gt;,\u00a0donde el\u00a0&lt;UID&gt;\u00a0es el dominio de inicio de sesi\u00f3n de la v\u00edctima y el nombre del ordenador comprometido separados por un punto y luego codificados en base64 (por ejemplo,\u00a0victim_domain.computer_name = dmljdGltX2RvbWFpbi5jb21wdXRlcl9uYW1l).<\/p>\n<p>Slippery Snakelet tambi\u00e9n tiene este User-Agent harcodeado:<\/p>\n<p>Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, como Gecko) Chrome\/88.0.4324.104 Safari\/537.36<\/p>\n<p>El servidor de C&amp;C estaba camuflado como un sitio\u00a0Arabian Gulf E-Learning\u00a0y la p\u00e1gina de aterrizaje HTML por defecto no contiene ning\u00fan comando. Cuando Slippery Snakelet proporciona una solicitud con el formato correcto (por ejemplo,\u00a0https:\/\/zaincell[.]store\/request\/&lt;UID&gt;), el servidor de C&amp;C inserta etiquetas\u00a0&lt;code&gt;\u00a0como\u00a0&lt;code&gt;6wjTyB3Y20KSzU1VUlTagp3aG9hbWkKbnVsbApudWxs&lt;\/code&gt;\u00a0en la p\u00e1gina, y Slippery Snakelet las recopila y descodifica.<\/p>\n<p>Slippery Snakelet decodifica en base64 desde el octavo car\u00e1cter hasta el final de la cadena (es decir,\u00a0Y20KSzU1VUlTagp3aG9hbWkKbnVsbApudWxs\u00a0en el ejemplo anterior). La salida descodificada est\u00e1 separada por una nueva l\u00ednea y contiene los cinco elementos descritos en la Tabla 4<\/p>\n<p><em>Tabla 4. Argumentos de Slippery Snakelet Argumentos y opciones de Slippery Snakelet<\/em><\/p>\n<p>&nbsp;<\/p>\n<div class=\"table-container\">\n<table border=\"1\" width=\"642\" cellspacing=\"0\" cellpadding=\"0\">\n<thead>\n<tr>\n<td width=\"208\"><strong>Commands<\/strong><\/td>\n<td width=\"265\"><strong>Options<\/strong><\/td>\n<td width=\"170\"><strong>Example<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"208\"><strong>Command Type<\/strong><\/td>\n<td width=\"265\">cm\u00a0(execute\u00a0cmd.exe\u00a0command)<br \/>\ngetfl\u00a0(download a file)<br \/>\nsendfl\u00a0(upload a file)<\/td>\n<td width=\"170\">cm<\/td>\n<\/tr>\n<tr>\n<td width=\"208\"><strong>Command ID<\/strong><\/td>\n<td width=\"265\">CMID (a random string)<\/td>\n<td width=\"170\">K55UISj<\/td>\n<\/tr>\n<tr>\n<td width=\"208\"><strong>Command | FileUrl | FilePath<\/strong><\/td>\n<td width=\"265\">Respectively for\u00a0cm | getfl | sendfl<\/td>\n<td width=\"170\">whoami<\/td>\n<\/tr>\n<tr>\n<td width=\"208\"><strong>Null | SavePath | FilePath<\/strong><\/td>\n<td width=\"265\">Respectively for\u00a0cm | getfl | sendfl<\/td>\n<td width=\"170\">null<\/td>\n<\/tr>\n<tr>\n<td width=\"208\"><strong>Null<\/strong><\/td>\n<td width=\"265\">Unknown<\/td>\n<td width=\"170\">null<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Laret y Pinar &#8211; t\u00faneles inversos<\/h4>\n<p>Laret y Pinar, cuyos nombres se derivan de los nombres internos de cada archivo respectivo, son binarios Windows de 32 bits escritos en C#\/.NET. Ambos tienen marcas de tiempo de compilaci\u00f3n PE con timestomping -una t\u00e1ctica com\u00fan entre los grupos de amenazas de Oriente Medio (y en particular los relacionados con Ir\u00e1n)- de 2058-02-07 00:12:48 y 2072-07-10 18:26:15, respectivamente. Ambas se encontraron en dos sistemas en las ubicaciones de la Tabla 5.<\/p>\n<p><em>Tabla 5. Ubicaciones de Laret y Pinar en el disco, junto con los nombres de los archivos<\/em><\/p>\n<p>&nbsp;<\/p>\n<div class=\"table-container\">\n<table border=\"1\" width=\"642\" cellspacing=\"0\" cellpadding=\"0\">\n<thead>\n<tr>\n<td width=\"58\"><strong>Reverse tunnel<\/strong><\/td>\n<td width=\"226\"><strong>Location<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td rowspan=\"2\" width=\"58\"><strong>Laret<\/strong><\/td>\n<td width=\"226\">%APPDATA%\\Local\\LEAP Desktop\\LEAPForm.exe<\/td>\n<\/tr>\n<tr>\n<td width=\"226\">&lt;unknown_location&gt;\\wincapsrv.exe<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\" width=\"58\"><strong>Pinar<\/strong><\/td>\n<td width=\"226\">C:\\Program Files\\LEAP Office\\SystemMain.exe<\/td>\n<\/tr>\n<tr>\n<td width=\"226\">C:\\Program Files\\LEAP Office\\winhttpproxy.exe<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p>En el caso en el que no tenemos una ubicaci\u00f3n en disco para Laret pero s\u00ed tenemos el nombre de archivo(wincapsrv.exe), pudimos ver que Laret se descarg\u00f3 de\u00a0http:\/\/178.209.51[.]61:8000\/wincapsrv.exe\u00a0a trav\u00e9s de PowerShell. Por desgracia, no conseguimos descubrir d\u00f3nde se escribi\u00f3 en el disco. Los intentos de enumerar la IP y descargar el archivo fueron rechazados por el servidor de C&amp;C, lo que probablemente indica que se requiere alguna forma de identificaci\u00f3n del host comprometido en la configuraci\u00f3n de la conexi\u00f3n (que no tenemos).<\/p>\n<p>En cuanto a la escritura en disco, es probable que los operadores de BladedFeline hayan cambiado la fecha de creaci\u00f3n del archivo Pinar a 2017-09-14 14:56:00 en uno de los dos sistemas comprometidos. C\u00f3mo se modific\u00f3 la fecha de creaci\u00f3n del archivo es una pregunta abierta, pero muestra que los atacantes han comprometido estos dos sistemas hasta tal punto que probablemente tienen derechos administrativos.<\/p>\n<p>En tiempo de ejecuci\u00f3n, tanto Laret como Pinar dependen de un archivo de configuraci\u00f3n en el mismo directorio que sus binarios para ocho variables necesarias, que se enumeran en la Tabla 6.<\/p>\n<p><em>Tabla 6. Par\u00e1metros de configuraci\u00f3n de Laret y Pinar Par\u00e1metros de configuraci\u00f3n de Laret y Pinar con valores por defecto<\/em><\/p>\n<p>&nbsp;<\/p>\n<div class=\"table-container\">\n<table border=\"1\" width=\"642\" cellspacing=\"0\" cellpadding=\"0\">\n<thead>\n<tr>\n<td width=\"151\"><strong>Field<\/strong><\/td>\n<td width=\"387\"><strong>Description<\/strong><\/td>\n<td width=\"104\"><strong>Default\u00a0value<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"151\">ssh_host<\/td>\n<td width=\"387\">C&amp;C IP address.<\/td>\n<td width=\"104\">N\/A<\/td>\n<\/tr>\n<tr>\n<td width=\"151\">ssh_port<\/td>\n<td width=\"387\"><\/td>\n<td width=\"104\">22<\/td>\n<\/tr>\n<tr>\n<td width=\"151\">ssh_username<\/td>\n<td width=\"387\">C&amp;C username.<\/td>\n<td width=\"104\">N\/A<\/td>\n<\/tr>\n<tr>\n<td width=\"151\">ssh_pass<\/td>\n<td width=\"387\">C&amp;C password.<\/td>\n<td width=\"104\">N\/A<\/td>\n<\/tr>\n<tr>\n<td width=\"151\">local_port<\/td>\n<td width=\"387\"><\/td>\n<td width=\"104\">9666<\/td>\n<\/tr>\n<tr>\n<td width=\"151\">process_file<\/td>\n<td width=\"387\">File to execute before executing any reverse tunnel actions.<\/td>\n<td width=\"104\">N\/A<\/td>\n<\/tr>\n<tr>\n<td width=\"151\">wait_time_minutes<\/td>\n<td width=\"387\">Time to wait between check-ins with the C&amp;C server.<\/td>\n<td width=\"104\">10f\u00a0(271)<\/td>\n<\/tr>\n<tr>\n<td width=\"151\">remote_port<\/td>\n<td width=\"387\">Port number used for port forwarding.<\/td>\n<td width=\"104\">1234<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Hasta ahora no hemos recopilado el archivo de configuraci\u00f3n, pero hemos reconstruido su contenido probable, que se encuentra en la Figura 5, bas\u00e1ndonos en el an\u00e1lisis del c\u00f3digo. La lectura del archivo de configuraci\u00f3n se realiza decodificando en base64 la cadena codificada en bytes, lo que da como resultado cadenas de valores de caracteres delimitados por espacios y codificados en hexadecimal, que a su vez se decodifican en cadenas ASCII.<\/p>\n<figure class=\"image\"><img decoding=\"async\" title=\"Figure 5. Example contents of the configuration file used by Laret and Pinar reverse tunnels\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/05-25\/bladedfeline\/figure-5.jpeg\" alt=\"Figure 5. Example contents of the configuration file used by Laret and Pinar reverse tunnels\" width=\"\" height=\"\" data-fancybox=\"article\" data-caption=\"Figura 5. Ejemplo de contenido del archivo de configuraci\u00f3n utilizado por los t\u00faneles inversos de Laret y Pinar\" \/><figcaption><em>Figura 5. Ejemplo de contenido del archivo de configuraci\u00f3n utilizado por los t\u00faneles inversos de Laret y Pinar<\/em><\/figcaption><\/figure>\n<p>Los desarrolladores de BladedFeline se refieren a esto como\u00a0Delocking\u00a0y a lo contrario (escribir en el archivo de configuraci\u00f3n) como\u00a0Enlocking. Esto probablemente indica una familiaridad pasajera con el ingl\u00e9s, pero los desarrolladores estaban lejos de dominarlo. Otros ejemplos de escasa capacidad de traducci\u00f3n son<\/p>\n<ul>\n<li>time Alapsed and client not connected<\/li>\n<li>aerpoo after<\/li>\n<li>Waiting connection &#8230;<\/li>\n<li>error\u00a0in creaate ssh client<\/li>\n<\/ul>\n<p>Curiosamente, en otro punto de los t\u00faneles inversos, los desarrolladores escribieron correctamente la palabra transcurrido(time elapsed!), lo que es indicativo de una codificaci\u00f3n deficiente y de una revisi\u00f3n de c\u00f3digo poco rigurosa, si es que se realiza alguna (por ejemplo, hay mucho texto de resultado de comandos en la l\u00ednea de comandos, como si los t\u00faneles inversos se enviaran inmediatamente despu\u00e9s de completar las pruebas con \u00e9xito).<\/p>\n<p>La funci\u00f3n real y el flujo de Laret y Pinar despu\u00e9s de recoger los par\u00e1metros del archivo de configuraci\u00f3n es bastante banal, pero eso es probablemente un esfuerzo intencional para pasar desapercibido. Ambos buscan un nombre de archivo en el par\u00e1metro\u00a0process_file\u00a0y, si un archivo que coincide con el nombre suministrado est\u00e1 presente, lo ejecutan e inician dos hilos:<\/p>\n<ol>\n<li>Establece una conexi\u00f3n SSH a la IP del C&amp;C en el archivo de configuraci\u00f3n usando la DLL\u00a0<a href=\"https:\/\/www.nuget.org\/packages\/Core.Renci.SshNet\/\" target=\"_blank\" rel=\"noopener\">Core.Renci.SshNet<\/a>\u00a0incluida en el binario. El puerto\u00a022\u00a0est\u00e1 codificado como el puerto del C&amp;C y el reenv\u00edo de puertos tambi\u00e9n est\u00e1 habilitado, usando la variable\u00a0remote_port\u00a0del archivo de configuraci\u00f3n.<\/li>\n<li>Establece una escucha en el puerto especificado en el par\u00e1metro\u00a0local_port\u00a0del archivo de configuraci\u00f3n. Ten en cuenta que cualquier dato enviado al listener se hace en claro (es decir, no se usa encriptaci\u00f3n u ofuscaci\u00f3n m\u00e1s all\u00e1 de caracteres\u00a0\\0\u00a0extra que son eliminados en el momento de la recepci\u00f3n por Laret y Pinar).<\/li>\n<\/ol>\n<p>Si no se especifica ning\u00fan fichero en\u00a0process_file, tanto Laret como Pinar omiten la configuraci\u00f3n de un puerto de escucha.<\/p>\n<p>Laret y Pinar s\u00f3lo difieren significativamente en que Pinar configura un servicio, llamado\u00a0Service1, para la persistencia antes de ejecutar los dos hilos. Laret no tiene ning\u00fan medio de persistencia m\u00e1s all\u00e1 de su proceso que se ejecuta indefinidamente.<\/p>\n<h4>Herramientas complementarias<\/h4>\n<h5>Flog webshell<\/h5>\n<p>Flog es una webshell encontrada subida a VirusTotal desde Irak por el mismo remitente que subi\u00f3 una de las versiones de Whisper. Bas\u00e1ndonos en esto y en la proximidad temporal (ambas fueron subidas en cuesti\u00f3n de minutos) creemos que fue desplegada por BladedFeline a la v\u00edctima en el gobierno de Irak.<\/p>\n<p>Flog, llamado as\u00ed por su nombre de archivo &#8211;\u00a0flogon.aspx\u00a0&#8211; busca entradas espec\u00edficas de los operadores de BladedFeline de la forma\u00a0&lt;password&gt;=&lt;(a|b|c|d)&gt;#&lt;path&gt;.<\/p>\n<p>Flog realiza un hash de la contrase\u00f1a, que debe coincidir con la suma de comprobaci\u00f3n MD5\u00a04CC88CE123B0DA8D75C0FE66A39339F6.<\/p>\n<p>Las variables(a|b|c|d) son opciones del comando:<\/p>\n<ul>\n<li>a\u00a0devuelve, para la ruta proporcionada, un listado de directorios y la longitud en bytes de cada archivo,<\/li>\n<li>b\u00a0crea un archivo en el disco, utilizando la ruta proporcionada,<\/li>\n<li>c\u00a0divide la variable de ruta en una pipe y escribe un archivo en el disco donde la primera parte de la ruta es el nombre del archivo y la segunda parte son los datos a escribir, y<\/li>\n<li>d\u00a0borra un archivo especificado en la ruta proporcionada.<\/li>\n<\/ul>\n<h5>Hawking Listener<\/h5>\n<p>Hawking Listener, llamado as\u00ed por su cadena PDB &#8211;\u00a0C:\\Users\\g18u04\\source\\repos\\Hawking\\Hawking\\obj\\Release\\listner.pdb\u00a0&#8211; es un binario .NET\/C# Windows de 32 bits con un tiempo de compilaci\u00f3n timestomped de 2057-11-14 16:59:12. Tambi\u00e9n fue subido a VirusTotal por el mismo usuario que subi\u00f3 Flog y es probablemente una herramienta de BladedFeline. Implementa la\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/system.net.httplistener?view=net-8.0\" target=\"_blank\" rel=\"noopener\">clase .NET HTTPListener<\/a>\u00a0para configurar un receptor con una URL codificada (que no podemos revelar en este caso sin revelar la identidad de la v\u00edctima). Alternativamente, Hawking puede ser provisto en tiempo de ejecuci\u00f3n con URLs para que el socket escuchador monitoree.<\/p>\n<p>Hawking espera un\u00a0QueryString\u00a0proporcionado (de un operador BladedFeline) con\u00a0snmflwkejrhgsey\u00a0como clave en el par clave-valor. Una vez recibido, Hawking ejecuta el valor en\u00a0cmd.exe\u00a0y devuelve el resultado. Para detener Hawking, los operadores s\u00f3lo tienen que enviar\u00a0stop\u00a0como clave en el\u00a0QueryString\u00a0con una variable no nula en el valor.<\/p>\n<p>Hawking registra todas las interacciones, argumentos de ejecuci\u00f3n y salida de comandos en el archivo\u00a0log.txt\u00a0de su directorio de trabajo.<\/p>\n<h5>P.S. Olala<\/h5>\n<p>P.S. Olala es un binario .NET de 32 bits llamado as\u00ed por su funci\u00f3n prevista (ejecutar scripts de PowerShell) y su ruta PDB\u00a0G:\\csharp\\psExecuterService\\ewsService\\obj\\Release\\Olala.pdb. No acepta argumentos en tiempo de ejecuci\u00f3n. M\u00e1s bien, en tiempo de ejecuci\u00f3n, P.S. Olala utiliza el m\u00e9todo\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/system.serviceprocess.servicebase.run?view=dotnet-plat-ext-8.0#system-serviceprocess-servicebase-run(system-serviceprocess-servicebase())\" target=\"_blank\" rel=\"noopener\">Run(ServiceBase[])<\/a>\u00a0de la clase .NET\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/api\/system.serviceprocess.servicebase?view=dotnet-plat-ext-8.0\" target=\"_blank\" rel=\"noopener\">ServiceBase<\/a>\u00a0para registrarse como servicio con el\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/services\/service-control-manager\" target=\"_blank\" rel=\"noopener\">Gestor de Control de Servicios<\/a>\u00a0(para la persistencia).<\/p>\n<p>Cuando se llama al servicio P.S. Olala, se crea un subproceso y se ejecuta la funci\u00f3n\u00a0mainLoop, que se muestra en la Figura 6. Esencialmente, P.S. Olala crea un subproceso y ejecuta la funci\u00f3n\u00a0mainLoop. B\u00e1sicamente, P.S. Olala es un ejecutor del script PowerShell almacenado en\u00a0%APPDATA%\\Local\\Microsoft\\InputPersonalization\\TrainedDataStore.ps1.<\/p>\n<figure class=\"image\"><img decoding=\"async\" title=\"Figure 6. The main function of P.S. Olala\" src=\"https:\/\/web-assets.esetstatic.com\/wls\/2025\/05-25\/bladedfeline\/figure-6.png\" alt=\"Figure 6. The main function of P.S. Olala\" width=\"\" height=\"\" data-fancybox=\"article\" data-caption=\"Figura 6. Funci\u00f3n principal de P.S. La funci\u00f3n principal de P.S. Olala\" \/><figcaption><em>Figura 6. Funci\u00f3n principal de P.S. La funci\u00f3n principal de P.S. Olala<\/em><\/figcaption><\/figure>\n<p>Lamentablemente, no pudimos recopilar ninguno de los scripts\u00a0TrainedDataStore.\u00a0ps1. Sin embargo, la informaci\u00f3n contextual indica que probablemente se trate de un ejecutor del backdoor Whisper, o de uno de los t\u00faneles inversos (Laret o Pinar). El flujo completo (P.S. Olala \u2192 TrainedDataStore \u2192 Whisper\/Laret\/Pinar) es probablemente una cadena de persistencia alargada con el objetivo de mantener el acceso.<\/p>\n<h5>Sheep Tunneler<\/h5>\n<p>Sheep Tunneler, una aplicaci\u00f3n de tunelizaci\u00f3n personalizada a la que hemos puesto nombre bas\u00e1ndonos en la cadena PDB\u00a0C:\\sers\\sheep\\source\\repos\\MP\\MP\\obj\\Release\\MP.pdb), se ha observado en las dos ubicaciones siguientes:<\/p>\n<ul>\n<li>%APPDATA%\\Local\\Microsoft\\Windows\\Ringtones\\RingService.exe<\/li>\n<li>%APPDATA%\\Local\\Microsoft\\Windows\\Shell\\mspsrv.exe<\/li>\n<\/ul>\n<p>Sheep Tunneler puede ejecutarse en dos modos: t\u00fanel de red (utilizando el argumento de ejecuci\u00f3n\u00a0middle) o connect back (utilizando los argumentos\u00a0cb &lt;ip&gt;:&lt;port&gt;).<\/p>\n<h5>Whisper<a id=\"Whisper Protocol\"><\/a>\u00a0Protocol<\/h5>\n<p>Whisper Protocol, llamado as\u00ed por su nombre de archivo(Protocol.pdf.exe) es un binario de Windows de 64 bits compilado en Python con una fecha de compilaci\u00f3n de 2024-03-11 09:01:20. Crea una carpeta en\u00a0C:\\ProgramData\\VeeamUpdate\u00a0y escribe tanto Whisper como su archivo de configuraci\u00f3n en esa carpeta. El protocolo Whisper tambi\u00e9n se copia a s\u00ed mismo en\u00a0%APPDATA%\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\VeeamUpdate.lnk\u00a0para su persistencia. Por \u00faltimo, ejecuta Whisper y sale.<\/p>\n<h2 id=\"conclusion\">Conclusi\u00f3n<\/h2>\n<p>BladedFeline es un grupo de amenazas avanzadas especializado en atacar a v\u00edctimas iraqu\u00edes y kurdas, en concreto a funcionarios y organizaciones gubernamentales. Creemos que el grupo es probablemente un subgrupo de OilRig. Esperamos que BladedFeline persista en el desarrollo de implantes con el fin de mantener y ampliar el acceso a su conjunto de v\u00edctimas comprometidas, probablemente con fines de ciberespionaje.<\/p>\n<blockquote>\n<div><em>Para cualquier consulta sobre nuestra investigaci\u00f3n publicada en WeLiveSecurity, por favor cont\u00e1ctenos en\u00a0<a href=\"mailto:threatintel@eset.com?utm_source=welivesecurity.com&amp;utm_medium=referral&amp;utm_campaign=autotagging&amp;utm_content=eset-research&amp;utm_term=en\">threatintel@eset.com.<\/a><\/em><\/div>\n<div><em>ESET Research ofrece informes privados de inteligencia APT y fuentes de datos. Para cualquier consulta sobre este servicio, visite la p\u00e1gina\u00a0<a href=\"https:\/\/www.eset.com\/int\/business\/services\/threat-intelligence\/?utm_source=welivesecurity.com&amp;utm_medium=referral&amp;utm_campaign=wls-research&amp;utm_content=bladedfeline-whispering-dark&amp;sfdccampaignid=7011n0000017htTAAQ\" target=\"_blank\" rel=\"noopener\">de ESET Threat Intelligence<\/a>.<\/em><\/div>\n<\/blockquote>\n<h2 id=\"iocs\">IoCs<\/h2>\n<h3>Archivos<\/h3>\n<p>&nbsp;<\/p>\n<div class=\"table-container\">\n<table border=\"1\" width=\"642\" cellspacing=\"0\" cellpadding=\"0\">\n<thead>\n<tr>\n<td width=\"179\"><strong>SHA-1<\/strong><\/td>\n<td width=\"142\"><strong>Filename<\/strong><\/td>\n<td width=\"132\"><strong>Detection<\/strong><\/td>\n<td width=\"189\"><strong>Description<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"179\">01B99FF47EC6394753F9<wbr \/>CCDD2D43B3E804F9EE36<\/td>\n<td width=\"142\">Avamer.pdf.exe<\/td>\n<td width=\"132\">Python\/Trojan<wbr \/>Dropper.Agent.GI<\/td>\n<td width=\"189\">Python-compiled dropper for Spearal<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">1C757ACCBC2755E83E53<wbr \/>0DDA11B3F81007325E67<\/td>\n<td width=\"142\">Win_Updates.exe<\/td>\n<td width=\"132\">MSIL\/Agent.EUM<\/td>\n<td width=\"189\">Spearal, a BladedFeline backdoor.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">272CF34E8DB2078A3170<wbr \/>CF0E54255D89785E3C50<\/td>\n<td width=\"142\">scr8B45.ps1<\/td>\n<td width=\"132\">PowerShell\/Trojan<wbr \/>Dropper.Agent.AJU<\/td>\n<td width=\"189\">PowerShell script to install Spearal.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">37859E94086EC47B3665<wbr \/>328E9C9BAF665CB869F6<\/td>\n<td width=\"142\">ncms_demo.msi<\/td>\n<td width=\"132\">MSIL\/Agent.EUM<\/td>\n<td width=\"189\">MSI inside the zip archive that drops and executes a PowerShell script that in turn drops and executes Spearal.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">3D21E1C9DFBA38EC6997<wbr \/>AE6E426DF9291F89762A<\/td>\n<td width=\"142\">flogon.aspx<\/td>\n<td width=\"132\">ASP\/Agent.BI<\/td>\n<td width=\"189\">Flog webshell.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">4954E8ACE23B48EC55F1<wbr \/>FF3A47033351E9FA2D6C<\/td>\n<td width=\"142\">winsmsrv.exe<\/td>\n<td width=\"132\">MSIL\/HackTool<wbr \/>.Agent.YN<\/td>\n<td width=\"189\">Pinar, a reverse tunnel.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">562E1678EC8FDC1D83A3<wbr \/>F73EB511A6DDA08F3B3D<\/td>\n<td width=\"142\">LogonUl.exe<\/td>\n<td width=\"132\">Win64\/OilRig_<wbr \/>AGen.A<\/td>\n<td width=\"189\">RDAT backdoor.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">66BD8DB40F4169C7F0FC<wbr \/>A3D5D15C978EFE143CF8<\/td>\n<td width=\"142\">Protocol.pdf.exe<\/td>\n<td width=\"132\">Python\/Trojan<wbr \/>Dropper.Agent.FT<\/td>\n<td width=\"189\">Whisper Protocol, the dropper that writes and executes the Whisper backdoor.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">6973D3FF8852A3292380<wbr \/>B07858D43D0B80C0616E<\/td>\n<td width=\"142\">VeeamUpdate.exe<\/td>\n<td width=\"132\">MSIL\/Agent.ERR<\/td>\n<td width=\"189\">Whisper backdoor.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">73D0FAA475C6E489B2C5<wbr \/>C95BB51DEDE4719D199E<\/td>\n<td width=\"142\">winhttpproxy.exe<\/td>\n<td width=\"132\">MSIL\/HackTool<wbr \/>.Agent.XY<\/td>\n<td width=\"189\">Pinar, a reverse tunnel.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">B8AFC21EF2AA854896B9<wbr \/>7F1C81B376DCDDE2466D<\/td>\n<td width=\"142\">RunExeActionAllowed<wbr \/>List.exe<\/td>\n<td width=\"132\">MSIL\/Agent.ERR<\/td>\n<td width=\"189\">Whisper backdoor.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">BB4FFCDBFAD40125080C<wbr \/>13FA4917A1E836A8D101<\/td>\n<td width=\"142\">MFTD.exe<\/td>\n<td width=\"132\">MSIL\/Tiny.GL<\/td>\n<td width=\"189\">Hawking Listener.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">BE0AD25B7B4834798490<wbr \/>8175404996531CFD74B7<\/td>\n<td width=\"142\">videosrv.exe<\/td>\n<td width=\"132\">Generik.BKYYERR<\/td>\n<td width=\"189\">VideoSRV, a reverse shell.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">E8E6E6AFEF3F574C1F52<wbr \/>28BDB28ABB34F8A0D09A<\/td>\n<td width=\"142\">wincapsrv.exe<\/td>\n<td width=\"132\">MSIL\/HackTool<wbr \/>.Agent.XY<\/td>\n<td width=\"189\">Laret, a reverse tunnel.<\/td>\n<\/tr>\n<tr>\n<td width=\"179\">F28D8C5C2283019E6ED7<wbr \/>88D20240ABC8554CADB5<\/td>\n<td width=\"142\">N\/A<\/td>\n<td width=\"132\">MSIL\/Agent.EUM<\/td>\n<td width=\"189\">Zip archive that contains an MSI that drops and executes a PowerShell script that in turn drops and executes Spearal.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<h3>Red<\/h3>\n<p>&nbsp;<\/p>\n<div class=\"table-container\">\n<table border=\"1\" width=\"642\" cellspacing=\"0\" cellpadding=\"0\">\n<thead>\n<tr>\n<td width=\"141\"><strong>IP<\/strong><\/td>\n<td width=\"76\"><strong>Domain<\/strong><\/td>\n<td width=\"123\"><strong>Hosting provider<\/strong><\/td>\n<td width=\"85\"><strong>First seen<\/strong><\/td>\n<td width=\"218\"><strong>Details<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"141\">178.209.51[.]61<\/td>\n<td width=\"76\">N\/A<\/td>\n<td width=\"123\">Nine Internet Solutions AG<\/td>\n<td width=\"85\">2023\u201112\u201118<\/td>\n<td width=\"218\">Distribution server for BladedFeline\u2019s Laret reverse tunnel.<\/td>\n<\/tr>\n<tr>\n<td>185.76.78[.]177<\/td>\n<td>N\/A<\/td>\n<td>EDIS GmbH &#8211; Noc Engineer<\/td>\n<td>N\/A<\/td>\n<td>C&amp;C used by Spearal.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<h2 id=\"tecnicas-attck-de-mitre\">T\u00e9cnicas ATT&amp;CK de MITRE<\/h2>\n<p>Esta tabla se ha elaborado utilizando\u00a0<a href=\"https:\/\/attack.mitre.org\/resources\/versions\/\" target=\"_blank\" rel=\"noopener\">la versi\u00f3n 17<\/a>\u00a0del marco MITRE ATT&amp;CK<strong>.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<div class=\"table-container\">\n<table border=\"1\" width=\"642\" cellspacing=\"0\" cellpadding=\"0\">\n<thead>\n<tr>\n<td width=\"113\"><strong>Tactic<\/strong><\/td>\n<td width=\"113\"><strong>ID<\/strong><\/td>\n<td width=\"151\"><strong>Name<\/strong><\/td>\n<td width=\"265\"><strong>Description<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td width=\"113\"><strong>Reconnaissance<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1595\/002\">T1595.002<\/a><\/td>\n<td width=\"151\">Active Scanning: Vulnerability Scanning<\/td>\n<td width=\"265\">BladedFeline probably conducts vulnerability scanning against targets to identify potentially vulnerable, exposed applications.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"4\" width=\"113\"><strong>Resource Development<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1583\/001\">T1583.001<\/a><\/td>\n<td width=\"151\">Acquire Infrastructure: Domains<\/td>\n<td width=\"265\">BladedFeline registers domains to use for C&amp;C servers.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1583\/003\">T1583.003<\/a><\/td>\n<td width=\"151\">Acquire Infrastructure: Virtual Private Server<\/td>\n<td width=\"265\">BladedFeline uses VPS services to host C&amp;C servers.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1583\">T1583<\/a><\/td>\n<td width=\"151\">Acquire Infrastructure<\/td>\n<td width=\"265\">BladedFeline uses IPs for network infrastructure, including distributing malware and C&amp;C servers.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1586\/002\">T1586.002<\/a><\/td>\n<td width=\"151\">Compromise Accounts: Email Accounts<\/td>\n<td width=\"265\">BladedFeline uses compromised email accounts as C&amp;C servers.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><strong>Initial Access<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1190\">T1190<\/a><\/td>\n<td width=\"151\">Exploit Public-Facing Application<\/td>\n<td width=\"265\">BladedFeline probably exploits vulnerable public-facing applications for initial access.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"6\" width=\"113\"><strong>Execution<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1059\/003\">T1059.003<\/a><\/td>\n<td width=\"151\">Command and Scripting Interpreter: Windows Command Shell<\/td>\n<td width=\"265\">BladedFeline uses the Windows Command Shell to execute commands on compromised endpoints.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1059\/007\">T1059.007<\/a><\/td>\n<td width=\"151\">Command and Scripting Interpreter: JavaScript<\/td>\n<td width=\"265\">BladedFeline uses JavaScript webshells to execute commands on compromised endpoints.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1059\/001\">T1059.001<\/a><\/td>\n<td width=\"151\">Command and Scripting Interpreter: PowerShell<\/td>\n<td width=\"265\">BladedFeline uses PowerShell to execute commands on compromised endpoints.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1059\/006\">T1059.006<\/a><\/td>\n<td width=\"151\">Command and Scripting Interpreter: Python<\/td>\n<td width=\"265\">BladedFeline uses Python as a dropper for deploying backdoors to compromised endpoints.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1559\">T1559<\/a><\/td>\n<td width=\"151\">Inter-Process Communication<\/td>\n<td width=\"265\">BladedFeline uses IPC as a means of local code execution in its malicious IIS module.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1569\/002\">T1569.002<\/a><\/td>\n<td width=\"151\">System Services: Service Execution<\/td>\n<td width=\"265\">BladedFeline uses Windows services for malware execution with Whisper and PrimeCache.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\" width=\"113\"><strong>Persistence<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1547\/001\">T1547.001<\/a><\/td>\n<td width=\"151\">Boot or Logon Autostart Execution: Registry Run Keys \/ Startup Folder<\/td>\n<td width=\"265\">The Whisper backdoor creates a LNK file in the startup folder for persistence.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1546\">T1546<\/a><\/td>\n<td width=\"151\">Event Triggered Execution<\/td>\n<td width=\"265\">PrimeCache is loaded by an IIS Worker Process (w3wp.exe) when the IIS server receives an inbound HTTP request.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"4\" width=\"113\"><strong>Defense Evasion<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1078\">T1078<\/a><\/td>\n<td width=\"151\">Valid Accounts<\/td>\n<td width=\"265\">BladedFeline uses legitimate accounts to exfiltrate data and bypass defenses, and as C&amp;C servers.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1140\">T1140<\/a><\/td>\n<td width=\"151\">Deobfuscate\/Decode Files or Information<\/td>\n<td width=\"265\">The Whisper backdoor uses base64 encoding to obfuscate data.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1070\/004\">T1070.004<\/a><\/td>\n<td width=\"151\">Indicator Removal: File Deletion<\/td>\n<td width=\"265\">The Python dropper for Whisper deletes itself and other install files after a successful installation.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1070\/006\">T1070.006<\/a><\/td>\n<td width=\"151\">Indicator Removal: Timestomp<\/td>\n<td width=\"265\">BladedFeline routinely timestomps the compilation timestamps of malware that the group develops.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><strong>Credential Access<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1003\/001\">T1003.001<\/a><\/td>\n<td width=\"151\">OS Credential Dumping: LSASS Memory<\/td>\n<td width=\"265\">BladedFeline dumps LSASS from memory to steal credentials.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"5\" width=\"113\"><strong>Command and Control<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1573\/001\">T1573.001<\/a><\/td>\n<td width=\"151\">Encrypted Channel: Symmetric Cryptography<\/td>\n<td width=\"265\">The Whisper backdoor uses AES encryption to send and receive data between the malware and the C&amp;C.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1071\/001\">T1071.001<\/a><\/td>\n<td width=\"151\">Application Layer Protocol: Web Protocols<\/td>\n<td width=\"265\">PrimeCache uses standard web protocols for communication with the C&amp;C server.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1132\/001\">T1132.001<\/a><\/td>\n<td width=\"151\">Data Encoding: Standard Encoding<\/td>\n<td width=\"265\">PrimeCache uses standard encoding for communication with the C&amp;C server.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1573\/002\">T1573.002<\/a><\/td>\n<td width=\"151\">Encrypted Channel: Asymmetric Cryptography<\/td>\n<td width=\"265\">PrimeCache uses RSA and AES-CBC for C&amp;C communication.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1105\">T1105<\/a><\/td>\n<td width=\"151\">Ingress Tool Transfer<\/td>\n<td width=\"265\">PrimeCache has the capability to download additional files from the C&amp;C server for local execution.<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\" width=\"113\"><strong>Exfiltration<\/strong><\/td>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1048\/001\">T1048.001<\/a><\/td>\n<td width=\"151\">Exfiltration Over Alternative Protocol: Exfiltration Over Symmetric Encrypted Non-C2 Protocol<\/td>\n<td width=\"265\">The Whisper backdoor uses AES encryption and email inboxes to send and receive data between the malware and the C&amp;C.<\/td>\n<\/tr>\n<tr>\n<td width=\"113\"><a href=\"https:\/\/attack.mitre.org\/versions\/v15\/techniques\/T1041\">T1041<\/a><\/td>\n<td width=\"151\">Exfiltration Over C2 Channel<\/td>\n<td width=\"265\">PrimeCache exfiltrates data to a C&amp;C server.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En 2024, investigadores de la empresa de seguridad: ESET descubrieron varias herramientas maliciosas en los sistemas utilizados por funcionarios del gobierno kurdo e iraqu\u00ed. El [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seguridad-informatica"],"jetpack_featured_media_url":"https:\/\/i2.wp.com\/web-assets.esetstatic.com\/tn\/-x700\/wls\/2025\/05-25\/bladed-feline-eset-research.png?w=1244&resize=1244,700&ssl=1","_links":{"self":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=231"}],"version-history":[{"count":1,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":233,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/posts\/231\/revisions\/233"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=\/wp\/v2\/media\/232"}],"wp:attachment":[{"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aldomonges.com\/aldomonges\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}