VR4: Analisis de Virus
Por Fernando Bonsembiante
En este número analizamos un virus argentino nuevo, que nos acercó un lector de Bahía Blanca.
Recibimos en nuestra redacción la siguiente carta de un lector de Bahía Blanca:
A fin de colaborar con su publicación les facilito un disco conteniendo un virus, segun entiendo bastante nuevo. Lo detecté en el colegio al cual concurro la noche del 20/4. A toda prisa desarrollé una vacuna beta para detectarlo (y en la medida de lo posible erradicarlo) y realicé un rápido análisis del mismo, donde saqué las siguientes conclusiones:
- Se trata de un virus de boot sector.
- Al igual que otros virus (Michelangelo, Anti Tel, etc.) disminuye la cantidad de memoria instalada reportada por el BIOS en 2Kb, por lo cual su presencia se delata al ejecutar un simple CHKDSK o MEM.
- Alamcena la copia del Boot Sector siempre en el sector físico ubicado en el cilindro 0, lado 1, sector 3. Esto sin considerar el tipo de medio en el cual se encuentre (es decir, no considera si se trata de un disco de 360k, 1.2M, etcétera) Esto causa que en discos de poca capacidad sobreescriba el cluster 2 o 3, o en discos de alta capacidad escriba sobre uno de los primeros sectores del directorio raíz.
- Seleccioné un string de identificación con cierto criterio, pero no tuve todavía tiempo de desensamblarlo y buscar un string mejor, (aún así intuyo que seleccioné una parte de la rutina de control de la interrupción 10h o 21h, pues viene luego de una secuencia de PUSH AX, PUSH BX, PUSH CX, etc., lo cual implica una rutina que no modifique registros) El string es el siguiente:
1E 06 16 56 80 FC 02 72 62 80 FC 03 77 5D 80 FA 00 75
El mismo es utilizado en mi vacuna para detectar el virus.
- Me llama la atención el tiempo que tarda en cargar el sistema desde un disco infectado y la presencia de sectores defectuosos falsos (creados por el virus). Todavía no pude determinar la causa de esos factores.
- Hasta donde pude determinar, el virus no afecta los discos de 3.5, al menos no como drive B.
Me tomé la libertad de asignarle un nombre al virus en cuestión, el cual tiene un elevado nivel de integración (estimo que su longitud no supera los 512 bytes). De no haber sido bautizado previamente, sería mi intención denominarlo CAMOUFLAGE II. Al día de la fecha, aquí en Bahía Blanca circula la versión 100 del Scan/Clean, quien no pudo detectar el presente virus, ni sus versiones 91 o 97.
De no poder distribuirse la vacuna que realicé, creo que sería conveniente publicar el string y las instrucciones para añadirlo al SCAN a fin de que no se propague. Aquí en la ciudad se transformó en epidemia.
Alejandro G. Stankevicius
Inmediatamente procedimos a desensamblar el virus y a analizarlo. El resultado de nuestro análisis fue ligeramente distinto al de Alejandro, pero básicamente igual en los puntos fundamentales.
Este virus infecta el boot sector de los diskettes ubicados en el drive A, independientemente de su formato, y del disco rígido infecta la tabla de particiones. En los discos rígidos pone la tabla de particiones original en el sector 7, cilindro 0, cabeza 0. Este lugar es muy usado por los virus ya que normalmente no se guardan datos en ese lugar. En los diskettes pone el boot original en el sector 3, cilindro 0, cabeza 1. En los diskettes causa el problema de sobreescribir una parte de la información del disco, o el directorio raíz. Cuando el virus se carga en memoria reduce en dos la cantidad de memoria instalada que reporta el BIOS, como hacen la mayoría de los virus de boot, pero éste tiene una particularidad. En vez de restarle dos al valor ya existente en ese lugar, pone el valor 638 decimal, con lo cual indica que hay 638k de memoria instalada. El problema surge si hay menos de 640k de memoria real, en ese caso indicaría que hay más memoria de la que realmente hay, causando problemas. Eso no suele suceder con las máquinas de ahora, que todas tienen por lo menos 640k de memoria, pero en máquinas más antiguas seguramente cause algun problema. Como al copiarse a memoria alta tampoco verifica si hay o no 640k de memoria, seguramente el virus se cuelgue al intentar ejecutarse.
La causa de que el virus tarde tanto en cargar el sistema se debe a que cada vez que bootea incrementa en uno un contador de veces que se booteó. Para hacerlo debe escribir el virus en el boot sector o en la tabla de particiones cada vez que bootea, por eso se hace más lento el proceso. Cuando dicho contador llega a 65535, o sea a 0FFFFh, o sea que booteo esa cantidad de veces con el virus, cada vez que se llame a la interrupción 13h se escribirá en la pantalla el mensaje 'LAVOT NO ENSEÑA'. Esto nos hace sospechar que el virus fue creado como venganza o protesta contra un profesor. El mensaje está encriptado de una forma muy básica en el código del virus y no se ve a simple vista.
Para infectar, en el caso de que haya booteado de diskette, simplemente se copia en la tabla de particiones en el momento de bootear, si ésta no está previamente infectada. Cuando el virus está en memoria, cada vez que se acceda a la disketera A para lectura o escritura va a infectar el diskette que contenga a menos que ya esté previamente infectado. Cada vez que infecta un nuevo disco, rígido o floppy, pone en cero el contador de veces que el mismo fue booteado. Sólamente lo incrementa cuando se bootea de un diskette infectado.
El string elegido por Alejandro está justamente en la rutina que reemplaza la interrupción 13h, de servicios de disco del Bios (la única tomada por el virus, por otra parte). Un string mejor y mas dificil de que cause falsas alarmas o identificaciones incorrectas es
2E C7 06 04 00 00 00 33 DB B8 01 03 B9 01 00 33 D2 9C 2E
que es justamente parte de la rutina que infecta los diskettes. Por lo general es adecuado elegir como string de identificación parte de las rutinas de infección, que son segmentos mucho más críticos del código y difíciles de cambiar.
Para agregar este string en el Scan debemos usar un archivo de definición de virus externo. Este archivo se crea con un editor de texto cualquiera que permita guardar el archivo en ASCII puro, y tiene la siguiente forma:
#Camouflage II
"2E C7 06 04 00 00 00 33 DB B8 01 03 B9 01 00 33 D2 9C 2E" Camouflage_II
Este archivo se guarda con el nombre, por ejemplo, ext.vir y se llama al Scan con los parámetros, por ejemplo
Scan C: /EXT c:\ext.vir
Con esto se le indica al Scan que busque tambien los virus definidos en ext.vir. Pueden usarse conjuntamente con esta opción cualquier otra que se use normalmente.