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.