Copy Link
Add to Bookmark
Report

VR1: Analisis de virus

eZine's profile picture
Published in 
virus report
 · 5 Feb 2022

Michelángelo, uno de los virus más famosos de los últimos tiempos.

En 1992 los virus tuvieron una gran publicidad gracias a que se activaba el Michelangelo el día 6 de marzo. Probablemente la causa de tanto interes repentino de la prensa fue que era muy destructivo y estaba diseminado en gran cantidad de máquinas. El día fatídico se reportaron muchos casos de información perdida, pero mucha más gente ni siquiera prendió su máquina por miedo a lo que pudiera pasar. Las pérdidas que originó este virus, por lo tanto, no solo deben contarse por la información destruida, sino por el lucro cesante causado por tantas máquinas apagadas. Quien sabe que hubiera sido peor, si nadie hubiese estado advertido del virus quizá hubiesen habido muchas más pérdidas de información, pero de esta forma se perdió un día de trabajo para mucha gente. Seguramente si la gente supiera más sobre virus no habría estos problemas. Se dijeron muchas cosas absurdas de este virus, por ejemplo que se contagiaba por modem, cosa ridícula, ya que la única forma de contagiar un virus es en el momento de ejecución de un programa (o en el booteo de un disco, que tambien es la ejecución de un programa). Para transmitir un virus por modem hay que transmitir un programa infectado y el que lo recibe debe ejecutarlo. En el caso de un virus de boot esto es mucho más complicado ya que se debería enviar una imagen de disco y reconstruirla del otro lado, y bootear con ese disco.

Michelángelo es un virus de boot sector, que lleva ese nombre porque se activa en la fecha de cumpleaños del genial artista italiano. Se cree que se originó en Suecia o en Holanda, o por lo menos fue aislado allí. Está basado en el virus Stoned, pero a diferencia de este último, que es inofensivo, Michelángelo es altamente destructivo cuando se activa. El virus queda residente en memoria cuando se intenta bootear con un diskette infectado, y aunque el disco no contenga el sistema operativo puede copiarse a un disco rígido. Se instala residente dentro de los 640k de memoria del DOS, y ocupa 2k. El DOS va a reportar 2k menos de memoria disponible si el virus está activo. El virus se instala en el boot de los diskettes, y copia el boot original en uno de los sectores finales del directorio. En los discos rígidos se instala en la tabla de particiones y copia la tabla original en una parte del disco que normalmente no se usa. Cuando el virus está activo en memoria infecta cada disco al que se acceda para lectura o escritura. El día 6 de marzo (de cualquier año) se activa su rutina de destrucción. Esta rutina toma un área de memoria y copia su contenido secuencialmente en el disco rígido, con lo cual se pierde toda la información, e incluso el DOS no reconoce más el disco ya que sobreescribe la tabla de particiones. La mejor forma de detectarlo es usando el Scan, con la precaución de que sea la versión más nueva que se pueda encontrar. Al momento de escribir esto, la última versión es la 100. Para limpiarlo podemos usar el Clean o el Mdisk.


Ping Pong, un virus tradicional

El virus Ping Pong es el primero en hacer explosión en Argentina. Fue descubierto en marzo de 1988, y en poco tiempo estuvo en nuestro país, donde se convirtió rápidamente en epidemia. La falta de conocimiento sobre los virus lo ayudó a que se diseminara por todos lados, y fuera incontrolable en un principio. En centros universitarios como la Facultad de Ciencias Exactas de la UBA o la Facultad de Informática de la Universidad de Morón era difícil encontrar un disco sin infectar. El desconocimiento del tema llevó a que pasara bastante tiempo hasta que se empezaran a tomar medidas. Solo despues de algunos meses medios como Compu Magazine empezaron a publicar formas de desinfectar los discos, y se aplicaron políticas de seguridad en las universidades. Lo que siempre se ve como positivo de esto fue que la gente empezó a conocer el DOS más profundamente, por ejemplo, a conocer el boot sector, para que servía y que era, ya que se usaban las máquinas pero nadie sabía como funcionaban realmente. Demostró que la ignorancia es el peor enemigo. Por eso mismo, pensamos que la mejor forma de combatirlos y evitar que se repita una epidemia de esas proporciones es conocerlos lo más posible. Otro efecto que causó en la gente es la confusión entre el síntoma y el virus en si. Como tenía un síntoma muy evidente, la famosa pelotita que rebota, pensaron que todos los virus debían ser tan visibles. Los siguientes fueron más ocultos, y se limitaban a reproducirse o destruir sin avisar al usuario.

El Ping Pong original no podía infectar discos rígidos, pero la versión que se popularizó aquí fue la B, que podía hacerlo. Se creó una variante en Argentina, probablemente fue la primera variante de virus originada en el país, el Ping Pong C, que no mostraba la pelotita que rebota en la pantalla. Este virus está extinto en este momento ya que sólo podía funcionar en máquinas con procesador 8088 o 8086, porque ejecutaba una instrucción que es indocumentada en estos e ilegal en los siguientes.


Virus Piazzolla

Características

Piazzolla es un virus que infecta todos los archivos .COM, ejecutados despues de que esté activo en memoria, excepto el command.com. Su síntoma más notable es que el archivo infectado crece en 874 bytes, y que se instala como un residente de 1,136 bytes. Tambien toma la interrupción 21h. Una vez que está residente, infecta todos los archivos .com que se ejecuten. No cambia la fecha y hora del archivo. En el programa infectado se pueden ver los siguientes textos:

"Piazzolla"
"COMMANDCOM"
"Piazzoll.$$$"

No hace nada, excepto reproducirse.


Funcionamiento

En el programa infectado por Piazzolla, primero está el código del virus, y a continuación el programa original. Cuando el DOS carga el programa en la memoria, deja el virus primero y el programa original a continuación. Lo que empieza a ejecutarse es el código del virus, ya que la ejecución de un .com empieza en el principio del archivo, cargado por el DOS en la posición de memoria CS:0100h
Es interesante que veamos como funciona en detalle, ya que es un virus sencillo de archivos .COM, y no hace uso de ningun truco extraño del sistema operativo, funciona como si fuese un residente común y corriente. Instala una rutina en la interrupción 21h (en la función DDh) que restaura el programa cargado a continuación del virus y le da control a este. Cuando se carga un programa infectado, lo primero que hace es llamar a esa función, (poniendo en ah 0DDh y llamando a la interrupción 21h). Si el virus ya está activo en memoria, esta rutina copia el programa original desde la zona de memoria en que lo cargó el DOS, (a continuación del virus) a donde debería estar normalmente, en CS:0100h. Obviamente, el CS es el CS del programa cargado y no el de la rutina residente del virus, que es distinto. Despues de restaurar el programa, salta a la dirección de origen del mismo (CS:0100h) con lo que lo ejecuta. De esta forma no se nota nada raro al ejecutar un programa infectado.

En el caso de que el virus no esté ya presente en la memoria, instala una rutina propia para la interrupción 21h, y reserva memoria para dejar su código completo residente. Es importante este detalle, ya que para infectar un programa copia el código del virus que está en memoria antes del programa original. Si no hiciera esto debería sacar el código del virus del disco, es fácil ver que esta estrategia es mejor. Por esta causa los virus suelen ocupar más lugar en memoria que en disco, o por lo menos el mismo lugar, ya que deben guardar todo su código en memoria y no solo la parte que van a usar. Cuando instaló esa rutina, llama a la interrupción 21h servicio 4B00h para ejecutar el programa original desde disco. La forma en que lo hace es interesante, ya que busca el nombre con el que fue llamado el programa en el environment del mismo. En esa área de memoria, apuntada por el byte que está en el offset 2Ch del Program Segment Prefix (PSP), están todas las variables del environment del programa (path, comspec, etc.) A continuación de esas variables está el nombre completo con el que fue llamado el programa. Está después del primer par de bytes con valor 0 (o sea, un byte 0 del final de la cadena ASCIIZ (ASCII terminado en cero) de la última variable de environment, y un byte 0 que señala el final del environment) El código que hace eso es así:

mov cx,0FFFFh 
xor ax,ax
xor di,di
mov es,ds:env_seg ; previamente se hizo env_seg equ
2Ch

busca:
repne scasb ; Repetir mientras zf=0 y cx>0
; Scan es:[di] hasta que sea = ax
(0)
cmp byte ptr es:[di],0
je encontro ; si lo encontró
scasb ; Scan es:[di] hasta que sea = ax
(0)
jnz busca ; repetir hasta que lo encuentre

encontro:
mov dx,di
add dx,3 ; dx = di + 3 (el primer word es el
nro
; de strings despues del environment)
push es
pop ds ; ds = es
mov bx,13Ah
mov ax,4B00h
push cs ; llama a la int 21h
pop es ; 4B00h load and execute
pushf ; ejecuta el programa huesped desde
disco
; En int21h está la dirección de
call dword ptr cs:int21h ; la interrupción 21h
original

mov ah,4Dh ; obtiene el codigo de retorno del
programa
int 21h ; para devolverlo despues de terminar

mov dx,cs:tamres ; en tamres tiene el tamaño del
código
mov ah,31h
int 21h ; termina y queda residente


Nótese que no hace una llamada a la interrupción 21h, sino que usa la instrucción call, como si fuese una subrutina más, pasando por encima de la interrupción instalada por el programa. Esto es una técnica muy usada por los virus cuando quieren ejecutar una interrupción modificada por ellos mismos pero como si no estuviese modificada.

La interrupción 21h instalada por el virus básicamente tiene dos funciones. Cuando es llamada verifica si ah es 0DDh o ax es 4B00h. Si es la primera, realiza la rutina descrita anteriormente para restaurar el programa original. Si es la segunda, (servicio de cargar y ejecutar un programa) infecta al archivo. Veamos como lo hace: Crea un stack temporario, porque va a usar servicios de la interrupción 21h, y como es un programa residente esto causa problemas en el stack. Luego convierte el nombre del programa que se quiso ejecutar a mayúsculas (el nombre está en DS:DX) y verifica si la extensión es .COM. Como el programa puede ser un .EXE renombrado a .COM, el virus verifica si tiene el identificador interno de los .EXE, en los cuales los dos primeros bytes del archivo son los caracteres ASCII 'MZ'. Si el archivo es el command.com, tampoco lo infecta. Para saber si está previamente infectado verifica que el cuarto y quinto byte sean 'ia'. A partir del tercer byte de todos los programas infectados está el string 'Piazzolla', aunque el virus utiliza solamente los bytes 'ia' como identificador, no el nombre completo. Si no es un .COM real, es el command.com o ya está infectado, sigue con la interrupción normal, con un jmp dword ptr cs:int21h, ya que no debe infectar esos archivos.


Infección

La rutina de infección crea un archivo temporario llamado PIAZZOLL.$$$ donde el copia código del virus residente en la memoria, y a continuación el programa a infectar, leyéndolo del disco. De esta forma genera lo que luego será el programa infectado. Para hacerlo eficientemente crea un buffer de 20k reservando memoria con el servicio 48h de la interrupción 21h. Cuando ya generó el programa infectado, utiliza una estrategia algo extraña, en vez de borrar el programa original y renombrar el temporario, borra el original, copia nuevamente el temporario con el nombre del original, y borra el temporario. Esto parece una pérdida de tiempo, pero quizá es un truco para engañar a algún antivirus. Cuando termina la infección, cambia la hora y fecha del archivo recien infectado para que sea igual al original. Mientras está haciendo la copia redirecciona temporariamente la interrupción 24h (manejo de errores críticos del DOS) para que siempre devuelva 0, o sea, para que el DOS no note posibles errores mientras se está infectando, como ser que no hay lugar en el disco, etc. Si el virus detecta algún error en algun momento de la infección, o sea, si la interrupción 21h vuelve con el flag de carry encendido, aborta toda la operación.

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT