Exploramos diferentes métodos que pueden aplicarse a distintos documentos del paquete de Office para extraer su contenido (en algunos casos sin abrirlo) y determinar si es malicioso o no.
Una de las tantas estrategias utilizadas por los cibercriminales para intentar infectar las computadoras de sus víctimas es mediante el envió de un documento del paquete de Office (documentos de texto, hojas de cálculo, presentaciones, entre otros) con contenido malicioso. El documento puede estar adjunto en un correo electrónico o en algunos casos comprimido dentro de otro archivo, por ejemplo, un archivo ZIP.
Estos documentos utilizados como señuelo suelen hacer referencia a distintas temáticas (facturas, comprobantes, etc.) con el objetivo de hacer creer que se trata de un archivo legítimo y de esta manera engañar al usuario para que lo ejecute. Así, el atacante logra correr su código malicioso en el equipo de la víctima, como puede ser, por ejemplo, un spyware que se descargue desde un sitio malicioso o desde un sitio legítimo que fue comprometido.
Los cibercriminales aplican distintas técnicas sobre estos documentos del paquete Office para evadir las soluciones de seguridad instaladas en el equipo y ocultar sus intenciones. Algunas de estas técnicas son el uso de las macros con distintos niveles de ofuscación o la descarga de un template desde una URL maliciosa embebida dentro del documento.
Conceptos teóricos a tener en cuenta
Antes de mencionar los métodos que nos podrían ayudar a determinar si un documento tiene contenido malicioso o no, es importante tener presente algunas cuestiones relacionadas con estos:
- Archivos con extensión terminada en X (docx, xlsx, etc.):
Este tipo de archivos están organizados en una estructura con una colección de múltiples archivos con formato XML en base al estándar Office Open XML (OOXML) desarrollado por Microsoft. Por la convención adoptada en este estándar, los archivos OOXML son archivos ZIP, por ende, podemos abrir uno de estos archivos con alguna herramienta de compresión/descompresión. Por ejemplo, con 7zip.
Una vez descomprimido, observaremos la existencia de muchos archivos. Por ejemplo, el archivo [Content_Types].xml que contiene información de todo el documento; o archivos que terminan con la extensión “rels” (por ejemplo “document.xml.rels”) que son utilizados para establecer relaciones entre distintas secciones del documento —estilos, pie de página o URL con enlaces externos.
Esta definición nos será de ayuda más adelante en la sección: Detectando URL maliciosas en el documento.
Imagen 1. Abrir y visualizar un archivo docx con la herramienta 7zip
- Macros
Una macro es una serie de instrucciones agrupadas bajo un mismo comando que permiten ejecutar una tarea de forma automática en un documento. De esta manera, los cibercriminales desarrollan macros (por lo general utilizando el lenguaje de programación Visual Basic) para ponerlas dentro de documentos con fines maliciosos.
Imagen 2. Ejemplo de macro maliciosa dentro de un documento de Word, vista desde el Visual Studio for Applications.
- Object Linking and Embedding (OLE)
OLE es una tecnología desarrollada por Microsoft que permite tomar un Objeto de un documento y colocarlo en otro; por ejemplo, incluir una tabla de una planilla de Excel en un documento de Word.
La inclusión puede hacerse por medio de la vinculación (linking) contra otra aplicación, permitiendo así que los datos no estén en el archivo original. Otra opción puede ser que estén incrustados (embedding) haciendo que sean parte del mismo documento y desligándolos de su archivo de origen.
Los criminales pueden utilizar estos objetos OLE para incluir código malicioso desarrollado, por ejemplo, en Visual Basic o JavaScript, para que se ejecute cuando el usuario interactúa con ellos.
Por último, si vamos a realizar un análisis sobre un documento es conveniente hacerlo dentro de una máquina virtual para evitar una posible infección sobre la computadora física.
A su vez, si uno recibe un documento cuya procedencia se desconoce, es recomendable no descargarlo ni tampoco ejecutarlo.
Métodos para determinar si tienen contenido malicioso:
Buscar el archivo en Virus total
VirusTotal es un sitio que nos ofrece de forma gratuita la posibilidad de analizar archivos sobre distintas soluciones de seguridad, así como también realizar búsquedas de un archivo por hash o realizar búsquedas a partir de una URL.
Los archivos que se suben a este sitio pueden ser descargados por cualquiera de sus usuarios registrados que tengan un servicio premium. Por este motivo, no es recomendable subir archivos que contengan información sensible. Si se desea realizar una búsqueda por algún archivo en particular se puede hacer por medio de su respectivo valor hash.
Para obtener el hash de un archivo se puede levantar una consola de PowerShell y ejecutar el comando Get-FileHash <Archivo>. En este caso vamos a hacerlo sobre un documento sospechoso.
Imagen 3. Obtención del hash de un archivo.
Imagen 4. Buscamos el archivo en VirusTotal usando el hash que obtuvimos.
Imagen 5. Resultado de la búsqueda en VirusTotal.
Como podemos ver, el archivo se encuentra en VirusTotal y es detectado como malicioso por distintas soluciones de seguridad.
Analizar el archivo con Oletools y Oledump
En esta parte vamos a extraer y analizar objetos OLE o macros que estén dentro de un documento malicioso. Para ello, utilizaremos dos herramientas: oletools y oledump.py.
Para analizar un archivo con Oledump, primero vamos a ejecutar el programa y le indicamos el documento que deseamos analizar.
Imagen 6. Resultado del análisis del documento con Oledump.
Como resultado del análisis podemos ver distintos streams enumerados. Los que contienen la letra M indican la existencia de macros.
Con el argumento -s <STREAM_NRO> podemos ubicarnos sobre alguno de estos streams y con el argumento -v podemos ver el código de la macro.
Imagen 7. Visualización de una macro con Oledump.
Como se aprecia en la Imagen 7, logramos ver una de las macros del documento, si bien la misma podría no ser maliciosa, el nivel de ofuscación que posee nos indica lo contrario.
Si al comando ejecutado anteriormente (en la Imagen 7) le agregamos “> NOMBRE_ARCHIVO” (en este ejemplo el nombre es “macro”), podremos guardar el contenido de la macro en un nuevo archivo para su análisis.
Imagen 8. Guardamos el contenido de la macro en un nuevo archivo con el nombre “macro”.
Imagen 9. Visualización de la macro desde el archivo creado.
Oletools ofrece muchas herramientas. En este caso utilizaremos el script “olevba.py” para extraer y analizar macros de un documento.
Ejecutamos el script con el argumento -a para que analice el documento.
Imagen 10. Análisis del documento con el script olevba.py.
Como se puede apreciar en la Imagen 10, hay algunas cosas sospechosas en el archivo. Por ejemplo, las palabras claves Create o CreateObject, entre otras.
A continuación, ejecutamos de nuevo el script (olevba.py) con los comandos, –decode (visualizar las strings desofuscadas del código) y –deobf (intentar desofuscar partes del código).
Imagen 11. Visualizando macros del archivo con Oletools.
Repitiendo el paso descrito en la Imagen 8 con Oledump podemos extraer las macros en un nuevo archivo para su análisis.
Por último, mostramos un análisis sintetizado de la actividad maliciosa de este documento. El mismo trataba de ejecutar un código malicioso en PowerShell (escondido en la página del documento) que se comunica con una URL maliciosa que va a descargar y ejecutar un ejecutable.
Imagen 12. Código relevante de la macro: crea un proceso para ejecutar un código PowerShell.
Imagen 13. Código PowerShell ejecutado por el documento malicioso descarga y ejecuta un archivo malicioso descargado desde una URL.
Detectando URL maliciosas en el documento
Algunas veces, los cibercriminales en vez de poner el código malicioso en el documento lo que hacen es invocar a otro documento mediante una URL maliciosa y al momento de abrirlo, no estamos viendo el contenido del documento en sí, sino que estamos viendo otro documento que se descargó de Internet. Esta técnica también es conocida como template injection.
Para buscar la existencia de estas URL, abrimos el documento con la herramienta 7zip y vamos a ir extrayendo los archivos que contiene. Partimos por extraer archivos como “document.xml.res” o “webSettings.xml.res” buscando tags o atributos como sourceFileName, attachedTemplate,Target,TargetMode.
También buscamos alguna URL que sea distinta a las oficiales de Microsoft. Ejemplo de URL oficiales pueden ser http://schemas.openxmlformats.org/, http://schemas.microsoft.com/.
Imagen 14. Extracción de archivos con extensión “.xml.rels” del documento malicioso.
Imagen 15. Tag sospechoso encontrado en el archivo webSettings.xml.
Imagen 16. Archivo webSettings.xml.rels con una URL sospechosa vinculada por ID al Tag sospechoso.
Como observamos abajo en la Imagen 17, logramos obtener una URL sospechosa que es invocada por medio de una relación sobre el elemento con ID “rId1”. El hecho de que la URL no pertenezca a las oficiales de Microsoft es un buen indicador para sospechar de este documento.
También podemos buscar la URL en VirusTotal para obtener más información de la misma.
Imagen 17. Búsqueda de la URL en VirusTotal.
Detectando macros desde el documento
Este método requiere que abramos el documento, por ende, antes de abrirlo debemos tener habilitada la protección contra macros. Los pasos para habilitar la protección pueden encontrarse en el siguiente enlace.
Una vez que tengamos el documento abierto tenemos que ir a la sección View -> Macros -> View Macros.
Imagen 18. Accediendo a la visualización de macros desde un documento abierto.
Hecho esto, nos aparece un menú con las macros del documento. Para poder ver las macros vamos a tener que crear una nueva macro. Para ello, ponemos un nombre cualquiera en la sección “Macro name” y a su vez, en la sección “Macros in”, seleccionamos la opción “All active templates and documents”. Esto nos va a habilitar la opción “Create”, la cual usamos para abrir el Visual Basic for Applications.
Imagen 19. Creación de una nueva macro.
Al abrirse el Visual Basic for Applications podemos ver el documento que estamos analizando y sus subcarpetas. Si seleccionamos cada elemento de sus subcarpetas podemos obtener el código fuente de cada macro en caso de existir.
Imagen 20. Extrayendo información de las macros.
Como podemos ver en la imagen anterior, detectamos una macro dentro del documento que posee un alto nivel de ofuscación. Como ya mencionamos anteriormente, esto es un buen indicador para sospechar de este documento.
Analizando texto invisible
A veces los criminales esconden parte de su código malicioso en una de las páginas del documento para luego ser manipulado y ejecutado, a través de una macro, un objeto OLE, etc.
Este código es posible que este con un tamaño de letra muy chico y del mismo color que el de la hoja del documento, logrando así que una persona no lo pueda detectar a simple vista. En caso de detectar algo así estaríamos ante un indicador de que probablemente el archivo contiene un código malicioso.
Para ello, nuevamente vamos a tener que abrir el documento y seleccionar todo lo que este contenido en él, haciendo CTRL + A.
Imagen 21. Seleccionando todo el contenido del documento.
En el ejemplo de la Imagen 21, lo que debería llamarnos la atención es que si el documento solo tuviese una imagen por qué cuándo seleccionamos todo el contenido nos pinta partes que se ven vacías. Para comprobar esto, copiamos el contenido seleccionado y lo pegamos en otro documento.
Imagen 22. Pegamos el contenido sobre un documento nuevo.
Como podemos observar en la Imagen 22, tenemos un texto con tamaño 1 y sobre la parte seleccionada podemos ver cómo el auto corrector de Word indica que hay texto con errores. Ahora solo quedaría aumentar el tamaño y cambiar el color para ver su contenido.
Imagen 23. Visualización de un código sospechoso luego de modificar las propiedades del texto.
Como se observa en la Imagen 23, ocultos a la vista había una gran cantidad de caracteres extraños. Algunos caracteres se repiten con cierta lógica, posiblemente para ser reemplazados por alguna función. Viendo esto, es muy probable que este documento contenga algo malicioso y, si queremos analizarlo, quizás tengamos que combinar esto con otro método, por ejemplo, usar las herramientas Oletools u Oledump.
Conclusión
Estos son algunos de los métodos que podríamos utilizar si recibimos un documento de una fuente sospechosa y queremos detectar si contiene código malicioso o no. Es importante recordar que los cibercriminales constantemente están creando nuevas técnicas de evasión u ofuscación, por lo que es posible que algunas de estas técnicas (o todas) no puedan aplicarse en algún caso particular.