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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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:
- Un dominio base (B) - un dominio utilizado para derivar otros dominios
- Una lista de sufijos (LS) - una lista de strings que se utilizará para derivar otros dominios del dominio base B
- 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:
- Genere un dominio desde el dominio base B y resuélvalo a una dirección IP falsa (FIP)
- Agregue un número N a la dirección IP falsa FIP para obtener la dirección IP real
- 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.
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.
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. |