Descripciones de malware

Análisis técnico de Qakbot

Descripción principal

QakBot, también conocido como QBot, QuackBot y Pinkslipbot, es un troyano bancario vigente desde hace más de una década. Fue descubierto circulando en Internet en 2007 y desde entonces sus autores no han cesado de mantenerlo y desarrollarlo.

En los últimos años, QakBot se ha convertido en uno de los principales troyanos bancarios del mundo. Su objetivo principal es robar credenciales bancarias, como inicios de sesión, contraseñas, etc. Pero QakBot no se ha limitado a estas funciones, sino que ha adquirido otras para espiar las actividades bancarias de las organizaciones, propagarse e instalar ransomware con el fin de exprimir al máximo a las organizaciones comprometidas.

Hasta el día de hoy, QakBot sigue creciendo en términos de funcionalidad, incrementando sus capacidades y técnicas, como el registro de pulsaciones de teclas, la función de puerta trasera y técnicas para evadir la detección. Entre estas últimas, cabe destacar la detección de entornos virtuales, las auto-actualizaciones periódicas y los cambios de cifrado y empaquetamiento. Además, QakBot intenta protegerse para que ni expertos, ni herramientas automatizadas puedan analizarlo.

Otra funcionalidad interesante es la de robar correos electrónicos, que luego son utilizados por los atacantes para enviar correos electrónicos selectivos a las víctimas, a quienes inducen a abrirlos utilizando como cebo la información obtenida anteriormente.

Cadena de infección de QakBot

QakBot es conocido por infectar a sus víctimas sobre todo mediante campañas de spam. En algunos casos, dichos correos electrónicos llegan junto con documentos de Microsoft Office (Word, Excel) o archivos protegidos por contraseña con dichos documentos adjuntos. Estos documentos contienen macros y afirman contener información importante, como una factura, para inducir a las víctimas a que los abran. En otros casos, los correos electrónicos contienen enlaces a páginas web maliciosas en lugar de archivos adjuntos.

Sin embargo, hay otro vector de infección que incluye la transferencia de una carga útil maliciosa de QakBot a través de otro malware en la máquina infectada.

Los vectores de infección iniciales pueden variar, según la mejor tasa de éxito en la organización objetivo que sus autores consideren tengan. Se sabe que varios actores de amenazas realizan un reconocimiento preliminar (OSINT) de las organizaciones objetivo para decidir qué vector de infección es el más adecuado.

Cadena de infección de QakBot

Cadena de infección de QakBot

La cadena de infección de las últimas versiones de QakBot (variantes 2020-2021) es la siguiente:

  • El usuario recibe un correo electrónico de phishing, que contiene un archivo adjunto ZIP de un documento de Office con macros incrustadas o un enlace malicioso para descargar el documento malicioso.
  • El usuario abre el documento o enlace malicioso y es inducido a hacer clic en “Habilitar contenido”.
  • Se ejecuta una macro maliciosa. Algunas variantes envían una petición ‘GET’ a una URL solicitando un archivo ‘PNG ‘. Pero el archivo es en realidad un binario.
  • La carga útil que se carga (stager) incluye otro binario que contiene módulos de recursos cifrados. Uno de los recursos cifrados contiene el binario DLL (cargador) que se descifra después, durante el tiempo de ejecución.
  • El ‘Stager’ carga el ‘Loader’ en la memoria, que descifra y ejecuta la carga útil durante el tiempo de ejecución. Los ajustes de configuración se reciben de otro recurso.
  • La carga útil se comunica con el servidor de administración.
  • A partir de ese momento, se pueden introducir en la máquina infectada amenazas adicionales, como el ransomware ‘ProLock’.

Funciones típicas de QakBot

Algunas de las actividades maliciosas típicas de QakBot observadas en el mundo real incluyen:

  • Recopilación de información sobre el host infectado;
  • Creación de tareas programadas (escalada de privilegios y persistencia);
  • Recolección de credenciales:
    • Volcado de credenciales (Mimikatz, acceso a exe )*;
    • Robo de contraseñas (a partir de los datos del navegador y las cookies);
    • Aprovechamiento de los enlaces bancarios de la web (inyecciones web)*.
  • Obtención de contraseñas por fuerza bruta;
  • Manipulación del registro (persistencia);
  • Creación de una copia de sí mismo;
  • Inyección de procesos, para ocultar su proceso malicioso.

Comunicación con el servidor de control y comando

El malware QakBot contiene una lista de 150 direcciones IP codificadas en el recurso binario del cargador. La mayoría de estas direcciones pertenecen a otros sistemas infectados, que se utilizan como proxy para reenviar el tráfico a otros proxies o al servidor de control y comando real.

La comunicación con el servidor de control y comando es una petición HTTPS POST con datos codificados en Base64. Los datos se cifran con el algoritmo RC4. Para el cifrado se utiliza la cadena estática “jHxastDcds)oMc=jvh7wdUhxcsdt2” y una secuencia aleatoria de 16 bytes. Los datos están en formato JSON.

Mensaje original en formato JSON

Mensaje original en formato JSON

Petición HTTPS POST con JSON cifrado

Petición HTTPS POST con JSON cifrado

En general, tras la infección, el bot envía un mensaje ‘PING’, un mensaje ‘SYSTEM INFO’ y un mensaje ‘ASK for COMMAND’. El servidor de control y comando responde con los mensajes ‘ACK’ y ‘COMMAND’. Si los módulos adicionales fueron insertados por el servidor de control y comando, el bot envía un mensaje ‘STOLEN INFO’ que contiene los datos robados por el módulo.

  • Mensaje ‘PING’ – mensaje de petición del bot al servidor de control y comando con ‘BOT ID’ para comprobar si el servidor de control y comando está activo

Mensaje 'PING'

Mensaje ‘PING’

  • Mensaje ‘ACK’– Mensaje de respuesta del servidor de control y comando con el único campo valioso “16” – dirección IP externa del sistema infectado

Mensaje 'ACK'

Mensaje ‘ACK’

  • Mensaje ‘SYSTEM INFO’ – mensaje de solicitud del bot al servidor de control y comando con la información recopilada sobre el sistema infectado. Además de la información general del sistema, como la versión y el valor de bits del sistema operativo, el nombre del usuario, el nombre del ordenador, el dominio, la resolución de la pantalla, la hora del sistema, el tiempo de actividad del sistema y el tiempo de actividad del bot, también contiene los resultados de las siguientes utilidades y consultas WMI.
    • whoami /all
    • arp -a
    • ipconfig /all
    • net view /all
    • cmd /c set
    • nslookup -querytype=ALL -timeout=10 _ldap._tcp.dc._msdcs.{DOMAIN}
    • nltest /domain_trusts /all_trusts
    • net share
    • route print
    • netstat -nao
    • net localgroup
    • qwinsta
    • WMI Query ROOTCIMV2:Win32_BIOS
    • WMI Query ROOTCIMV2:Win32_DiskDrive
    • WMI Query ROOTCIMV2:Win32_PhysicalMemory
    • WMI Query ROOTCIMV2:Win32_Product
    • WMI Query ROOTCIMV2:Win32_PnPEntity

Mensaje 'SYSTEM INFO'

Mensaje ‘SYSTEM INFO’

  • Mensaje ‘ASK for COMMAND’ – mensaje de solicitud de comando del bot al servidor de control y comando. Tras el envío del mensaje ‘SYSTEM INFO ‘, el bot comienza a pedir al servidor de control y comando un comando para ejecutarlo. Uno de los campos principales es el “14”, SALT. Este campo es único y cambia en cada solicitud. Se utiliza para proteger contra el secuestro o la interceptación del control de un bot. Después de recibir esta solicitud, el servidor de control y comando utiliza este SALT en el procedimiento de firma y coloca el signo en la respuesta, para que el bot pueda comprobar los datos firmados. Solo se ejecutará un comando válido y firmado.

Mensaje 'ASK for COMMAND'

Mensaje ‘ASK for COMMAND’

  • Mensaje ‘COMMAND’ – Mensaje de respuesta del servidor de control y comando con el comando a ejecutar. La versión actual del bot admite 24 comandos. La mayoría de ellos están relacionados con la descarga, la ejecución, la caída de módulos adicionales y archivos de configuración de módulos con diferentes opciones, o la configuración/actualización de valores de configuración.
    Este tipo de mensaje contiene el valor firmado de la SALT (obtenido del campo de solicitud “14” del bot), el ID del COMANDO y el ID del MÓDULO. Los demás valores del mensaje no están firmados.En versiones anteriores, el bot recibía módulos y comandos inmediatamente después de la infección y el envío de un mensaje ‘SYSTEM INFO’. Ahora, el servidor de control y comando responde con un comando vacío durante una hora. Solo una vez pasado este tiempo, el servidor de control y comando envía algunos comandos y módulos en la respuesta. Creemos que este retraso se utiliza para dificultar la recepción y el análisis de nuevos comandos y módulos en un entorno aislado y controlado.

'COMMAND', respuesta del servidor de control y comando con un comando vacío

‘COMMAND’, respuesta del servidor de control y comando con un comando vacío

Si el servidor de control y comando inserta algunos módulos, el binario codificado en Base64 se coloca en el campo “20” del mensaje.

'COMMAND', respuesta servidor de control y comando con un módulo adicional para cargar

‘COMMAND’, respuesta servidor de control y comando con un módulo adicional para cargar

  • Mensaje ‘STOLEN INFO’ – mensaje del bot al servidor de control y comando con información robada, como contraseñas, cuentas, correos electrónicos, etc. La información robada está cifrada en RC4 y codificada en Base64. La clave para el cifrado RC4 se genera de una forma diferente y se basa en los valores del ID del sistema infectado (también conocido como Bot ID), y no se basa en una cadena estática como en el caso del cifrado de tráfico.

Mensaje 'STOLEN INFO' (información robada)

Mensaje ‘STOLEN INFO’ (información robada)

Una vez establecida la comunicación con el servidor de control y comando, se sabe que QakBot descarga y utiliza módulos adicionales para realizar sus operaciones maliciosas.

Los módulos adicionales son diferentes de una muestra a otra y pueden incluir ‘Cookie grabber’, ‘Email Collector’, ‘Credentials grabber’, ‘Proxy module’ y muchos más.

Estos módulos pueden ser escritos por los autores de la amenaza o pueden ser tomados prestados de repositorios de terceros y adaptados. Pueden variar de una muestra a otra; por ejemplo, hay muestras más antiguas que pueden utilizar Mimikatz para el volcado de credenciales.

A continuación, se muestran algunos de los módulos que hemos encontrado durante nuestra investigación.

Módulos adicionales

  • Cookie Grabber: recoge las cookies de los navegadores más populares (Edge, Firefox, Chrome, Internet Explorer)

  • VNC oculto: permite que los actores de la amenaza se conecten a la máquina infectada e interactúen con ella sin dar pistas al usuario real

  • Email Collector: intenta encontrar Microsoft Outlook en la máquina infectada, luego itera sobre las carpetas del software y recolecta recursivamente los correos electrónicos. Finalmente, el módulo envía los correos electrónicos recogidos al servidor remoto

Los actores de la amenaza distribuyeron en algún momento la versión de depuración del módulo recolector de correo electrónico

Los actores de la amenaza distribuyeron en algún momento la versión de depuración del módulo recolector de correo electrónico

  • Módulo de hooking: engancha un conjunto de funciones WinAPI y (si existen) DLL de Mozilla. El hooking se utiliza para realizar inyecciones web, espiar el tráfico y los datos del teclado e incluso impedir la resolución DNS de ciertos dominios. El hooking funciona de la siguiente manera: QakBot inyecta el módulo de hooking en el proceso apropiado, este módulo encuentra las funciones del conjunto codificado y modifica estas funciones para que salten al código personalizado.

El módulo contiene una lista cifrada de DLL y funciones que el bot “hookeará”

  • Módulo passgrabber: recoge los inicios de sesión y las contraseñas de varias fuentes: Archivos de Firefox y Chrome, almacenamiento de Microsoft Vault, etc. En lugar de utilizar Mimikatz como en las versiones anteriores, el módulo recoge las contraseñas con sus propios algoritmos.

Procedimiento que recolecta contraseñas de diferentes fuentes

Procedimiento que recolecta contraseñas de diferentes fuentes

  • Módulo proxy: intenta determinar qué puertos están disponibles para escuchar utilizando el reenvío de puertos UPnP y la consulta el servidor de control y comando de nivel 2. La comparación de las versiones actuales y anteriores del cargador de proxy reveló algunas cosas interesantes: los autores de la amenaza decidieron eliminar la dependencia de cURL del binario y realizar todas las comunicaciones HTTP utilizando su propio código. Además de eliminar cURL, también eliminaban las dependencias de OpenSSL e incrustaban todas las funciones en un solo ejecutable: desaparecen los módulos de carga y proxy, siendo ahora un solo archivo.

Construcción de la consulta de reenvío de puertos UPnP

Construcción de la consulta de reenvío de puertos UPnP

Después de intentar determinar si los puertos están abiertos y si la máquina podría actuar como servidor proxy de control y comando de nivel 2, el módulo proxy también inicia un servidor proxy SOCKS5 de múltiples hilos. El protocolo SOCKS5 está encapsulado en el protocolo proxy QakBot, que tiene el siguiente aspecto Comando proxy QakBot (1 byte), versión (1 byte), id de sesión (4 bytes), longitud total del paquete (dword), datos (longitud total del paquete -10). Los paquetes entrantes y salientes se almacenan en las memorias intermedias y pueden recibirse o transmitirse uno a uno o por varios paquetes en un segmento de datos TCP (streaming).

El flujo habitual de ejecución del módulo proxy es el siguiente:

  1. Establecer comunicación con el servidor de administración, intentar reenviar puertos con UPnP y determinar los puertos disponibles y enviarlos al servidor de control y comando. El protocolo de comunicación habitual del servidor de control y comando utilizado aquí es el HTTP POST con datos JSON cifrados en RC4.
  2. Descargar la biblioteca OpenSSL. En lugar de guardar el archivo descargado, QakBot mide la velocidad de descarga y elimina el archivo recibido.
  3. Configurar la conexión externa PROXY con el servidor de control y comando, que fue recibida con el comando 37 (update config)/módulo 274 (proxy) por el stager.

Comunicación con el servidor PROXY de control y comando externo:

  1. Enviar la solicitud inicial del módulo proxy. La solicitud inicial contiene el ID del bot, la dirección IP externa de la máquina infectada, la búsqueda DNS inversa de la dirección IP externa, la velocidad de Internet (medida anteriormente) y los segundos transcurridos desde el inicio del módulo proxy.
  2. Establecer una conexión (secuencia de comandos proxy 1->10->11) con el servidor de control y comando PROXY.
  3. Iniciar sesiones, realizar autentificación socks5 con inicio de sesión/contraseña (recibidos de del servidor de control y comando PROXY con el comando 10)
  4. Comenzar la comunicación tipo SOCKS5, envuelta en el protocolo del módulo proxy de QakBot.

Los comandos del proxy de Qakbot son los siguientes:

Comando Descripción
1 Hello (bot->servidor de control y comando)
10 Configurar las credenciales de autentificación (servidor de control y comando->bot)
11 Confirmar la configuración de las credenciales (bot->servidor de control y comando)
2 Crear una nueva sesión proxy (servidor de control y comando->bot)
3 SOCKS5 AUTH (bot->servidor de control y comando)
4 Procesar solicitudes SOCKS5 (funciona para ambas partes)
5 Cerrar la sesión (funciona para ambas partes)
6 Actualizar el estado de la sesión/notificación de actualización del estado de la sesión (funciona para ambas partes)
7 Actualizar el estado de la sesión/notificación de actualización del estado de la sesión (funciona para ambas partes)
8 PING (servidor de control y comando->bot)
9 PONG (bot->servidor de control y comando)
19 Guardar la hora actual en el registro (servidor de control y comando->bot)

Paquetes analizados del servidor de control y comando

Paquetes analizados del servidor de control y comando

Seguimiento de un solo proxy

Seguimiento de un solo proxy

  • Inyección web: archivo de configuración para el módulo de hooking

    Una vez entablada la comunicación con el servidor de control y comando, uno de los módulos adicionales que se descarga es el módulo de inyección web. Intercepta el tráfico de la víctima inyectando el módulo en el proceso del navegador y haciendo hooking de la API de la red. El módulo de hooking obtiene el flujo de ejecución de las APIs interceptadas, y una vez que la víctima accede a ciertas páginas del sitio web que están relacionadas con la banca y las finanzas, se inyecta un JavaScript adicional en la página de origen.

JavaScript parcialmente inyectado en la página de origen de la página de inicio de sesión de 'Wells Fargo'

JavaScript parcialmente inyectado en la página de origen de la página de inicio de sesión de ‘Wells Fargo’

Estadísticas de QakBot

Analizamos las estadísticas sobre los ataques de QakBot recogidas en nuestra red Kaspersky Security Network (KSN), donde se acumulan y procesan los datos anónimos proporcionados voluntariamente por los usuarios de Kaspersky. En los primeros siete meses de 2021 nuestros productos detectaron 181 869 intentos de descarga o ejecución de QakBot. Esta cifra es inferior a la de detección de enero a julio de 2020; sin embargo, el número de usuarios afectados creció un 65% respecto al año pasado y alcanzó los 17 316 usuarios.

Número de usuarios afectados por los ataques de QakBot de enero a julio de 2020 y 2021 (descargar)

Observamos las mayores campañas el primer trimestre de 2021, cuando 12 704 usuarios se encontraron con QakBot. 8068 usuarios de Kaspersky fueron atacados en enero y 4007 en febrero.

Conclusiones

QakBot es un conocido troyano bancario cuyas técnicas pueden variar de un binario a otro (versiones antiguas y nuevas). Se ha desarrollado durante más de una década, sigue activo en la actualidad y no parece que vaya a cesar su actividad en el futuro próximo. Este malware se actualiza continuamente y sus autores le siguen añadiendo nuevas capacidades y actualizando sus módulos, con el fin de maximizar sus ganancias, mientras roban datos e información.

Se sabe que los autores de amenazas pueden diferenciar sus formas de realizar actividades maliciosas, basándose en los proveedores de seguridad y en complejos trucos para pasar desapercibidos. Aunque QakBot utiliza diferentes técnicas para impedir que lo detecten, como enumerar los procesos para encontrar soluciones antimalware en funcionamiento, nuestros productos son capaces de detectar esta amenaza mediante el análisis de comportamiento. Detectamos QakBot con los veredictos:

Backdoor.Win32.QBot
Backdoor.Win64.QBot
Trojan.JS.QBot
Trojan.MSOffice.QBot
Trojan.MSOffice.QbotLoader
Trojan.Win32.QBot
Trojan-Banker.Win32.QBot
Trojan-Banker.Win32.QakBot
Trojan-Banker.Win64.QBot
Trojan-Downloader.JS.QBot
Trojan-PSW.Win32.QBot
Trojan-Proxy.Win32.QBot

IoCs (servidores de control y comando)

75.67.192[.]125:443 24.179.77[.]236:443 70.163.161[.]79:443
72.240.200[.]181:2222 184.185.103[.]157:443 78.63.226[.]32:443
83.196.56[.]65:2222 95.77.223[.]148:443 76.168.147[.]166:993
105.198.236[.]99:443 73.151.236[.]31:443 64.121.114[.]87:443
213.122.113[.]120:443 97.69.160[.]4:2222 77.27.207[.]217:995
105.198.236[.]101:443 75.188.35[.]168:443 31.4.242[.]233:995
144.139.47[.]206:443 173.21.10[.]71:2222 125.62.192[.]220:443
83.110.109[.]155:2222 76.25.142[.]196:443 195.12.154[.]8:443
186.144.33[.]73:443 67.165.206[.]193:993 96.21.251[.]127:2222
149.28.98[.]196:2222 222.153.122[.]173:995 71.199.192[.]62:443
45.77.117[.]108:2222 45.46.53[.]140:2222 70.168.130[.]172:995
45.32.211[.]207:995 71.74.12[.]34:443 82.12.157[.]95:995
149.28.98[.]196:995 50.29.166[.]232:995 209.210.187[.]52:995
149.28.99[.]97:443 109.12.111[.]14:443 209.210.187[.]52:443
207.246.77[.]75:8443 68.186.192[.]69:443 67.6.12[.]4:443
149.28.99[.]97:2222 188.27.179[.]172:443 189.222.59[.]177:443
149.28.101[.]90:443 98.192.185[.]86:443 174.104.22[.]30:443
149.28.99[.]97:995 189.210.115[.]207:443 142.117.191[.]18:2222
149.28.101[.]90:8443 68.204.7[.]158:443 189.146.183[.]105:443
92.59.35[.]196:2222 75.137.47[.]174:443 213.60.147[.]140:443
45.63.107[.]192:995 24.229.150[.]54:995 196.221.207[.]137:995
45.63.107[.]192:443 86.220.60[.]247:2222 108.46.145[.]30:443
45.32.211[.]207:8443 193.248.221[.]184:2222 187.250.238[.]164:995
197.45.110[.]165:995 151.205.102[.]42:443 2.7.116[.]188:2222
45.32.211[.]207:2222 71.41.184[.]10:3389 195.43.173[.]70:443
96.253.46[.]210:443 24.55.112[.]61:443 106.250.150[.]98:443
172.78.59[.]180:443 24.139.72[.]117:443 45.67.231[.]247:443
90.65.234[.]26:2222 72.252.201[.]69:443 83.110.103[.]152:443
47.22.148[.]6:443 175.143.92[.]16:443 83.110.9[.]71:2222
149.28.101[.]90:995 100.2.20[.]137:443 78.97.207[.]104:443
207.246.77[.]75:2222 46.149.81[.]250:443 59.90.246[.]200:443
144.202.38[.]185:995 207.246.116[.]237:8443 80.227.5[.]69:443
45.77.115[.]208:995 207.246.116[.]237:995 125.63.101[.]62:443
149.28.101[.]90:2222 207.246.116[.]237:443 86.236.77[.]68:2222
45.32.211[.]207:443 207.246.116[.]237:2222 109.106.69[.]138:2222
149.28.98[.]196:443 45.63.107[.]192:2222 84.72.35[.]226:443
45.77.117[.]108:443 71.163.222[.]223:443 217.133.54[.]140:32100
144.202.38[.]185:2222 98.252.118[.]134:443 197.161.154[.]132:443
45.77.115[.]208:8443 96.37.113[.]36:993 89.137.211[.]239:995
45.77.115[.]208:443 27.223.92[.]142:995 74.222.204[.]82:995
207.246.77[.]75:995 24.152.219[.]253:995 122.148.156[.]131:995
45.77.117[.]108:8443 24.95.61[.]62:443 156.223.110[.]23:443
45.77.117[.]108:995 96.61.23[.]88:995 144.139.166[.]18:443
45.77.115[.]208:2222 92.96.3[.]180:2078 202.185.166[.]181:443
144.202.38[.]185:443 71.187.170[.]235:443 76.94.200[.]148:995
207.246.77[.]75:443 50.244.112[.]106:443 71.63.120[.]101:443
140.82.49[.]12:443 24.122.166[.]173:443 196.151.252[.]84:443
81.214.126[.]173:2222 73.25.124[.]140:2222 202.188.138[.]162:443
216.201.162[.]158:443 47.196.213[.]73:443 74.68.144[.]202:443
136.232.34[.]70:443 186.154.175[.]13:443 69.58.147[.]82:2078

* puede realizarse como un comando externo (módulo extendido).

Análisis técnico de Qakbot

Su dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Informes

MosaicRegressor: acechando en las sombras de UEFI

Encontramos una imagen de firmware de la UEFI infectada con un implante malicioso, es el objeto de esta investigación. Hasta donde sabemos, este es el segundo caso conocido en que se ha detectado un firmware malicioso de la UEFI usado por un actor de amenazas.

Dark Tequila Añejo

Dark Tequila es una compleja campaña maliciosa que tiene por objetivo a los usuarios ubicados en México, con el propósito principal de robar información financiera, así como credenciales de acceso a sitios populares que van desde versionado de código fuente a cuentas de almacenamiento de archivos en línea y de registro de dominios web.

Suscríbete a nuestros correos electrónicos semanales

Las investigaciones más recientes en tu bandeja de entrada