1. INTRODUCCIÓN
    Una de las amenazas fundamentales a la Seguridad Informática son las amenazas programadas. Se trata de código específicamente diseñado para atacar las medidas de seguridad de un sistema. Existen distintos tipos de amenazas programadas:
• Virus
• Gusanos
• Caballos de Troya
• Bombas lógicas
• Puertas falsas
• Otras menos importantes: salamis, polillas, ...
    La división entre ellas no está siempre clara. En la mayoría de las ocasiones se engloban todas las anteriores en el concepto de virus informático, aunque muchas de ellas no deberían considerarse como tales. Con este trabajo se pretende profundizar un poco en los virus informáticos.

2. DEFINICIÓN
    Un virus es un programa que tiene la habilidad única de reproducirse. Como los virus biológicos, los virus informáticos pueden diseminarse rápidamente y algunas veces son difíciles de erradicar. Se pueden adherir a cualquier tipo de archivo y se diseminan con los archivos que se copian y envían de persona a persona. Además de reproducirse, algunos virus informáticos tienen algo en común: una rutina dañina, que se puede presentar en forma de mensajes o imágenes, o también borrando archivos, formateando el disco duro, etc. Si el virus no contiene una rutina dañina, aún puede causar problemas, como tomar espacio libre del disco y de la memoria, y también disminuir el rendimiento de la computadora.

    La definición más simple y completa que hay de los virus corresponde al modelo D. A. S., y se fundamenta en tres características:



3. UN POCO DE HISTORIA

    La característica de auto-reproducción y mutación de estos programas, que las hace parecidas a las de los virus biológicos, parece ser el origen del nombre con que hoy los conocemos.

    Los virus tienen la misma edad que las computadoras. Ya en 1949 John Von Neumann, describió programas que se reproducen a sí mismos en su libro "Teoría y Organización de Autómatas Complicados".

    Antes de la explosión de la micro computación se decía muy poco de ellos. Por un lado, la computación era secreto de unos pocos. Por otro lado, las entidades gubernamentales, científicas o militares, que vieron sus equipos atacados por virus, se quedaron muy calladas, para no demostrar la debilidad de sus sistemas de seguridad, que costaron millones. Las empresa privadas como Bancos, o grandes corporaciones, tampoco podían decir nada, para no perder la confianza de sus clientes o accionistas. Lo que se sabe de los virus desde 1949 hasta 1989, es muy poco.

    Se reconoce como antecedente de los virus actuales, un juego creado por programadores de la empresa AT&T, que desarrollaron la primera versión del sistema operativo Unix en los años 60. Para entretenerse, y como parte de sus investigaciones, desarrollaron un juego llamado "Core Wars", que tenía la capacidad de reproducirse cada vez que se ejecutaba. Este programa tenía instrucciones destinadas a destruir la memoria del rival o impedir su correcto funcionamiento. Al mismo tiempo, desarrollaron un programa llamado "Reeper", que destruía las copias hechas por Core Wars. Conscientes de lo peligroso del juego, decidieron mantenerlo en secreto, y no hablar más del tema.

    En el año 1983, el Dr. Ken Thomson, uno de los programadores de AT&T, que trabajó en la creación de "Core Wars", rompe el silencio acordado, y da a conocer la existencia del programa, con detalles de su estructura.

    La Revista Scientific American a comienzos de 1984, publica la información completa sobre esos programas, con guías para la creación de virus.

    En 1984, el Dr. Fred Cohen hace una demostración en la Universidad de California, presentando un virus informático residente en una PC. Al Dr. Cohen se le conoce hoy día, como "el padre de los virus". Paralelamente aparece en muchas PCs un virus, con un nombre similar a Core Wars, escrito en Small-C por un tal Kevin Bjorke, que luego lo cede a dominio público.

    El primer virus destructor y dañino plenamente identificado que infecta muchas PC’s aparece en 1986. Fue creado en la ciudad de Lahore, Paquistán, y se le conoce con el nombre de BRAIN. Sus autores vendían copias pirateadas de programas comerciales como Lotus, Supercalc o Wordstar, por suma bajísimas. Los turistas que visitaban Paquistán, compraban esas copias y las llevaban de vuelta a los EE.UU. Las copias pirateadas llevaban un virus. Fue así, como infectaron mas de 20,000 computadoras. Los códigos del virus Brain fueron alterados en los EE.UU., por otros programadores, dando origen a muchas versiones de ese virus, cada una de ellas peor que la precedente. Hasta la fecha nadie estaba tomando en serio el fenómeno, que comenzaba a ser bastante molesto y peligroso.

    En 1987, los sistemas de Correo Electrónico de la IBM, fueron invadidos por un virus que enviaba mensajes navideños, y que se multiplicaba rápidamente. Ello ocasionó que los discos duros se llenaran de archivos de origen viral, y el sistema se fue haciendo lento, hasta llegar a paralizarse por mas de tres días.

    El virus Jerusalem, según se dice creado por la Organización de Liberación Palestina, es detectado en la Universidad Hebrea de Jerusalem a comienzos de 1988. El virus estaba destinado a aparece el 13 de Mayo de 1988, fecha del 40 aniversario de la existencia de Palestina como nación. Una interesante faceta del terrorismo, que ahora se vuelca hacia la destrucción de los sistemas de cómputo, por medio de programas que destruyen a otros programas.

    El 2 de Noviembre del 1988, dos importantes redes de EE.UU. se ven afectadas seriamente por virus introducidos en ellas. Más de 6,000 equipos de instalaciones militares de la NASA, universidades y centros de investigación públicos y privados se ven atacados.

    Por 1989 la cantidad de virus detectados en diferentes lugares sobrepasan los 100, y la epidemia comienza a crear situaciones graves. Entre las medidas que se toma, para tratar de detener el avance de los virus, es llevar a los tribunales a Robert Morís Jr. acusado de ser el creador de un virus que infectó a computadoras del gobierno y empresas privadas. Al parecer, este muchacho conoció el programa Core Wars, creado en la AT&T, y lo difundió entre sus amigos. Ellos se encargaron de diseminarlo por diferentes medios a redes y equipos.

    En los últimos años, con el uso masivo de las redes, han aparecido una serie de virus cuya principal característica ha sido su rápida difusión, aprovechando las redes de comunicaciones, y también han alcanzado gran importancia los virus de macro.

    La cantidad de virus que circula en la actualidad no puede llegar a ser precisada pero para tener una idea los últimos antivirus pueden identificar alrededor de cincuenta mil virus (claro que en este valor están incluidos los clones de un mismo virus).



4. ESTRUCTURA
    Se pueden distinguir tres módulos principales de un virus informático:

5. CICLO DE VIDA
    Los virus informáticos tienen un ciclo de vida, que empieza cuando son creados y termina cuando son erradicados completamente. El siguiente resumen describe cada etapa:

6. CLASIFICACIÓN
    Podemos clasificar los virus informáticas según dos criterios:

    a) Tipos de virus según el destino de infección.



7. NOMBRE DE LOS VIRUS
    A la hora de buscar un nombre de virus, debe tener en cuenta la convención de asignación de nombres que se utiliza en ese mundo. Los nombres de virus están formados por un prefijo, el nombre y, con frecuencia, un sufijo.     Estas partes se presentan con el formato Prefijo.Nombre.Sufijo. Por ejemplo, WM.Cap.A sería la variante A de la familia Cap. El prefijo WM indica que el virus es un virus de macro de Word.

    A continuación se explican los prefijos más identificatos:
 



8. MÉTODOS DE INFECCIÓN
    Añadidura o empalme. Por este método el código del virus se agrega al final del archivo ejecutable a infectar, modificando las estructuras de arranque del archivo anfitrión de manera que el control del programa pase primero al virus cuando se quiera ejecutar el archivo. Este cambio de secuencia permite al virus realizar sus tareas específicas y luego pasar el control al programa para que este se ejecute normalmente. La principal desventaja de este método es que el tamaño del archivo infectado es mayor al original, lo que permite una fácil detección.

    Inserción. Los virus que utilizan el método de inserción buscan alojarse en zonas de código no utilizadas o en segmentos de datos dentro de los archivos que contagian, de esta manera la longitud total del archivo infectado no varía. Este método, parecido al de empalme, exige mayores técnicas de programación de los virus para poder detectar las zonas posibles de contagio dentro de un ejecutable, por lo que generalmente no es muy utilizada por los programadores de virus informáticos.

    Reorientación. Este método es una variante del anterior. Bajo este esquema se introducen centrales virósicas (los códigos principales del virus) en zonas físicas del disco duro marcadas como defectuosas o en archivos ocultos del sistema. Estos códigos virales, al ejecutarse, implantan pequeños trozos de código en los archivos ejecutables que infectan, que luego actúan como llamadores de las centrales virósicas. La principal ventaja de este método es que el cuerpo del virus, al no estar inserto en el archivo infectado sino en otro sitio oculto, puede tener un tamaño bastante grande, aumentando así su funcionalidad. La desventaja más fuerte es que la eliminación de este tipo de infecciones es bastante sencilla. Basta con borrar archivos ocultos sospechosos o reescribir las zonas del disco marcadas como defectuosas.

    Polimorfismo. Este es el método más avanzado de contagio logrado por los programadores de virus. La técnica básica usada es la de inserción del código viral en un archivo ejecutable, pero para evitar el aumento de tamaño del archivo infectado, el virus compacta parte de su código y del código del archivo anfitrión de manera que la suma de ambos sea igual al tamaño original del archivo. Al ejecutar el programa infectado actúa primero el código del virus descompactando en memoria las porciones previamente compactadas. Una variante mejorada de esta técnica permite a los virus usar métodos de encriptación dinámicos para disfrazar el código del virus y evitar ser detectados por los antivirus.

    Sustitución. El método de sustitución, usado con variantes por los Caballos de Troya, es quizás el método más primitivo. Consiste en sustituir el código completo del archivo original por el código del virus. Al ejecutar el programa infectado el único que actúa es el virus, que cumple con sus tareas de contagiar otros archivos y luego termina la ejecución del programa reportando algún tipo de error. Esta técnica tiene sus ventajas, ya que en cada infección se eliminan archivos de programas válidos, los cuales son reemplazados por nuevas copias del virus.

    Tunneling. Es una técnica usada por programadores de virus y antivirus para evitar todas las rutinas al servicio de una interrupción y tener así un control directo sobre esta. Requiere una programación compleja, hay que colocar el procesador en modo kernel. En este modo de funcionamiento, tras ejecutarse cada instrucción se produce la INT 1. Se coloca una ISR (Interrupt Service Routine) para dicha interrupción y se ejecutan instrucciones comprobando cada vez si se ha llegado a donde se quería hasta recorrer toda la cadena de ISRs que halla colocando el parche al final de la cadena. Los virus utilizan el tunneling para protegerse de los módulos residentes de los antivirus que monitorean todo lo que sucede en la máquina para interceptar todas las actividades "típicas" de los virus. Para entender como funciona esta técnica basta saber como trabaja este tipo de antivirus. El módulo residente queda colgado de todas las interrupciones usualmente usadas por los virus (INT 21, INT 13, a veces INT 25 Y 26) y entonces cuando el virus intenta llamar a INT 21, por ejemplo, para abrir un ejecutable para lectura / escritura (y luego infectarlo), el antivirus emite una alerta, pues los ejecutables no son normalmente abiertos, ni menos para escritura. Y así con todas las llamadas típicas de los virus. En cambio, cuando se hace una llamada común y corriente, el antivirus no le da mayor importancia y la deja pasar, llamando a la INT 21 original. Un virus con tunneling, entonces, antes de llamar a ninguna función ni hacer nada, intenta obtener el address absoluto de esta INT 21 original, que está en alguna parte de la memoria del antivirus residente. Una vez que obtiene este address, accede al MS-DOS por medio de el, sin llamar al antivirus. Y así, efectivamente, le "pasa por debajo", lo "tunelea". ¿Cómo se hace esto?
Existen dos formas fundamentales de obtener este address:
    La primera, y la más usada, es utilizando la interrupción de trace (INT 1) y la trap flag. (Que son usadas por los DEBUGGERS) para atravesar el código línea por línea hasta hallar lo que se busca. Es usada por todos los virus que usan esta técnica, como por ejemplo, el Predator II o el Yankee Doodle.
La segunda, hacer un simple y llano scanning del código, byte a byte, hasta hallar el address. Se usa en pocos virus, pero es la que usa Kohntark en su célebre Kohntark Recursive Tunneling Toolkit.
Problemas Generales del Tunneling.
    Pero el problema principal del tunneling es que aún teniendo éxito en obtener la INT 21 posta, se pueden tener problemas si hay algún residente importante y uno lo esta pasando por debajo. Es famoso ya el caso del Predator II y el DoubleSpace. El predator II tuneleaba por debajo del DoubleSpace y trataba de acceder al disco directamente por MS-DOS. Esto produjo que destruyera el contenido de varios discos rígidos. En definitiva, esto es contrario a las intenciones del tunneling.

PROPAGACIÓN
¿Cómo se propagan los virus?

Técnicas de ocultación y camuflaje de los virus:
    Mecanismos de Stealth (ocultarción): Este mecanismo es utilizado para esconder los signos visibles de la infección que podrían delatar su presencia. Por ejemplo, mantienen la fecha original del archivo, evitan que se muestren los errores de escritura cuando el virus intenta escribir en discos protegidos, restar el tamaño del virus a los archivos infectados cuando se hace un DIR, modificar directamente la FAT, modifican la tabla de vectores de interrupción (IVT), se instalan en los buffers del DOS, Se instalar por encima de los 640 KB normales del DOS, soportan la reinicializacion del sistema por teclado, etc.

    Técnicas de auto encriptación (ocultación): Esta técnica muy utilizada, consigue que el virus se encripte de manera diferente cada vez que se infecta el fichero, para intentar pasar desapercibido ante los antivirus.

    Anti-debuggers (protección antivirus): Un debugger es un programa que permite descompilar programas ejecutables y mostrar parte de su código en lenguaje original.  Los virus usan técnicas para evitar ser desensamblados y así impedir su análisis para la fabricación del antivirus correspondiente.

    Mecanismos Polimorficos (camuflaje): Una técnica para impedir ser detectados, es la de variar el método de encriptación de copia en copia. Esto obliga a los antivirus a usar técnicas heurísticas ya que como el virus cambia en cada infección es imposible localizarlo buscándolo por cadenas de código. Esto se consigue utilizando un algoritmo de encriptación que pone las cosas muy difíciles a los antivirus. No obstante no se puede codificar todo el código del virus, siempre debe quedar una parte sin mutar que toma el control y esa es la parte más vulnerable al antivirus.   La forma más utilizada para la codificación es la operación lógica XOR. Esto es debido que esta operación es reversible:
2 XOR 5 = 3
3 XOR 2 = 5
    En este caso la clave es el número 9, pero utilizando una clave distinta en cada infección se obtiene una codificación también distinta.  Otra forma también muy utilizada consiste en sumar un numero fijo a cada byte del código vírico.

    Armouring (Proteccion Antivirus): Mediante esta técnica el virus impide que se examinen los archivos que él mismo ha infectado. Para conocer más datos sobre cada uno de ellos, éstos deben ser abiertos (para su estudio) como ficheros que son, utilizando programas especiales (Debuger) que permiten descubrir cada una de las líneas del código (lenguaje de programación en el que están escritos). Pues bien, en un virus que utilice la técnica de Armouring no se podrá leer el código

    Técnica Tunneling (evasión): Con esta técnica, intentar burlar los módulos residentes de los antivirus mediante punteros directos a los vectores de interrupción.  Requiere una programación compleja, hay que colocar el procesador en modo paso a paso. En este modo de funcionamiento, tras ejecutarse cada instrucción se produce la interrupción 1. Se coloca una ISR (Interrupt Service Routine) para dicha interrupción y se ejecutan instrucciones comprobando cada vez si se ha llegado a donde se quería hasta recorrer toda la cadena de ISRs que halla colocando el parche al final de la cadena.



9. SÍNTOMAS TÍPICOS DE UNA INFECCIÓN.

10. DAÑOS CAUSADOS POR LOS VIRUS.

    Definiremos daño como una acción indeseada, y los clasificaremos según la cantidad de tiempo necesaria para reparar dichos daños. Existen seis categorías de daños hechos por los virus, de acuerdo a la gravedad.

¿Qué daño puede hacer un virus a mi sistema?

11. ANTIVIRUS

    No para toda enfermedad existe cura, como tampoco existe una forma de erradicar todos y cada uno de los virus existentes.

    La función de un programa antivirus es detectar la presencia o la acción de un virus informático. Adicionalmente, un antivirus puede dar la opción de erradicar un virus informático de una entidad infectada.
 

1. SCANNING
    Es la primera técnica que se popularizó para la detección de virus informáticos, y que todavía se sigue utilizando. Consiste en revisar el código de todos los archivos contenidos en la unidad de almacenamiento, fundamentalmente los archivos ejecutables, en busca de pequeñas porciones de código que puedan pertenecer a un virus informático. Este procedimiento, denominado escaneo, se realiza a partir de una base de datos que contiene trozos de código representativos de cada virus conocido, agregando el empleo de determinados algoritmos que agilizan los procesos de búsqueda.

    Fue bastante eficaz en los primeros tiempos de los virus informáticos, cuando había pocos y su producción era pequeña. Este relativamente pequeño volumen de virus informáticos permitía que los desarrolladores de antivirus escaneadores tuvieran tiempo de analizar el virus, extraer el pequeño trozo de código que lo iba a identificar y agregarlo a la base de datos del programa para lanzar una nueva versión. Sin embargo, la obsolescencia de este mecanismo de identificación como una solución antivirus completa se encontró en su mismo modelo.

    El primer punto grave de este sistema radica en que siempre brinda una solución a posteriori: es necesario que un virus informático alcance un grado de dispersión considerable para que sea enviado (por usuarios capacitados, especialistas o distribuidores del producto) a los desarrolladores de antivirus. Estos lo analizarán, extraerán el trozo de código que lo identificará, y lo incluirán en la próxima versión de su programa antivirus. Este proceso puede demorar meses a partir del momento en que el virus comienza a tener una dispersión considerable, lapso en el cual puede causar graves daños sin que pueda ser identificado.

    Además, este modelo consiste en una sucesión infinita de soluciones parciales y momentáneas que deben actualizarse periódicamente debido a la aparición de nuevos virus.

    La técnica de scanning es altamente ineficiente, pero se sigue utilizando debido a que permite identificar rápidamente la presencia de los virus más conocidos y, como son estos los de mayor dispersión, permite una importante gama de posibilidades.

Un ejemplo típico de un antivirus de esta clase es el Viruscan de McAfee.

2. ALGORITMOS HEURÍSTICOS
    En virtud del pronto agotamiento técnico de la técnica de scanning, los desarrolladores de programas antivirus han dotado a sus creaciones de métodos para búsquedas de virus informáticos (y de sus actividades), que no identifican específicamente al virus sino a algunas de sus características generales y comportamientos universalizados.

    Este tipo de método rastrea rutinas de alteración de información que no puedan ser controladas por el usuario, modificación de sectores críticos de las unidades de almacenamiento (master boot record, boot sector, FAT, entre otras), etc.

    Un ejemplo de este tipo de métodos es el que utiliza algoritmos heurísticos.

    De hecho, esta naturaleza de procedimientos busca, de manera bastante eficiente, códigos de instrucciones potencialmente pertenecientes a un virus informático. Resulta eficaz para la detección de virus conocidos y es una de las soluciones utilizadas por los antivirus para la detección de nuevos virus. El inconveniente que presenta este tipo de algoritmo radica en que puede llegar a sospecharse de muchisimas cosas que no son virus. Esto hace necesario que el usuario que lo utiliza conozca un poco acerca de la estructura del sistema operativo, a fin de poseer herramientas que le faciliten una discriminación de cualquier falsa alarma generada por un método heurístico.

    Algunos de los antivirus de esta clase son F-Prot, Norton Anti Virus y Dr. Solomon's Toolkit.

    En el siguiente apartado se aprofundiza más este tipo de algoritmos.

3. CHEQUEADORES DE INTEGRIDAD
   Otra forma de detectar la presencia de un virus informático en un sistema consiste en monitorear las actividades de la PC señalando si algún proceso intenta modificar los sectores críticos de los dispositivos de almacenamiento o los archivos ejecutables.

    Sobre la base de estas consideraciones, podemos consignar que un buen sistema antivirus debe estar compuesto por un programa detector de virus, que siempre esté residente en memoria, y un programa que verifique la integridad de los sectores críticos del disco rígido y sus archivos ejecutables. Existen productos antivirus que cubren los dos aspectos, o bien pueden combinarse productos diferentes configurados de forma que no se produzcan conflictos entre ellos.

MODELO ANTIVIRUS
    La estructura de un programa antivirus, está compuesta por dos módulos principales: el primero denominado de control y el segundo denominado de respuesta. A su vez, cada uno de ellos se divide en varias partes:
 

Módulo de control
    Posee la técnica verificación de integridad que posibilita el registro de cambios en los archivos ejecutables y las zonas críticas de un disco duro. Se trata, en definitiva, de una herramienta preventiva para mantener y controlar los componentes de información de un disco rígido que no son modificados a menos que el usuario lo requiera.

    Otra opción dentro de este módulo es la identificación de virus, que incluye diversas técnicas para la detección de virus informáticos. Las formas más comunes de detección son el scanning y los algoritmos, como por ejemplo, los heurísticos.

    Asimismo, la identificación de código dañino es otra de las herramientas de detección que, en este caso, busca instrucciones peligrosas incluidas en programas, para la integridad de la información del disco duro.

    Esto implica descompilar (o desensamblar) en forma automática los archivos almacenados y ubicar sentencias o grupos de instrucciones peligrosas.

    Este módulo posee una administración de recursos para efectuar un monitoreo de las rutinas a través de las cuales se accede al hardware de la computadora (acceso a disco, etc.). De esta manera puede limitarse la acción de un programa restringiéndole el uso de estos recursos, como por ejemplo impedir el acceso a la escritura de zonas críticas del disco o evitar que se ejecuten funciones de formato del mismo.

Módulo de respuesta
    La función alarma se encuentra incluida en todos los programas antivirus y consiste en detener la acción del sistema ante la sospecha de la presencia de un virus informático, e informar la situación a través de un aviso en pantalla.

    Algunos programas antivirus ofrecen, una vez detectado un virus informático, la posibilidad de erradicarlo. Por consiguiente, la función reparar se utiliza como una solución momentánea para mantener la operatividad del sistema hasta que pueda instrumentarse una solución adecuada. Por otra parte, existen dos técnicas para evitar el contagio de entidades ejecutables: evitar que se contagie todo el programa o prevenir que la infección se expanda más allá de un ámbito fijo.

    Aunque la primera opción es la más adecuada, plantea grandes problemas de implementación.



12. HEURÍSTICA DE LOS ANTIVIRUS

    Las técnicas heurísticas nacen de la necesidad de una “detección genérica” de los virus informáticos, es decir, la posibilidad de detectar “cualquier virus” sin haberlo analizado antes y sin estar en la base de datos del antivirus que se esté considerando. Para esto sólo hay que buscar “instrucciones comunes” de los virus para advertir de la posibilidad de que un archivo o programa esté infectado.

    Cuando analizamos las primeras instrucciones de cualquier archivo, veremos instrucciones para detectar los parámetros de la línea de comandos, borrar la pantalla, llamar a alguna función, ejecutar alguna macro, etc. Si se trata de un virus suelen ser otras bien diferentes como activar el cuerpo del virus o buscar más archivos para intentar implantarles su código.

    La experiencia es lo que lleva a una persona a reconocer algo infectado de algo limpio en cuestión de segundos. Esa “experiencia” se ha pretendido introducir en los programas antivirus bajo el nombre de “heurística”.

    El funcionamiento de la heurística es sencillo, primero se analiza cada programa sospechoso sin ejecutar las instrucciones, lo que hace es desensamblar el código de máquina para deducir que haría el programa si se ejecutara. Avisando que el programa tiene instrucciones para hacer algo que es raro en un programa normal, pero que es común en un virus.

    El principal problema de las técnicas heurísticas es los falsos positivos. A pesar de que se han mejorado mucho en los últimos años, siguen sin conseguir demasiada efectividad. El problema más que en la calidad de la rutina heurística está en la interpretación que el usuario realice de ese aviso heurístico.

    Entendiendo la Heurística como un indicador de probabilidad de contagio, esto nos lleva a considerarla como un sistema de detección mejorada que al incluirla los antivirus nos permite establecer un sistema de alerta y de prevención ante la aparición de mutaciones de virus o de nuevos virus.



13. FALSOS VIRUS

    Existen algunos programas que, sin llegar a ser virus, ocasionan problemas al usuario. Estos no-virus carecen de por lo menos una de las tres características identificatorias de un virus (dañino, autorreproductor y subrepticio).