Desmantelamiento de Nuclear Bot

Un tuit reciente mencionó que ha comenzado a venderse un nuevo malware bancario llamado “Nuclear Bot” en mercados clandestinos.
El precio inicial es de alrededor de $2500, más del doble del precio de otro ingreso reciente al mercado. Este artículo desmantela una muestra de este malware para determinar si debemos seguir el consejo de estar alertas y protegidos.

Muestra

La muestra analizada para este artículo está disponible en VirusTotal. Posee una cadena de depuración útil:

E:\Nuclear\Bot\Release\Dropper.pdb

También llama a un servidor de conexiones a “command and control” (C2) con un panel de inicio de sesión de identificación:

En el resto del artículo, analizaremos los componentes de instalador de malware, bot y webinject de Nuclear Bot.

Componente Instalador de malware

El primer componente es el instalador de malware. Comienza cargando manualmente un grupo de bibliotecas de Windows. Los nombres de las bibliotecas se ofuscan con XOR y una clave no modificable. El siguiente fragmento de código Python decodifica una cadena ofuscada como ejemplo para “ntdll.dll”:

key = “\x03\x0E\x18\f\x1A\x1F”

encbuf = “mz|`v1gbt”

plainbuf= []

for i, c in enumerate(encbuf):

plain = ord(c) ^ ord(key[i % len(key)])

plainbuf.append(chr(plain & 0xff))

print “”.join(plainbuf)

Una vez cargadas las bibliotecas, resolverá varias de sus funciones que utilizan el hash de la API. El siguiente fragmento de código Python ejecuta una función hash de ejemplo “LoadLibraryA” en su hash “0x3b7225fc”:

name = “LoadLibraryA”

hash_val = 0

 

for i, c in enumerate(name):

if i & 1:

v6 = (~(ord(c) ^ (hash_val >> 5) ^ (hash_val << 11))) & 0xffffffff

else:

v6 = (ord(c) ^ (hash_val >> 3) ^ (hash_val << 7)) & 0xffffffff

hash_val ^= v6

 

hash_val = hash_val & 0x7fffffff

print hex(hash_val)

A continuación, genera un id. de bot con base en el número de serie del volumen de raíz; se muestra un ejemplo abajo:

{496E9266-9266-1717986918}

Luego, llevará a cabo tres tipos de antianálisis:

  1. Detectar software de análisis común, como las herramientas IDA Pro y Sysinternals

  2. Detectar zona protegida y máquinas virtuales comunes

  3. Detectar depuración mediante una comprobación por intervalos

Si detecta que se está ejecutando en un entorno de análisis, se eliminará por sí solo. La persistencia se configura a través de una copia automática en el directorio “%appdata%” y la configuración de una entrada “Software\Microsoft\Windows\CurrentVersion\Run” en el registro del usuario.

Una vez realizada la configuración, se inicia un proceso svchost (-k netsvcs) y se introduce un DLL. El DLL se almacena comprimido en el instalador de malware y se descomprime con la API de Windows RtlDecompressBuffer.

Antes de pasar al próximo componente, se escribe información en un archivo de texto “<botid>.txt” en “%appdata%”, donde “<botid>” se reemplaza por el id. del bot. La información del sistema está separada por barras verticales y consta de:

  • info
  • Versión de Windows
  • Nombre del equipo
  • Nombre del usuario
  • Estado isWow64
  • Estado is Admin

Componente bot

El DLL introducido o el componente “bot” están disponibles en VirusTotal. Emplea la misma técnica de carga de bibliotecas y resolución de funciones que el instalador de malware. Después de esta configuración inicial, se envía una solicitud HTTP POST vacía al servidor C2:

 

La respuesta del servidor C2 será una cadena hexadecimal que se utilizará como clave XOR para ofuscar comunicaciones C2 adicionales. El siguiente fragmento de código Python describe la ofuscación:

key = “920e9b92bb97c06fbaf1c4854db682898a85cb1e”

inbuf = “ping”

outbuf = []

 

for i, c in enumerate(inbuf):

b = ord(c) ^ ord(key[i % len(key)])

outbuf.append(chr(b & 0xff))

 

print “”.join(outbuf)

A continuación, se lee la información del sistema desde el archivo “<botid>.txt” y se envía al servidor C2:

Los comandos se obtienen con un comando “ping”. La respuesta está separada por barras verticales donde el primer campo denota el número de comando y el resto son argumentos del comando. Se han identificado los siguientes comandos:

  • 0 – Download and execute
  • 1 – VNC
  • 2 – SOCKS4 proxy
  • 3 – Update self

Además de los comandos de arriba, Nuclear Bot posee la funcionalidad “man-in-the-browser” (MitB) que, junto con webinjects (reglas que denotan cuáles sitios web atacar y cómo), le permite al atacante diseñar y robar credenciales de sitios web financieros y otros. El código de MitB se almacena como DLL comprimido en la sección de archivos “.x86” o “.x64” PE del archivo del bot:

Se puede descomprimir con RtlDecompressBuffer como antes. El DLL x86 utilizado para este análisis también está disponible en VirusTotal. Con base en una cadena de depuración, el desarrollador llama a este DLL “Engine32”.

Engine

El DLL “engine” se introduce en explorer.exe. En explorer.exe., se enlaza la API de Windows CreateProcessW para que pueda controlar la creación de procesos en el futuro. El enlace de la función primero determina qué proceso se está creando. Luego, pasa la ejecución a la función CreateProccessW real para que se cree el proceso. Por último, si el proceso es un navegador web (Internet Explorer, Firefox, Chrome u Opera), abrirá una barra vertical de nombre, donde el nombre es el id. del bot, y escribe el id. del proceso (PID) de navegador web creado recientemente. El componente bot de arriba abre el otro extremo de la barra vertical y, una vez que recibe un PID, introducirá el componente “engine” en ese proceso. Así es como el componente MitB ingresa en los navegadores web.

Una vez introducido en un navegador web, determinará qué navegador web es y enlazará las funciones correspondientes, por ejemplo, InternetConnectW, HttpOpenRequestW, InternetReadFile, etc. en Internet Explorer y PR_Read y PR_Write en Firefox. Estos enlaces monitorean la navegación web de la víctima (HTTPS no es relevante en esta capa de comunicación) y compara continuamente el tráfico con su lista de webinjects. Si se encuentra una coincidencia, el código malicioso de webinject se introduce en la página web, la víctima accede a la página web y se puede producir el robo de credenciales.

Nuclear Bot descarga webinjects de su C2 mediante la emisión de un comando “injects”. Los datos se devuelven en un archivo JSON similar a este:

Conclusión

Este artículo fue un desmantelamiento de un nuevo malware bancario conocido como Nuclear Bot. Como siempre sucede con un nuevo malware, es demasiado pronto para evaluar cuán activa está la familia y cuál será su alcance. Incluso más difícil es evaluar esto con base en esta muestra y un ataque, ya que es muy probable que se haya utilizado un “botnet de prueba” para el desarrollo y no en el ataque masivo. Esto se basa en el webinject “Hello World” que utiliza y también en las numerosas llamadas de la función MessageBox que aparecen durante la ejecución del malware:

Si bien puede ser demasiado pronto para seguir el consejo de estar alerta y protegidos, los anuncios recientes sobre el bot han sugerido la corrección de errores y la actualización de las versiones, por lo que vale la pena estar atentos.

  • Posted in ASERT Blog
  • Comentarios desactivados en Desmantelamiento de Nuclear Bot