Un bot de Java para múltiples plataformas

Un bot de Java para múltiples plataformas

A principios de este año recibimos una aplicación maliciosa Java para analizar, que resultó ser un bot para múltiples plataformas capaz de ejecutarse en Windows, Mac OS y Linux. El bot estaba escrito en Java. Los atacantes se aprovecharon de la vulnerabilidad CVE-2013-2465 para infectar a los usuarios con este malware.

Inicialización y codificación de hilos

Para dificultar el análisis y detección de este malware, sus autores utilizaron el ofuscador Zelix Klassmaster. Además de ofuscar el código, Zelix también codifica las constantes de los hilos. Zelix genera una llave diferente para cada clase, lo que significa que para decodificar todos los hilos de este programa, hay que analizar todas las clases para encontrar las llaves decodificadoras.

El código inicializador estático (<clinit>) tiene implementadas la inicialización y codificación de hilos.

Inicialización codificada del hilo

El algoritmo es el siguiente: toma el índice vigente de un símbolo codificado en el hilo, calcula el resto al dividirlo por 5 y elige la llave vigente según el resultado. A continuación, identifica el símbolo descifrado mediante una suma de módulos de 2 bits con la llave seleccionada.

Decodificación del hilo

Para un determinado caso, el algoritmo de decodificación es como sigue:

Implementación Python del algoritmo decodificador

La ejecución

Al ejecutarse, el bot se copia en el directorio de inicio del usuario, y se configura para ejecutarse cuando el sistema arranque. Dependiendo de la plataforma en la que se ejecute el bot, se utiliza el siguiente método para añadirlo a los programas de autoejecución:

  1. Para Windows – HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
  2. Para Mac OS – se utiliza el servicio estándar de ejecución de Mac OS.
  3. Para Linux – /etc/init.d/

El cuerpo del bot contiene un archivo codificado de configuración para el servicio launchd.

Archivo descodificado de configuración para el servicio launchd

Tras ejecutarse y configurarse para ejecutarse cuando el sistema arranque, el bot necesita comunicarse con su dueño. Con el fin de proporcionarle a cada bot una forma de identificación, se genera un identificador único en el equipo de cada usuario. El identificador se guarda en el archivo jsuid.dat en el directorio de inicio del usuario.

Contenido de jsuid.dat

Control del bot

El bot se controla mediante el protocolo IRC. Esto nos revela una curiosa característica de este programa malicioso: utiliza el framework abierto <a href="http://www.jibble.org/pircbot.php"PircBot para comunicarse vía IRC. Este malware incluye todas las clases requeridas para su propósito.

Después de ejecutarse, el programa inicia la conexión con un servidor IRC.

Conexión con un servidor IRC

Después de conectarse, el bot accede a un canal predeterminado y espera las instrucciones de sus dueños:

Acceso a un canal IRC

Principales funciones

El bot está diseñado para lanzar ataques DDoS desde los equipos capturados.

El bot es compatible con dos tipos de protocolos:

  • HTTP
  • UDP

El tipo de ataque lo determina el atacante en el canal IRC para los equipos zombi. Asimismo, se especifican los siguientes parámetros:

  • Direcciones del equipo blanco del ataque.
  • Número del puerto.
  • Duración del ataque.
  • Número de hilos que se emplearán en el ataque.

Generación de encabezados durante un ataque HTTP

El valor User-Agent que se insertará en una petición HTTP se selecciona aleatoriamente de una lista codificada guardada en el cuerpo del bot.

Lista decodificada de valores User-Agent  compatibles con el bot

Cuando analizábamos este malware detectamos un intento de ataque contra un servicio de correo masivo.

Comando para lanzar un ataque

Kaspersky Lab detecta este malware como HEUR:Backdoor.Java.Agent.a

Nuestro agradecimiento para Zoltan Balazs, CTO y MRG Effitas, por compartir este programa malicioso con nosotros.

Publicaciones relacionadas

Deja un comentario

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