martes, 16 de marzo de 1999

Virus de macro con cifrado

Un nuevo virus de macro revoluciona la tecnología de este tipo de
amenazas al cifrar y descifrar su propio código.
Hasta el momento la capacidad para cifrar el código infector de un
virus parecía algo reservado a los virus tradicionales ejecutables,
bien para plataformas DOS o Windows, pero no a los virus de macro o
similares. El nuevo W97M/Sattelite (también conocido como W97M/SAT)
es un virus de macro de Word que presenta la extraordinaria
capacidad de cifrar su propio código.

El virus es capaz de cifrar y descifrar su propio código en tiempo
real, lo que hace el análisis y la detección del virus mucho más
compleja y problemática para los desarrolladores de antivirus. La
encriptación se basa en múltiples capas de una sustitución basada
en operaciones XOR.

Sattelite sólo puede trabajar en entornos Windows 95 o 98, se
reproduce siempre que un documento Word se abre o se cierra, y
verifica si un documento ya está infectado mediante la búsqueda del
texto «SATTELITE V1.5» en las macros del archivo. Cuando el virus
se activa realiza una modificación del registro, de tal forma que
modifica el nombre del usuario de Windows a «ThE wEiRd GeNiUs».

Esta es toda la información que podrá encontrar si visita la web de
Data Fellows, quienes han hecho pública la aparición de este nuevo
virus. En HispaSec nos hemos hecho con una muestra del virus y os
presentamos la forma en la que cifra este virus que, como se puede
comprobar, es muy simple. En esta ocasión estamos en desacuerdo con
el enfoque dado en la noticia, en ningún momento se puede tachar su
capacidad de cifrado como «extraordinaria».

Las primeras líneas del código cifrado se presentan de la siguiente
manera:

'Ml"Gppmp"Pgqwog"Lgzv
'Etthmgepmkj*AjefhaGejgahOa}$9$s`Gejgah@mwefha`
'Ivroihu(PotsuVtirceroih&;&@gjuc
'Gx|agf{&[i~mFgzeidXzgex|(5(Nid{m

El primer carácter, "'", es utilizado como REM para que el código
cifrado no produzca errores. A continuación nos encontramos con la
línea cifrada, que se basa en un XOR de cada carácter que la forma
con el número que ocupa la línea multiplicado por dos. En el caso
de que la línea multiplicada por dos sea mayor que 20, el contador
de líneas vuelve a situarse en uno.

Podríamos descifrar mediante:

FOR j=2 to LEN(tcifr[Z])
tclaro=tclaro+CHR$(ASC(MID$(tcifr[Z],,j,1))) XOR Z*2)
NEXT

En la variable «tclaro» se obtiene cada línea según se descifra,
siendo «tcifr» cada línea cifrada y "Z" el número de ésta. El
anterior código, en principio ininteligible, tras pasar por este
programa, quedaría de la forma:

On Error Resume Next
Application.EnableCandelKey = wdCancelDisabled
Options.VirusProtection = False
Options.SaveNormalPrompt = False

Queda con esto demostrado la debilidad del sistema de cifrado, y la
poca, por no decir nula, aportación a la encriptación en virus
informáticos. Por descontado parece claro que no supondrá, ni por
asomo, ninguna dificultad añadida a las casas antivirus. Aunque, y
como hemos visto, ha proporcionado una nueva oportunidad para
alertar a los usuarios.

Más información:
Información Data-Fellows


Antonio Ropero/Bernardo Quintero



No hay comentarios:

Publicar un comentario en la entrada