lunes, 6 de octubre de 2008

Macros virulentos. arquitectura a través de una ventana (I)

Mr. I/O [blackhat4all@gmail.com]

Nota: El autor no se hace responsable del uso que se le pueda dar a esta información. La misma solo ha sido creada con fines educativos.

“No conozco a nadie – común – que utilice macros, únicamente a los creadores de virus.”
Nigromante
A mi novia, quien fuera una vez una gran mecenas para todo tipo de virus.
A su máquina, que lo soportó con valor.
A Karpersky, todos sabemos porque

Un tragaluz a la arquitectura virulenta en las macro.


Overview

Muchos años han pasado – 59 – desde que en “1949, el matemático estadounidense de origen húngaro John von Neumann[1], en el Instituto de Estudios Avanzados de Princeton (Nueva Jersey), planteó la posibilidad teórica de que un programa informático se reprodujera”.[2]

Pero solo en 1950 y tantos esta predicción se convirtió en verdad, esto ocurrió como muchos saben en los laboratorios de Bell, donde algunos h@ckers[3] – si h@ckers, no terroristas – desarrollaron un hermoso juego de elites llamado Core[4] Wars en el que los jugadores creaban minúsculos programas informáticos que atacaban y borraban el sistema del oponente e intentaban propagarse a través de él.

En 1983 – justo cuando la humanidad lograba identificar el virus del sida – un estudiante de ingeniería – bellos tiempos los de la universidad – estadounidense llamado Fred Cohen – por medio de una analogía poética – impulsó el término 'virus' para “describir un programa informático que se reproduce a sí mismo”[5] , dándole un nombre oficial a estos software.

Este es el preámbulo, la génesis de la gran guerra, el Big Bang de los ambientes hostiles, de allá para acá se han escrito muchos materiales – con buena o mala calidad – cientos de artículos teorizantes, y código – mucho código – código sano para demostrar lo ya demostrado, código maligno para infestar, y código heroico para desinfectar. Incluso código malintencionado para de$infectar lo que anteriormente había $ido infe$tado por la$ mi$mas mente$ metalica$.

Y en el medio, indefensos, los usuarios – como siempre – quienes no saben – en muchos casos – que nuestros virus son virtuales primos de la criatura de Mary Wollstonecraft Shelley[6] y no organismos vivos. Ellos, las verdaderas victimas[7], están atrapados en esta guerra al ser los daños colaterales, sin siquiera entender por qué o cómo.

Ante tanto impacto incuestionable el autor[8] ha decidido elaborar un material que pueda explicar como funciona la programación de un virus, y como los arquitectos de la destrucción aprovechan los recursos que se dejaron en vísperas de facilitar el trabajo a los usuarios especializados para un bien común. Nada en más desarmonía con los principios de una ética h@cker. Para ello propone que miremos primero que se esconde detrás de las definiciones fundamentales.

Un poco de historia

Hace algunos años ya cuando alguien preguntaba que si un documento – hecho con cualquier editor – podría infestarse con un virus, y que este pudiera a su vez infectar a una aplicación, la respuesta era sin dudas una sonrisa. Pues cualquier miembro de la comunidad le tendría que “explicar con paciencia que un virus necesita en algún momento ganar el control del ordenador y que, por tanto, los ficheros de datos resultan inapropiados para tal fin y sólo los COM, EXE, SYS, […] etc. son objetivo y presa de infecciones.”[9] Y eso era verdad.

Pero la idea de estos programas ya había sido discutida en un artículo – o conferencia, no recuerdo pues no estuve allí – por el profesor von Neumann, y lo cierto es que si bien de él nadie se rió – por lo menos en su cara – la historia luego le daría la razón.

Microsoft extendió entonces el uso de macros – ya estaban presentes desde la versión 2.0 – robustecidas en la versión 6.0[10] de su office que según Juan-Mariano de Goyeneche “se popularizaron debido, en gran parte, a que su funcionalidad y posibilidades”[11] ideas que el autor de este tema no comparte, ya que se inclina a pensar más como el colega[12] Nigromante quien refiere que las mismas solo son utilizadas por los creadores de virus. Lo valido es que existen, que son una amenaza, y que es necesario entender primeramente los conceptos que envuelven.

El autor está de acuerdo con la opinión vertida por otros colegas acerca de estos virus – digamos que – del Word son tan comunes al ser “la forma más sencilla de infectar un ordenador, porque este en un lenguaje de alto nivel y cualquiera […] puede aprender a utilizarlo estudiando unos cuantos comandos, y porque […] está en una variante del Basic[13], y – en otras épocas cuando el MINED cumplió con más ahínco la tarea de preparar al hombre para la vida – quién de la comunidad no aprendió a programar en Basic con la aparición de los MSX – Basic y QBasic.

De las macros se debe comenzar por referir que las funciones que pueden ejecutar son muy diversas: “prácticamente todo lo que se puede hacer con un ratón dentro del procesador de textos tiene su equivalente en forma de comandos Word.” todas esas funcionalidades se “le han añadido al editor mediante numerosas macros, cuyo código fuente es además completamente visible”[14].

Para entender esto es suficiente con seguir los consejos elementalmente explicados por Juan-Mariano: “abrir el fichero HTML.DOT y allí seleccionar Herramientas/Macros y de entre todas las que aparecen seleccionar una: por ejemplo OpenlnHTMLCode o HTMLSetOutput. Después pulsar el botón "Modificar" y aparecerá la macro. Es importante hacer notar que lo que se muestra es el propio código fuente que se interpreta en el momento de ejecución. Incluso los comentarios están ahí.”[15]

Pero: ¿qué es un virus macro en el sentido directo de la palabra? La respuesta – como muchas otras – está en los artículos de la Wikipedia – viva el ñu

Virus de macros: un macro es una secuencia de ordenes de teclado y mouse asignadas a una sola tecla, símbolo o comando. Son muy útiles cuando este grupo de instrucciones se necesitan repetidamente. Los virus de macros afectan a archivos y plantillas que los contienen, haciéndose pasar por una macro y no actuarán hasta que el archivo se abra o utilice.

De estos «macro virus» es importante informar que “son capaces de tomar el control del ambiente en el que «viven», llegando incluso a ser capaces de saltar de una plataforma a otra (por ejemplo, un documento de una aplicación creado en PC puede «infectar» a una Mac)”[16].

Las Macros

Una relectura de lo que envuelve el término macro nos lleva a las macroinstrucciones. Una macroinstrucción[17] es por tanto una instrucción compleja, formada por otras instrucciones más sencillas. De la misma se debe entender que “tiene que estar almacenada, el término no se aplica a una serie de instrucciones escritas en la línea de comandos enlazadas unas con otras por redirección de sus resultados (piping) o para su ejecución consecutiva”, “suelen almacenarse en el ámbito del propio programa que las utiliza y se ejecutan pulsando una combinación especial de teclas o un botón especialmente creado y asignado para tal efecto”.

La diferencia anatómica entre una macroinstrucción y un programa es que “en las macroinstrucciones la ejecución es secuencial y no existe otro concepto del flujo de programa que por tanto, no puede bifurcarse.”- en otras palabras no hay alternativas, es solo código en una sola dirección.

Su creación se origina por la idea de poseer un “grupos de instrucciones que tienen un seguimiento cronológico usadas para economizar tareas; una macro no es más que un conjunto de instrucciones tales como "borrar archivo", "añadir registro", etc., y que se almacenan en una ubicación especial.”

Algunos lenguajes de programación – en su parte oscura – incluyen la programación de macros. Estas son incluidas con el fin de evitar al programador la – catalogada por la literatura como – tediosa repetición de partes idénticas de un programa, los macroprocesadores pueden ser encontrados tanto en ensambladores como en compiladores, en teoría – en la práctica es mejor usar procedimientos y funciones dinámicas – permiten definir una abreviatura para representar una parte de un programa y utilizar esa abreviatura cuantas veces sea necesario. Para utilizar una macro – hay que hacer lo mismo que con cualquier otro recurso – primero hay que declararla. En la declaración se establece el nombre que se le dará a la macro y el conjunto de instrucciones que representará.

Para invocarla (macrollamada) se escribirá el nombre en cada uno de los lugares donde se requiera la aplicación de las instrucciones por ella representadas.

Otro aspecto en contra es que si bien el código fuente tiende a disminuir, el código objeto – ojo el autor se refiere al código que puede ser devuelto como fichero .obj – tiende a ser mayor que cuando se utilizan funciones.

Estas macroinstrucciones que se consideran en la literatura como una extensión de los lenguajes. Similarmente es tratado al procesador de macroinstrucciones o macroprocesador como una extensión del ensamblador o compilador utilizado.

Las funciones del macroprocesador lo ubican como el encargado de – en una primera pasada – registrar todas las declaraciones de macros y de rastrear el programa fuente para detectar todas las macrollamadas. Luego en cada lugar donde encuentre una macrollamada, el macroprocesador hará la sustitución por las instrucciones correspondientes. A este proceso se le denomina expansión de la macro.

Los virus de Word

Estos virus sencillos se programan en un lenguaje llamado WB (Wordbasic), este no es otra cosa una variante del basic. Bastante similar al QBasic y al visual Basic, en cuanto a estructuras. Estos virus resultan bastante interesantes – a mi juicio – debido a su sencillez y economía de líneas, te puede sorprender incluso que algo tan simple funcione.

Pero: ¿Cómo funcionan? ¿Cómo se ejecutan estas macros?
En el séquito del WinWord.exe – este es el nombre del Word – existe un archivo llamado normal.dot. Este es el almacén de macros de Word. Buscando allí los desarrolladores de virus encontraron 5 macros automáticas que se desencadenaban cada vez que se procuraba cierto evento – Por supuesto cada una asociada a su respectivo evento del sistema.
autoclose – Se ejecuta al cerrarse un archivo
autoopen – Se ejecuta al abrirse un archivo
autonew – Se ejecuta al crearse un archivo.
autoexec – Se ejecuta al entrar en el Word.
autoexit – Se ejecuta al salir del Word.

Para explicarlo – a más bajo nivel, pero no se acostumbren – es necesario señalar que si se crea una macro llamada autoclose que visualice un nombre en pantalla. Cada vez que se cierre el archivo el nombre en pantalla será visible.

Quedando claro que no tenemos un virus residente en memoria (TSR) está residente simplemente en el normal.dot, esperando que se ejecute el evento que desencadenará sus acciones.

Todo es hasta ahí comprensible, bastante sencillo de entender, y cualquiera puede hacer un programa que tenga un comportamiento similar. Sin embargo son válidas las preguntas sobre la estrategia de los creadores ¿Y cómo se produce el contagio al recibir un archivo contaminado? ¿Cómo modifica ese archivo – el normal.dot – y se copia a nuestro sistema?

Resulta significativo esclarecer ante todo que en los archivos también se puede “sepultar” macros, y que para facilitar las cosas a los genios del mal Microsoft les regaló el macro autoopen. Dicho macro se ejecutaría cada vez que abres un archivo. Este macro tiene un hermano igual de interesante, el autoclose, cuyo comportamiento será similar solo que cada vez que lo cierres. Claro está que eso solo funcionaría con el normal.dot, pero existe otro tipo especial de archivo: la plantilla, tipo de archivo que también permite la ejecución de macros. Entonces es entendible que si se trata a los archivos grabándolos como tal, y no como archivos normales, pueden ser ejecutados sus macros directamente desde los archivos.

Para ello basta con usar un simple comando:
archivoguardarcomo.formato=1[18]

El siguiente problema vino aparejado con la copia del virus desde un archivo infectado al archivo normal, esto queda resuelto de manera sencilla, sin ser necesarios punteros para guardar valores, uso de registros a lo ensamblador o cualquier otra cosa similar. Recuerden que el Basic es un lenguaje de alto nivel que permite realizar esto con una simple instrucción
macrocopiar "doc1:autoclose","global:autoclose"

Esta orden se refiere a la copia del macro autoclose situado en el archivo doc1, al macro autoclose en normal.dot. Nótese que no se hace referencia al archivo de macros normal.dot por su nombre, sino que es referenciado a través de la expresión global. De manera análoga se puede hacer lo inverso para copiar del macro autoclose de global a doc1:
macrocopiar "global:autoclose","doc1:autoclose"

Lo que sucede es que de esta manera esta escrito sin “belleza” lo más común es que aparezca escrito de esta otra forma – o de alguna otra más creativa:
macrocopiar "global:autoclose",nombreventana$()+":autoclose"

Este mandato más estilizado copia la macro autoclose de global al archivo que va a ser cerrado. Donde nombreventana$() es una función del Word que devuelve el nombre de la ventana abierta. Para entonces hay quien debe estar pensando que quizás se deben montar algunas opciones especiales extras para poder escribir el virus, pero esto no es así. Para escribirlo basta con seguir el camino que comienza en el menú herramientas, allí elegimos la opción macros y aparece el editor con todas las macros existentes actualmente en tu Word y si tienes alguna plantilla abierta te proporciona la posibilidad de ver los macros incluidos en dicha plantilla.

Otra idea significativa es la de cómo eliminar un virus macro presente. Para ello basta con que sospeches que tienes un huésped y paranoicamente borres el archivo normal.dot. Para que el Word vuelva a crear uno nuevo sin rastros de intoxicación.

La tarea aun no ha concluido, pues aunque ya has limpiado el normal.dot aun tienes la contaminación en los distintos ficheros con los que has trabajado, para ello debes abrir cada archivo sospechoso, pero no con el editor del Word – al cometer el delicado error de abrirlos con el Word volveremos a la misma, por una reinfección – en si, sino con el botón organizador… que aparece en el editor de macros – ya saben llegar a él – y borrar la totalidad de las macros que contengan los archivos[19].

Para entender mejor lo explicado propongo utilizar la fuente de un virus no tan complejo – al menos pienso así – que nos permita entender en la práctica los procesos, debido a esto seleccionamos el Taguchi[20]. Este programa está conformado por dos macros la autoclose y otra llamada nigro, cuya utilidad es la de conocer si están infestados o no algún archivo y normal.dot

continuará...



Artículos relacionados


No hay comentarios: