VR7: Análisis de virus: virus benignos
Por Fernando Bonsembiante
En este numero analizamos dos casos de virus que pretenden ser benignos. ¿Es posible que en el futuro haya virus que queramos tener en nuestra máquina? Tambien veremos un virus que usa una técnica novedosa para no ser detectado.
Normalmente, la persona que hace un virus no piensa en hacerle un bien a nadie. La imagen que tenemos de un autor de virus es la de una persona que quiere hacer un mal, o por lo menos quiere tener una 'fama anónima' con su virus. En los últimos meses surgieron autores de virus que, si bien todavía no dan su dirección y nombre reales, están tratando de cambiar la imagen de los virus. Estos dos virus que analizamos podrían considerarse como 'utilitarios que utilizan técnicas y conceptos de virus informáticos'. Esto es un concepto totalmente nuevo en los virus conocidos hasta ahora, ninguno pretendió ser más benigno que no hacer nada. En la teoría, sin embargo, Fred Cohen, una de las primeras personas que hizo invesigación seria sobre virus en el mundo, ya venía hablando de usos benéficos de los virus. El ejemplo que daba era el de un programa de compresión auto-instalable y auto-propagante. En principio, la ventaja que tiene esto es que el usuario no tiene que preocuparse en instalar el programa, simplemente se instala en memoria cada vez que ejecutamos un programa 'infectado' en nuestro disco. El problema es obvio, no tenemos opción de no instalarlo, y fácilmente lo podemos llegar a encontrar en máquinas donde no pretendíamos usarlo, donde llegó solo, por su afan de auto-propagación.
Cruncher
Según parece, una persona que se llama (o se hace llamar) Masud Khafir, perteneciente al 'Trident Group', según consta en la documentación, leyó a Cohen y decidió poner sus ideas en práctica. Su virus, el Cruncher, es precisamente un compresor de ejecutables al mejor estilo Pklite o Lzexe. Si bien estos programas modifican los ejecutables, como hace un virus, requieren que el usuario se preocupe de instalarlos en cada programa que quiera comprimir, por lo tanto la diferencia fundamental es que no se auto propagan. Esto es lo que los diferencia de un virus, ya que tanto el Pklite como el Lzexe como otros programas de su tipo agregan su código al principio del programa, al igual que un virus. Este código es el que se ejecuta en primer lugar, y luego el programa 'huesped'. Como necesitan que el usuario los instale, no pueden considerarse virus de ninguna manera.
Cruncher funciona como éstos, pero con la diferencia fundamental de que no necesita que el usuario lo instale. Cuando se ejecuta el primer programa comprimido con Cruncher, éste queda en memoria e 'infecta' cada programa que no haya sido previamente comprimido con él. De esta forma, sin que el usuario ni siquiera lo note, va a tener cada vez más lugar libre en el disco rígido, pero sin perder datos. En principio, parece ser el primer virus que reduce la longitud de sus huéspedes en lugar de aumentarla.
De todas formas, si bien funciona por lo general sin problemas, si se comprime un ejecutable que contenga overlays o chequee su propia integridad, va a causar problemas. Como no tenemos un control directo sobre los programas que va a comprimir o no, no hay forma de prevenir fácilmente estas incompatibilidades. Cruncher hace un pequeño esfuerzo para no causar problemas evitando tocar archivos que comiencen con determinados pares de letras, por ejemplo CO (command.com) SC (scan.exe) CL (clean.exe) etcétera. En definitiva, si no fuera que un virus es algo intrínsecamente incontrolable, sería un caso de 'virus benigno'.
King of Hearts
El virus King of Hearts, descubierto a mediados de agosto de 1993, es otro caso de un virus con supuestas buenas intenciones. En este caso, la utilidad es la de encriptar discos. Se trata de un virus de boot sector o tabla de particiones. Cuando infecta un nuevo disco, tanto un rígido como un diskette, le pide al usuario un password con el cual encriptará el disco. Los siguientes accesos al disco se podrán hacer sólamente con el virus cargado en memoria y con el password correcto. Existen programas comerciales y shareware que proveen este tipo de servicio, pero éste es el primero en funcionar como un virus, ya que cuando está en memoria va a infectar todo diskette al que se acceda con él activo, o todo disco rígido si booteamos desde diskette.
En principio, es un virus que respeta al usuario, ya que antes de infectar un disco rígido va a pedir permiso para hacerlo. Así mismo, permite que, si pulsamos las teclas control-alt-H, se desinstale del disco rígido. En el caso de los diskettes, no permite la desinstalación, pero con control-alt-O podemos conectar o desconectar la rutina de infección de diskettes, y con control-alt-K podemos cambiar el password del diskette.
Funcionamiento
El virus viene en un programa de 32000 bytes que lo instala por primera vez en nuestro disco. Una vez que se ejecuta este instalador, el virus estará activo en memoria e infectará nuestro disco. Una vez que se instale y encripte el disco, la única forma de leerlo será con el virus activo en memoria. Este actúa como un filtro de toda la información que se lea o escriba al disco, la cual parecerá normal para nuestros programas de aplicación, pero será totalmente ilegible si se accede directamente sin pasar por el virus.
En el caso de los diskettes de 1.2 megas, el virus ocupa el sector de booteo, y marca ocho sectores en la FAT como malos. Luego copia el sector de booteo original en uno de esos sectores marcados como malos, y pone su propio código en los siete restantes. En los discos rígidos copia la tabla de particiones al cilindro 0, cabeza 0, sector 9, una parte que generalmente no se usa. El resto del código del virus va a parar a los sectores 2 al 8. Cuando se bootea un disco infectado con King of Hearts, éste reserva 9K de la memoria principal de la máquina para su propio uso, bajando la cantidad de memoria libre que reporta el BIOS. En ese lugar se copia luego. El virus funciona tomando la interrupción 13h, que maneja todo el acceso a disco tanto del DOS como del BIOS. Todo acceso que se haga al disco pasando por ahí será encriptado o desencriptado según sea necesario. En el caso de que usemos algun utilitario que acceda directamente al disco sin usar el BIOS o el DOS, vamos a ver basura en lugar de la información. Si se intenta escribir en el disco sin el virus en memoria o con este tipo de utilitarios, se corre serio peligro de destruir la información contenida en él, ya que se encripta todo, hasta los directorios. Otros programas que usen el BIOS pero que usen técnicas como la llamada 'tunneling' para evitar que sean interceptados por otras rutinas, y que por lo tanto usan el BIOS en forma directa, tambien van a ocasionar serios problemas.
El virus también toma la interrupción 09h, la de manejo del teclado, para detectar sus teclas de activación o desactivación. Cuando se le ordena desinstalarse, va a restaurar el manejo de la interrupción 13h y 09h al BIOS, y pone nuevamente en su lugar la tabla de particiones del disco. Los otros sectores del virus en el disco no son modificados.
En el caso de los diskettes, no hay forma de desinstalarlo, y si se quiere desinfectar, el antivirus deberá poder pedirle la clave al usuario.
Este virus parece estar basado en uno escrito por Mark Ludwig, y publicado en su libro 'The little black book of computer viruses' donde describe un virus de sector de booteo que funciona en forma similar, pero que no incluye ni las rutinas de desinstalación ni las de encripción.
Exebug II
El virus Exebug II es un virus de boot sector que en cualquier día de marzo se activa e intenta destruir el disco rígido. Es un virus stealth, por lo tanto es imposible de detectar en el disco cuando éste está activo en memoria. Ocupa sólo 512 bytes, o sea que cabe en un sector de booteo más otro sector en el disco. Es un virus pequeño pero no por eso menos destructivo. Contiene dos rutinas muy inteligentes de destrucción, una de ellas es similar a la del Michelángelo, pero con el agregado de que en vez de destruir 256 cilindros, destruye 1024. Esta es la rutina que se activa cada día de marzo. La otra rutina de destrución se basa en un truco no documentado del DOS, muy poco conocido. Este truco en realidad consta de dos partes. En DOS existe un modo de compatibilidad con CP/M, que utiliza los vectores de interrupción 30h y 31h como un modo de entrada a algunas funciones del DOS. Entre las funciones que podemos acceder con este método existe una, tambien heredada del CP/M, que permite borrar de un solo golpe la totalidad de las entradas de directorio del drive actual. Esta frase, 'totalidad de entradas de directorio', significa que no importa que sean archivos de sistema, read only, o a su vez subdirectorios, simplemente borra todo lo que encuentra. Si se ejecuta esta función desde el directorio raíz del disco rígido, se borrará absolutamente todo el contenido del mismo. Lo interesante es cuándo se activa esta rutina. Pero para ver esto, debemos ver dos modos más de funcionamiento del virus.
Cada vez que se escribe un sector que empieze con M (algunas variantes buscan MZ), el virus asume que se trata de un archivo .EXE. En ese caso, verifica si el sector está en el disco B: o en algun cilindro entre 512 y 1023. Si es así, sobreescribe el sector con un trozo de código del virus. Este código es justamente el mismo que destruye los 1024 cilindros del disco, el primero que vimos. Esto convierte al programa en un troyano que destruirá el disco apenas sea ejecutado. En el caso de el supuesto .EXE que se escriba esté en el disco A:, y en el sector 3, en lugar de escribir el código destructivo solamente, escribe todo el código del virus en ese sector, pero con una instrucción JMP distinta en el comienzo. Esto transforma al programa en un 'instalador' o dropper del virus. Cuando se ejecute el programa, éste va a instalar el virus en la tabla de particiones del disco rígido. Luego de hacerlo, va a ejecutar la rutina que ya describimos que utiliza las funciones heredadas de CP/M. O sea que no solo obtenemos un disco infectado, sino que también lo borra por completo.
Lo más interesante de este virus es el método que utiliza para evitar ser detectado. Como es un virus stealth, lo normal para desinfectarlo sería primero bootear desde un diskette limpio, y luego utilizar un antivirus para restaurar la tabla de particiones original. Pero aquí es donde este virus se muestra como realmente novedoso. Apenas se ejecuta el virus, cambia la CMOS para que parezca que no tenemos una diskettera A: instalada. De esta manera, cada vez que se bootee, el BIOS va a pensar que no hay diskettera, y va a intentar cargar el sistema operativo del disco rígido. Como lo primero que se carga es el virus, éste va a verificar si hay un diskette en el drive A:, luego de activarlo nuevamente, y si es así va a continuar booteando de diskette, pero con el virus ya instalado en memoria. Para cualquier persona que esté viendo el proceso de booteo, le va a parecer que no hubo nada raro, y va a pensar que cargó un sistema operativo libre de virus, cuando en realidad el virus está activo en memoria. Para evitar ser detectado, cada vez que se intente acceder a la diskettera A: va a restaurar la CMOS para que el BIOS piense que ésta existe, y cuando se deje de acceder va a volver a desactivarla. Entonces, aunque apagemos la máquina y la volvamos a prender, el virus sigue teniendo control de la situación. La única forma de sacarnos de encima a este virus es modificando la CMOS con la utilidad de setup del BIOS, y luego cargando un sistema operativo limpio. En el caso de que no se pueda acceder al setup del BIOS sin usar un programa externo, debemos desconectar la batería de la CMOS para borrar el setup y evitar que se cargue el virus. En algunas máquinas, como ser algunas PS/2, aún esto es imposible, por lo que se deberán tomar medidas más drásticas como desconectar el disco rígido. Este virus es realmente novedoso, y utiliza una técnica que nadie, ni los autores de virus, ni los de anti-virus habían pensado hasta ahora para evitar ser detectado y mantener el control de la máquina aún despues de ser apagada.