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:
- Para Windows – HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
- Para Mac OS – se utiliza el servicio estándar de ejecución de Mac OS.
- 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.
Un bot de Java para múltiples plataformas