# T1127.001 - MSBuild
> [!info] Técnica Pai
> Esta é uma sub-técnica de **[[t1127-trusted-developer-utilities-proxy-execution|T1127 - Trusted Developer Utilities Proxy Execution]]**. Adversários abusam do MSBuild.exe - binário legítimo e assinado da Microsoft - para compilar e executar código C# malicioso inline, contornando controles de aplicação como AppLocker e Windows Defender Application Control.
## Descrição
**MSBuild** (Microsoft Build Engine) é a plataforma de build oficial da Microsoft, integrada ao Visual Studio e ao .NET Framework. Sua função legítima é processar arquivos de projeto XML (`.csproj`, `.vbproj`, `.targets`, `.proj`) que definem como compilar, linkar e públicar aplicações .NET.
A vulnerabilidade de abuso surge da funcionalidade de **Inline Tasks** introduzida no .NET 4.0: arquivos de projeto MSBuild podem conter código C# ou Visual Basic diretamente embutido no XML, o qual é compilado e executado em tempo de processamento pelo próprio `MSBuild.exe`. Isso significa que um adversário pode:
1. Criar um arquivo XML com extensão `.csproj` ou `.targets` contendo shellcode ou código malicioso completo como Inline Task.
2. Invocar `MSBuild.exe <arquivo.csproj>` via linha de comando.
3. O MSBuild **compila e executa** o código C# - usando o próprio binário assinado da Microsoft como executor.
4. Controles de execução configurados para permitir `MSBuild.exe` (por ser binário legítimo do sistema) são contornados.
Este padrão é classificado como **LOLBin** (Living-off-the-Land Binary): o atacante não precisa entregar nem executar binários maliciosos próprios - usa exclusivamente ferramentas que já existem no sistema alvo.
O MSBuild.exe está presente em qualquer sistema Windows com .NET Framework 4.x instalado (práticamente universal em ambientes corporativos) e está localizado em:
- `C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe`
- `C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe`
Por ser um binário **assinado pela Microsoft** com um certificado válido, é frequentemente incluído em listas de permissão (allowlists) de políticas de segurança como AppLocker, WDAC (Windows Defender Application Control) e soluções de controle de aplicação de terceiros.
> [!danger] Nível de Risco
> MSBuild é particularmente perigoso em ambientes com .NET Framework instalado e políticas de allowlisting baseadas apenas em assinatura digital do binário. Adversários com acesso de escrita a qualquer diretório podem depositar um arquivo `.csproj` e executar código arbitrário através de `MSBuild.exe` sem acionar alertas de execução de binário não-autorizado.
## Como Funciona
O mecanismo de abuso do MSBuild explora a capacidade de Inline Tasks do sistema de build .NET:
**Estrutura de um Arquivo de Projeto Malicioso:**
Um arquivo XML de projeto MSBuild contém três elementos principais para abuso:
1. `<UsingTask>` - declara uma task inline com código C# embutido
2. `<Task>` - contém o código malicioso dentro de `<Code>` em CDATA
3. `<Target>` - define quando e como a task é invocada (normalmente `AfterTargets="Build"`)
O fluxo de execução quando `MSBuild.exe arquivo.csproj` é invocado:
1. MSBuild processa o XML e encontra a `UsingTask` com código inline.
2. O compilador C# Roslyn (ou `csc.exe` em versões antigas) compila o código da task para assembly temporário em memória.
3. O assembly compilado é carregado pelo MSBuild no mesmo processo.
4. O método `Execute()` da task é chamado - executando o código malicioso.
5. O código malicioso tem o contexto de processo completo: acesso à rede, sistema de arquivos, APIs do Windows.
**Variante de Execução Remota:**
`MSBuild.exe` pode referênciar arquivos de projeto via UNC path (`\\servidor\share\payload.csproj`), permitindo execução de código hospedado remotamente sem download local do arquivo de projeto.
**Variante de Codificação:**
O código C# na Inline Task pode ser Base64-encoded ou comprimido, adicionando camada de [[t1027-015-compression|ofuscação por compressão]] ao payload - dificultando análise estática do arquivo XML.
## Attack Flow
```mermaid
graph TB
A([Atacante Obtém<br/>Execução de Comandos]) --> B[Criar Arquivo de Projeto<br/>XML com Inline Task C#]
B --> C{Método de Entrega<br/>do Arquivo .csproj}
C -->|Escrita Local| D[Gravar em Diretório<br/>com Permissão de Escrita]
C -->|UNC Remoto| E[Hospedar em Share SMB<br/>ou WebDAV]
C -->|Download| F[Baixar via PowerShell<br/>ou certutil]
D --> G[Invocar MSBuild.exe<br/>com Path do .csproj]
E --> G
F --> G
G --> H[MSBuild Processa XML<br/>Encontra UsingTask Inline]
H --> I[Compilador C# Roslyn<br/>Compila Código da Task]
I --> J{AppLocker /<br/>WDAC Configurado?}
J -->|Bloqueio por Hash/Path| K([Bloqueado])
J -->|Allowlist por Assinatura| L[MSBuild.exe é Permitido<br/>Execução Prossegue]
J -->|Não Configurado| L
L --> M[Execute Malicioso<br/>Roda no Processo MSBuild]
M --> N{Objetivo do<br/>Payload?}
N -->|Shellcode| O[Injeção em Processo<br/>Remoto via API Win32]
N -->|Download| P[Baixar Segundo Estágio<br/>de C2]
N -->|Acesso| Q[Reverse Shell /<br/>RAT Completo]
O --> R([Persistência e<br/>Movimentação Lateral])
P --> R
Q --> R
style A fill:#2d2d2d,color:#fff
style K fill:#c0392b,color:#fff
style R fill:#8e44ad,color:#fff
style M fill:#e74c3c,color:#fff
style L fill:#e67e22,color:#fff
style I fill:#f39c12,color:#fff
```
## Exemplos de Uso
### Empire - Framework de Post-Exploitation
O [[s0363-empire|Empire]] (PowerShell Empire), framework de post-exploitation amplamente utilizado tanto por pentesters quanto por atores maliciosos, inclui módulo específico para execução via MSBuild. O módulo gera um arquivo `.csproj` com agente Empire embutido como Inline Task, permitindo execução em sistemas onde PowerShell está monitorado ou restrito via Constrained Language Mode.
### PlugX - APT Chineses
O [[s0013-plugx|PlugX]], RAT modular utilizado extensivamente por grupos APT chineses como APT41 e múltiplos atores ligados ao PLA, foi documentado usando MSBuild como proxy de execução em campanhas contra alvos governamentais e de defesa. O uso do MSBuild permite ao implante PlugX ser carregado sem escrever o DLL principal em disco - o código de carregamento fica no arquivo `.csproj` e executa via MSBuild.
### Grupos de Ransomware - Cobalt Strike Staging
Operadores de ransomware que utilizam [[s0154-cobalt-strike|Cobalt Strike]] como ferramenta de acesso inicial documentaram o uso de MSBuild para carregamento de Beacons do Cobalt Strike em ambientes com AppLocker ativo. O arquivo `.csproj` contém o shellcode do Beacon codificado em Base64, que é decodificado e injetado via MSBuild no contexto de execução.
### Grupos de APT com Foco em Defesa e Governo
Pesquisadores da Talos Intelligence e Mandiant documentaram uso de MSBuild em campanhas atribuídas a grupos APT com nexo estatal, especialmente em operações contra alvos de defesa norte-americanos e europeus onde políticas de AppLocker são comuns. O MSBuild oferece um caminho de execução que contorna controles configurados para ambientes sem desenvolvimento de software.
### Red Teams - Uso em Avaliações
MSBuild é rotineiramente utilizado em exercícios de Red Team contra ambientes com políticas de application control. Ferramentas como GadgetToJScript, SILENTTRINITY e outros frameworks de ofensiva incluem módulos MSBuild como método de execução padrão quando outros vetores estão bloqueados.
## Detecção
> [!tip] Estrategia de Detecção
> A detecção efetiva de abuso do MSBuild requer monitoramento comportamental além de assinatura: rastrear processos filhos do MSBuild.exe, conexões de rede originadas do MSBuild, e invocações do MSBuild fora de contextos de build legítimos (IDE, pipeline CI/CD).
### Regra Sigma - MSBuild Gerando Processo Filho Suspeito
```yaml
title: Suspeito - MSBuild Executa Processo Filho Incomum
id: e8b3f5a1-4c2d-4e7f-b6a9-1d3e7c5b2a8f
status: stable
description: >
MSBuild.exe é usado como LOLBin para executar código malicioso
via Inline Tasks. Qualquer processo filho não relacionado a
compilação legítima é altamente suspeito.
author: RunkIntel
daté: 2026-03-25
references:
- https://attack.mitre.org/techniques/T1127/001/
- https://lolbas-project.github.io/lolbas/Binaries/Msbuild/
tags:
- attack.defense_evasion
- attack.execution
- attack.t1127.001
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\MSBuild.exe'
filter_legitimate:
Image|endswith:
- '\csc.exe'
- '\vbc.exe'
- '\al.exe'
- '\MSBuild.exe'
CommandLine|contains:
- 'tmp'
- 'temp'
condition: selection_parent and not filter_legitimate
falsepositives:
- Build pipelines legítimos que invocam scripts ou executáveis como parte do processo de build
level: high
```
### Regra Sigma - MSBuild Invocado Fora de Contexto de Desenvolvimento
```yaml
title: Suspeito - MSBuild Invocado por Processo Não-IDE
id: f1a4c8e2-6b3d-4f5a-c9e2-8b4d7f1a3e6c
status: experimental
description: >
MSBuild legítimo é invocado por Visual Studio, dotnet CLI, ou
scripts de build. Invocação por cmd.exe, PowerShell, ou processos
de usuário indica potencial abuso como proxy de execução.
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1127.001
logsource:
category: process_creation
product: windows
detection:
selection_msbuild:
Image|endswith: '\MSBuild.exe'
filter_known_good:
ParentImage|endswith:
- '\devenv.exe'
- '\VsHub.exe'
- '\dotnet.exe'
- '\jenkins.exe'
- '\agent.exe'
- '\buildkite-agent.exe'
condition: selection_msbuild and not filter_known_good
falsepositives:
- Ambientes de build customizados que invocam MSBuild diretamente
- Scripts de CI/CD legítimos que chamam MSBuild via cmd.exe
level: medium
```
### Regra Sigma - MSBuild Realizando Conexão de Rede
```yaml
title: Crítico - MSBuild Realiza Conexão de Rede de Saída
id: a3d7e1b5-8f2c-4a6d-b9e3-5c1f8a4d2b7e
status: stable
description: >
MSBuild.exe nunca deve fazer conexões de rede de saída em ambientes
normais. Conexão indica Inline Task maliciosa executando payload
de segundo estágio ou estabelecendo canal de C2.
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.command_and_control
- attack.t1127.001
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 3
Image|endswith: '\MSBuild.exe'
Initiated: 'true'
filter_local:
DestinationIp|startswith:
- '127.'
- '::1'
- '169.254.'
condition: selection and not filter_local
falsepositives:
- Ambientes muito raros de build que baixam dependências NuGet via MSBuild diretamente
level: critical
```
### Indicadores de Comprometimento
| Indicador | Tipo | Descrição |
|-----------|------|-----------|
| `MSBuild.exe` criando processos filhos não-compiladores | Comportamental | Processo filho suspeito (cmd, powershell, net) |
| `MSBuild.exe` realizando chamadas de rede | Comportamental | C2 ou download de segundo estágio |
| Arquivo `.csproj` em `%TEMP%` ou `%APPDATA%` | Artefato | Arquivo de projeto fora de diretório de desenvolvimento |
| Código Base64 em `<Code>` de Inline Task | Estático | YARA em arquivo de projeto |
| `MSBuild.exe` invocado com argumento fora de pasta de projeto | Linha de Comando | Análise de argumentos via Sysmon Event 1 |
## Mitigação
| ID | Mitigação | Descrição | Eficácia |
|---|-----------|-----------|----------|
| M1042 | [[m1042-disable-or-remove-feature-or-program\|M1042 - Disable or Remove Feature or Program]] | Remover ou desabilitar MSBuild.exe em estações e servidores que não são ambientes de desenvolvimento. Pode ser feito via GPO (negando acesso ao executável) ou desinstalando .NET Framework 3.5/4.x em sistemas que não necessitam | Alta em sistemas não-dev |
| M1038 | [[m1038-execution-prevention\|M1038 - Execution Prevention]] | Configurar AppLocker ou WDAC com regras de hash ou path que bloqueiem invocação do MSBuild.exe por usuários que não sejam desenvolvedores. **Atenção**: regras baseadas apenas em assinatura digital NÃO são suficientes | Alta com configuração correta |
### Controles Complementares
- **Segregação de Ambientes**: manter estações de desenvolvimento separadas de estações corporativas padrão. Desenvolvedores têm acesso ao MSBuild em suas máquinas; usuários corporativos, não.
- **AppLocker por Usuário/Grupo**: criar regras AppLocker que permitam MSBuild.exe apenas para membros do grupo AD "Developers" - usuários corporativos comuns são bloqueados.
- **Monitoramento de Linha de Comando**: habilitar logging de linha de comando via Auditoria do Windows (Audit Process Creation) + Sysmon Event ID 1 para capturar todos os argumentos passados ao MSBuild.
- **EDR com Detecção de LOLBin**: soluções EDR modernas (CrowdStrike Falcon, Microsoft Defender for Endpoint, SentinelOne) possuem detecções específicas para abuso de MSBuild como LOLBin.
- **Baseline de Uso Legítimo**: em organizações com desenvolvimento interno, criar baseline de quando e como MSBuild é invocado legitimamente - alertar para desvios.
- **Monitoramento de Rede por Processo**: via EDR ou firewall baseado em host, bloquear/alertar conexões de rede originadas por `MSBuild.exe`.
## Contexto Brasil/LATAM
> [!example] Relevância Regional
O abuso de MSBuild como proxy de execução é particularmente relevante no contexto brasileiro por algumas características específicas do ambiente corporativo nacional:
**Ambientes com AppLocker Parcialmente Configurado**: Muitas empresas brasileiras de médio porte implementam AppLocker mas configuram apenas allowlists baseadas em assinatura digital - o que específicamente não bloqueia MSBuild.exe por ser assinado pela Microsoft. Auditorias de segurança conduzidas por Red Teams nacionais frequentemente demonstram esse caminho de execução em ambientes financeiros e industriais.
**Setor Industrial e OT**: O [[setor-industrial|setor industrial]] brasileiro (manufatura, energia, óleo e gás) opera estações com .NET Framework instalado para software SCADA e HMI. Essas estações raramente são ambientes de desenvolvimento, mas possuem MSBuild.exe disponível - criando superfície de ataque em redes OT onde as consequências de comprometimento são severas.
**Pentest e Red Team Nacional**: Equipes de red team brasileiras e ferramentas de teste de intrusão nacionais documentam consistentemente o uso de MSBuild como vetor de execução em avaliações. O [[s0363-empire|Empire]] e o Cobalt Strike, amplamente usados em operações de Red Team no Brasil, possuem módulos MSBuild nativos.
**Ataques a Setor Financeiro**: O [[financial|setor financeiro]] brasileiro é alvo de grupos que utilizam técnicas sofisticadas de evasão. Grupos de ameaça que operam contra bancos e fintechs brasileiras foram documentados usando LOLBins como MSBuild para contornar controles de segurança em ambientes com políticas de application control.
**Ransomware Operators**: Operadores de ransomware que atacam organizações brasileiras (LockBit, BlackCat/ALPHV, Medusa) usam fases de staging que incluem LOLBins. MSBuild é frequentemente usado na fase de carregamento do Cobalt Strike Beacon antes do deployment do ransomware - específicamente para contornar soluções EDR configuradas para bloquear execução de shellcode por processos não-assinados.
**Referência para SOCs Nacionais**: Centros de operações de segurança (SOCs) de instituições financeiras brasileiras devem incluir detecção de MSBuild em regras SIEM como alta prioridade, especialmente monitoramento de processos filhos e conexões de rede originadas por `MSBuild.exe`.
## Referências
- [MITRE ATT&CK - T1127.001: MSBuild](https://attack.mitre.org/techniques/T1127/001/)
- [MITRE ATT&CK - T1127: Trusted Developer Utilities Proxy Execution](https://attack.mitre.org/techniques/T1127/)
- [LOLBAS Project - MSBuild](https://lolbas-project.github.io/lolbas/Binaries/Msbuild/)
- [Microsoft Docs - MSBuild Inline Tasks](https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-inline-tasks)
- [Talos Intelligence - LOLBins in the Wild](https://blog.talosintelligence.com)
- [Red Canary - MSBuild Threat Detection](https://redcanary.com/threat-detection-report/)
- [Casey Smith (@subTee) - Original Research on MSBuild Abuse](https://subt0x11.blogspot.com)
---
**Técnica Pai:** [[t1127-trusted-developer-utilities-proxy-execution|T1127 - Trusted Developer Utilities Proxy Execution]]
**Técnicas Relacionadas:** [[t1218-system-binary-proxy-execution|T1218 - System Binary Proxy Execution]] · [[t1027-015-compression|T1027.015 - Compression]] · [[t1059-001-powershell|T1059.001 - PowerShell]] · [[t1055-process-injection|T1055 - Process Injection]]
**Mitigações:** [[m1042-disable-or-remove-feature-or-program|M1042 - Disable or Remove Feature or Program]] · [[m1038-execution-prevention|M1038 - Execution Prevention]]
**Malware e Ferramentas Associadas:** [[s0013-plugx|PlugX]] · [[s0363-empire|Empire]] · [[s0154-cobalt-strike|Cobalt Strike]]
*Fonte: [MITRE ATT&CK - T1127.001](https://attack.mitre.org/techniques/T1127/001)*