lunes, 18 de enero de 2016

Analizando el archivo: "winlogon.vbs" - Parte 2

Continuando con la anterior entrada, se procede a investigar el código, encontrándose la siguiente información:

1.-  Al principio se define el directorio que será asignado a la variable: installdir
      
NOTA: En cualquier caso se lee la variable de entorno %temp%, que contiene la ubicación del directorio que se utilizará como repositorio temporal. 

Código para definir el contenido de la variable: installdir.

 2.- Se determina si el hosts ya se encontraba infectado, para lo cual se determina la existencia en el registro de Windows de la siguiente clave:

"HKEY_CURRENT_USER\software\microsoft\windows\Currentversion\Run\winlogon”

Codigo para determinar si el hosts se encuentra infectado o no.

3.- Si no se encuentra la clave anterior, se despliegan llama al procedimiento: upstart (). Que entre otras cosas, crea dos claves nuevas:

"HKEY_CURRENT_USER\software\microsoft\windows\Currentversion\Run\winlogon” con un valor “%temp%\winlogon.bat”
“HKEY_LOCAL_MACHINE\software\microsoft\windows\Currentversion\Run\winlogon” con un valor “%temp%\winlogon.bat”

Procedimiento: upstart ().

Genera el archivo “winlogon.bat”, con atributos: oculto y del sistema, en las ubicaciones: %temp%, y en la carpeta: “Inicio”. Con el siguiente código: 

start wscript “%temp%\winlogon.vbs”

, mediante el procedimiento: starter().

Código del procedimiento: starter().


4.-  Se ejecuta la función: Instance(). Ésta función, entre otras cosas, graba en el registro la fecha del día de la infección.

Más concretamente, la clave del registro a crear es:

HKEY_LOCAL_MACHINE\software\winlogon

,y el valor que introduce es: true - <fecha>

Además, se realiza una vez más la infección.

Función: Instance().

5.- Entramos en un bucle que se ejecutará siempre y cuando el ordenador este activo, con un intervalo de hibernación de 5000 ms.


1ª parte del bucle

2ª parte del bucle

5.1.- Cada vez que se ejecuta el bucle se llama al procedimiento: install. Este procedimiento, a su vez, llama al procedimiento: upstart (ver punto 3) y al procedimiento: cleaner.

NOTA: El procedimiento cleaner, para el proceso activo en memoria, y limpia los registros creados en la secuencia de arranque, así como los archivos creados.

El procedimiento install, continúa ejecutándose y busca las unidades de red de tipo 1, es decir, las unidades de tipo extraíbles. Si encuentra alguna, copia en la carpeta raíz el archivo el archivo con extensión “.vbs” y el archivo con extensión “.bat”, con atributos del sistema y ocultos.

A continuación, cada archivo y cada carpeta de la carpeta raíz, es modificado de la siguiente manera:  genera un archivo de tipo “.lnk” con el mismo nombre, que redirecciona al contenido del mismo pero ejecutando anteriormente el archivo con extensión “.bat” almacenado en la carpeta raíz.

Modificación de los ficheros ubicados en  la carpeta raíz del medio extraíble.

Modificación de las carpetas ubicadas de la carpeta raíz del medio extraíble.

5.2.- Tras el proceso: install, se continua con la ejecución de la función: post(). Ésta función se encarga de comunicarse con el C&C cada vez que se activa el bucle.

Función: Post()

Los datos del C&C son:

Dominio:             43r0m4x.linkpc.net
Puerto:                34

Variables que contienen el nombre del dominio y el puerto a utilizar en la comunicación

NOTA: Dicha función tiene dos parámetros, el primero de los cuales es el utilizado como URI en la petición HTTP.

En la comunicación que se lanza cada 5 segundos consiste en:

URL:                      43r0m4x.linkpc.net:34/is-ready
Método:                 Post

Pero a esto hay que añadir la información que se extrae a través de la función: Information(), y que va oculta en el campo HTTP; “User-Agent

Función: Information()

La información oculta en el campo: User-Agent consiste de:

1.- Número de serie del primer disco duro encontrado.

NOTA: La función: hwid(), nos proporciona ese dato. Aunque también hay que decir que si NO aplicara el “exit for”, se le enviaría todos los números de serie no vacios encontrados.

Función: hwid().

2.- El nombre de la máquina
3.- El nombre del usuario
4.- El sistema operativo
5.- La cadena “plus”
6.- El sistema operativo

NOTA: El código analizado sólo tiene en cuenta los sistemas operativos: XP y VISTA. Por lo que el sistema operativo no será enviado en el caso de otros sistemas.

Código que recoge el sistema operativo

7.- La fecha de infección

NOTA: La variable: usbspreading, puede contener el valor: true - <fecha> o false - <fecha>, visto en la función: instance() (ver punto 4)

Ejemplo de los datos enviados

5.3.- De la respuesta obtenida, se procede a determinar lo que es  el comando y lo que es el parámetro. Ambos se encuentran separados por el siguiente conjunto de caracteres separadores: “<|>”

Los posibles comandos son:

A.- Excecute:  Ejecuta la información transmitida en el parámetro.

Opción: Excecute

B.- Update: Ejecuta de nuevo el archivo: winlogon.vbs

Opción: Update

C.- Uninstall: Elimina los archivos creados en la carpeta: %temp% y %startup%, con nombre “system.bat”. Así mismo, recorre los discos extraíbles conectados eliminando los archivos con extensión “.lnk”, y a cada archivo o carpeta que cae de la carpeta raíz le asigna el atributo 0 (Normal)

Opción: Uninstall

Procedimiento: Uninstall.

D.- Send: Ésta opción borra el archivo “winlogon.vbs” que tuviéramos en el host, para copiar en su lugar el archivo indicado en el parámetro: fileurl. Tras su correcta descarga, se ejecuta.

Opción: Send

Procedimiento: Download

E.- Site-send: Ésta opción realiza los mismo que la opción “Send” salvo por la diferencia que la petición de descarga la realiza mediante el método: GET.

Opción: Site-send

Procedimiento: Sitedownloader.

F.- Recv: Ésta función envía al C&C el archivo indicado en el parámetro enviado.

Opción: Recv

Función: Upload.

G.-Enum-driver: Esta función envía los datos aportados por la función post, vista en el punto 5.2, y añade los datos relativos a los distintos dispositivos conectados en el host (Unidad y Número de serie).

Opción: Enum-driver

Función: Enumdriver.

H.- Enum-faf: Esta función envía los datos aportados por la función post, vista en el punto 5.2, y añade los datos relativos a los archivos y carpetas de la ubicación indicada a través del parámetro envíado (Nombre y atributos de las carpetas y archivos).

Opción: Enum-faf

Función: Enumfaf

I.- Enum-process:  Esta función envía los datos aportados por la función post, vista en el punto 5.2, y añade los datos relativos a los procesos que corren en el sistema (Nombre y PID de los procesos).

Opción: Enum-process

Función: Enumprocess.

J.- Cmd-shell:  Esta función envía los datos aportados por la función post, vista en el punto 5.2, y añade los datos devueltos por la ejecución de los comandos enviados como parámetro.


Opción: Cmd-shell

Función: Cmdshell.

K.- Delete: Este procedimiento elimina el archivo y la carpeta enviados como parámetro.


Opción: Delete

Procedimiento: Deletefaf

L.- Exitprocess: Este procedimiento elimina el proceso con PID enviado como parámetro.

Opción: Exit-process

Procedimiento: Exitprocess

M.- Sleep: Ésta opción indica el tiempo por el que el proceso, y como consecuencia, el bucle “While” estará parado.

Opción: Sleep

No hay comentarios:

Publicar un comentario