Site icon Sophos News

Qakbot se inyecta en el medio de sus conversaciones

Los correos electrónicos maliciosos pueden ser evidentes, pero la técnica utilizada por Qakbot (también conocido como Qbot) parece ser especialmente convincente: el malware transmitido por correo electrónico tiende a propagarse insertando respuestas maliciosas en medio de conversaciones de correo electrónico existentes, utilizando las cuentas comprometidas de otras víctimas de la infección. Estas intervenciones en forma de un mensaje de respuesta incluyen una oración corta y un enlace para descargar un archivo zip que contiene un documento de office malicioso, uno que desata el malware cuando alguien lo abre.

Debido a que el malware es muy bueno para hacer esto, al citar el mensaje original después de su respuesta maliciosa, puede ser un desafío para las víctimas de estos ataques reconocer que los mensajes que reciben no provienen del ser humano propietario del buzón de correo electrónico donde se originaron.

Los mensajes generalmente contienen un texto breve, seguido de un enlace para descargar un archivo zip. Estos enlaces pueden ser “URLs simples” o texto con el enlace activo en el cuerpo del mensaje, como los siguientes ejemplos:

Versiones en inglés de mensajes spam de respuesta de Qakbot

 

Las respuestas maliciosas a veces aparecen en el idioma del destinatario, como estas en alemán:

Qakbot ha experimentado un resurgimiento en los últimos meses debido a que otras botnets impulsadas por correo electrónico como Emotet y Trickbot han sufrido reveses como resultado de la acción de las empresas de tecnología y de las fuerzas del orden (y más recientemente debido a las filtraciones de antiguos socios criminales descontentos) .

Al igual que esas otras familias, el malware Qakbot es modular, con un componente central y múltiples complementos maliciosos qué descarga e inyecta en los procesos del sistema víctima. Vale la pena explorar el comportamiento de la siguiente campaña en particular como un indicio del rango de capacidades que tiene el bot, ya que usa muchas de ellas.

En el incidente que despertó nuestro interés, los atacantes enviaron una respuesta a un anuncio sobre una actuación musical, el malware entregó al menos tres cargas diferentes, incluyendo un inyector web para robar credenciales de inicio de sesión y un componente de escaneo ARP que intentó perfilar la red en la que se estaba ejecutando. El malware inicial con el que infectamos un ambiente de pruebas en octubre sigue funcionando y es capaz de conectar su servidor de comando y control; aún recibe actualizaciones de carga útil cinco meses después.

Si grazna como un pato …

El mensaje que recibimos contenía un simple comentario: “Buen día. Si no le causa ningún inconveniente, responda a la última documentación que le envié. En caso de que el mensaje no haya llegado, hágalo ahora mismo”. Más temprano ese mismo día, un estudiante de una universidad cercana envió un nota sobre una actuación musical, es inusual ver a alguien responder a un anuncio general de un servidor de listas, así que indagamos un poco más.

Los archivos maliciosos de Excel .xlsb de Qakbot tienen la misma apariencia desde hace algún tiempo

Resultó que este mensaje era solo una de las cientos de variantes que pudimos encontrar en el sistema que Sophos usa para rastrear muestras de spam. Todos los mensajes incluían una URL (sin hipervínculo, por lo que era necesario pegarla en el navegador). La URL en sí era distintiva porque contenía algunos términos en latín (nulla quia, que significa “no porque”) y el nombre de archivo de la carga útil también era una palabra latina (eum, o “él”). Otras campañas que circulaban al mismo tiempo también usaban combinaciones de palabras en latín en la URL.

El archivo eum.zip contiene una hoja de cálculo de Excel maliciosa con una extensión inusual .xlsb (Excel Binary Workbook). Al abrir la hoja de cálculo (y hacer clic en el botón Habilitar contenido en Excel), se activa para ejecutar una carga embebida en el archivo .xlsb. Esa carga útil, se ubica en una carpeta con un nombre aleatorio (cinco letras de largo) que el bot crea en la raíz de la unidad C:, contacta brevemente con un sitio web comprometido usando el navegador Edge y luego se inyecta en una instancia de Edge, de Explorer, o a veces de ambos.

El archivo .xlsb malicioso activa regsvr32 para cargar los payloads DLL que ubica en una carpeta con un nombre aleatorio de cinco caracteres en la raíz de la unidad C:

El malware continúa ejecutando una variedad de comportamientos maliciosos, que incluyen la creación de perfiles en la máquina en la que se ejecuta, la identificación de la dirección IP pública y luego la descarga de una serie de payloads con comportamientos que observamos en el sistema de prueba.

Qué hace Qakbot

Una vez que el bot se establece en el sistema, se inyecta en instancias de Exporer.exe y Msedge.exe, comienza a recuperar una variedad de cargas maliciosas y las inyecta en instancias adicionales de los dos programas del sistema. La carga principal de malware, inyectada en Explorer, se conecta a su servidor de comando y control aproximadamente cada cinco minutos. Esta dirección de C2 se ha mantenido activa y disponible durante al menos cinco meses.

Qakbot abusa de Excel para ejecutar cargas útiles en un directorio “Jambo”

Pero el comportamiento verdaderamente interesante tiene lugar cuando el bot activa uno o más de sus payloads DLL. Una de estas cargas útiles parece ser utilizada como proxy web, ya que el malware abre una sesión en la interfaz de administración de un sitio web, utilizando credenciales aparentemente robadas, y carga varios archivos en el almacenamiento del sitio web. Otro payload resuelve las direcciones de una docena de servidores SMTP y luego intenta conectarse a cada uno de ellos y enviar spam.

Una computadora infectada con Qakbot realiza un escaneo ARP de la red interna

La carga útil más preocupante realiza un escaneo ARP de todo el rango de direcciones IP del espacio de direcciones NAT del ambiente de pruebas, presumiblemente para buscar una forma de moverse lateralmente a otras máquinas en la red.

La presencia de infecciones de Qakbot, en general, también se correlaciona altamente con indicadores de que un ataque de ransomware puede comenzar en breve. Hemos encontrado muestras de Qakbot que envían balizas de Cobalt Strike directamente al host infectado, lo que proporciona a los operadores de la botnet ingresos secundarios: una vez que los operadores de Qakbot han utilizado las computadoras infectadas a su satisfacción, pueden arrendar o vender el acceso a la red comprometida transfiriendo dicho acceso a otros actores de amenaza.

Decodificando Qakbot

Tanto el malware como sus mensajes de comando y control, se caracterizan por niveles elaborados de ofuscación y encriptación. En el malware, los desarrolladores han hecho un esfuerzo considerable para ocultar cadenas confidenciales, datos de configuración y direcciones de C2. El malware también almacena datos en caché en el Registro de Windows de forma cifrada, en una llave que crea durante el proceso de infección.

En las comunicaciones, también crearon un mecanismo elaborado para cifrar cada conversación de C2 con una llave única para que sea más difícil averiguar lo que el bot le dice a sus operadores sobre el sistema infectado. Y al igual que Dridex, el bot utiliza un mecanismo de búsqueda de tablas hash para ocultar cuales llamadas API del sistema operativo utiliza.

En el transcurso del análisis, dedicamos un tiempo a comprender el mecanismo de comunicación y descubrimos cómo descifrar los mensajes que envía y recibe el bot.

Código de Qakbot para ejecutar comandos WMI en el host infectado

Qakbot usa comandos WMI para una variedad de funciones: consultar características del sistema operativo para crear un perfil de la máquina infectada, tomar fingerprints de una variedad de componentes. También usa comandos WMI para copiar archivos y carpetas, y para invocar otros ejecutables de Windows. Por ejemplo, se consulta el sistema operativo mediante WMI para determinar qué software de seguridad está instalado en las máquinas comprometidas. Los comandos WMI se ofuscaron con XOR.

Las comunicaciones de C2 entre el bot y sus controladores se realizan a través de solicitudes HTTPS POST y GET, con los datos transmitidos de forma cifrada, dentro de TLS. Una vez que elimina la capa TLS, los protocolos de comunicación son visibles, pero el tráfico aún está en forma codificada. En el caso de este bot, estaba realizando POST HTTPS regulares a varias direcciones IP, siempre usando la ruta /t4 y (al menos con los bots con los que probamos) la cadena User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko.

Qakbot HTTPS POST data (rojo) C2 server response (azul)

Estos datos codificados, que aparecen como texto en base64, pueden ser difíciles de decodificar porque el bot genera una lave de cifrado para cada mensaje, siendo parte de la llave los primeros caracteres del mensaje.

Qakbot almacena datos codificados dentro de una clave generada aleatoriamente en el Registro de Windows

También genera dinámicamente una clave única en cada máquina infectada para la información almacenada por el propio bot y para la información que se almacena en el Registro de Windows, utilizando características de la computadora y el sistema operativo infectados.

Sin entrar en detalles, pudimos idear un método para decodificar esos mensajes y revelar el contenido. Cuando se descifran, los datos aparecen en formato JSON.
Por ejemplo, el mensaje del bot (texto rojo, arriba) se ve así cuando se decodifica:
{"2":"pqqjdl158536","8":9,"1":18}

Y la respuesta del servidor (texto azul, arriba):

{"8":5,"16":2920293983,"39":"1KGiN4q75fpImffmxkv6e0zncFjN6IzvT6Qkz8gtcI2BnTnb5USUUH8xNhAI","38":1}

Ahora, claramente, también usa otra capa de codificación, pero podemos traducirla usando una clave que hemos ideado. El patrón que sigue es un valor numérico entre comillas, un carácter de dos puntos y luego un segundo valor. Un flujo de comunicación puede contener varios de estos tipos de pares de mensajes.

El número entre comillas se traduce en una tabla de “tipos de mensajes”:

'1' : 'PROTOCOL VERSION',
'2' : 'BOTID',
'3' : 'CAMPAINGID',
'4' : 'BOT VERSION HI',
'5' : 'BOT VERSION LOW' ,
'6' : 'BOT UPTIME',
'7' : 'SYSTEM UPTIME',
'8' : 'MSGTYPE',
'9' : '[TBD]',
'10': 'SYSTEM TIMESTAMP',
'15': 'SIGNED (SALT|CMDID|MODULEID)',
'16': 'EXTERNAL IP',
'18': 'MODULE ID',
'19': 'COMMAND ID',
'20': ['MODULETYPE', Base64 PAYLOAD],
'38': 'ACK [TBD]',
'39': 'RND STRING'

Entonces, en esa comunicación inicial anterior, el bot le dice al servidor de comando y control que el BOTID es pqqjdl158536, el MSGTYPE es 9 y la VERSIÓN DEL PROTOCOLO es 18.

La respuesta del servidor le dice al bot que el MSGTYPE es 5, EXTERNAL IP de la máquina infectada es 174.16.38.95 (representada aquí en formato de dirección IP sin puntos, 2920293983), y lo que sospechamos es un ACK al final.

Usando este método de decodificación, podemos leer y seguir toda la conversación entre el bot y su servidor C2. Es posible que no sepamos exactamente qué significa un “MSGTYPE 5”, pero podemos inferir del contexto que se trata de un check-in.

En lugar de mostrar un montón de datos en formato JSON, decidimos hacer que sea un poco más fácil de entender la conversación de ida y vuelta entre el bot y su C2. Esta es nuestra interpretación de los primeros minutos del bot dirigiéndose a su operador y las instrucciones recibidas.

 

En su conexión inicial con el servidor de C2, el bot también transmite una gran cantidad de datos. Cuando lo decodificamos, encontramos un perfil extremadamente detallado de la máquina infectada: datos sobre las cuentas de usuario configuradas (y sus permisos), software instalado (y las claves de registro asociadas del software), controladores cargados ( y sus claves de registro), una lista de servicios y procesos en ejecución, tareas programadas, y salida de netstat.

Decodificado en texto plano, el archivo tiene un tamaño de más de 1,4 MB y es una rica fuente de información sobre nuestro propio ambiente de pruebas que fue revelador incluso para nosotros.

El bot también recibe datos del propio servidor C2; la mayoría de estos son cargas útiles de DLL que el bot descifra, carga en un proceso de sistema y ejecuta sin archivos. Algunos de estos blobs son reglas de “inyección web”: grandes archivos de datos que definen la forma en que el bot interceptará credenciales cuando el usuario ingrese su nombre de usuario y contraseña en formularios web de inicio de sesión en docenas de sitios populares.

La lista de sitios web en los que Qakbot está interesado incluye muchos de los sospechosos habituales (Facebook, Microsoft y Google), así como sitios web relacionados con la banca y las finanzas.

Detección y recomendaciones

Qakbot es una familia de malware versátil con una popularidad creciente entre una amplia variedad de grupos criminales, que pueden usar el malware o sus cargas útiles para ejecutar diferentes tareas. Su abuso de los hilos de correo electrónico lo hace particularmente peligroso, ya que es posible que los destinatarios no se den cuenta de que los mensajes en los que se propaga Qakbot no hacen parte de una conversación en curso.

La recomendación más sencilla es tratar el correo electrónico con una desconfianza reflexiva a menos que se demuestre lo contrario, incluso cuando los mensajes parezcan ser respuestas a hilos existentes. Si bien los atacantes parecen haber dejado de usar frases en latín en sus URLs, una declaración en ese idioma antiguo parece seguir siendo un buen consejo: Caveat lector: que el lector tenga cuidado.

Las protecciones de comportamiento existentes evitan que las infecciones de Qakbot se apoderen de las máquinas protegidas por los productos de seguridad de Endpoint de Sophos. Los dispositivos de red también alertarán a los administradores si un usuario infectado intenta conectarse a una dirección o dominio de C2 conocido. Las muestras relacionadas con este incidente pueden detectarse como Mal/EncPk-AQC y algunas cargas útiles (en particular, el código de inyección web) se detectarán como Mal/QbotDat-A.

SophosLabs ha publicado IOCs relacionados con las muestras de Qakbot analizadas en este informe en nuestro repositorio de Github.

 

 

 

Exit mobile version