Última atualização: 28 de setembro de 2026

XLSX vs. XLSM Security: How Spreadsheet Macros Expose Your Network

Segurança de Arquivos Excel Explicada: XLSX, XLSM e Riscos de Macros

Por décadas, o Microsoft Excel tem sido o motor universal das operações empresariais. Ele equilibra orçamentos corporativos, visualiza conjuntos de dados complexos, controla inventários e alimenta pipelines analíticos em praticamente todos os setores.

No entanto, essa mesma flexibilidade computacional torna as planilhas um favorito duradouro entre os ciberadversários. Os invasores têm armado planilhas desde os primeiros dias dos vírus de macro no final dos anos 1990. Embora a Microsoft e os administradores de sistemas tenham introduzido múltiplas camadas de defesa — como a segregação de formatos de arquivo e o bloqueio padrão de macros — a engenharia social e riscos arquiteturais sutis continuam mantendo os ataques focados em Excel relevantes.

Para construir uma postura de segurança resiliente, desenvolvedores, administradores e usuários avançados devem olhar além da interface da pasta de trabalho. Compreender como o formato OpenXML subjacente funciona, como .xlsx e .xlsm diferem em nível arquitetônico e como os mecanismos de execução de macros operam é vital para defender os endpoints modernos.

1. Anatomia dos Arquivos Excel Modernos: OpenXML Deconstruído

Antes do lançamento do Microsoft Office 2007, o Excel salvava arquivos principalmente usando formatos binários proprietários, mais notavelmente o formato .xls (regido pelo Binary Interchange File Format, ou BIFF8). Nos arquivos .xls, registros de dados, definições de formatação, fórmulas e fluxos de macro Visual Basic for Applications (VBA) eram empacotados em um único contêiner de armazenamento estruturado. Isso tornava a inspeção programática difícil e permitia que atacantes ocultassem scripts de carga maliciosa dentro de setores binários opacos.

A partir do Excel 2007, a Microsoft introduziu o padrão Office Open XML (OOXML) (padronizado como ECMA-376 e ISO/IEC 29500). Sob o OOXML, as pastas de trabalho do Excel não são mais blocos binários monolíticos. Em vez disso, são arquivos zip contendo uma estrutura hierárquica de documentos XML, tabelas de relacionamento e recursos de mídia incorporados.

Dentro do Contêiner ZIP

Se você pegar qualquer pasta de trabalho moderna padrão do Excel e renomear sua extensão para .zip, poderá extrair seu conteúdo com qualquer utilitário padrão de descompressão:

my_workbook.xlsx (extracted)
│
├── [Content_Types].xml        <-- Registry of MIME types and structural parts
├── _rels/                     <-- Package-level relationship mappings
│   └── .rels
├── docProps/                  <-- Metadata (author, creation date, revision)
│   ├── app.xml
│   └── core.xml
└── xl/                        <-- Core spreadsheet contents
    ├── workbook.xml           <-- Workbook-level parameters and sheet list
    ├── styles.xml             <-- Cell styles, fonts, and borders
    ├── sharedStrings.xml      <-- Unique string index for performance optimization
    ├── _rels/
    │   └── workbook.xml.rels  <-- Sheet and component dependencies
    └── worksheets/
        ├── sheet1.xml         <-- Raw cell values, formulas, and grid geometry
        └── sheet2.xml

Essa mudança estrutural proporcionou benefícios de segurança imediatos:

  1. DPI (Inspeção Profunda de Pacotes) & Visibilidade de Gateway: Dispositivos de segurança, proxies e agentes de endpoint podem desempacotar o arquivo em tempo real e analisar árvores XML em texto simples para identificar strings suspeitas, URLs externas ou objetos incorporados.
  2. Validação Determinística de Arquivo: Se um arquivo afirma ser um documento OpenXML, mas viola as restrições do esquema, o Excel se recusa a abri-lo ou o executa em modo de recuperação em sandbox.
  3. Separação de Formato: A Microsoft desvinculou planilhas computacionais regulares de arquivos capazes de executar scripts procedurais incorporados.

2. XLSX vs. XLSM: A Fronteira Arquitetônica

A principal diferença entre .xlsx e .xlsm reside em se a estrutura do arquivo permite a inclusão de projetos de macro executáveis.

Recurso / Dimensão.xlsx (Planilha Excel OpenXML).xlsm (Planilha do Excel com macro habilitada)
Tipo de Conteúdo MIMEapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetapplication/vnd.ms-excel.sheet.macroEnabled.12
Contêiner de Armazenamento VBAEstritamente Proibido. Não pode armazenar vbaProject.binPermitido. Contém xl/vbaProject.bin
Risco de Execução NativaNegligível para execução de macros; limitado à injeção de fórmulas/DDEAlto; pode executar código VBA automatizado ao interagir com a pasta de trabalho
Esquema OpenXML EstritoConforma-se a definições XML estritas e sem macrosInclui definições para extensões de automação legadas e modernas
Indicador Visual do UsuárioÍcone de planilha verde padrãoÍcone de planilha com um ponto de exclamação

O Mecanismo de Aplicação: Por que o XLSX Não Pode Executar Macros

Uma pergunta comum entre administradores e desenvolvedores juniores é: O que acontece se um atacante pegar um arquivo .xlsm malicioso, injetar código executável e renomear a extensão do arquivo para .xlsx?

A resposta curta: O arquivo não executará a macro.

O Excel não depende exclusivamente da extensão do arquivo para determinar as regras de execução. Ao abrir um arquivo chamado .xlsx:

  1. O Excel inspeciona o conteúdo zip e referencia [Content_Types].xml.
  2. Em um arquivo .xlsx genuíno, todos os tipos de conteúdo definidos representam elementos de dados padrão (como worksheet, sharedStrings ou styles).
  3. Se um atacante injetar manualmente um fluxo VBA compilado (xl/vbaProject.bin) em um pacote .xlsx e atualizar os relacionamentos, o Excel encontrará uma contradição explícita de esquema:
    • Ele vê uma extensão .xlsx vinculada a tipos de conteúdo que indicam capacidade de macro.
    • O Excel gera um erro fatal de integridade: “O Excel não pode abrir o arquivo ‘filename.xlsx’ porque o formato ou a extensão do arquivo não é válido. Verifique se o arquivo não está corrompido…”
  4. Se o atacante deixar os tipos internos intactos sem registrar o binário, o Excel trata vbaProject.bin como um anexo não referenciado e órfão dentro do arquivo zip e o descarta completamente durante o ciclo de carregamento.

Consequentemente, um arquivo que funciona estritamente como um contêiner .xlsx genuíno não pode executar código VBA nativo. No entanto, isso não significa que os arquivos .xlsx estejam livres de todas as vetores de ataque, como explorado mais adiante neste guia.

3. Riscos de Macro & O Ciclo de Vida do Ataque

Macros foram criadas para automatizar tarefas repetitivas de contabilidade, modelagem financeira e manipulação de dados via Visual Basic for Applications (VBA). Como o VBA foi desenvolvido para automação no ambiente de trabalho, ele recebeu amplo acesso ao sistema operacional Windows subjacente por meio do Component Object Model (COM), Windows Script Host (WSH) e chamadas diretas à API Win32.

Quando uma macro não confiável é executada, ela roda com os mesmos privilégios exatos do usuário conectado. Não fica presa dentro de uma sandbox de navegador virtualizada ao estilo JavaScript.

+--------------------------------------------------------------------------------+
|                             ATTACK LIFECYCLE                                   |
+--------------------------------------------------------------------------------+
                                       │
                                       ▼
  [ Delivery & Evasion ]  ──────► Spear-phishing email with .xlsm, .xlam, or .zip.
                                       │
                                       ▼
  [ Social Engineering ]  ──────► Lures victim to bypass Protected View ("Enable Content").
                                       │
                                       ▼
  [ Auto-Execution ]      ──────► Auto_Open() or Workbook_Open() triggers automatically.
                                       │
                                       ▼
  [ System Invocation ]   ──────► VBA creates COM objects (WScript.Shell, WinHttp.WinHttpRequest).
                                       │
                                       ▼
  [ Payload Retrieval ]   ──────► Spawns hidden PowerShell/cURL to fetch staging binary.
                                       │
                                       ▼
  [ Post-Exploitation ]   ──────► In-memory execution, credential theft, lateral movement.

Técnicas Comuns de Ingresso de Macros

  1. Ganchos de Autoexecução: Os invasores colocam seu ponto de entrada em manipuladores de eventos intrínsecos, como Sub Auto_Open() ou Private Sub Workbook_Open(). Assim que o usuário concede permissões de execução, essas rotinas são acionadas sem exigir cliques dentro da planilha.

  2. Ofuscação e Stomping:

    • Ofuscação de String: As cargas úteis ocultam URLs e chamadas de sistema usando arrays de caracteres, codificação XOR, decodificação Base64 ou concatenação de variáveis de ambiente (por exemplo, Chr(112) & Chr(111) & Chr(119)...).
    • VBA Stomping: O VBA existe em duas formas dentro de vbaProject.bin: código-fonte interpretado e p-code compilado (pseudo-código direcionado à versão específica do Office que o compilou). Os invasores podem apagar completamente o código-fonte em texto claro, deixando apenas o p-code compilado. Muitas soluções antivírus básicas e analisadores estáticos inspecionam apenas o fluxo de código-fonte, deixando o p-code indetectado até ser executado por uma versão compatível do Office.
  3. Aproveitamento de recursos nativos (LotL): Macros maliciosas modernas raramente deixam um arquivo .exe diretamente no disco, o que alertaria imediatamente os agentes de Endpoint Detection and Response (EDR). Em vez disso, elas interagem com ferramentas de sistema integradas:

    • Instanciando WScript.Shell para executar argumentos de linha de comando.
    • Invocando PowerShell.exe com a política de execução contornada (-ExecutionPolicy Bypass -WindowStyle Hidden).
    • Chamando APIs nativas Win32 através de Declare PtrSafe Function CreateProcess ou VirtualAlloc para injetar shellcode diretamente na memória do sistema.

4. Outros Vetores de Ameaça em Planilhas (Além do VBA Padrão)

Proteger um ambiente contra arquivos .xlsm é apenas metade da batalha. Os adversários também utilizam mecanismos que operam independentemente do VBA tradicional.

Troca Dinâmica de Dados (DDE) e Injeção de CSV

O Excel possui um protocolo legado chamado Dynamic Data Exchange (DDE), projetado para permitir o compartilhamento de dados entre aplicativos em execução (por exemplo, transmitir dados ao vivo de um ticker de ações de um programa separado para uma célula do Excel).

  • Como a Injeção de Fórmulas Funciona: Quando uma célula de planilha começa com caracteres como =, @, + ou -, o Excel interpreta o conteúdo como uma fórmula. Se um atacante controla a entrada exportada para uma planilha (como um campo “Comments” não sanitizado em um aplicativo web exportado para CSV ou XLSX), ele pode injetar:
    =cmd|'/C powershell.exe -w hidden -enc <base64_payload>'!A0
    
  • Ao ser aberta, o Excel avalia a fórmula, alerta o usuário com um prompt sobre iniciar um aplicativo externo e, se aprovado, executa o shell do sistema.

Macros Legadas do Excel 4.0 (XLM)

Antes de o VBA ser introduzido em 1993, o Excel utilizava um sistema de macros baseado em fórmulas conhecido como Excel 4.0 (XLM) macros. Essas macros residem em planilhas de macro dedicadas, em vez de um projeto VBA separado.

Como as macros XLM são escritas como fórmulas de célula (como =EXEC(\"calc.exe\")), elas contornam muitos mecanismos padrão de inspeção estática do VBA. Os atacantes favoreceram as macros XLM no final da década de 2010 e início da década de 2020 para evitar a detecção automatizada antes de a Microsoft desativá-las por padrão nas versões empresariais modernas.

Conexões Externas Maliciosas e Objetos OLE

Uma planilha .xlsx comum ainda pode introduzir risco por meio de recursos externos:

  • Pacotes OLE incorporados: Um atacante pode inserir um executável disfarçado como um ícone PDF incorporado diretamente na planilha.
  • Links externos de planilhas e consultas web: Um XLSX pode conter referências externas que iniciam automaticamente solicitações HTTP GET para servidores de comando e controle (C2) controlados pelo atacante ao abrir o arquivo, sendo usadas principalmente para reconhecimento ou ataques de coleta de hashes netNTLM.

5. Estratégias de Reforço Corporativo e Defesa em Profundidade

Defender-se contra ameaças originadas no Excel requer uma abordagem em camadas que cubra inspeção de rede, configuração do sistema, controles de acesso e processos operacionais.

+─────────────────────────────────────────────────────────+
|                  ENTERPRISE DEFENSE LAYERS               |
+─────────────────────────────────────────────────────────+
|  PERIMETER: Drop inbound .xlsm, .xla, and .xltm at mail |
|  gateway unless cryptographically signed or exempted.   |
+---------------------------------------------------------+
|  IDENTITY & POLICY: Enforce ASR rules and apply         |
|  Mark of the Web (MotW) macro execution blocks.         |
+---------------------------------------------------------+
|  RUNTIME: Hook AMSI into Office to evaluate dynamic     |
|  VBA buffers directly before execution.                 |
+---------------------------------------------------------+
|  STORAGE: Restrict macro execution exclusively to       |
|  managed, centralized Trusted Locations.                |
+─────────────────────────────────────────────────────────+

1. Aplicar a Marca da Web (MotW) para Bloqueio de Macros

Em 2022, a Microsoft atualizou o comportamento padrão dos aplicativos do Office: macros em arquivos originados da internet são bloqueadas por padrão.

Quando um usuário baixa um arquivo via navegador ou cliente externo, o Windows marca o arquivo com um fluxo de dados alternativo (ADS) chamado Zone.Identifier (Zona 3 indica a Internet). Para arquivos que possuem essa marca, o Excel desabilita macros completamente e exibe um banner de segurança vermelho: > "RISCO DE SEGURANÇA: A Microsoft bloqueou a execução de macros porque a origem deste arquivo não é confiável."

Ação Administrativa: Garanta que esse comportamento seja aplicado via Política de Grupo e não possa ser sobrescrito pelos usuários finais:

  • Caminho GPO: User Configuration > Administrative Templates > Microsoft Excel 2016 > Excel Options > Security > Trust Center
  • Configuração: Ativar "Bloquear macros de serem executadas em arquivos do Office provenientes da Internet".

2. Configurar Regras de Redução da Superfície de Ataque (ASR)

Organizações que utilizam o Microsoft Defender for Endpoint devem ativar as regras principais de Redução da Superfície de Ataque projetadas especificamente para aplicativos do Office:

  • Bloquear aplicativos do Office de criar processos filhos (GUID: D4F940AB-401B-4EFC-AADC-AD5F3C50688A)
    • Impede o Excel de iniciar PowerShell, CMD ou mecanismos de script.
  • Bloquear aplicativos do Office de injetar código em outros processos (GUID: 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84)
  • Bloquear chamadas de API Win32 de macros do Office (GUID: 92E6390C-CF9E-43CE-BD8C-0E6F0FE66680)

3. Aproveitar a Interface de Varredura Antimalware (AMSI)

As versões modernas do Microsoft 365 integram a execução de VBA diretamente com o AMSI. Mesmo que um atacante aplique ofuscação complexa de strings ou VBA stomping, o mecanismo de tempo de execução do VBA passa os comandos reconstruídos e não criptografados para o seu antivírus/EDR instalado no exato milissegundo antes da execução. Garanta que a proteção de endpoint monitore ativamente os eventos de tempo de execução do AMSI.

4. Migrar para Locais Confiáveis e Certificados Digitais

Para organizações que dependem de planilhas automatizadas nas operações diárias:

  • Eliminar arquivos XLSM soltos nas pastas de Downloads ou área de trabalho dos usuários.
  • Usar Locais Confiáveis: Restrinja a execução de macros exclusivamente a compartilhamentos de rede somente leitura gerenciados pelos administradores de TI.
  • Assinatura de Código: Exija que todas as macros desenvolvidas internamente sejam assinadas criptograficamente usando um certificado emitido por uma Infraestrutura de Chave Pública (PKI) corporativa. Configure o Excel para executar somente macros assinadas digitalmente e bloquear silenciosamente as não assinadas.

6. Perspectiva do Desenvolvedor: Construindo Automação Segura

Se você está desenvolvendo software que analisa, gera ou consome arquivos Excel (por exemplo, pipelines Python usando pandas/openpyxl, microsserviços Node.js ou aplicações C#/.NET), aplique estas salvaguardas de desenvolvimento:

  1. Rejeitar Formatos de Arquivo Inesperados na Fronteira de Upload: Se sua aplicação espera relatórios financeiros, valide estritamente que os arquivos recebidos estejam no formato .xlsx. Inspecione os bytes mágicos internos (o cabeçalho zip padrão 50 4B 03 04) e verifique se não há entradas vbaProject.bin no índice do arquivo antes de salvá‑lo em buckets de nuvem ou armazenamentos de banco de dados.

  2. Sanitizar Dados Contra Injeção de Fórmulas: Ao exportar entradas geradas por usuários para arquivos CSV ou XLSX, adicione um apóstrofo (') ou um espaço no início de qualquer célula que comece com caracteres perigosos (=, +, -, @, \t, \r):

    def sanitize_for_spreadsheet(value: str) -> str:
        if value and value[0] in ('=', '+', '-', '@', '\t', '\r'):
            return f"'{value}"
        return value
    
  3. Migrar de VBA para Office Scripts ou Web Add-ins: Para automação empresarial moderna, elimine completamente o VBA legado:

    • Office Scripts: Escritos em TypeScript, os Office Scripts são executados em um ambiente de nuvem sandboxed e operam de forma limpa nas edições web e desktop sem expor chamadas de sistema nativas do SO.
    • Complementos Web do Office: Construídos usando HTML, CSS padrão e JavaScript moderno, os complementos web se comunicam via APIs JavaScript gerenciadas e são isolados do sistema operacional local.

7. Lista de Verificação Resumida para Segurança de Planilhas

  • Aplicar .xlsx por padrão: Exigir que todos os fluxos de trabalho padrão do usuário salvem como .xlsx sem macros.
  • Bloquear macros de origem na Internet: Confirmar que a aplicação da política MotW está implantada em toda a sua organização via GPO ou Intune.
  • Habilitar regras ASR: Proibir que produtos do Office iniciem interpretadores de comando ou processos filhos.
  • Descontinuar Excel 4.0 (XLM): Garantir que os mecanismos legados de macros XLM estejam permanentemente desativados em todas as estações de trabalho.
  • Sanitizar exportações de aplicativos: Proteger rotinas de geração de CSV e Excel contra injeção de CSV/fórmulas.
  • Migrar para Office Scripts: Transferir macros administrativas legadas para Office Scripts baseados em TypeScript e APIs gerenciadas.

Ao tratar planilhas não apenas como arquivos de documento, mas como contêineres de software estruturados que carregam capacidades de execução, equipes de segurança e desenvolvedores podem neutralizar efetivamente um dos vetores de ataque mais antigos na computação empresarial.

Perguntas Frequentes (FAQ)

Q1: Um arquivo com extensão .xlsx pode executar uma macro maliciosa?

Não, o padrão OpenXML proíbe estritamente código de macro em arquivos .xlsx, e o Excel rejeitará ou removerá qualquer projeto VBA injetado em um contêiner .xlsx genuíno.

Q2: O que devo fazer se um arquivo do Excel me pedir “Habilitar Edição” ou “Habilitar Conteúdo”?

Conceda permissões apenas se você conhecer o remetente e estiver aguardando o arquivo; este aviso é o ponto de verificação principal que permite que macros não confiáveis executem código.

Q3: Como o Microsoft Excel determina se um arquivo veio da internet?

O Windows anexa um fluxo oculto “Mark of the Web” (Zone.Identifier) aos arquivos baixados, o que indica ao Excel para abri-los em Visualização Protegida e bloquear macros por padrão.

Q4: Os arquivos CSV são mais seguros que arquivos XLSX e XLSM?

Arquivos CSV não podem conter macros VBA nativas, mas permanecem vulneráveis a ataques de injeção de fórmulas se contiverem comandos maliciosos executados pelo Excel ao serem abertos.

Q5: Como os Office Scripts modernos diferem das macros VBA tradicionais?

Office Scripts são executados em TypeScript dentro de um ambiente de tempo de execução sandbox, impedindo que acessem seu sistema de arquivos local, linha de comando ou APIs do sistema operacional.

Veja também