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