{"id":441,"date":"2024-10-21T16:39:44","date_gmt":"2024-10-21T16:39:44","guid":{"rendered":"https:\/\/www.gdata.com.mx\/blog\/?p=441"},"modified":"2026-05-07T00:47:13","modified_gmt":"2026-05-07T00:47:13","slug":"bbtok-apunta-a-brasil-desofuscacion-del-cargador-net-con-dnlib-y-powershell","status":"publish","type":"post","link":"https:\/\/www.gdata.com.mx\/blog\/bbtok-apunta-a-brasil-desofuscacion-del-cargador-net-con-dnlib-y-powershell\/","title":{"rendered":"BBTok apunta a Brasil: Desofuscaci\u00f3n Del Cargador .NET con dnlib y PowerShell"},"content":{"rendered":"\n<p>Desglosamos la cadena de infecci\u00f3n completa de la amenaza BBTok dirigida a Brasil y demostramos c\u00f3mo desofuscar la DLL del cargador usando PowerShell, Python y dnlib.<\/p>\n\n\n\n<p>En una compleja cadena de infecci\u00f3n que comienza con un correo electr\u00f3nico que contiene una imagen ISO, este malware destaca por su forma de compilar c\u00f3digo C# directamente en la m\u00e1quina infectada. Tambi\u00e9n utiliza una t\u00e9cnica conocida como AppDomain Manager Injection para avanzar en la ejecuci\u00f3n. Los art\u00edculos de&nbsp;<a href=\"https:\/\/research.checkpoint.com\/2023\/behind-the-scenes-of-bbtok-analyzing-a-bankers-server-side-components\/\" target=\"_blank\" rel=\"noreferrer noopener\">Checkpoint<\/a>&nbsp;y&nbsp;<a href=\"https:\/\/www.trendmicro.com\/en_us\/research\/24\/i\/banking-trojans-mekotio-looks-to-expand-targets--bbtok-abuses-ut.html\" target=\"_blank\" rel=\"noreferrer noopener\">TrendMicro<\/a>&nbsp;describen una cadena de infecci\u00f3n similar y la atribuyen al banquero BBTok, pero hasta donde sabemos, nadie ha publicado a\u00fan un an\u00e1lisis sobre el cargador ofuscado basado en .NET llamado Trammy.dll.<\/p>\n\n\n\n<p>El cargador escribe un archivo de registro con palabras desconocidas en las m\u00e1quinas infectadas, para lo cual proporcionamos una tabla de traducci\u00f3n para que los encargados de responder a incidentes puedan decodificar los registros.<\/p>\n\n\n\n<p>La ofuscaci\u00f3n de Trammy.dll, que utiliza una variante de ConfuserEx, impide que las herramientas autom\u00e1ticas actuales recuperen las cadenas. Proporcionamos los scripts y comandos necesarios para desofuscarlas.<\/p>\n\n\n\n<p><strong>Intrusi\u00f3n que utiliza el motor de compilaci\u00f3n de Microsoft<\/strong><\/p>\n\n\n\n<p>Recientemente, descubrimos varias im\u00e1genes ISO maliciosas&nbsp;<sup>[F1-4]<\/sup>&nbsp;en nuestra telemetr\u00eda, aparentemente dirigidas a entidades brasile\u00f1as. Un&nbsp;<a href=\"https:\/\/www.virustotal.com\/gui\/file\/24fac4ef193014e34fc30f7a4b7ccc0b1232ab02f164f105888aabe06efbacc3\/community\" target=\"_blank\" rel=\"noreferrer noopener\">comentario en Virustotal<\/a>&nbsp;menciona que se env\u00edan por correo electr\u00f3nico. Todas estas ISO&nbsp;<sup>[F1-4]<\/sup>&nbsp;contienen un archivo de acceso directo de Windows (LNK)&nbsp;<sup>[F5]<\/sup>&nbsp;y una carpeta (ver figura 1). Dentro de la carpeta encontramos un ejecutable&nbsp;<sup>[F6]<\/sup>&nbsp;, un archivo XML&nbsp;<sup>[F7]<\/sup>&nbsp;, un PDF&nbsp;<sup>[F8]<\/sup>&nbsp;y un archivo ZIP&nbsp;<sup>[F9]<\/sup>&nbsp;.&nbsp;&nbsp;<\/p>\n\n\n\n<p>El archivo LNK&nbsp;<sup>[F5]<\/sup>&nbsp;,&nbsp;<strong>DANFE10103128566164.pdf.lnk<\/strong>&nbsp;, se vincula al ejecutable&nbsp;<sup>[F6]<\/sup>&nbsp;en la carpeta y pasa el archivo XML&nbsp;<sup>[F7]<\/sup>&nbsp;como entrada junto con la opci\u00f3n \u2013nologo. Todos los archivos dentro de la ISO&nbsp;<sup>[F1] se denominan \u00abDANFE10103128566164\u00bb&nbsp;<\/sup><strong>,<\/strong>&nbsp;que incluye el acr\u00f3nimo en portugu\u00e9s \u00abDANFE\u00bb. El acr\u00f3nimo significa \u00bb&nbsp;Documento Auxiliar de la Nota Fiscal&nbsp;<strong>Electr\u00f3nica<\/strong>&nbsp;\u00bb&nbsp;<strong>y<\/strong>&nbsp;se&nbsp;<strong>refiere<\/strong>&nbsp;a&nbsp;<strong>una<\/strong>&nbsp;factura&nbsp;<a href=\"https:\/\/edicomgroup.com\/blog\/electronic-invoicing-brazil\" target=\"_blank\" rel=\"noreferrer noopener\">digital<\/a>&nbsp;que generalmente se distribuye en formato PDF entre empresas brasile\u00f1as.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Los atacantes aprovechan esto disfrazando el archivo LNK\u00a0<sup>[F5]<\/sup>\u00a0con el \u00edcono PDF que est\u00e1 incrustado dentro del ejecutable est\u00e1ndar de Microsoft Edge (msedge.exe) del sistema para atraer a los objetivos a que lo ejecuten.\u00a0<a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/d\/9\/GDATA_Trammy_ISO_65334e1364.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"241\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image.png\" alt=\"\" class=\"wp-image-442\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-300x79.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-768x201.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-650x170.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 1: Contenido de la imagen ISO<\/p>\n\n\n\n<p>El ejecutable,&nbsp;<strong>DANFE10103128566164.exe&nbsp;<\/strong><sup>[F6]<\/sup>&nbsp;, es una versi\u00f3n 4.7.3190.0 (MSBuild.exe) de Microsoft Build Engine firmada de forma v\u00e1lida. El malware lo utiliza para compilar c\u00f3digo C# malicioso incrustado en el archivo XML&nbsp;<sup>[F7]<\/sup>&nbsp;de la m\u00e1quina infectada (consulte la figura 2). El resultado del proceso de compilaci\u00f3n es una DLL .NET&nbsp;<sup>[F13]<\/sup>&nbsp;que se coloca y se ejecuta en la carpeta TEMP local con un nombre aleatorio. Dado que el c\u00f3digo C# simple est\u00e1 incluido en el archivo XML&nbsp;<sup>[F7]<\/sup>&nbsp;, el an\u00e1lisis es sencillo.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/9\/e\/GDATA_Trammy_XML_455bd7f895.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"359\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-1.png\" alt=\"\" class=\"wp-image-443\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-1.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-1-300x117.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-1-768x299.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-1-770x300.png 770w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-1-650x253.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 2: Archivo de proyecto XML [F7] para Microsoft Build Engine que contiene el c\u00f3digo C# malicioso<\/p>\n\n\n\n<p>En primer lugar, la DLL .NET reci\u00e9n compilada&nbsp;<sup>[F13]<\/sup>&nbsp;abre el PDF se\u00f1uelo&nbsp;<sup>[F8]<\/sup>&nbsp;que muestra una factura DANFE al usuario de destino. Despu\u00e9s, extrae el archivo ZIP&nbsp;<sup>[F9]<\/sup>&nbsp;y copia Microsoft Build Engine&nbsp;<sup>[F6]<\/sup>&nbsp;a&nbsp;<strong>C:\\ProgramData\\regid.5498-06.com.microsoft&nbsp;<\/strong><sup>[P1]<\/sup>&nbsp;a trav\u00e9s de PowerShell. Por \u00faltimo, aprovecha una&nbsp;<a href=\"https:\/\/v3ded.github.io\/redteam\/utilizing-programmatic-identifiers-progids-for-uac-bypasses\" target=\"_blank\" rel=\"noreferrer noopener\">omisi\u00f3n de UAC utilizando ProgID<\/a>&nbsp;junto con el binario de sistema elevado autom\u00e1ticamente&nbsp;<strong>computerdefaults.exe<\/strong>&nbsp;para ejecutar Microsoft Build Engine&nbsp;<sup>[F6]<\/sup>&nbsp;una vez m\u00e1s.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Esta vez, sin embargo, MSBuild.exe&nbsp;<sup>[F6]<\/sup>&nbsp;no compila nuevamente el c\u00f3digo C#, sino que ejecuta otra DLL, Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;, basada en el archivo de configuraci\u00f3n del proyecto&nbsp;<sup>[F11]<\/sup>&nbsp;. Ambos se extraen del archivo ZIP mencionado anteriormente&nbsp;<sup>[F9]<\/sup>&nbsp;. Para evitar la ejecuci\u00f3n consecutiva de la omisi\u00f3n de UAC, crea un mutex local llamado&nbsp;<strong>TiiSbtvhvbCMW<\/strong>&nbsp;. &nbsp;<\/p>\n\n\n\n<p>La figura 3 muestra una descripci\u00f3n general completa de esta parte de la cadena de infecci\u00f3n.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/e\/5\/GDATA_Trammy_Stage_1_658ac7d84e.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"340\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-2.png\" alt=\"\" class=\"wp-image-444\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-2.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-2-300x111.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-2-768x284.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-2-813x300.png 813w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-2-650x240.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 3: Etapa 1: Utilizaci\u00f3n de Microsoft Build Engine para ejecutar archivos DLL .NET; las letras y n\u00fameros entre corchetes son referencias a la tabla IoC <\/p>\n\n\n\n<p><strong>Inyecci\u00f3n de AppDomain Manager<\/strong><\/p>\n\n\n\n<p>El archivo de configuraci\u00f3n&nbsp;<sup>[F11]<\/sup>&nbsp;declara la clase&nbsp;SacApp.SacAppde Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;como AppDomainManager (ver figura 4). Un AppDomainManager es responsable de personalizar el AppDomain de una aplicaci\u00f3n, que es un entorno aislado para el c\u00f3digo administrado.&nbsp;<\/p>\n\n\n\n<p>Esto significa que la declaraci\u00f3n&nbsp;SacApp.SacAppcomo AppDomainManager lleva a la ejecuci\u00f3n de c\u00f3digo malicioso en&nbsp;InitializeNewDomain()un m\u00e9todo est\u00e1ndar que ha sido anulado por SacApp.SacApp&nbsp;<sup>[F10]<\/sup>&nbsp;. Esta t\u00e9cnica se conoce como&nbsp;<a href=\"https:\/\/www.rapid7.com\/blog\/post\/2023\/05\/05\/appdomain-manager-injection-new-techniques-for-red-teams\/\" target=\"_blank\" rel=\"noreferrer noopener\">AppDomain Manager Injection<\/a>&nbsp;.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/7\/2\/GDATA_Trammy_Config_d6d284a6f7.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"213\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-3.png\" alt=\"\" class=\"wp-image-445\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-3.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-3-300x69.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-3-768x178.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-3-650x150.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 4: La clase SacApp.SacApp est\u00e1 registrada como AppDomainManagerType en el archivo .config [F11]<\/p>\n\n\n\n<p><strong>Desofuscaci\u00f3n de Trammy.dll<\/strong><\/p>\n\n\n\n<p>DANFE10103128566164.dll&nbsp;<sup>[F10]<\/sup>&nbsp;no est\u00e1 empaquetado, sino ofuscado con&nbsp;<a href=\"https:\/\/github.com\/yck1509\/ConfuserEx\" target=\"_blank\" rel=\"noreferrer noopener\">ConfuserEx<\/a>&nbsp;. Tiene el nombre de m\u00f3dulo Trammy.dll. Las herramientas de desofuscaci\u00f3n espec\u00edficas como NoFuserEx y&nbsp;<a href=\"https:\/\/github.com\/ViRb3\/de4dot-cex\" target=\"_blank\" rel=\"noreferrer noopener\">de4dot-cex<\/a>&nbsp;eliminan el aplanamiento del flujo de control, pero no recuperan autom\u00e1ticamente las cadenas.<\/p>\n\n\n\n<p>Hay cinco m\u00e9todos de decodificaci\u00f3n de cadenas y cada uno toma un entero como clave que utiliza para calcular la cadena desofuscada. Despu\u00e9s de aplicar de4dot-cex a la DLL, recuperamos todas estas claves utilizando&nbsp;<a href=\"https:\/\/github.com\/0xd4d\/dnlib\">dnlib<\/a>&nbsp;y Python. Este c\u00f3digo busca pares de&nbsp;ldc_i4instrucciones&nbsp;cally y devuelve los&nbsp;ldc_i4operandos. Esto puede devolver m\u00e1s que las claves de decodificaci\u00f3n de cadenas, pero no importa para los pasos que siguen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"569\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-4.png\" alt=\"\" class=\"wp-image-446\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-4.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-4-300x185.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-4-768x474.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-4-235x145.png 235w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-4-486x300.png 486w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Utilizamos la funci\u00f3n de edici\u00f3n IL de DnSpy para eliminar las comprobaciones antirreversi\u00f3n de los cinco m\u00e9todos de decodificaci\u00f3n de cadenas. Cada m\u00e9todo comienza con una declaraci\u00f3n if que comprueba si el llamador es el ensamblado actual. Si no es el ensamblado actual, se devolver\u00e1 una cadena vac\u00eda. Reemplazar la declaraci\u00f3n if con instrucciones NOP nos permite ejecutar el c\u00f3digo desde PowerShell.<\/p>\n\n\n\n<p>Recuperamos las cadenas de forma din\u00e1mica para cada m\u00e9todo utilizando los siguientes comandos de PowerShell. La variable&nbsp;$numses un array de todas las claves que extrajimos con el script anterior. Los m\u00e9todos de decodificaci\u00f3n de cadenas tienen dos caracter\u00edsticas que se deben tener en cuenta.<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>Se encuentran en el tipo global\u00a0&lt;Module>y no se puede acceder a ellos a trav\u00e9s de\u00a0[namespace.ClassName]::methodname(). Por lo tanto, resolvemos los m\u00e9todos de decodificaci\u00f3n de cadenas a trav\u00e9s de su token (aqu\u00ed 0x6000005).<\/li>\n\n\n\n<li>Los m\u00e9todos de decodificaci\u00f3n de cadenas tienen un tipo de retorno gen\u00e9rico, por lo que debemos proporcionar el tipo de retorno a trav\u00e9s de\u00a0MakeGenericMethod([string]).<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"90\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-5.png\" alt=\"\" class=\"wp-image-447\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-5.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-5-300x29.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-5-768x75.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-5-650x64.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>El \u00faltimo comando crea una asignaci\u00f3n de las claves para los m\u00e9todos de decodificaci\u00f3n de cadenas a las cadenas desofuscadas. El try-catch se traga cualquier mensaje de error que se imprima debido a claves incorrectas.<\/p>\n\n\n\n<p>Repetimos estos comandos para todos los m\u00e9todos de decodificaci\u00f3n de cadenas hasta que tengamos un&nbsp;<strong>result.txt<\/strong>&nbsp;fusionado que contenga todas las claves y cadenas decodificadas. Este archivo tambi\u00e9n tendr\u00e1 asignaciones vac\u00edas que eliminamos reemplazando la expresi\u00f3n regular&nbsp;^.*:\\r\\n$por nada. Transformamos el resultado en un diccionario de Python reemplazando&nbsp;^(-?\\d+):(.*)$por&nbsp;\\1:r&#8217;\\2&#8242;,(sintaxis de Notepad++). Luego modificamos ligeramente el script de Python anterior para que reemplace&nbsp;calllas instrucciones para las funciones de decodificaci\u00f3n de cadenas con&nbsp;ldstrinstrucciones y la cadena desofuscada adecuada como operando.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"585\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-6.png\" alt=\"\" class=\"wp-image-448\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-6.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-6-300x191.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-6-768x488.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-6-228x145.png 228w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-6-472x300.png 472w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Ejecutamos el script en Trammy.dll y desofuscamos las cadenas con \u00e9xito. Como paso final, utilizamos&nbsp;<a href=\"https:\/\/github.com\/wickyhu\/simple-assembly-explorer\/releases\" target=\"_blank\" rel=\"noreferrer noopener\">Simple Assembly Explorer<\/a>&nbsp;para eliminar las llamadas indirectas seleccionando el perfil \u00abNada\u00bb en el desofuscador y habilitando la opci\u00f3n \u00abLlamada directa\u00bb.<\/p>\n\n\n\n<p>Las figuras 5 y 6 muestran el&nbsp;SacApp.SacApp.InitializeNewDomainm\u00e9todo antes y despu\u00e9s de aplicar la desofuscaci\u00f3n de cadenas y la eliminaci\u00f3n de llamadas indirectas.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/c\/1\/GDATA_Trammy_Before_String_Deobfus_79943cb548.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"372\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-7.png\" alt=\"\" class=\"wp-image-449\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-7.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-7-300x121.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-7-768x310.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-7-743x300.png 743w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-7-650x263.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 5: Clase AppDomainManager personalizada despu\u00e9s de eliminar la ofuscaci\u00f3n del flujo de control con de4dot-cex <\/p>\n\n\n\n<p><a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/c\/4\/GDATA_Trammy_After_String_Deobfus_87586f916d.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"410\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-8.png\" alt=\"\" class=\"wp-image-450\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-8.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-8-300x134.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-8-768x342.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-8-674x300.png 674w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-8-650x289.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 6: Clase AppDomainManager personalizada despu\u00e9s de de4dot-cex, desofuscaci\u00f3n de cadenas y eliminaci\u00f3n de llamadas indirectas, los m\u00e9todos isAdmin y MainMalcode se renombraron manualmente <\/p>\n\n\n\n<p><strong>An\u00e1lisis de Trammy.dll<\/strong><\/p>\n\n\n\n<p>Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;inicia la ejecuci\u00f3n en el m\u00e9todo&nbsp;InitializeNewDomain()de&nbsp;SacApp.SacAppporque ha sido declarado como AppDomainManager por la configuraci\u00f3n&nbsp;<sup>[F11]<\/sup>&nbsp;.&nbsp;<\/p>\n\n\n\n<p>Primero, abre el PDF se\u00f1uelo&nbsp;<sup>[F8]<\/sup>&nbsp;. Luego, verifica si se debe ejecutar el c\u00f3digo malicioso. Se deben cumplir dos condiciones<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li>No debe existir un archivo llamado\u00a0<strong>C:\\ProgramData\\internal_drive_version2.3.4.txt\u00a0\u00a0<\/strong>: es un archivo vac\u00edo que se crear\u00e1 m\u00e1s adelante.\u00a0<\/li>\n\n\n\n<li><strong>hxxp:\/\/ipwho(dot)is\/<\/strong>\u00a0debe informar que la IP es brasile\u00f1a<\/li>\n<\/ol>\n\n\n\n<p>Mientras que la primera condici\u00f3n garantiza que el c\u00f3digo se ejecute solo una vez, la segunda verificaci\u00f3n confirma que el malware se ejecuta en el \u00e1rea objetivo, Brasil. De esa manera, los sistemas sandbox autom\u00e1ticos no pueden determinar la malicia a menos que utilicen direcciones IP o servidores proxy brasile\u00f1os.&nbsp;<\/p>\n\n\n\n<p><strong>Traducci\u00f3n de archivos de registro<\/strong><\/p>\n\n\n\n<p>El malware crea un archivo de registro en&nbsp;<strong>C:\\ProgramData\\log.txt&nbsp;<sup>[P3]<\/sup><\/strong>&nbsp;que codifica las etapas de ejecuci\u00f3n con claves espec\u00edficas .palabras.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Entrada de registro<\/strong><\/td><td><strong>Significado<\/strong><\/td><\/tr><\/thead><tbody><tr><td>COMENZAR<\/td><td>Las comprobaciones 1. y 2. tuvieron \u00e9xito y se ejecut\u00f3 la rutina maliciosa principal.<\/td><\/tr><tr><td>ADMINISTRACI\u00d3N<\/td><td>El malware ten\u00eda derechos de administrador<\/td><\/tr><tr><td>R<\/td><td>Intent\u00f3 crear un mutex &#8216;KOKKIIKKKOOOO&#8217;&nbsp;<\/td><\/tr><tr><td>MTX_F<\/td><td>El mutex &#8216;KOKKIIKKKOOOO&#8217; se cre\u00f3 correctamente<\/td><\/tr><tr><td>CP<\/td><td>CCProxy se descarg\u00f3 e instal\u00f3 como servicio<\/td><\/tr><tr><td>yo<\/td><td>Se extrajo la informaci\u00f3n del sistema operativo<\/td><\/tr><tr><td>ES<\/td><td>Se cre\u00f3&nbsp;el servicio que ejecuta autom\u00e1ticamente la carga \u00fatil de Delphi como un explorador falso&nbsp;<sup>[F14]<\/sup><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Adem\u00e1s, los posibles mensajes de excepci\u00f3n y sus seguimientos de pila se escriben en el registro.<\/p>\n\n\n\n<p>Esto significa que quienes responden a incidentes pueden localizar este archivo de registro para descubrir qu\u00e9 le hizo el malware al sistema infectado.<\/p>\n\n\n\n<p><strong>Informaci\u00f3n exfiltrada del sistema operativo<\/strong><\/p>\n\n\n\n<p>Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;obtiene la siguiente informaci\u00f3n a trav\u00e9s de Windows Management Instrumentation (WMI) del ManagementObject&nbsp;<strong>Win32_OperatingSystem<\/strong>&nbsp;:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Versi\u00f3n del sistema operativo<\/li>\n\n\n\n<li>Nombre CS<\/li>\n\n\n\n<li>Subt\u00edtulo<\/li>\n\n\n\n<li>Versi\u00f3n<\/li>\n\n\n\n<li>N\u00famero de serie<\/li>\n\n\n\n<li>N\u00famero de compilaci\u00f3n<\/li>\n\n\n\n<li>Arquitectura Os<\/li>\n<\/ul>\n\n\n\n<p>Adem\u00e1s, obtiene el n\u00famero de serie de todos los objetos&nbsp;<strong>Win32_PhysicalMedia<\/strong>&nbsp;y a\u00f1ade la cadena &#8216;VM&#8217; siempre que el n\u00famero de serie sea nulo, probablemente utilizado como indicador de que el malware se est\u00e1 ejecutando en una m\u00e1quina virtual. El malware tambi\u00e9n obtiene una lista de todos los programas antivirus. La informaci\u00f3n resultante se env\u00eda a la siguiente URL&nbsp;<sup>[U1]<\/sup>&nbsp;<\/p>\n\n\n\n<p>hxxps:\/\/contador(punto)danfajuda(punto)com\/contador\/save.php<\/p>\n\n\n\n<p><strong>Descarga, descifrado y persistencia<\/strong><\/p>\n\n\n\n<p>A continuaci\u00f3n, Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;programa una tarea que agrega la carpeta&nbsp;<strong>C:\\ProgramData<\/strong>&nbsp;a las exclusiones de Windows Defender.&nbsp;<\/p>\n\n\n\n<p>La DLL contacta al directorio abierto&nbsp;<strong>hxxps:\/\/fileondemandd(dot)site\/&nbsp;<sup>[U2]<\/sup><\/strong>&nbsp;(ver figura 8) y descarga el archivo ZIP filea.tat&nbsp;<sup>[F12]<\/sup>&nbsp;.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/f\/0\/GDATA_Trammy_fileshareingsite_0f2601cbee.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"318\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-9.png\" alt=\"\" class=\"wp-image-451\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-9.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-9-300x104.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-9-768x265.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-9-869x300.png 869w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-9-650x224.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 8: \u00edndice del almacenamiento de archivos que contiene el archivo ZIP filea.tat<\/p>\n\n\n\n<p>El archivo est\u00e1 protegido con contrase\u00f1a. La contrase\u00f1a es&nbsp;<strong>vsfdefender<\/strong>&nbsp;y no se ha cambiado en mucho tiempo, por ejemplo, los archivos del&nbsp;<a href=\"https:\/\/research.checkpoint.com\/2023\/behind-the-scenes-of-bbtok-analyzing-a-bankers-server-side-components\/\">art\u00edculo de Checkpoint<\/a>&nbsp;de hace un a\u00f1o tambi\u00e9n usan esta contrase\u00f1a (Checkpoint llama a los ejemplos BBTok con los nombres de archivo fe, fe2 y fe235). Sin embargo, esta contrase\u00f1a solo funciona con los archivos que utiliza el malware. Si se intenta descomprimir todo el archivo con esta contrase\u00f1a, aparecen mensajes de error de \u00abcontrase\u00f1a incorrecta\u00bb. Esto podr\u00eda ser intencional para evitar la fuerza bruta de la contrase\u00f1a del archivo.<\/p>\n\n\n\n<p>Obtuvimos siete archivos del archivo ZIP&nbsp;<sup>[F12]<\/sup>&nbsp;. Seis de ellos (CCProxy.exe&nbsp;<sup>[F15]<\/sup>&nbsp;, wke.dll&nbsp;<sup>[F16]<\/sup>&nbsp;, Web.exe&nbsp;<sup>[F17]<\/sup>&nbsp;, CCProxy.ini, AccInfo.ini y LeftTime.ini) pertenecen a la aplicaci\u00f3n CCProxy desarrollada por&nbsp;<a href=\"https:\/\/www.youngzsoft.net\/ccproxy\/\" target=\"_blank\" rel=\"noreferrer noopener\">Youngzsoft Co., Ltd<\/a>&nbsp;que se puede utilizar, por ejemplo, para filtrar y monitorear el tr\u00e1fico de red. Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;los extrae todos a&nbsp;<strong>C:\\Program Files\\SearchIndexer&nbsp;<\/strong><sup>[P4]<\/sup>&nbsp;excepto Web.exe&nbsp;<sup>[F17]<\/sup>&nbsp;que permanece sin usar. CCProxy.exe&nbsp;<sup>[F15]<\/sup>&nbsp;, enmascarado como&nbsp;<strong>Searchlndexer.exe<\/strong>&nbsp;(con una \u00abL\u00bb min\u00fascula en lugar de una \u00abi\u00bb may\u00fascula), es la aplicaci\u00f3n principal y est\u00e1 registrada como un servicio local que se inicia autom\u00e1ticamente al iniciar Windows. CCProxy.ini y AccInfo.ini configuran CCProxy para aceptar conexiones HTTP desde localhost en el puerto 8118, que se utiliza para disfrazar la comunicaci\u00f3n con el servidor CnC&nbsp;<sup>[U3]<\/sup>&nbsp;.&nbsp;<\/p>\n\n\n\n<p>El archivo wke.dll&nbsp;<sup>[F16]<\/sup>&nbsp;es superfluo porque solo lo requiere el archivo Web.exe&nbsp;<sup>[F17]<\/sup>&nbsp;que no se extrae . El s\u00e9ptimo archivo se llama explorer.exe&nbsp;<sup>[F14]<\/sup>&nbsp;y se compil\u00f3 con Embarcadero Delphi 11.0 Alexandria. Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;lo extrae a la carpeta de datos del programa y lo registra tambi\u00e9n como un servicio local. En art\u00edculos anteriores (&nbsp;<a href=\"https:\/\/research.checkpoint.com\/2023\/behind-the-scenes-of-bbtok-analyzing-a-bankers-server-side-components\/\" target=\"_blank\" rel=\"noreferrer noopener\">enlace 1<\/a>&nbsp;,&nbsp;<a href=\"https:\/\/www.trendmicro.com\/en_us\/research\/24\/i\/banking-trojans-mekotio-looks-to-expand-targets--bbtok-abuses-ut.html\" target=\"_blank\" rel=\"noreferrer noopener\">enlace 2<\/a>&nbsp;), la carga \u00fatil de Delphi era BBTok.<\/p>\n\n\n\n<p>Despu\u00e9s de establecer la persistencia, Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;crea el archivo vac\u00edo&nbsp;<strong>internal_drive_version2.3.4.txt&nbsp;<\/strong><sup>[P2]<\/sup>&nbsp;, que se utiliza para determinar si el c\u00f3digo ya se ha ejecutado. A continuaci\u00f3n, Trammy.dll&nbsp;<sup>[F10]<\/sup>&nbsp;muestra la advertencia de caducidad de la licencia de Windows predeterminada y reinicia el sistema. Al reiniciar, el servicio CCProxy se inicia con su configuraci\u00f3n personalizada y se llama al falso explorer.exe&nbsp;<sup>[F14]<\/sup>&nbsp;con un filea.tat&nbsp;<sup>[F12]<\/sup>&nbsp;renombrado como argumento. La Figura 9 muestra la descripci\u00f3n general de esta parte de la cadena de infecci\u00f3n.<\/p>\n\n\n\n<p>En nuestro pr\u00f3ximo art\u00edculo, describiremos c\u00f3mo la carga \u00fatil de Delphi&nbsp;<sup>[F14]<\/sup>&nbsp;se comunica con el servidor CNC&nbsp;<sup>[U3]<\/sup>&nbsp;a trav\u00e9s de CCProxy utilizando el&nbsp;<a href=\"https:\/\/github.com\/teppicom\/RealThinClient-SDK\" target=\"_blank\" rel=\"noreferrer noopener\">SDK Realthinclient<\/a>&nbsp;.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/www.gdatasoftware.com\/fileadmin\/_processed_\/1\/7\/GDATA_Trammy_Stage_2_b3546b4a67.png\"><\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"331\" src=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-10.png\" alt=\"\" class=\"wp-image-452\" srcset=\"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-10.png 921w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-10-300x108.png 300w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-10-768x276.png 768w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-10-835x300.png 835w, https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/image-10-650x234.png 650w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p>Figura 9: Etapa 2: Descarga y persistencia<\/p>\n\n\n\n<p><strong>Hashes<\/strong><\/p>\n\n\n\n<p><strong>[F1] DANFE10103128566164.iso<\/strong><br>09027fa9653bdf2b4a291071f7e8a72f14d1ba5d0912ed188708f9edd6a084fe<\/p>\n\n\n\n<p><strong>[F2]&nbsp;DANFE10103124952781.iso<\/strong><br>2ff420e3d01893868a50162df57e8463d1746d3965b76025ed88db9bb13388af<\/p>\n\n\n\n<p><strong>[F3]&nbsp;DANFE10103122718132.iso<\/strong><br>5e5a58bfabd96f0c78c1e12fa2625aba9c84aa3bd4c9bb99d079d6ccb6e46650<\/p>\n\n\n\n<p><strong>[F4] DANFE10103121443891.iso<\/strong><br>dc03070d50fdd31c89491d139adfb211daf171d03e9e6d88aac43e7ff44e4fef<\/p>\n\n\n\n<p><strong>[F5] DANFE10103128566164.pdf.lnk<\/strong><br>ddf84fdc080bd55f6f2b409e596b6f7a040c4ab1eb4b965b3f709a0f7faa4e02<\/p>\n\n\n\n<p><strong>[F6] DANFE10103128566164.exe &#8211; MSBuild leg\u00edtimo<\/strong><br>b60eb62f6c24d4a495a0dab95cc49624ac5099a2cc21f8bd010a410401ab8cc3<\/p>\n\n\n\n<p><strong>[F7] DANFE10103128566164.xml<\/strong><br>7566131ce0ecba1710c1a7552491120751b58d6d55f867e61a886b8e5606afc3<\/p>\n\n\n\n<p><strong>[F8] DANFE10103128566164.pdf &#8211; documento se\u00f1uelo<\/strong><br>ac044dd9ae8f18d928cf39d24525e2474930faf8e83c6e3ad52496ecab11f510<\/p>\n\n\n\n<p><strong>[F9] DANFE10103128566164.zip<\/strong><br>276a1e9f62e21c675fdad9c7bf0a489560cbd959ac617839aeb9a0bc3cd41366<\/p>\n\n\n\n<p><strong>[F10] DANFE10103128566164.dll &#8211; Trammy.dll<\/strong><br>24fac4ef193014e34fc30f7a4b7ccc0b1232ab02f164f105888aabe06efbacc3<\/p>\n\n\n\n<p><strong>[F11] DANFE10103128566164.exe.config: registra AppDomainManager<\/strong><br>8e7f0a51d7593cf76576b767ab03ed331d822c09f6812015550dbd6843853ce7<\/p>\n\n\n\n<p><strong>[F12] filea.tat &#8211; archivo ZIP<\/strong><br>7559c440245aeeca28e67b7f13d198ba8add343e8d48df92b7116a337c98b763<\/p>\n\n\n\n<p><strong>[F13] DLL .NET despu\u00e9s de la compilaci\u00f3n de [F7]<\/strong><br>a3afed0dabefde9bb8f8f905ab24fc2f554aa77e3a94b05ed35cffc20c201e15<\/p>\n\n\n\n<p><strong>[F14] explorer.exe falso: carga \u00fatil de Delphi<\/strong><br>35db2b34412ad7a1644a8ee82925a88369bc58f6effc11d8ec6d5f81650d897e<\/p>\n\n\n\n<p><strong>[F15] Searchlndexer.exe &#8211; CCProxy<\/strong><br>27914c36fd422528d8370cbbc0e45af1ba2c3aeedca1579d92968649b3f562f7<\/p>\n\n\n\n<p><strong>[F16] wke.dll<\/strong><br>2d2c2ba0f0d155233cdcbf41a9cf166a6ce9b80a6ab4395821ce658afe04aaba<\/p>\n\n\n\n<p><strong>[F17] Web.exe<\/strong><br>cb1d2659508a4f50060997ee0e60604598cb38bd2bb90962c6a51d8b798a03b6&nbsp;<\/p>\n\n\n\n<p>URL<\/p>\n\n\n\n<p><strong>[U1] Panel de malware<\/strong><br>hxxps:\/\/contador.danfajuda(punto)com\/contador\/save.php?<\/p>\n\n\n\n<p><strong>[U2] Almacenamiento de archivos<\/strong><br>hxxps:\/\/fileondemandd(punto)site\/<\/p>\n\n\n\n<p><strong>[U3] Puerta de enlace del portal RTC<\/strong><br>hxxp:\/\/pingservice(punto)blogdns(punto)com\/myPath&nbsp;<\/p>\n\n\n\n<p>Caminos<\/p>\n\n\n\n<p><strong>[P1]<\/strong>&nbsp;C:\\ProgramData\\regid.5498-06.com.microsoft\\<\/p>\n\n\n\n<p><strong>[P2]<\/strong>&nbsp;C:\\ProgramData\\unidad_interna_versi\u00f3n2.3.4.txt<\/p>\n\n\n\n<p><strong>[P3]<\/strong>&nbsp;C:\\ProgramData\\log.txt<\/p>\n\n\n\n<p><strong>[P4]<\/strong>&nbsp;C:\\Archivos de programa\\SearchIndexer\\&nbsp;<\/p>\n\n\n\n<p>Enlace <a href=\"https:\/\/www.gdatasoftware.com\/blog\/2024\/09\/38039-bbtok-deobfuscating-net-loader\">https:\/\/www.gdatasoftware.com\/blog\/2024\/09\/38039-bbtok-deobfuscating-net-loader<\/a>&nbsp; Blog de G DATA De Marius Benthin, Karsten Hahn<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Desglosamos la cadena de infecci\u00f3n completa de la amenaza BBTok dirigida a Brasil y demostramos c\u00f3mo desofuscar la DLL del cargador usando PowerShell, Python y dnlib.<\/p>\n<p>En una compleja cadena de infecci\u00f3n que comienza con un correo electr\u00f3nico que contiene una imagen ISO, este malware destaca por su forma de compilar c\u00f3digo C# directamente en la m\u00e1quina infectada. Tambi\u00e9n utiliza una t\u00e9cnica conocida como AppDomain Manager Injection para avanzar en la ejecuci\u00f3n. Los art\u00edculos de&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":454,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-441","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vulnerabilidades"],"jetpack_featured_media_url":"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/G_DATA_Blog_Brazil_Malware_Assy_Preview_60a382de2b.jpg","featured_image_src":"https:\/\/www.gdata.com.mx\/blog\/wp-content\/uploads\/2024\/10\/G_DATA_Blog_Brazil_Malware_Assy_Preview_60a382de2b-150x150.jpg","_links":{"self":[{"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=441"}],"version-history":[{"count":2,"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/441\/revisions"}],"predecessor-version":[{"id":455,"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/posts\/441\/revisions\/455"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/media\/454"}],"wp:attachment":[{"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gdata.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}