Hola a tod@s!

Siempre me da por buscar malware en las plataformas de sandbox online porque, normalmente, se ven cosas interesantes. He visto este fichero que, a priori, podrían corresponder a “facturas” de compañías que nunca, repito que nunca, te enviarían por correo un enlace o el mismo fichero adjunto para que lo descargues e instales.

Hoy veremos este fichero instalable:

EndesaFacrurnopago

Este es el archivo en cuestión : Archivo.EndesaFacturnopagoRef09-07-2022.MSI

Como puede observarse en la salida de any.run no se ve gran cosa, así que trataremos de ir más allá y ver su contenido real, para que no nos la cuelen con estas cosas.

Ejecuciones Factura Falsa Endesa

Este tipo de ficheros (MSI) se pueden descomprimir a un directorio y tendremos todo el contenido:

Descomprimir MSI

Una vez dentro, nos fijamos en ficheros ejecutables (exe, dll, etc.), scripts varios (bat, py, ps1, etc.), lo que nos llame la atención.

Esta DLL llama mucho la atención, será que es la única (xD es broma, hay otra).

DLL maliciosa en factura de la luz

Compilada en Delphi, por lo que ya se puede intuir lo que vamos a ver: FACTURA + DELPHI = TROYANO BANCARIO (aunque no siempre).

Esta DLL, básicamente, realiza unas comprobaciones sobre el entorno (idioma del teclado entre otros) y si le agrada, descarga el payload de una URL, normalmente cifrada o codificada, y después de dejarla en formato legible (zip en este caso) descomprime en algún directorio (%APPDATA%) y ejecuta su contenido.

Descarga de payload URL troyano bancario

Una vez localizada la URL, procedemos a descargarla. Como os he comentado, el fichero descargado no tiene un formato adecuado, todavía, ese es el trabajo de la DLL, dejarlo de tal forma que pueda ser descomprimido.

Transformación dll maliciosa a zip legible

Veamos que tiene dentro ese ZIP.

Extración del troyano bancario muestras mas dlls maliciosas

Un fichero EXE y 3 DLL. Si os fijáis en las fechas, importante esto, dbghelp.dll se compiló el 12 de julio de 2022, hace muy poco, por lo que se intuye que esta podría tener algo interesante. Otra cosa es el tamaño, casi 300 megas, mucho ¿verdad?

Si pensamos el porqué, podemos concluir que es una medida de protección ante cualquier sandbox online que permitan un tamaño limitado.

Voy a renombrar esa DLL para que no sea cargada al ejecutar el EXE y veamos qué pasa:

Renombrado de dll maliciosa y ejecución exe

Nos carga una aplicación legítima “Visual Web Developer Express”, sin más. Entonces podemos pensar que gracias a DLL Hijacking, sería cargada esa DLL (que hemos renombrado) y ejecutada por el EXE.

Ejecucion de dll maliciosa mediante dll hijacking

Vemos en el procmon o Process Monitor como es así, dbghelp.dll es buscada antes en el PATH donde se encuentra el EXE que en su lugar esperado (directorio del sistema), por lo que se cargará antes. También, esa DLL, se podría haber llamado VERSION.DLL, dwmapi.dll o imageres.dll, por poner algún ejemplo más, y se hubieran cargado igualmente.

La DLL también está compilada en DELPHI, coinciden tanto el downloader como el troyano.

Observar comportamiento DLL

Y si echamos un vistazo al contenido de la DLL veremos porqué es tan grande, es debido a esas 2 imágenes incluídas dentro de los archivos de recursos:

Imagenes grandes para evitar las sandbox limitadas

En los casos en los que analizamos programas en DELPHI, es mejor utilizar la herramienta “Interective Delphi Reconstructor”, el porqué es simple, es el que más información da sobre el binario. Podemos ver hasta el aspecto de la aplicación.

Interective Delphi Reconstructor

Los diferentes ficheros “unit” y su contenido según funciones de llamadas a API.

Llamadas API troyano bancario

Para asegurarnos de lo que estamos viendo, buscamos las strings o cadenas que nos parezcan interesantes:

Strings de busqueda en troyano bancario

Y aquí las tenemos, los bancos a los que está destinados este troyano bancario (como habíamos intuído), que según lo que vemos corresponde con GRANDOREIRO. Se le llamó así por el tamaño tan grande que tiene y por su país de origen.

Parece que, además de España y Portugal, se le ha añadido Argentina como posible objetivo.

Bancos de Argentina y portugal de grandoreiro

Podéis leer sobre este tipo de troyanos en la web de INCIBE, concretamente en este paper , ahí veréis más detalles. Este artículo sólo pretendía identificar qué tipo de amenaza se escondía detrás de esas “Facturas” que aparecen en diferentes sandbox online. Estas variantes van cambiando según salen nuevas funcionalidades o reglas yara que las identifican para tratar de pasar desapercibido.

Como es el caso de esta muestra, modifican su código para evitar detecciones. Voy a cambiar el valor de all a 20 “and all of ($str*)”:

rule Grandoreiro_Banker_Trojan
{ 
  meta: 
    author =  "INCIBE-CERT" 
    description = "Detecta el troyano bancario Grandoreiro - modificada" 
  strings:
    $mzp = "MZP"
    $str1 = "yIdIOHandlerSocket"
    $str2 = "ATIVARCAPTURAFULL"
    $str3 = "ATIVARCAPTURAMAG"
    $str4 = "AutoSessionsPingT"
    $str5 = "v4.09 (2013.Q2)"
    $str6 = "CallNextHookEx"
    $str7 = "Cap.DfbBackingMode"
    $str8 = "CryptPlugin.AfterDisconnect"
    $str9 = "deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly"
    $str10 = "DELETAKL"
    $str11 = "DETONAPROCESSO"
    $str12 = "EXIBIRMZ"
    $str13 = "Gate_CryptPlugin"
    $str14 = "GetType method not available for TRtcDataRow"
    $str15 = "GUploadAnywhere_Super"
    $str16 = ".hopto.org"
    $str17 = "Magnification.dll"
    $str18 = "<member><name>RTC.DATASET.ROWS</name>"
    $str19 = "Portable network graphics (AlphaControls)"
    $str20 = "RemoteThreadCallbacks TRtcThreadCallback.DestroyCallback"
    $str21 = "SUSPENDEACESSO"
    $str22 = "ZDecompress_str.InflateInit"
  condition:
    $mzp at 0
    and 20 of ($str*)
    and (filesize > 140000KB and filesize < 400000KB)
}

Con el tema de los downloaders, la cosa se complica ya que se puede descargar de cualquier manera, por lo que se puede variar mucho su código y si utilizas una versión de DELPHI más actual, pues más todavía. Una detección de hace 3 meses puede no ser efectiva a día de hoy. Aprovechando la yara que aparece en el post de INCIBE voy a añadir varias líneas más y cambiar el número de las detecciones para las cadenas.

rule Grandoreiro_Banker_Downloader
{ 
  meta: 
    author =  "INCIBE-CERT" 
    description = "Detecta el Downloader del troyano bancario Grandoreiro - actualizada" 
  strings:
    $delphidll1 = { BA ?? ?? ?? ?? 83 7D 0C 01 75 ?? 50 52 C6 05 ?? ?? ?? ?? ?? 8B 4D 08 89 0D ?? ?? ?? ?? 89 4A 04 }
    $delphidll2 = { 55 8B EC 83 C4 ?? B8 ?? ?? ?? ?? E8 ?? ?? FF FF E8 ?? ?? FF FF 8D 40 00 }
    $str1 = " 2001, 2002 Mike Lischke"
    $str2 = "8$4,6-9'$6.:*?#1pHhX~AeSlZrNbS"
    $str3 = "Archive already has SFX stub"
    $str4 = "Deflate64 compression method is not supported"
    $str5 = "Delphi Component"
    $str6 = "EDecompressionErrorneed dictionary"
    $str7 = "MakeSFX error"
    $str8 = "Runtime error     at 00000000"
    $str9 = "Web site: http://www.componentace.com"
    $str10 = "ScreenToClient"
    $str11 = "SFXStub property is not specified"
    $str12 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\%.8x"
    $str13 = "SystemParametersInfoA"
    $str14 = "TAESCryptoTransform"
    $str15 = "TGetSiteInfoEvent"
    $str16 = "$TMultiReadExclusiveWriteSynchronizer"
    $str17 = "to create a commercial product, please register and download"
    $str18 = "URLDownloadToFileA"
    $str19 = "VerLanguageNameA"
    $str20 = "WndProcPtr%.8X%.8X"
    $str21 = "you that your Personal Edition is provided for personal usage only."
    $str22 = "Zip64Mode"
    $str23 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\%.8x" wide
    $str24 = "Imploded(TERSE)" wide
    $str25 = "PPMd version I, Rev 1" wide
    $str26 = "\\Software\\Embarcadero\\FireDAC" wide
    $str27 = "%d.%d.%d (Build %d)%s" wide
    $str28 = "#32770" wide
    $str29 = "EXECUTE PROCEDURE sp_mgGetInstallInfo()" wide
    $str30 = "Found [%s]GWarning: The client [%s] and server [%s] major versions difference > 1." wide
    $str31 = "Windows Server 2008	Windows 7" wide
    $str32 = "Windows Server 2016	Windows 8" wide
    $str33 = "Row deleting disabled+Application must have only single FDManager" wide
    $str34 = "(Version %1:d.%2:d, Build %3:d, %5:s)" wide
  condition:
    uint16(0) == 0x5A4D // MZ
    and uint16(uint32(0x3C)+0x18) == 0x010B //MZ header en 0x3C
    and (uint16(uint32(0x3C)+0x16) & 0x2000) == 0x2000 //PE DLL signature
    and any of ($delphidll*)
    and 15 of ($str*)
    and (filesize > 1400KB and filesize < 5000KB)
}

Vemos que funciona.

$ yara grandoreiro_incibe.yar . 
Grandoreiro_Banker_Downloader ./Binary.Velholpn.dll
Grandoreiro_Banker_Trojan ./dbghelp.dll

Espero que os haya gustado, nos vemos en el siguiente post!!