Análisis de malware

Análisis de la botnet Asprox/Kuluoz

5 de junio de por Ayoub Faouzi

Introducción

Kuluoz, también conocido como Asprox, es una botnet de spam que surgió en. Es conocida por enviar una gran cantidad de correos electrónicos de phishing utilizados junto con señuelos de ingeniería social (por ejemplo, confirmaciones de reservas, spam con temas postales, etc.).

Este artículo presenta una visión del malware y sus capacidades, cómo se comunica con el CnC, los esquemas de cifrado utilizados, así como diferentes mecanismos de protección para dificultar el trabajo del analista de malware.

Otro punto a tener en cuenta es que Asprox emite comandos que instruyen a las computadoras comprometidas a descargar y ejecutar cargas útiles adicionales proporcionadas por un afiliado de pago por instalación (PPI), de donde los operadores de botnet obtienen ingresos.

Herramientas

Vector de infección

Esta botnet llega como archivos adjuntos a mensajes spam disfrazados de notificaciones de compañías postales y confirmaciones de reservas de aerolíneas. Algunas de las empresas conocidas que falsifica son el Servicio Postal de EE. UU. (USPS), FedEx, DHL, Delta, American Airlines, el IRS y PayPal. Para hacer creer a los usuarios que es legítimo, Kuluoz suele presentarse en forma de archivos como .PDF y .DOC.

Si estás interesado en conocer más sobre el método de entrega, aquí te dejamos algunos enlaces interesantes que lo explican mejor:

Análisis del empacador

Todos los binarios de Asprox que he analizado tienen un ícono de Microsoft Word y, tras la ejecución del troyano, aparece una ventana de cuadro de mensaje en el escritorio que le informa al usuario que ha ocurrido un error desconocido. Esto se utiliza para engañar al usuario haciéndole suponer que el archivo adjunto fue un error y que no ha ocurrido nada malicioso. Además de eso, los binarios de Asprox están empaquetados en lo que parece ser un empaquetador personalizado. Desempacar es una tarea bastante fácil, simplemente interrumpa las API para la asignación de memoria como WriteProcessMemory o equivalentes para ver el búfer inyectado o simplemente puede hacerlo como yo, establezca un punto de interrupción en GetProcAddress o LdrGetProcedureAddress para ver qué API se usan realmente para la inyección de código porque la mayoría El malware que resuelve las API de forma dinámica utiliza este truco.

Lo primero que noté fue la API CreateProcessA con svchost.exe, lo que significa que Asprox crea una copia hueca de svchost.exe y luego inyecta su código allí. Si continúa presionando F9, verá que se está utilizando esta API. Esto me recuerda el estilo de inyección de duqu que está documentado en ella: http://blog.w4kfu.com/tag/duqu .

Lo interesante de esta técnica es que no utiliza SetThreadContext para actualizar EIP antes de reanudar la ejecución del subproceso.

Después de la primera llamada de ZwMapViewOfSection, localice la instrucción: MOV BYTE PTR DS:[EDX], AL que escribe un byte en la memoria y coloque un BP. El primer byte que se copia es 0x55 (push EBP), que es potencialmente el punto de entrada del código inyectado.

Debido a que OllyDBG no pudo ver los procesos suspendidos (svchost.exe), ahora no puede simplemente adjuntarlo y ver que se produce la inyección. Sin embargo, puede modificar el primer byte a 0xCC y hacer de OllyDBG un depurador JIT (Opción-Depuración justo a tiempo-Hacer depurador justo a tiempo de OllyDBG) y ahora puede ejecutar el malware. Se iniciará una nueva instancia de OllyDBG y BP en nuestro BP INT3.

Restaure el primer byte a 0x55. Mire la ventana de volcado (visualización de TEXTO), verá un pequeño código auxiliar que realmente realiza la resolución de API dinámicamente (usando LoadLibrary/GetProcAddress) y la otra parte es un archivo PE (archivo DLL), podrá ver la magia de MZ.

Después de recorrer el código que resuelve las API, Kuluoz mira una función específica en la tabla de destinatarios de exportación de la DLL llamada “Trabajo” dentro de la DLL cargada y la llama. Usando sus herramientas de edición PE preferidas, descargue la DLL y cárguela en IDA Pro.

Análisis de DLL de Asprox

Comienza resolviendo algunas API de manipulación de cadenas y API de inyección de código, luego recupera el nombre de la cuenta, el SID del nombre de la cuenta y la fecha de instalación del sistema operativo, luego calcula el hash MD5 a partir de estas variables:

md5 (binary_SID + os_install_date + account_name_string) y guarda los 8 primeros bytes de este hash. Después de eso, crea un nuevo mutex con el nombre de (‘aa’ + nombre de cuenta), llama a GetTickCount que me devuelve (0x11F0ABA).

A continuación, enumera todas las claves de registro en HKEY_CURRENT_USER/Software, luego, para cada clave, llama a RegEnumValue y establece una determinada condición; si la condición coincide, incrementa EAX e imprime “you fag”. En mi caso, bajo la clave de registro “Licencias”.

Luego, genera un valor aleatorio de 8 letras (minúsculas) y le agrega “.exe” y luego lo agrega al directorio %LOCALAPPDATA% a la cadena aleatoria. A continuación, crea un nuevo hilo, que mostrará un cuadro de mensaje falso: “Windows no puede abrir el archivo. Es posible que Windows no admita el tipo de archivo…” Esta cadena también podría ser útil para crear la firma de Yara para este malware.

Trucos antianálisis:

Kuluoz busca algunos nombres de procesos, nombres de Windows y algunas claves de registro para la detección de VM. Si se detecta alguna de las herramientas del entorno de análisis, esta información se informa posteriormente al CC en el elemento debug.

Comunicación CNC:

Kuluoz utiliza XML como formato de intercambio entre las víctimas y el servidor CC. Así es como se ve el contenido XML:

Detallemos cada parámetro del contenido XML:

Después de serializar el contenido xml, lo comprime usando compresión Bzip2, luego cifra el búfer comprimido con el algoritmo RC4 usando una clave aleatoria de 16 bytes generada dinámicamente. Luego, la clave RC4 se cifra mediante el algoritmo RSA.

Siguiendo el mismo patrón descrito anteriormente, la respuesta que se recibe del CnC contiene un hash firmado RSA de los datos de respuesta para verificar si la respuesta proviene de los servidores propietarios de la botnet o de un servidor sumidero. La carga útil real que se comprime con el algoritmo bzip2 y se cifra con la misma clave RC4 que se envió previamente al CnC.

Al examinar la respuesta, podemos ver que los primeros 4 bytes del cuerpo de la respuesta representan la longitud del hash firmado RSA de los datos (little endian) 0x00000080. A esto le sigue el hash firmado RSA. El hash firmado RSA va seguido de otros 4 bytes que representan la longitud de los datos cifrados RC4 0x00000069. A estos 4 bytes les siguen los datos cifrados RC4.

Conclusión:

Si bien las botnets de spam son bien conocidas por enviar anuncios no deseados, especialmente de compañías farmacéuticas “deshonestas”, también son un componente integral de la distribución de malware. La botnet Asprox no sólo envía spam, sino también spam plagado de malware que le permite crecer y utilizar computadoras comprometidas para realizar tareas que la mantienen operativa. Además, sus operadores monetizan su operación ordenando a las computadoras comprometidas que descarguen malware adicional proporcionado por los socios de PPI, incluido el malware FAKEAV.

Aunque la botnet Asprox fue examinada minuciosamente por la comunidad de seguridad en sus primeros tres años de operación, en gran medida ha pasado desapercibida porque su componente de spam se ha incorporado como un complemento de “segunda etapa”. Además, Asprox continuó escaneando y explotando vulnerabilidades para aumentar su presencia e incluso incorporó una funcionalidad de robo de contraseñas para poder comprometer cuentas de correo electrónico legítimas y utilizarlas para enviar spam.

La operación continua de Asprox demuestra que las botnets de spam siguen siendo un componente crucial del ecosistema de malware y los ciberdelincuentes siempre están buscando nuevas formas de adoptarlas en respuesta a las defensas.