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 caniglia@mate.edu.ar o en leandro@ubik.satlink.net 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 
ubik@ubik.to
==============================
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.