Analisis de virus


En este número presentamos un virus stealth, el 512, el
virus Argentina, uno de los primeros creados en el país,
y analizamos en detalle un virus de boot muy común: el
Stoned

 

512

El virus 512 fue originado en Bulgaria en 1989. Infecta
archivos .com inclusive al command.com. Ocupa exactamente
12 bytes, de ahí su nombre. Su descubridor fue Vesselin
Bontchev, un importante investigador búlgaro de virus.
Este virus es importante porque es el primer virus
stealth de archivos que se conoce. Un virus stealth es
aquel que se hace casi indetectable para el sistema que
infecta. Esto se logra engañando al sistema operativo
para que cada vez que quiera leer una parte de un archivo
donde se oculta el virus le devuelve la información que
habría allí si el archivo no estuviese infectado. De esta
forma, aunque comparemos byte por byte un programa
infectado con una copia del mismo sin infectar no
notaríamos ninguna diferencia, mientras el virus esté
activo en memoria controlando las operaciones de lectura
del DOS.
Este virus utilizaba una técnica muy particular, porque
accede en forma directa al File System Table, una tabla
de uso interno del DOS. Esta estructura es distinta en
diferentes versiones del DOS, por lo que no funciona en
un DOS que no sea el 3.3. En memoria se oculta en el
primer buffer de acceso a disco del DOS, obtiene su
direccion en memoria con una estructura de datos única al
DOS 3.1 y 3.3. Por estas causas, el 512 funciona
solamente en DOS 3.3 o compatibles muy cercanos (como el
DOS 3.31 de Compaq).
Por esta causa está prácticamente extinguido en este
momento, ya que dado el precio promocional del MS DOS 5.0
y su capacidad para cargarse en memoria alta y soportar
discos de más de treinta megas, casi nadie usa otro DOS.
Hace unos años, en 1990, era muy común en nuestro país.
En Estados Unidos nunca estuvo muy extendido, era casi
desconocido. Esto nos hace pensar que aunque muchas veces
creamos que los virus que aparecen en nuestro país vienen
de Estados Unidos, esto no es siempre así. Probablemente
haya llegado desde Europa o desde Asia.
El 512 no hace nada exepto reproducirse. Es un virus muy
bien hecho desde el punto de vista del conocimiento del
DOS. Utiliza estructuras y funciones que no están
documentadas oficialmente y son difíciles de conseguir.
Es obvio que el autor tiene acceso a mucha información,
probablemente a la lista de interrupciones de Ralf Brown,
donde encontramos toda la información necesaria como para
desensamblarlo. No es común ver virus tan complejos y tan
pequeños, por lo general usan funciones más documentadas.
Desde el punto de vista de compatibilidad no es tan
bueno, ya que a penas se cambia de versión de DOS éste
deja de funcionar colgando los programas húespedes. Quizá
el éxito de virus como el Jerusalem, Stoned, u otros se
deba más a la compatibilidad con todos los sistemas
operativos o programas que a grandes esfuerzos para no
ser detectados. Es más fácil detectar un virus cuando
vemos que no anda algo que cuando anda todo, a pesar de
que cambie o no la longitud de los programas infectados.
Se cree que su autor no es otro que el famoso Dark
Avenger. Este es un prolífico escritor búlgaro de virus,
creador de algunos muy destructivos y con ideas
innovadoras.

Argentina

En octubre de 1991 en el BBS argentino PC-HOST, el
usuario Alberto Wurzel le dejó a Ricardo Pesce, el SysOp,
un programa para que viera por qué le daba mensajes
extraños cada vez que lo trataba de usar. Ese programa,
luego de ser analizado por mi, resultó ser un virus.
Probablemente sea el primer virus argentino en ser algo
más que una pequeña variante de un virus anterior. Antes
que este se crearon en el país los virus Jerusalem
Mendoza y Ping-Pong C, pero eran variantes menores de
otros virus. De todas formas, Argentina es una variante
del virus Suriv, aunque está lo bastante modificado como
para merecer un nombre propio. Este virus infecta sólo
archivos .COM, excepto el command.com. No es un virus
destructivo. Los días 25 de mayo, 20 de junio, 9 de julio
y 17 de agosto se activa, mostrando uno de los siguientes
mensajes de acuerdo a la fecha:

25 de Mayo Declaración de la independencia Argentina
20 de Junio Dia de la bandera Argentina
9 de Julio Dia de la independencia Argentina
17 de Agosto Aniversario de la defunción del Gral. San
Martin

Despues del mensaje de acuerdo al día, muestra lo
siguiente:

Argentina Virus escrito por AfA - Virus benigno - ENET 35
Pulse una tecla para continuar...

De esto podemos sacar varias conclusiones. Por un lado,
hay un error en la primera fecha, ya que el 25 de mayo se
festeja la creación del primer gobierno patrio y no la
independencia argentina. Por otro lado, vemos que dice
ENET 35, lo que nos permite pensar que fue escrito por un
alumno secundario de una escuela técnica. Esto apoya a la
creencia que circula por el ambiente informático de que
la mayoría de los autores de virus son adolescentes. AfA
seguramente son las iniciales del autor del virus.
El 'Virus benigno' que aparece entre los mensajes y el
hecho de que efectivamente el virus no pretenda hacer
ningun daño subrayan la idea de que el autor sólo quiso
hacer un experimento, y no pretendió causar daños. Corre
un rumor que dice que el autor de este virus no pretendió
que se escapara y llegara a infectar programas de gente
inocente. Esto es muy posible, ya que es muy común que un
autor cree un virus sin más intenciones que las de
divertirse o hacer un experimento y luego se le escape
sin notarlo.

Stoned

Stoned es un virus de boot sector. Se instala en el
sector 0 (boot) en diskettes y en la tabla de particiones
de los discos rígidos. En los diskettes de 360k copia el
sector de booteo original en el sector 11, donde se
encuentra el final del directorio raíz, por lo cual se
perdería información del disco si habían archivos en esa
parte del directorio. En los discos rígidos copia la
tabla de particiones al lado 0, cilindro 0, sector 7,
donde normalmente no hay datos. En la memoria se instala
en la parte más alta de la memoria libre, cambiando el
valor de la cantidad de memoria disponible a 2 k menos
para no ser sobreescrito por algún programa. En discos
rígidos con controladora RLL se cuelga al intentar
funcionar.
El síntoma más visible, además de la falta de 2 k en la
memoria principal, es un mensaje que aparece en forma
aparentemente aleatoria al bootear, que dice "Your
computer is now stoned" o "Your PC is now Stoned!"
dependiendo de la versión del virus. Luego de esto la
computadora se cuelga. Algunas versiones agregan el texto
"LEGALISE MARIJUANA", que está presente en prácticamente
todas las versiones pero algunas lo muestran y otras no.
Estar "stoned" significa, en el uso popular de Estados
Unidos y otros países, estar bajo los efectos de la
marihuana. Por lo tanto, el mensaje diría que la
computadora está drogada y pide la legalización de la
marihuana. Es común encontrar virus con mensajes de tipo
propagandístico a favor o en contra de alguna cosa, este
caso no es nuevo, pensemos por ejemplo en el virus Brain
y su lucha en contra de la piratería de software. Además
de estos mensajes y los problemas de compatibilidad ya
nombrados, este virus no causa ningun daño intencional.
Se cree que el virus fue originado en Nueva Zelandia, ya
que de allí vinieron los primeros reportes de este virus,
en el año 1988. Ahora está muy difundido por todo el
mundo, incluso en Argentina es muy común verlo.

Funcionamiento

Al bootear la máquina el BIOS carga el boot de los
diskettes o la tabla de particiones en la dirección
07C0:0000 y le pasa el control. Luego, el código del boot
sector se encarga de cargar el resto del sistema
operativo. Cuando el disco está infectado por el Stoned,
el BIOS carga el virus, y le pasa el control.
Lo primero que hace es definir un stack propio para sus
rutinas. Luego guarda el viejo valor de la interrupción
13h (acceso a disco) e instala su propia rutina. Modifica
el contenido de la posición de memoria 0000:0413,
restándole 2, con lo cual el BIOS va a informar que hay 2
k menos de memoria RAM. Despues de esto se copia al tope
de la memoria, donde restó esos 2 k, y salta a ese
código. Obviamente, la rutina que reemplaza la
interrupción 13h está en esta parte alta de la memoria y
no donde se cargó el virus originalmente.
A continuación carga el boot original, que guardó en el
sector 11 de los diskettes o en el sector 7 de los discos
rígidos. Luego de hacerlo verifica que el byte ubicado en
0000:046C sea 7. Ese byte es la parte baja del timer de
la máquina, en realidad funcionaría como una rutina burda
de azar. Si es 7, escribe el mensaje "Your PC is now
Stoned!". Si no es así, y se cargó de diskette, procede a
verificar si el disco rígido está infectado. En el caso
de que se haya cargado de disco rígido salta al boot
original para que siga cargándose normalmente el sistema
operativo.
Para verificar el disco rígido, lee la tabla de
particiones y compara parte de su código con si mismo
para comprobar si está infectada. Si lo está sigue
cargando el sistema operativo, si no lo está procede a
infectar el disco. Para infectar, escribe la tabla de
particiones que leyó en el sector 7, track 0, cabeza 0, y
se copia a si mismo desde la memoria en la tabla de
particiones. Luego de esto, ya infectado el disco rígido,
continua ejecutando el boot sector original para que
termine de cargar el sistema operativo. Con esto
comprenderán por qué a pesar de que no esté el sistema
operativo en un diskette el virus puede contagiarse si
booteamos con un disco infectado. Con solo tener el virus
ya se contagia, porque lo hace antes de cargar el DOS y
con interrupciones del BIOS exclusivamente.
Una vez instalado el virus, quedan dos rutinas activas en
la memoria. Una es la que reemplaza la interrupción 13h y
la otra es la que se encarga de infectar los diskettes.
Es interesante notar que el disco rígido es infectado
sólo en el caso de que el virus se cargue de diskette y
en el momento de la carga, no después. Esto es lógico,
porque el disco rígido no es removible y si se infectó al
principio de la carga del DOS o ya estaba infectado,
luego no va a cambiarse el disco y va a seguir en el
mismo estado. Esto es interesante a la hora de
desinfectar un disco rígido, no es necesario sacar el
virus de memoria para hacerlo, ya que no va a intentar la
reinfección.
La rutina que reemplaza la interrupción 13h del BIOS
verifica si se pidió un servicio 2 o 3, o sea, si ah es 2
o 3, y que dl sea cero. Esto significa, si se pidió leer
o escribir sectores de disco (ah=2 o ah=3), y el drive es
el A (dl=0). Si las condiciones se dan, llama a la rutina
de infección y luego retoma la interrupción 13h original.
Si no se dan las condiciones, saltea la infección y sigue
con la interrupción.
La rutina de infección lee el boot sector del diskette,
haciendo un call al código de la interrupción 13h en el
BIOS, y verifica si está infectado previamente,
comparando su código con el que allí encuentre. Si no lo
está, escribe el boot sector recien leído en el sector 3,
track 0, cabeza 1, y luego escribe su propio código sobre
el boot original. Después de esto, vuelve a la
interrupción 13h original.
Vemos que este virus es de funcionamiento muy sencillo, y
con pocas instrucciones logra funcionar en forma eficaz.