Los Virus de Macro (2)

 

Este es el segundo artículo sobre el tema de los virus de macro, donde se describen un poco más con énfasis en las contramedidas existentes. Definiremos virus de macro como un virus escrito en el lenguaje de macros de Microsoft Office, esto es Word Macro o Visual Basic para Aplicaciones, la definición no es 100% correcta pero servirá para el propósito de nuestra explicación que se centrará en estos virus en el entorno de equipos PC con Windows 9X

Los documentos generados hasta el Word 6.0 pueden llevar virus de Word Macro y desde el Word 97 en adelante los virus están escritos en VBA, un documento infectado con un virus Word Macro se propagará al abrirse con Word 97 o superior, uno que contenga un virus escrito en VBA no funcionará al abrirse con Word 6.0 o versiones anteriores. Es decir que si usamos la versión 6.0 de Word la mayoría de los macros modernos serán automáticamente detectados. Más aún, si nuestro trabajo consiste en la creación de documentos sencillos que no requieren de las características avanzadas de procesamiento de texto, podemos usar el Wordpad, que ocupa una fracción de memoria del Word y produce documentos sencillos en el mismo formato que Word 6.0, es decir que pueden ser leídos por todas las versiones de Word.

Los virus de macro atacan a cualquiera de las siguientes aplicaciones: Word, Excel, Outlook, Outlook Express, Access, PowerPoint, Project, Corel Draw! También existen los virus multiaplicación, que infectan y se desarrollan en todas las aplicaciones antes nombradas indistintamente.

¿Por que las aplicaciones Microsoft son particularmente inseguras? hay dos razones principales para esto, la primera es que Microsoft ha diseñado un lenguaje muy sofisticado para la escritura de macros (VBA y VB Script) que permite métodos comunes a todas las aplicaciones a través del uso del Modelo de Objetos de Microsoft. Este lenguaje presenta un potencial enorme que está cambiando de manera dramática la programación de aplicaciones, pero también es el soporte que permitió la aparición de estos virus. La otra razón es la gran sencillez de VBA que permite a cualquiera con conocimientos básicos crear y difundir sus propios virus.

Existe también un efecto que puede explicarse mejor en términos botánicos. Una selva tropical, con miles de especies distintas conviviendo en intrincados biosistemas locales se defiende mucho mejor de las plagas e infecciones que una inmensa extensión plantada de un solo cultivo. Todo agricultor conoce bien el problema de un solo brote de enfermedad que puede arrasar con miles de hectárea de monocultivo. Algo parecido ocurre con la estandarización del software, donde un simple virus puede causar enormes daños en una organización que tenga cientos o miles de estaciones de trabajo con las mismas aplicaciones y sistema operativo. Si consideramos la cantidad de computadores que usan el Outlook Express como cliente de correo electrónico en Internet, o el Word como procesador de texto en el mundo, veremos el inmenso riesgo de propagación que existe cuando un virus llega a atacar a alguna de esas aplicaciones.

¿Que puede hacer un virus de macro? el daño potencial abarca toda la gama de acciones que podamos lograr usando comandos del DOS, puede desde luego borrar y corromper archivos (haciéndolos imposibles de leer), formatear el disco duro, corromper la FAT y una amplia gama de acciones dañinas o desagradables para el usuario. Hasta el momento la mayoría de los virus de macro han sido casi inocuos, pero no hay nada que impida la creación de virus mucho más malignos. En verdad es igual de difícil (o fácil) programar un viru inofensivo que uno extremadamente maligno, se diferencian en una o dos líneas de código, nada más.

Los virus de macro se diferencian de los tradicionales en un aspecto muy importante. Para que un virus tradicional se "active" debería existir un programa ejecutable huésped, tal como un juego o una aplicación. Bastaba entonces tener buen cuidado sobre los ejecutables que usábamos y eso daba un grado razonable de protección. Los virus de macro sin embargo se incrustan en los propios documentos o productos de las aplicaciones, no en la aplicación misma. Un virus VBA puede venir en un documento del Word o en una hoja de cálculo de Excel, no en el Word o en el Excel mismo sino en los documentos que estos generan. Del mismo modo un virus puede incrustarse en un mensaje de e-mail (no en el Outlook Express o en el cliente que usemos para nuestro correo). como el intercambio de documentos es algo usual y necesario, la detección y prevención se hacen mucho más difíciles en estos casos.

Para entender bien los virus debemos tener en cuenta que, hasta el momento (y probablemente siempre será así) todo virus necesita contener un Elemento Activo (EA), este EA es un trozo de código ejecutable escrito en algún lenguaje de programación. En los virus tradicionales el EA se escribía en Assembler y se guardaba en los espacios vacíos que quedan al final de los programas huésped (un juego por ejemplo, recuerdese que la información en PC se guarda en cluster completos así es que al final normalmente queda algo de espacio desocupado). Así los archivos .exe quedaban "infectados" ya que eran modificados por el virus para que antes de ejecutarse, pasaran el control al código malicioso.

Las modernas versiones de Office permiten que los propios documentos, además de contener texto y datos, podían llevar incrustadas instrucciones, de manera que la aplicación las ejecute al cargarse el documento. Por ejemplo podemos escribir una carta en Word que incluya un formulario, y además agregar instrucciones para que el que cargue esa carta en su computador pueda llenar el formulario con facilidad. Esta posibilidad de agregar "inteligencia" a los documentos, permite también agregarles virus con gran facilidad. Así, para saber si un documento de Office contiene un virus a  no, bastaría determinar si tiene EA y si este es malicioso o un macro "normal"

Algunos Virus Conocidos

El primer virus de macro "Concept" apareció en 1995 junto con el lanzamiento de Windows 95, en 1996 aparece el primer virus macro de Excel llamado "Laroux", en 1997 aparece el "Share Fun" que infecta mails generados por Outlook Express, en 1998 aparece "AccesV" que infecta bases de dato Access y "Attach" que infecta presentaciones de Power Point, en 1999 el virus "Gala" que infecta archivos de Corell Draw y "Corner" que infecta documentos del Project. Sobre los virus multiaplicación el mas conocido es "Triplicate" que infecta a documentos de Word, Excel y Power Point y además es el primero en incluír técnicas Sthealt que lo hacen invisible a muchos detectores. Tenemos además los muy conocidos "Melissa", "Worm", "Love" y "wahaha"

Se estima que entre el 50% y el 70% de los nuevos virus son del tipo "Virus de macro en VBA"

Contramedidas para los virus tradicionales

  1. Escanear el disco con un antivirus: los programas de escaneo revisan programas y documentos del Office buscando "virus signatures" (firmas de virus) que son trozos de código distintivo de cada virus conocido. Uno de los inconvenientes clásicos de esta protección es que debe actualizarse periódicamente la base de datos que contenga estas "firmas" ya que deben ser incorporadas por el propio fabricante del antivirus. Otro problema es que sirve solo para virus ya conocidos pero no ofrece protección para los virus nuevos que aún no han sido agregados a la base de datos (por el fabricante primero y luego por el propio usuario). Otro problema es que ciertos  virus (Melissa por ejemplo) son polimorficos es decir cambian su código por lo que requieren una firma diferente para cada una de sus variantes. Por último escanear un disco grande es un proceso lento y se hace normalmente solo cuando hay sospecha de infección lo que limita también su capacidad de protección

  2. Monitoreo antivirus en tiempo real, es una variante del método anterior solo que el escaneo se produce automáticamente cada vez que se carga un programa lo que elimina la necesidad de escanear periódicamente todo el disco. Por otra parte tiene todos los demás inconvenientes del método anterior, a los que se suma que tener un antivirus cargado constantemente empobrece el desempeño de las aplicaciones y del sistema en general, además que crea a veces conflictos con los programas que se están ejecutando.

  3. Chequeo de integridad: se trata de chequear los valores de CRC (códigos de redundancia cíclica) para verificar que los archivos no hayan sufrido cambios, este método tiene varios problemas ya que muchos archivos sufren cambios como parte habitual de su funcionamiento

  4. Inmunizadores contra virus, que son una variante de los métodos 1 y 2 con la diferencia que avisan que un archivo se ha infectado o previenen la infección, tiene los mismos problemas del método 2

Un nuevo enfoque, los bloqueadores de comportamiento

Todas las medidas antivirus que se enumeraron arriba tienen un problema común, es muy difícil distinguir si un código se trata realmente de un virus o es parte del funcionamiento normal del programa o documento. Podría en teoría disponerse de un virus "heuristico" que busca código probable de virus) muy avanzado, pero nos daría la molestia de preguntarnos a cada rato si debe tratar la situación como un ataque de virus o si se trata de algo normal.

El nuevo enfoque de bloquear comportamientos sospechosos sigue un poco la idea de los antivirus heuristicos. Para ponerlo más claro, cada vez que detecta que desde un programa o un documento se intentará formatear el disco duro advertirá de esto al usuario, poniéndolo sobre la pista de un posible ataque de virus. Este enfoque, también conocido como "sandbox" (caja de arena) da una buena protección incluso contra virus desconocidos. El problema es que el propio sistema operativo o algunos programas utilitarios muchas veces tienen comportamiento similar a un virus y se requiere conocimiento de parte del usuario para discriminar si se trata de una operación legítima o el intento de un virus.

Para los virus de macro existe otra gama de contramedidas, para mencionar algo simple podríamos grabar en la plantilla Globa.bas una rutina como:

Sub Autoexec()
      DisableAutoMacros
              MsgBox "Auto macros deshabilitados"
End Sub

Aunque no sería una protección perfecta, protegería contra todos los virus de macro que se activan automáticamente al abrir un documento. Con un poquito más de código podríamos poner excepciones que incluyan a nuestros propios macros (si los hay) que sabemos que son seguros.

Algunos antivirus específicos contra virus de macro son AVP Office Guard (muy bueno) y Sophos (bueno). Finalmente recordemos que todo virus necesita de un elemento activo, o sea un código, si bien los virus de macro tienen la fuerza de ser muy fáciles de programar e incluso independientes del sistema Operativo (existe Office para Mac y Windows por ejemplo) también tienen una debilidad: su código es relativamente fácil de descubrir. Cualquier documento de Office que contenga alguno de estos patrones:

Winword/Concept 57573649 6e666563 746f7206 06646f02 6904734d 65240c67
Winword/Nuclear 63e6e5e5 ee8fe6e3 e48fefe3 fd87b1c9 8aeaad8c a7918c93
Winword/Nuke-b 6f616464 6e0467c2 80673b80 0506076a 083a5061 794c6f61
Winword/DMV 740c6c01 0064521a 1d646452 1d690770 72657365 6e740c6c
Winword/Colours d2cfd0c3 f2efc8d5 d2c7caca c3c2a3cf a7cfa0b8 c2c9a58a
Winword/Hot a1869dad 889d8ca7 86cde58e 0369ec8e ee69ec8e e868ecef
Winword/Atom c9cbb4ca a7a6c2c8 aec1e0a6 c2bcbbc2 8fcfa2e7 d2c9cbc3
Winword/Xos 88ea938b e788c0e1 d8e7fcaa 83e784f9 e7e0e7e0 e7fdfafc
Winword/Impost 05690169 126c0000 126c0000 060c6a03 444d561e 646f0269
Winword/FormatC adb2beab ffbce5ff f0aabb8d b8f25fb8 315fdab5 d89c9092
Ami/GreenStripe 302c302c 342b3130 32342c22 69747322 2c226974 27732229
Word2/Offnen 6572f666 666e656e 1107126a 01110518 0a001106 1107126a

Podemos afirmar que tiene un virus, lo mismo de un mail que contenga código VB Script o VBA sin justificación aparente o documentos del Word que contengan macros que no estén justificados por el contenido (ningún documento simple por ejemplo necesita contener macros). Es relativamente fácil chequear esto, cuando tenemos un documento sospechoso simplemente vamos a "Herramientas" y "Editor de Visual Basic" y examinamos si hay código. El código puede estar abierto (lo que nos da una idea de lo que hace) o protegido (lo que seria altamente sospechoso de que sea un virus)