Parte: 6 — Análisis de malware · Fuente: Learning Malware Analysis (Monnappa) y recursos de Didier Stevens ⏱️ Duración estimada: 110 min · Nivel: Intermedio
Analizar el vector de entrega más común en phishing: documentos ofimáticos con macros VBA y PDFs maliciosos. El alumno aprenderá a extraer y desofuscar macros, seguir la cadena de descarga/ejecución, examinar la estructura interna de un PDF y encontrar el JavaScript o los objetos que detonan la infección, todo sin abrir el documento en su aplicación real.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Formatos OLE vs OOXML | Determina la herramienta de extracción |
| 2 | Macros VBA y autoejecución | AutoOpen/Document_Open detonan |
| 3 | Desofuscación de VBA | El código real está escondido |
| 4 | Estructura de PDF | Objetos, streams, xref |
| 5 | JavaScript y acciones en PDF | /OpenAction, /JS, /Launch |
| 6 | Cadena de entrega (LOLBins) | mshta, powershell, wscript |
| 7 | Extracción de IOCs | Alimenta detección y bloqueo |
Los documentos maliciosos (maldocs) son uno de los vectores de acceso inicial más comunes, porque explotan la confianza: un Word, un Excel o un PDF parecen datos inertes, no programas, y por eso la gente los abre sin recelo. Pero estos formatos pueden contener y ejecutar código —macros, JavaScript, acciones automáticas—, y un maldoc bien hecho convierte "abrir un adjunto" en "ejecutar malware". El análisis de maldocs tiene su propio instrumental porque no se analiza un ejecutable, sino un formato de documento del que hay que extraer el código embebido para estudiarlo. Casi siempre el documento no es el malware final: es un cargador (la primera etapa de la cadena de entrega) que descarga o despliega la carga real.
Los documentos de Office vienen en dos formatos que hay que distinguir. El antiguo OLE (Object
Linking and Embedding, los .doc/.xls) es un formato binario compuesto, un "sistema de ficheros
dentro del fichero". El moderno OOXML (.docx/.xlsx) es en realidad un archivo ZIP que
contiene XML y otros recursos —descomprimirlo revela su estructura—. El código malicioso en Office son
casi siempre las macros VBA (Visual Basic for Applications), y la clave es la autoejecución:
macros con nombres especiales como AutoOpen o Document_Open se ejecutan automáticamente al
abrir el documento, sin más interacción que "habilitar contenido". La herramienta de referencia es
oletools (olevba), que extrae el código VBA de un documento Office y señala las construcciones
sospechosas (autoejecución, ofuscación, llamadas a shell). El VBA extraído suele estar ofuscado
—cadenas troceadas y recombinadas, nombres sin sentido, codificación— y desofuscarlo (a mano o con
herramientas como ViperMonkey que lo emulan) revela lo que hace: casi siempre construir y ejecutar un
comando que invoca la siguiente etapa.
Los PDF tienen una estructura de objetos (un árbol de elementos: páginas, fuentes, streams) y
pueden contener JavaScript y acciones automáticas. El vector clásico es un objeto /OpenAction
que ejecuta JavaScript al abrir el documento, o acciones que lanzan un fichero embebido o una URL. El
JavaScript en PDF históricamente explotaba vulnerabilidades del lector (Adobe Reader), aunque los lectores
modernos lo restringen. Herramientas como peepdf, pdf-parser y pdfid (de Didier Stevens)
analizan la estructura, listan los objetos sospechosos (los que contienen JavaScript, acciones, ficheros
embebidos) y extraen el código para su análisis. Como en Office, el JavaScript suele estar ofuscado y hay
que desofuscarlo.
El patrón que une a todos los maldocs es la cadena de entrega mediante LOLBins (Living Off the
Land Binaries, Clase 159): en lugar de traer un
ejecutable (que el antivirus detectaría), el documento invoca programas legítimos del sistema para
hacer el trabajo sucio —powershell.exe para descargar y ejecutar la carga, mshta.exe para ejecutar un
HTA remoto, wscript.exe/cscript.exe para scripts, certutil.exe para descargar ficheros, regsvr32
para ejecutar código—. Estos binarios son de Microsoft, están firmados y son de confianza, así que su uso
levanta menos sospechas. Reconocer la invocación de un LOLBin en el VBA o el JavaScript desofuscado es el
momento en que se entiende qué hace el maldoc. El producto del análisis es la extracción de IOCs:
las URLs de descarga, los comandos ejecutados, los nombres de fichero, los hashes de las cargas —todo lo
necesario para detectar y bloquear la campaña—. La lección de la clase es que analizar un maldoc es
extraer y desofuscar el código embebido para reconstruir la cadena de entrega, y que el documento
casi nunca es el final: es la puerta por la que entra todo lo demás, lo que lo hace un objetivo prioritario
para la detección temprana.
AutoOpen.| Término | Definición concisa |
|---|---|
| Documento malicioso (maldoc) | Documento que contiene y ejecuta código |
| Cargador | Primera etapa que descarga o despliega la carga real |
| OLE | Formato binario compuesto de Office antiguo (.doc/.xls) |
| OOXML | Formato ZIP de Office moderno (.docx/.xlsx) |
| Macro VBA | Código embebido en documentos Office |
| AutoOpen / Document_Open | Macros que se ejecutan al abrir el documento |
| oletools / olevba | Herramientas que extraen el VBA |
| ViperMonkey | Emulador de VBA para desofuscar |
| Objeto PDF | Elemento del árbol de un PDF |
| /OpenAction | Acción que ejecuta código al abrir el PDF |
| peepdf / pdfid | Herramientas de análisis de PDF |
| LOLBin | Binario legítimo del sistema abusado por el malware |
| powershell / mshta / certutil | LOLBins comunes en cadenas de entrega |
| Cadena de entrega | Secuencia que lleva de abrir el doc a la carga final |
| Extracción de IOCs | URLs, comandos y hashes obtenidos del análisis |
olevba, oleid, oledump.py) para Office.⚠️ Nota ética y de seguridad: analiza los documentos con herramientas de línea de comandos sin abrirlos en Word/Adobe, y siempre en la VM aislada. Abrir el documento en su aplicación puede detonar la macro o el exploit. Trabaja solo con muestras autorizadas.
Documento Office con macros:
oleid documento.doc. ¿Tiene macros?, ¿VBA?, ¿objetos embebidos?olevba documento.doc. Localiza AutoOpen/Document_Open y marca las cadenas ofuscadas.Chr(), base64 y XOR con CyberChef hasta obtener el comando real (típicamente un powershell -enc ...).-EncodedCommand es base64 UTF-16LE) y extrae la URL de descarga y el payload de segunda etapa.PDF malicioso:
pdfid.py doc.pdf para contar /JS, /OpenAction, /Launch, /EmbeddedFile.pdf-parser.py --search JavaScript doc.pdf y vuelca el stream del JS.T1566, T1059)..doc (OLE) y .docx/.xlsm (OOXML).Chr() + concatenación.powershell -enc y extrae la URL.pdfid.py y prioriza qué objeto revisar./OpenAction con /Launch.Analiza un documento malicioso (Office o PDF) y entrega la cadena de ejecución reconstruida desde la apertura hasta el payload de segunda etapa, con la macro/JS desofuscado y los IOCs. Criterio de aceptación: presentas el comando final desofuscado (p. ej. el PowerShell decodificado) y al menos una URL/IOC de la segunda etapa, sin haber abierto nunca el documento en su aplicación.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Abrir el doc en Word para "verlo" | Detona la macro; usa solo oletools |
olevba sin resultados |
Macro en objeto embebido; revisa oledump.py por stream |
| PowerShell ilegible | Está en base64 UTF-16LE; decodifica con CyberChef |
| PDF "sin JS" pero sospechoso | Revisa /Launch, /EmbeddedFile y URIs, no solo /JS |
| Perder la segunda etapa | La URL responde en INetSim; captura el payload en el lab |
❓ ¿Por qué no abrir el documento? Porque la macro o el exploit se ejecutan al abrir. Las herramientas de línea de comandos extraen el contenido sin detonarlo.
❓ ¿Siguen usándose macros? Menos desde que Office bloquea macros de Internet por defecto, pero persisten junto a otros vectores (HTML smuggling, LNK, contenedores).
❓ ¿Cómo decodifico un PowerShell ofuscado? Empieza por -EncodedCommand (base64 UTF-16LE) y luego deshaz capas (gzip, replace, format) con CyberChef.
Clase 151 — Rootkits y bootkits
Clase 153 — Análisis de malware en scripts: PowerShell y JavaScript