La mayoría de los especialistas en ingeniería inversa estarán de acuerdo en que con frecuencia se aprende algo nuevo. Sin embargo, no todos los días se aprende una receta para preparar una comida deliciosa mientras se analiza malware. Esta experiencia única es proporcionada por una familia de malware que analizaremos en esta publicación y cuyo nombre es “Casbaneiro”.

Características de Casbaneiro

Casbaneiro, también conocido como Metamorfo, es un típico troyano bancario latinoamericano que apunta a bancos y servicios de criptomonedas en Brasil y México (Figura 1). Utiliza el mismo método de ingeniería social descrito anteriormente para los troyanos bancarios de América Latina, que consiste en desplegar ventanas emergentes falsas con el objetivo de intentar persuadir a las potenciales víctimas para que ingresen información confidencial. En caso de tener éxito, esa información es robada.

Figura 1. Países afectados por Casbaneiro con Brasil y México entre los más destacados.

Las capacidades de backdoor de este malware son las típicas que presentan los troyanos bancarios latinoamericanos. Es decir, puede realizar capturas de pantalla y enviarlas a su servidor C&C, simular acciones de mouse y teclado, capturar pulsaciones de teclas, descargar e instalar actualizaciones por sí mismo, restringir el acceso a varios sitios web y descargar y ejecutar otros ejecutables.

Asimismo, Casbaneiro recopila la siguiente información de sus víctimas:

  • Lista de productos antivirus instalados
  • Versión del Sistema Operativo (SO)
  • Nombre de usuario
  • Nombre de la computadora
  • Si alguno de los siguientes software está instalado:
    • Diebold Warsaw GAS Tecnologia (una aplicación para proteger el acceso a la banca en línea)
    • Trusteer
    • Varias aplicaciones bancarias latinoamericanas

Aunque parece haber al menos cuatro variantes diferentes de este malware, el núcleo de cada una de ellas es prácticamente idéntico al código presente en este repositorio de GitHub. Sin embargo, es prácticamente imposible separarlos unos de otros, principalmente porque algunas variantes que utilizan versiones diferentes usan la misma clave de descifrado de strings, y los mismos mecanismos son utilizados en diferentes variantes

Además, las diferencias no son importantes desde el punto de vista de la funcionalidad. Por lo tanto, nos referiremos a todas estas variantes como Casbaneiro.

Casbaneiro es fácil de identificar porque utiliza una gran tabla de strings, con varios cientos de entradas. Las strings son recuperadas accediendo a esta tabla mediante un índice. Curiosamente, cada vez que el malware necesita obtener una string, la tabla de strings completa se construye en la memoria a partir de fragmentos almacenados de texto cifrado; la string deseada se descifra y la tabla completa se descarta nuevamente. Puede ver un ejemplo en la Figura 2.

Figura 2. Casbaneiro obteniendo una string a través del índice (0x205) y descifrándola

Hay fuertes indicios de que esta familia de malware está estrechamente relacionada con la familia de troyanos Amavaldo, la cual describimos en nuestra primera publicación de esta serie sobre troyanos bancarios de América Latinas. Mencionaremos estas similitudes más adelante en este artículo.

Secuestro de datos del portapapeles

Casbaneiro también puede intentar robar las criptomonedas de la víctima. Lo hace monitoreando el contenido del portapapeles y si los datos parecen ser una billetera de criptomonedas, los reemplaza con los del atacante. Esta técnica no es nueva; ha sido utilizada por otro malware en el pasado. Incluso el infame troyano bancario BackSwap lo implementó en sus primeras etapas.

La billetera del atacante está hardcodeada en el binario y solo hemos encontrado una. Al examinarla, pudimos ver pagos que habían sido realizado previo a la escritura de este artículo.

Figura 3. Detalle de la billetera de bitcoin del atacante

Criptografía

Casbaneiro utiliza varios algoritmos criptográficos y cada uno de ellos protege un tipo diferente de dato. En las siguientes secciones los describimos.

Cifrado de comandos

Los comandos recibidos del servidor C&C son cifrados con AES-256 y para ello se utiliza la biblioteca SynCrypto Delphi. La clave AES se obtiene desde una contraseña almacenada en binario, a través de SHA-256. No se almacena como una string, sino que se concatena a partir de piezas separadas en el runtime, como se puede ver en la Figura 4.

Figura 4. Construcción de la contraseña "ze102030ca" utilizada para derivar la clave AES

Cifrado de strings

El algoritmo utilizado para cifrar strings proviene de este libro y también es utilizado en otros troyanos bancarios latinoamericanos. El pseudocódigo del algoritmo de descifrado se puede ver en la Figura 5. La misma clave es utilizada para todas las strings. De forma similar al cifrado de comandos, la clave es nuevamente concatenada a partir de partes en el runtime, solo que esta vez consta de muchas más partes (ver Figura 6). Obsérvese cómo las strings con espacios en blanco también son añadidas, pero se recortan más adelante, por lo tanto, no tienen ningún impacto.

def decrypt_string(data_enc, key):
	data_dec = str()

	data_enc = unhexlify(data_enc)
	prev = data_enc[0]

	for i, c in enumerate(data_enc[1:]):
		x = c ^ key[i % len(key)]

		if x < prev:
			x = x + 255 - prev
		else:
			x -= prev

		prev = c
		data_dec += chr(x)

	return data_dec

Figura 5. Pseudocódigo de descifrado de strings

Figura 6. Parte del código que concatena la clave de descifrado de string que se muestra en la Figura 5. Las partes clave válidas están marcadas en rojo. La ofuscación mediante strings con espacios en blanco está marcada en púrpura.

Cifrado del payload

En algunas campañas de Casbaneiro, el troyano se cifra y se asocia con un injector. El algoritmo utilizado para descifrar el payload binario principal en estos casos es exactamente el mismo que utiliza el injector de Amavaldo. El pseudocódigo se encuentra en la Figura 7.

Cifrado de datos de configuración remota

Finalmente, se utiliza un cuarto algoritmo para descifrar los datos de configuración no almacenados en el archivo binario, pero que son obtenidos de forma remota. Ejemplos:

Se puede ver claramente en las Figuras 7 y 8 que ambos algoritmos son casi idénticos, solo que uno utiliza texto sin formato y el otro texto cifrado para actualizar la clave. Tenemos fuertes sospechas de que el autor reescribió el código a mano de la misma fuente y cometió un error en uno de los casos.

def decrypt_payload(data_enc, key1, key2, key3):
	data_dec = str()

	for c in data_enc:
		x = data_enc[i] ^ (k3 >> 8) & 0xFF
		data_dec += chr(x)
		key3 = ((x + key3) & 0xFF) * key1 + key2

	return data_dec

Figura 7. Algoritmo de descifrado del payload

def decrypt_remote_data(data_enc, key1, key2, key3):
	data_dec = str()

	for c in data_enc:
		x = data_enc[i] ^ (k3 >> 8) & 0xFF
		data_dec += chr(x)
		key3 = ((data_enc[i] + key3) & 0xFFFF) * key1 + key2

	return data_dec

Figura 8. Algoritmo de descifrado de datos remoto

Distribución

Creemos que las cadenas de distribución de Casbaneiro suelen comenzar por un correo electrónico malicioso. Algunas campañas fueron descritas por FireEye, Cisco y enSilo. Si ha leído nuestro anterior artículo notará que la campaña descrita por Cisco utiliza un script de PowerShell muy similar al utilizado por Amavaldo. Aunque algunas partes difieren, ambos scripts provienen claramente de una fuente común y utilizan los mismos métodos de ofuscación.

Mientras escribíamos este artículo, identificamos una nueva campaña que utilizaba una técnica similar a la descrita por enSilo, con apenas unos pocos cambios. Ya no se abusa del ejecutable de Avast y el payload principal, jesus.dmp, ya no está cifrado y, por lo tanto, no está asociado con un injector. Finalmente, la carpeta de instalación se cambió a %APPDATA%\Sun\Javar\%RANDOM%\. Dado que esta campaña reciente de Casbaneiro utiliza el acortador de URL bit.ly, pudimos obtener más información al respecto en la Figura 9.

Figura 9. Estadísticas de Bit.ly para la última campaña de Casbaneiro

Además de eso, durante nuestra investigación identificamos otras dos campañas previas.

Campaña 1: actualización de software financiero

En esta campaña, se persuade a la víctima para que descargue e instale lo que puede parecer una actualización legítima de un software financiero (ver Figura 10). En lugar de eso, el instalador:

  • descarga un archivo que contiene:
    • Casbaneiro disfrazado de Spotify.exe
    • otras DLL legítimas
  • extrae el contenido del archivo a %APPDATA%\Spotify\
  • configura la persistencia utilizando HKCU\Software\Microsoft\Windows\CurrentVersion\Run, Spotify = %APPDATA%\Spotify\Spotify.exe

También hemos encontrado casos en los que el payload se hace pasar por OneDrive o WhatsApp. En esos casos, el nombre de la carpeta se cambia en consecuencia.

Figura 10. Falso Instalador de actualizaciones

Campaña 2: un activador de Windows

Esta campaña es muy similar a la descrita por enSilo; utiliza un instalador MSI con un downloader en JavaScript embebido. Solo que esta vez el instalador viene incluido con la herramienta de craqueo Re-Loader que permite la activación no oficial de Windows o Microsoft Office. Cuando se ejecuta, primero se descarga y ejecuta en secreto Casbaneiro, y en segunda instancia Re-Loader.

Este método no es muy común en los troyanos bancarios latinoamericanos. Es más peligroso para las potenciales víctimas, ya que probablemente tengan menos razones para sospechar que algo salió mal.

Figura 11. Herramienta de crackeo Re-Loader instalada junto a Casbaneiro

Formas de ocultar el dominio y puerto del servidor C&C

Los operadores de Casbaneiro han hecho un gran esfuerzo para ocultar el actual puerto y dominio del servidor C&C, y esta es una de las características más interesantes de Casbaneiro. Exploremos dónde se han ocultado los servidores de C&C...

1) Almacenado y cifrado en el binario

El cifrado es definitivamente el método más simple para ocultar el servidor de C&C. El dominio está cifrado con una clave hardcodeada y el puerto está solo hardcodeado. Hemos encontrado casos en los que el puerto ha sido almacenado en la sección datos, en los datos de formulario en Delphi o elegido de manera aleatoria a partir de un rango.

2) Embebidos en un documento

Un método más avanzado consiste en almacenar los datos en algún lugar en línea, en este caso en Google Docs. Una manera en que Casbaneiro utiliza este método puede observarse en la Figura 12, donde el documento está lleno de texto basura. El dominio cifrado está codificado en hexadecimal y luego se almacena entre delimitadores "!". El cifrado utilizado es el mismo para todas las demás strings y el puerto está hardcodeado en el binario.

Figura 12. Dominio del servidor C&C (destacado en rojo) cifrado y codificado en hexadecimal, oculto dentro de un documento en línea

Otra forma en que es utilizado este método involucra el uso de múltiples delimitadores. Se puede ver un ejemplo en la Figura 13, donde se utilizan diferentes delimitadores para el puerto C&C, el dominio C&C y la URL utilizada para enviar información de la víctima. Inicialmente, este método fue utilizado para almacenar solo el puerto; los otros datos de configuración fueron añadidos en variantes posteriores.

Figura 13. Puerto del servidor C&C ("thedoor"), dominio ("sundski") y la URL de envío de información de la víctima ("contict") cifrada y almacenada en un documento en línea

3) Embebido en un sitio web especialmente diseñado

Para esta estrategia, los operadores crearon un sitio web falso (Figura 14) que imita a este sitio web legítimo en el cual se muestra la hora oficial de Brasil. El dominio real del C&C está oculto dentro de los metadatos de la página web, como se puede apreciar en la Figura 15, y el puerto está hardcodeado en el binario. Hemos encontrado al menos tres sitios web idénticos con diferentes URLs.

Figura 14. Sitio web creado por el atacante que imita al sitio legítimo horariodebrasilia.org

Figura 15. Comparación de metadatos de los sitios web legítimos (izquierda) y falsos (derecha). La etiqueta de verificación de Google Site contiene el dominio C&C encriptado.

Una diferencia importante con respecto al método anterior es que los datos están cifrados de manera diferente a todas las demás strings, utilizando el algoritmo para descifrar datos de configuración remota descritos anteriormente. Las tres claves requeridas son los primeros 12 bytes de la cadena, cada uno con 4 bytes.

4) Embebido dentro de un sitio web legítimo

Casbaneiro comenzó a abusar de YouTube para almacenar sus dominios de servidor C&C. Hemos identificado dos cuentas diferentes utilizadas para este fin por parte de los operadores de la amenaza: una centrada en recetas de cocina y la otra en fútbol.

Entonces, ¿dónde está oculto el servidor de C&C? Cada video en estos canales contiene una descripción. Al final de esta descripción, hay un enlace a una URL falsa de Facebook o Instagram (ver Figura 17). El dominio del servidor C&C se almacena en este enlace, utilizando el mismo esquema de cifrado que en el caso anterior: la clave se almacena al comienzo de los datos cifrados. El puerto está, una vez más, hardcodeado en el binario.

Figura 16. Uno de los canales de YouTube utilizados por el atacante.

Figura 17. Descripción de uno de los videos que el atacante publicó. En la parte inferior, el dominio cifrado del C&C está embebido en un falso enlace de Facebook (rojo).

Lo que hace peligrosa a esta técnica es que no genera muchas sospechas sin contexto. Conectarse a YouTube no se considera inusual e incluso si se examina el video, el enlace al final de la descripción del video puede pasar desapercibido fácilmente.

5) Utilizando una entrada DNS falsa

La idea general de este método es registrar un dominio y asociarlo con una dirección IP falsa para que la dirección IP real pueda derivarse de él. El algoritmo utiliza tres valores de entrada:

  1. Un dominio base (B) - un dominio utilizado para derivar otros dominios
  2. Una lista de sufijos (LS) - una lista de strings que se utilizará para derivar otros dominios del dominio base B
  3. Un número (N) - un número utilizado para transformar una dirección IP falsa a la real

Se utiliza un dominio base diferente para el dominio y el puerto del C&C. Proporcionamos pseudocódigo en la Figura 18. La lógica básica del algoritmo es:

  1. Genere un dominio desde el dominio base B y resuélvalo a una dirección IP falsa (FIP)
  2. Agregue un número N a la dirección IP falsa FIP para obtener la dirección IP real
  3. Para obtener el puerto, sume los octetos de la dirección IP real y multiplique por 7
def get_real_ip(base_domain, suffix, n):
	items = base_domain.split(".", 1)
	items[0] += suffix
	generated_domain = '.'.join(items)

	if is_registered(generated_domain):
		fake_ip = resolve(generated_domain)
		return fake_ip + n
	else:
		return 0

def get_real_domain(base_domain, strings_list, n):
	# First, try to resolve the base domain without suffix
	real_ip = get_real_ip(base_domain, "", n)
	if not real_ip:

		# If that fails, try the suffixes one by one
		for suffix in string_list:
			real_ip = get_real_ip(base_domain, suffix, n)
			if real_ip:
				break

	return real_ip

def get_real_port(base_domain, strings_list, n):
	# Do all the steps as when getting the domain
	ip = get_real_domain(base_domain, strings_list, n)	

	# Get the octets of the ip, sum them and multiply by 7
	octets = str(ip).split('.')
	return sum(octets) * 7

Figura 18. Pseudocódigo del algoritmo utilizado para generar el dominio y el puerto del C&C utilizando una entrada de DNS falsa

Funcionalidad Descarga & Ejecución

La mayoría de los troyanos bancarios de América Latina, incluido Casbaneiro, tienen una forma de descargar y ejecutar otros ejecutables que generalmente es a través de un comando de backdoor. Sin embargo, Casbaneiro realiza una implementación diferente de esta funcionalidad. Inicialmente pensamos que se trataba de un mecanismo de actualización porque las versiones más nuevas del troyano bancario fueron distribuidas por él, pero, como descubrimos más adelante, no exclusivamente. Se utilizan dos mecanismos diferentes que a continuación exploramos.

Vía documento XML

Una forma de utilizar esta funcionalidad es mediante la descarga de un documento XML. Los datos almacenados en este documento entre las etiquetas <xmlUpdate> ## y ## </xmlUpdate> se cifran utilizando el algoritmo para datos remotos que vimos en la Figura 8.

Una vez descifrados, los datos pueden contener las siguientes etiquetas:

  • <newdns> – nuevo dominio de servidor C&C
  • <newport> – nuevo puerto de servidor C&C
  • <downexec> – una URL a utilizar para descargar y ejecutar un archivo

A través de un archivo de configuración especial

Creemos que este enfoque se utiliza en (probablemente un subconjunto de) muestras de Casbaneiro que se venden a otros cibercriminales. En este método, se descarga un archivo de configuración (como se muestra en la Figura 19). Se compone de varias líneas, cada una de las cuales contiene:

  • Una identificación del comprador
  • Nombre de archivo del payload
  • URL principal donde se encuentra el archivo
  • URL de respaldo donde se encuentra el archivo
  • Versión (no utilizada)
  • Un número (no utilizado)
  • Fecha (no utilizada)

Los últimos tres valores parecen ignorarse por completo. La fecha "05/07/2018", por ejemplo, se utiliza incluso en los archivos de configuración más recientes en el momento de la escritura.

Figura 19. Archivo de configuración obtenido por Casbaneiro

Cada muestra de Casbaneiro que utiliza este método tiene la identificación del comprador hardcodeada en sus datos. Cuando descarga dicho archivo de configuración, lo analiza y encuentra la línea destinada a la ID específica del comprador y descarga y ejecuta el payload

Como se aprecia en la Figura 19, el payload es casi el mismo para todos los compradores. Sin embargo, nos encontramos con una situación en la que una muestra descargó dicho archivo de configuración y la ID de su comprador no estaba presente. Esta forma de distribuir payloads adicionales le da al "autor principal" (probablemente el vendedor) la capacidad de excluir a algunos compradores.

Además de las actualizaciones de Casbaneiro, hemos visto dos payloads más distribuidos por este método que analizamos en las dos secciones siguientes.

Herramienta de correo electrónico

Una herramienta escrita en C # registra automáticamente una gran cantidad de nuevas cuentas de correo electrónico utilizando la plataforma de correo electrónico Brasil Online (BOL) y envía las credenciales al atacante. Si ha leído nuestro artículo anterior, esto puede que le resulte familiar. Esto se debe a que, en lo que respecta a la funcionalidad, esta herramienta hace exactamente lo mismo. También es una variante de la herramienta de spam descrita por Cisco

Ladrón de contraseñas

Otro payload que vimos que ha sido distribuido por esta funcionalidad es un ladrón de contraseñas de Outlook muy sencillo. Este malware, una vez ejecutado, primero muestra un cuadro de mensaje, en portugués, que indica que hay un problema con la cuenta de Outlook de la víctima. Después de eso, muestra una página de inicio de sesión falsa de Microsoft que solicita credenciales de Outlook.

Figura 20: Mensaje desplegado por el ladrón de contraseñas

Figura 21. Ventana desplegada por el ladrón de contraseñas para intentar obtener las credenciales de Outlook de la víctima.

Conclusión

En esta publicación hablamos sobre Casbaneiro, otro troyano bancario latinoamericano. Hemos demostrado que comparte las características comunes de este tipo de malware, como el uso de ventanas emergentes falsas y la funcionalidad de backdoor. En algunas campañas, divide su funcionalidad en un injector y en la del troyano bancario real. También se disfraza como una aplicación legítima en la mayoría de las campañas y se dirige principalmente a Brasil y México.

También hemos mostrado fuertes indicadores que nos llevan a creer que Casbaneiro está estrechamente relacionado con Amavaldo. Ambas piezas de malware utilizan el mismo algoritmo criptográfico poco común en el componente del injector, han utilizado un script PowerShell muy similar en una de sus campañas y se los ha visto distribuir una herramienta de correo electrónico muy similar.

Hemos descrito varias técnicas que Casbaneiro emplea para ocultar la dirección de su servidor de C&C. Estos incluyen el uso de documentos almacenados de forma remota, sitios web legítimos y falsos y entradas DNS falsas.

Finalmente, hemos descrito dos técnicas utilizadas por Casbaneiro para actualizarse asimismo o descargar y ejecutar payloads adicionales.

Indicadores de Compromiso (IoCs)

Hashes

Campaña 1

SHA-1 Description ESET detection name
F07932D8A36F3E36F2552DADEDAD3E22EFA7AAE1 MSI installer Win32/TrojanDownloader.Banload.YJD trojan
BCDF0DDF98E3AA7D5C67063B9926C5D1C0CA6F3A Downloaded payload Win32/Spy.Casbaneiro.AJ trojan

Campaña 2

SHA-1 Description ESET detection name
8745197972071EDE08AA9F7FBEC029BED56151C2 MSI installer JS/TrojanDownloader.Agent.TNX trojan
BC909B76858402B3CBB5EFD6858FD5954A5E3FD8 Re-Loader MSIL/HackTool.WinActivator.J potentially unsafe application

Campaña 3

SHA-1 Description ESET detection name
DD2799C10954293C8E7D75CD4BE2686ADD9AC2D4 MSI installer JS/TrojanDownloader.Agent.TNX trojan
9DFFEB147D89ED58C98252B54C07FAE7D5F9FEA7 Downloaded payload Win32/Spy.Casbaneiro.AJ trojan

Archivos distribuidos mediante la función Descarga & Ejecución

SHA-1 Description ESET detection name
C873ED94E582D24FAAE6403A17BF2DF497BE04EB Email tool MSIL/SpamTool.Agent.O trojan
B3630A866802D6F3C1FA2EC487A6795A21833418 Password stealer Win32/PSW.Agent.OGH trojan

Nombres de archivo

  • %APPDATA%\Spotify\Spotify.exe
  • %APPDATA%\OneDrive\OneDrive.exe
  • %APPDATA%\WhatsApp\WhatsApp.exe
  • %APPDATA%\Sun\Javar\%RANDOM%\%RANDOM%.exe
  • %APPDATA%\DMCache\%RANDOM%\%RANDOM%.exe

Claves y valores de registro

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • Spotify = %APPDATA%\Spotify\Spotify.exe
  • OneDrive = %APPDATA%\OneDrive\OneDrive.exe
  • WhatsApp = %APPDATA%\WhatsApp\WhatsApp.exe
  • %Random% = %APPDATA%\Sun\Javar\%RANDOM%\%RANDOM%.exe
  • %Random% = %APPDATA%\DMCache\%RANDOM%\%RANDOM%.exe

Servidores C&C

  • hostsize.sytes[.]net:7880
  • agosto2019.servepics[.]com:2456
  • noturnis.zapto[.]org
  • 4d9p5678.myvnc[.]com
  • seradessavez.ddns[.]net:14875

Billetera de Bitcoin

  • 18sn7w8ktbBNgsX8LeeeLMqKS84xMG54si

Técnicas de MITRE ATT&CK 

Tactic ID Name Description
Initial Access T1192 Spearphishing Link Some Casbaneiro campaigns start with a malicious link in an email.
T1193 Spearphishing Attachment Some Casbaneiro campaigns start with a malicious email attachment.
Execution T1073 DLL Side-Loading Some campaigns bundle a legitimate executable so as to use this technique in order to execute Casbaneiro.
T1086 PowerShell One distribution chain uses an obfuscated PowerShell script.
Persistence T1060 Registry Run Keys / Startup Folder Casbaneiro downloaders set up persistence via Run key.
Defense Evasion T1140 Deobfuscate/Decode Files or Information Casbaneiro uses encrypted remote configuration data and its commands are encrypted too.
T1036 Masquerading Casbaneiro sometimes masquerades as or is bundled with a legitimate application.
T1064 Scripting PowerShell and JavaScript are used in Casbaneiro distribution chains.
Credential Access T1056 Input Capture Casbaneiro contains a command to execute a keylogger. It also steals contents from fake windows it displays.
Discovery T1083 File and Directory Discovery Casbaneiro searches for various filesystem paths in order to determine what applications are installed on the victim's machine.
T1057 Process Discovery Casbaneiro searches for various process names in order to determine what applications are running on the victim's machine.
T1063 Security Software Discovery Casbaneiro scans the system for installed security software.
T1082 System Information Discovery Casbaneiro extracts the version of the operating system.
Collection T1115 Clipboard Data Casbaneiro captures and replaces bitcoin wallets in clipboard.
T1113 Screen Capture Casbaneiro contains a command to take screenshots.
Command and Control T1024 Custom Cryptographic Protocol Casbaneiro uses three different custom cryptographic protocols.
T1032 Standard Cryptographic Protocol Casbaneiro encrypts its commands using the standard AES protocol.
Exfiltration T1041 Exfiltration Over Command and Control Channel Casbaneiro sends the data it collects to its C&C server.