Análisis de virus: PHX

Es raro que un virus argentino y nuevo se convierta rápidamente en
epidemia. El Willistrover III lo logró, a pesar de no tener grandes
sofisticaciones a nivel de infección u ocultamiento.
Este virus, llamado Willistrover III por el Scan y PHX por el F-Prot,
está causando estragos en todo el país. Se lo encontró en muchos lugares
de Buenos Aires, Rosario, y otras ciudades, mientras que en Posadas se
encuentran cantidades de una variante del mismo que no es detectada por
el Scan pero si por el F-Prot. No se sabe por qué este virus está tan
difundido, y por lugares tan lejanos como los nombrados. Se lo encontró
en instituciones oficiales y en diskettes de shareware, lo que no se
sabe es que vía usó el autor para distribuirlo, o si su éxito fue casual
o planificado. Por algunas características del virus podemos suponer que
al autor le interesaba que se disperse lo más posible. El virus está
buscando algo en especial para iniciar sus rutinas de daño, está
buscando un programa o determinada tarjeta instalada en la PC, algo que
todavía no podemos determinar con total seguridad. Quizá algún lector de
Virus Report pueda descubrir de qué se trata.
Nos hemos comunicado con el autor del virus, a través de un BBS, pero no
nos dio casi ningún dato sobre qué es lo que busca, ni sobre algunos
interrogantes que planteamos en esta nota. Lo único que nos dijo es que
él le puso Tracker al virus (obviamente porque está buscando algo,
tracker en inglés significa rastreador). Esta persona se hace llamar
Armagedon, y es argentino (no confundir con el autor de virus del mismo
nombre de origen griego). Dice que hizo el virus para vengarse de una
persona que le jugó una mala pasada con un programa. El virus está
buscando el programa y la máquina de su enemigo y va a corromper
lentamente sus datos cuando los encuentre. Infecta tanto programas .exe
como .com. El daño que produce, bajo las condiciones de que haya
encontrado el programa que busca, es el de cambiar el bit más alto del
último byte grabado en cada operación de disco. El cambio consiste en
invertir su valor, si es 1 pasa a ser 0, y si es 0 pasa a ser 1. Esta
rutina es muy peligrosa, ya que causa daño muy lentamente, y cuando el
usuario nota algo extraño ya es demasiado tarde. Se activa cuando se
cumple alguna de las siguientes condiciones:
1) Un string del environment termina con PHX.
2) En algún momento se ejecuta un determinado programa reconocido por el
virus.
3) El port 3E4h está activo. (puede tratarse de alguna placa especial en
la PC)
Si se cumple alguna de las tres condiciones, el virus chequea que se
haya instalado por lo menos 128 veces en la misma máquina. Esto lo
verifica mediante un contador que pone en la CMOS, ubicado en un lugar
que normalmente no se usa. Si se cumplen esas condiciones, o sea, una de
las tres que mencionamos antes, y que el contador tenga ese valor,
empieza a corromper lentamente los datos escritos. Como cada vez que se
instala en memoria el virus incrementa el contador, y la rutina funciona
cuando éste está entre 128 y 255 (luego va a pasar a 0 nuevamente), el
proceso de destrucción es extremadamente lento.
Otro dato interesante es que el virus tiene un contador interno de
generaciones, si éste es 0 es el original, si tiene el valor 1 es la
primera generación, y así sucesivamente. Los ejemplares que estudiamos
tienen más de 11 generaciones.
También cabe destacar que el virus funciona solamente en 286 y
superiores, ya que usa instrucciones sólo válidas en esos procesadores.
Funcionamiento
Lo primero que hace el virus es chequear si está presente en memoria,
para ver si debe reinstalarse o no. En el caso de los .com tiene un bug
que hace que se reinstale cada vez, en el caso de los .exe no sucede. En
el caso de que esté ya instalado en memoria, reconstruye el principio
del programa huésped y lo ejecuta. Para instalarse en memoria, tanto si
es un .exe o un .com, llama a dos rutinas. Una de ellas mueve el código
al final de la memoria, y la otra instala la nueva interrupción 21h.
La rutina que mueve el virus al final de la memoria primero libera los
últimos 41h párrafos de memoria y luego le asigna 40h de ellos al virus,
ya que el DOS necesita uno como header del bloque de memoria. Toma ese
header y le pone el valor 0800 en el offset 1, indicando que esa memoria
pertenece al IBMDOS.COM, o sea, que es parte del sistema operativo. En
el offset 08 del header pone SP como nombre del programa dueño de la
porción de memoria. Luego copia el virus a ese bloque. De esta forma
pretende ocultarse de algún programa que examine la memoria, aunque
usando algunos de ellos, como el Manifest de Quarterdeck se puede ver
claramente una porción de memoria extraña. Usando el MEM del DOS se ve
como una porción de memoria de datos perteneciente al IBMDOS. La rutina
que instala la interrupción 21h nueva busca el valor actual del vector
de la interrupción 21h y modifica el propio código del virus para hacer
apuntar un jump al handler de la interrupción 21h del DOS. Luego instala
su propio handler de la interrupción 21h y aumenta en uno el valor de su
contador en la CMOS. De esta forma queda instalado en memoria, y tomando
la interrupción 21h.
Interrupción 21h
El handler de esta interrupción instalado por el virus verifica si el
servicio pedido es el 04Bh (ejecutar programa), 03D02h (abrir archivo
para lectura y escritura), 0B974h (chequeo de la presencia del virus en
memoria) o 040h (escritura en archivo o en dispositivo). Si no es así,
vuelve a la vieja interrupción 21h para procesar el pedido normalmente.
El servicio 0B974h instalado por el virus simplemente devuelve el valor
2808h en AX, con lo que dice que el virus está en memoria. Ese valor
parece tener algún significado especial, ya que al final del virus
aparecen los bytes 28h 08h 93h, parece ser una fecha, pero escrita en
hexadecimal e interpretada como si fuesen números decimales. Esos bytes
son usados como identificador para el virus. En realidad el virus fue
descubierto antes de esta fecha, así que no es la fecha de creación del
virus. Si a algún lector se le ocurre qué puede significar esa fecha,
que nos lo diga.
Si la función pedida es 04Bh, ejecutar un programa, el virus pide la
dirección del Program Segment Prefix de quien pidió la función. Del PSP
saca la dirección del environment local del programa, y en éste
environment busca un string que termine con PHX. Si lo encuentra, pone
en 1 el flag que indica que encontró el programa que buscaba. Para
empezar la rutina de infección reemplaza la interrupción 24h del DOS
(error crítico) para que devuelva siempre 03. Luego de esto verifica si
en el disco de donde se está leyendo el programa a ejecutar hay por lo
menos dos clusters disponibles. Si no es así, sigue con la interrupción
21h normal luego de recuperar el vector original de la interrupción 24h.
Antes de salir verifica si el port 3E4h no devuelve el valor 0FFh. Si
devuelve otro valor pone en 1 el flag de que encontró lo que buscaba. Si
hay lugar para el virus, procede a infectar el archivo. Lo primero que
hace es modificar el nombre del archivo de una forma especial (que no
vamos a decir cómo es). Esto tiene una razón de ser, sirve para
confundir al Vsafe, el residente del Microsoft Anti Virus, que no
detecta nada raro de esta forma. Luego guarda los atributos del archivo,
los modifica para poder infectar incluso archivos read only, poniendo
como atributo solamente 'archivo'. Luego abre el archivo con acceso
lectura y escritura, y obtiene y guarda la fecha y hora del archivo. Lee
los primeros 1Ch bytes (28 bytes), y verifica si se trata de un .exe,
controlando que empiezen con MZ. En el caso de que sea un .com, modifica
el código del virus guardando los tres primeros bytes del programa a
infectar en las instrucciones que luego se encargarán de restituirlos.
Luego lee el final del archivo para verificar si termina con los bytes
'28 08 93', si es así, considera el programa ya infectado y vuelve a la
interrupción 21h original. En el caso de que no esté infectado, verifica
si el programa .com tiene lugar suficiente como para albergar el virus.
Recordemos que el tamaño máximo de un .com es 64k, y si el virus mas el
programa fueran mayores a eso el programa infectado dejaría de
funcionar. En el caso de no haber lugar, vuelve. Si todo es correcto,
reemplaza los tres primeros bytes del archivo por un jump al final del
archivo, que es donde se alojará el virus. En ese momento incrementa el
contador interno de archivos infectados o generaciones, y se copia al
final del archivo. Para terminar la infección, escribe en el principio
del archivo las modificaciones que ya mencionamos. Vuelve a poner en el
archivo los viejos atributos y la fecha y hora que tenían, recupera el
nombre original del archivo, y se va de la forma que ya explicamos.
En el caso de que el programa sea un .exe, verifica si está previamente
infectado, buscando '28 08 93' en el final del archivo. Busca el
comienzo del programa en el .exe y modifica su código para que se
ejecute el programa huésped a continuación del virus. Luego compara si
el tamaño del exe cuando está en memoria es el mismo que el tamaño
efectivo del archivo. Si no es así, asume que tiene overlays y no lo
infecta. Si decide que puede infectarlo, modifica el header del .exe
para que apunte al comienzo del virus, se escribe a si mismo al final
del .exe, modifica el header del archivo en disco y se va. En el caso de
que la función sea la 40h, escribir archivo, verifica si el flag de
empezar a destruir está en 1. Si no, vuelve a la interrupción 21h
normal. A continuación pregunta si AX es igual a 1, si es así, se va. El
problema es que si AH es igual a 40h, AX no puede ser nunca 1.
Probablemente quiso verificar con BX el número de handle, si es 1 se
trata de la consola y no tiene sentido hacer el daño sobre la consola.
Por lo tanto, debe ser un bug del virus. Si todo está bien, verifica si
el contador de la CMOS es menor a 80h. Si es así, vuelve. Si no, empieza
su daño. Para eso toma el final del buffer que se quiere escribir en el
archivo usando la función 40h del DOS y le cambia el bit 7 del último
byte. Con esto hace un daño muy sutil pero efectivo. Después de hacerlo
vuelve a la interrupción 21h original.
En el nuevo handler de la función 3D02h, abrir archivo para lectura y
escritura, lo que hace es comparar el código que llamó a esa función con
tres pedazos de código que tiene almacenados. Si no los reconoce, no
hace nada y vuelve a la interrupción 21h original. Si los reconoce, pone
en 1 el flag que indica que hay que empezar a hacer daño, y vuelve.
Conclusiones
Este virus es especial porque está buscando una máquina o programa en
especial para iniciar su daño. Podríamos decir que es un virus vengativo
o dirigido especialmente a un objetivo determinado. De todas formas, el
virus afectó a muchísima gente, aunque sin hacer daño a la mayoría. Fue
una molestia para mucha gente que no tenía nada que ver con el problema
que tuvo el autor del virus y que ocasionó que decidiera hacerlo.
Leandro Caniglia es Doctor en Ciencias Matemáticas, Profesor Adjunto en
FCEN (UBA) e Investigador Asistente del CONICET. Puede ser contactado en
internet en [email protected] o en [email protected] y en
FidoNet 4:901/303.4.
Fernando Bonsembiante es jefe de redacción de Virus Report y está
estudiando los virus informáticos desde hace varios años. También es
miembro de la comisión directiva del Círculo Argentino de Ciencia
Ficción, (CACyF) y participa como columnista de varias revistas sobre
informática. Puede ser contactado por Fido en 4:901/303 o en Internet en
[email protected]
==============================
Estos son los tres trozos de código que busca el virus para iniciar su
ataque, junto con el string del environment terminado en PHX y el port
3E4H activo. Si quieren buscar si tienen ese programa, pueden agregar
estos strings a un anti virus y pasarlo por sus discos. Si algún lector
llega a alguna conclusión interesante con esto, que nos avise.
73 05 BA B9 02 EB E0 A3 C0 01 B4 3F 8B 1E C0 01
72 C7 A3 05 01 8B D8 B8 00 3F B9 00 01 BA 48 C8
72 C1 A3 05 01 8B D8 B8 00 3F B9 00 01 BA 1A CA
La historia del virus PHX y su autor Armagedon
Por Fernando Bonsembiante
Dicen que la venganza es un plato que se come frío. El mayor error de
Armagedón fue, quizá, no hacerle caso al refrán. Oculto tras ese nombre
bíblico encontramos un hacker, también pirata informático, y sobre todo,
excelente programador. Hace unos años desarrolló un programita que
servía para agregarle una introducción a los juegos pirateados que
vendía en su local de Rosario. Cuando una persona quería jugar veía una
pantalla (intro, en la jerga) con gráficos animados que decía donde
conseguir más juegos como ese. Si el juego era a su vez pirateado por
otra persona, no podría sacarle esta propaganda, y los siguientes
usuarios verían la publicidad de su negocio. Era imposible venderlo sin
anunciar quien era el pirata original. El programa era usado solamente
por Armagedón y un pirata amigo, también en Rosario, representante de
otro, en Buenos Aires. El pirata porteño consiguió una copia del
programa de Armagedón, con la promesa de no copiárselo a nadie. Pero,
pirata al fin, pensó que el programa era mucho más valioso que la
amistad y empezó a venderlo. Probó que era realmente valioso: pudo
comprarse una moto con el fruto del esfuerzo de Armagedón, y, por
supuesto, jamás se le ocurrió hacer participar en las ganancias al
autor. Cuando éste se enteró de lo que estaba pasando, montó en cólera.
Jamás había podido comprarse una moto, no tenía mucho dinero, y este
pirata había mejorado su nivel de vida fácilmente gracias a su trabajo.
Trató de solucionar el problema de manera legal. Fue al registro de la
propiedad intelectual, pero el trámite que había que hacer lo desalentó.
Un abogado amigo le dijo que ni se molestara, pues, aún registrándolo,
el pirata porteño iba a salirse con la suya. Como para empeorar la cosa,
tenía amigos en lugares importantes, en caso de juicio no le pasaría
nada. O por lo menos eso era lo que Armagedón creyó. Desesperanzado de
encontrar una solución legal, la venganza le pareció la mejor salida.
Junto con unos amigos planearon hacer un virus para que el pirata pagara
sus culpas, destruyéndole la información de sus computadoras. Aunque
nunca antes había hecho un virus, Armagedón era el único con los
conocimientos suficientes como para hacerlo. Sus 'intros' eran una buena
preparación, ya que se pegaban a otro programa como si fuesen un virus,
aunque no se reproducían solas como éstos, ni afectaban el buen
funcionamiento de las computadoras. La intención era no hacer ningun
daño hasta encontrar el programa pirateado, sea la copia del pirata
vendedor o de alguno de sus clientes. Su instrumento de venganza digital
iba a copiarse en todas las máquinas que pudiese, escondido, sin
molestar a la gente inocente, hasta que la máquina del pirata quedase
infectada. En esa computadora empezaría a destruir lentamente la
información del disco rígido hasta que quedara inutilizable. Bautizó a
su creación 'tracker', buscador en inglés.
El nombre Armagedón se lo recomendó uno de sus amigos. Sonaba lindo y no
tenía nada que ver con su apodo 'real'. La idea era despistar a los que
lo conocían como hacker para que no supieran que él había hecho el
virus. El hacker y su pandilla tuvieron todo el cuidado posible para
hacer el virus inocuo para las máquinas que no tenían nada que ver con
esta venganza. Incluso, antes de liberarlo, lo probaron en todas las
computadoras que pudieron para asegurarse de que era realmente
inofensivo.
El día del padre de 1993 el virus quedó oficialmente terminado.
La misma semana llegó al negocio de Armagedón un pirata muy conocido de
Buenos Aires. Era la persona ideal para empezar la distribución del
virus. Armagedón le pasó el programa Vista Pro infectado con su
creación, por supuesto, sin decirle que el diskette llevaba un 'colado'.
Para esa época, uno de los amigos, justamente el que había sugerido el
nombre Armagedón, tenía que viajar a Uruguay, a visitar a otros piratas
por negocios. Como los uruguayos también trabajaban con sus enemigos de
Buenos Aires, eran candidatos a la infección. El virus que fue para
Uruguay era ligeramente distinto al que fue para Buenos Aires.
Imagínense la sorpresa de Armagedón cuando el pirata de Buenos Aires
volvió a Rosario a los pocos días de la salida de su amigo a Uruguay,
con los diskettes infectados con la versión dos del virus en lugar de la
que se había llevado. Cuando su amigo llegó, el chiste fue: --
-- En qué te volviste?
-- En micro.
-- No, eso pasó de moda. La próxima vez volvete en virus que es mucho
más rápido.
El virus demostró ser mucho más infeccioso que lo que habían supuesto.
Armagedón comenzó a preocuparse, porque descubrió que ambas versiones
tenían problemas que se le habían pasado inadvertidos. Suponer que iba a
ser inocuo fue otro de sus errores. Estaba completamente fuera de
control, multiplicándose en forma exponencial. Evidentemente habían
elegido demasiado bien a los distribuidores de software pirata. La culpa
lo llevó a desarrollar varios programas anti-virus para detectarlo y
eliminarlo. Incluso, como para empeorar la cosa, algunos de sus amigos
ya estaban infectados. La gente ya empezaba a darse cuenta de quien era
Armagedón en realidad. Algunos lo acusaban simplemente para
desprestigiarlo y otros habían hecho una tarea detectivesca que apuntaba
hacia él.
Mientras tanto, el virus había llegado a las organizaciones anti-virus
internacionales. Patricia Hoffman, norteamericana autora de un archivo
de información sobre virus, lo listaba con el nombre Willistrover III y
decía que su origen era Bolivia. Al hacker argentino que se lo pasó (su
alias era Truchex, y no conocía el origen real del virus) se le ocurrió
mentir para comprobar si hacía una mínima verificación de la
información. El islandés Fridrik Skulason, autor del anti virus F-Prot,
lo bautizó PHX por un texto que buscaba en las máquinas para identificar
a su víctima.
De todas formas, el virus pudo cumplir, aunque sea parcialmente, su
objetivo. El pirata había recibido muchas quejas de que los programas
que vendía no andaban, debido a la corrupción de datos que causaba.
Armagedón se enteró de esto, pero su alegría por la venganza quedó
empa±ada por la infección indiscriminada que había causado. El virus
apareció en lugares tan distantes como Uruguay, Paraguay, Rosario,
además de Buenos Aires. Había infectado máquinas hasta en la sede de
importantes organismos oficiales (los que, por lo menos teóricamente, no
deberían usar software pirata). Trató de solucionar el problema enviando
todas las variantes del virus a los fabricantes de anti-virus y
repartiendo gratuitamente su cura específica contra el PHX. Incluso
montó una pequeña campaña de vacunación y prevención en Rosario.
Ahora no quiere saber nada de hacer otro virus, ya sabe que es algo que
se sale de control demasiado fácil. Los errores mínimos que contenía lo
hacían hasta peligroso en ciertas computadoras inocentes. Actualmente
Armagedón trabaja en una empresa seria y respetable, y dejó de lado toda
su carrera como autor de virus y hacker.