# T1140 - Deobfuscaté/Decode Files or Information
## Descrição
Deobfuscar ou decodificar arquivos e informações é a contrapartida operacional da técnica de ofuscação ([[t1027-obfuscated-files|T1027 - Obfuscated Files or Information]]). O mecanismo é direto: um adversário armazena seu payload real em formato codificado ou criptografado - Base64, XOR, RC4, AES, strings hex - para que análises estáticas de antivírus e sandboxes não reconheçam o código malicioso. Somente em tempo de execução, dentro do ambiente alvo, o payload é decodificado e executado diretamente na memória, sem jámais tocar o disco em formato "limpo".
A técnica é amplamente utilizada em todas as fases de uma intrusão. No estágio de acesso inicial, macros de documentos Office decodificam stagers em Base64 antes de chamá-los via PowerShell. Em fases mais avançadas, backdoors e implants carregam módulos adicionais como blobs criptografados que só ganham forma executável após decodificação em memória - padrão que contorna não apenas antivírus mas também muitas soluções EDR baseadas em assinatura de arquivo. O uso combinado com [[t1055-process-injection|injeção de processo]] torna a detecção particularmente desafiadora: o código malicioso nunca existe como arquivo executável em disco.
Os métodos de decodificação mais comuns incluem: funções nativas do sistema operacional (`certutil -decode`, `[System.Convert]::FromBase64String` no PowerShell), bibliotecas de criptografia embutidas na linguagem do implant, e rotinas customizadas de XOR ou substituição de bytes. Atores mais sofisticados utilizam decodificação em múltiplas camadas - Base64 → XOR → AES - onde cada camada desvela apenas a próxima chave, aumentando exponencialmente a complexidade da análise reversa.
**Contexto Brasil/LATAM:** A T1140 é uma das técnicas mais documentadas em malware com origem ou foco no Brasil. O [[s0531-grandoreiro|Grandoreiro]] - banking trojan brasileiro com operações que se estendem à Europa e México - utiliza decodificação de payload em runtime como elemento central de sua cadeia de infecção multicamada, com payloads codificados em Base64 dentro de arquivos ZIP distribuídos via e-mail. O [[g0032-lazarus-group|Lazarus Group]], ativo na região em campanhas de espionagem e roubo financeiro como a [[operation-dreamjob|Operation DreamJob]], emprega AES-128 e ChaCha20 em loaders que decodificam implants diretamente na memória de processos legítimos. A técnica também é observada em campanhas de phishing direcionadas ao setor financeiro brasileiro, onde scripts VBS e PowerShell decodificam stagers antes de contactar infraestrutura C2.
## Attack Flow
```mermaid
graph TB
A["T1027<br/>Obfuscated Files<br/>/ Payload Codificado"] --> B["T1140<br/>Deobfuscaté/Decode<br/>em Runtime"]:::highlight
B --> C["T1059<br/>Script Interpreter<br/>Execução"]
B --> D["T1055<br/>Process Injection<br/>Sem Toque em Disco"]
classDef highlight fill:#e74c3c,color:#fff
```
## Como Funciona
1. **Preparação:** O adversário prepara o payload final (backdoor, RAT, ransomware) e o codifica/criptografa usando um algoritmo escolhido. O payload codificado é então incorporado ao vetor de entrega: string dentro de um script PowerShell, blob dentro de um arquivo PE, dado dentro de uma chave de registro, ou arquivo separado no disco. A chave de decodificação pode estar hardcoded no loader, derivada de informações do sistema alvo (*environment keying*), ou carregada dinâmicamente de um servidor C2.
2. **Execução:** No momento da execução, o loader ou dropper aplica a rotina de decodificação. Exemplos práticos: `certutil.exe -decode encoded.txt decoded.exe` (abuso de ferramenta legítima), PowerShell com `[System.Convert]::FromBase64String()` seguido de `[System.Reflection.Assembly]::Load()`, ou rotina customizada em C que aplica XOR byte a byte sobre um array de dados. O resultado é o payload real, carregado diretamente na memória do processo atual ou injetado em outro processo.
3. **Pós-execução:** O payload decodificado é executado - frequentemente sem jámais ser gravado em disco em formato executável. Técnicas de [[t1055-process-injection|injeção de processo]] como process hollowing ou reflective DLL injection garantem que o código malicioso rode dentro de processos legítimos. O loader original pode se auto-deletar ou permanecer para gerenciar atualizações periódicas do payload codificado recebido via C2.
## Detecção
**Fontes de dados:**
- **Sysmon Event ID 1** - Process Creaté: `certutil.exe` com flags `-decode`, `-urlcache`; `expand.exe`; ou scripts de interpretadores (`powershell.exe`, `wscript.exe`) com argumentos suspeitos contendo strings Base64 longas
- **Sysmon Event ID 7** - Image Loaded: DLLs de criptografia carregadas por processos inesperados (`bcrypt.dll`, `advapi32.dll` por scripts)
- **Sysmon Event ID 8** - CreateRemoteThread / **Event ID 10** - ProcessAccess: injeção de processo subsequente à decodificação
- **PowerShell Script Block Logging (Event ID 4104)** - Captura o conteúdo completo de scripts PowerShell, incluindo strings decodificadas e comandos após deobfuscação
- **AMSI (Antimalware Scan Interface)** - Intercepta chamadas de decodificação em memória em scripts PowerShell, VBScript e JScript - habilitar logging AMSI no SIEM
- **EDR Memory Scanning** - Varredura de memória em busca de padrões de PE headers em regiões de memória não-executáveis (indicativo de reflective loading)
**Sigma Rule:**
```yaml
title: Certutil Decode or Suspicious Base64 Execution
id: 9b3c1f7a-2e4d-5a8b-c6f0-3d9e7b2a4c1f
status: stable
description: Detects use of certutil for file decoding or PowerShell executing decoded payloads - common T1140 indicators
author: RunkIntel
daté: 2026/03/24
logsource:
category: process_creation
product: windows
detection:
certutil_decode:
Image|endswith: '\certutil.exe'
CommandLine|contains:
- '-decode'
- '-decodehex'
- 'urlcache'
powershell_frombase64:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
CommandLine|contains:
- 'FromBase64String'
- 'Convert]::FromBase64'
- '[Text.Encoding]'
- 'IO.MemoryStream'
powershell_reflection:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
CommandLine|contains:
- 'Reflection.Assembly'
- '::Load('
- 'LoadWithPartialName'
condition: certutil_decode or powershell_frombase64 or powershell_reflection
falsepositives:
- Scripts legítimos de administração que usam certutil para decodificação de certificados
- Ferramentas de desenvolvimento que carregam assemblies .NET dinâmicamente
- Gerenciadores de pacotes (Chocolatey, Scoop) com instalação via scripts
level: medium
tags:
- attack.defense_evasion
- attack.t1140
- attack.t1027
```
## Mitigação
| Mitigação | Recomendação Prática |
|-----------|---------------------|
| PowerShell Constrained Language Mode | Habilitar Constrained Language Mode via AppLocker ou WDAC para bloquear chamadas de reflexão e decodificação em PowerShell. Configurar Script Block Logging e Module Logging para capturar todo conteúdo executado. |
| Restrição de `certutil.exe` | Bloquear `certutil.exe` via AppLocker para usuários não administrativos - a ferramenta tem uso administrativo legítimo limitado e é frequentemente abusada para decode (LOLBin). Em ambientes com WDAC, criar regras explícitas de negação para `certutil -decode`. |
| AMSI (Antimalware Scan Interface) | Garantir que o AMSI estejá habilitado e integrado à solução de segurança. O AMSI inspeciona scripts antes da execução, incluindo conteúdo após deobfuscação em memória. Monitorar tentativas de bypass de AMSI via Event ID 1101. |
| EDR com Análise de Memória | Soluções EDR modernas (CrowdStrike Falcon, SentinelOne, Microsoft Defender for Endpoint) realizam varredura de memória em tempo real e detectam payloads injetados via reflective loading mesmo sem assinatura de arquivo. |
| Análise Comportamental em Sandbox | Submeter anexos e downloads suspeitos a sandboxes antes de entrega ao usuário final. Sandboxes com análise comportamental detectam chamadas de decodificação seguidas de execução de código, independentemente do formato de codificação utilizado. |
## Grupos que Utilizam Esta Técnica
%%
```dataview
TABLE WITHOUT ID
link(file.link, title) AS "Ator", origin AS "Origem"
FROM "cti/groups"
WHERE contains(techniques, this.file.link)
```
%%
<!-- QueryToSerialize: TABLE WITHOUT ID link(file.link, title) AS "Nota", title AS "Ator", origin AS "Origem" FROM "cti/groups" WHERE contains(techniques, this.file.link) -->
<!-- SerializedQuery: TABLE WITHOUT ID link(file.link, title) AS "Nota", title AS "Ator", origin AS "Origem" FROM "cti/groups" WHERE contains(techniques, this.file.link) -->
| Nota | Ator | Origem |
| ---- | ---- | ------ |
<!-- SerializedQuery END -->
## Campanhas Relacionadas
%%
```dataview
TABLE WITHOUT ID
link(file.link, title) AS "Campanha"
FROM "cti/campaigns"
WHERE contains(techniques, this.file.link)
```
%%
<!-- QueryToSerialize: TABLE WITHOUT ID link(file.link, title) AS "Nota", title AS "Campanha" FROM "cti/campaigns" WHERE contains(techniques, this.file.link) -->
<!-- SerializedQuery: TABLE WITHOUT ID link(file.link, title) AS "Nota", title AS "Campanha" FROM "cti/campaigns" WHERE contains(techniques, this.file.link) -->
| Nota | Campanha |
| ------------------------------------------------------------------------- | ------------------------- |
| [[astaroth-guildma-campaign\|Astaroth/Guildma Campaign]] | Astaroth/Guildma Campaign |
<!-- SerializedQuery END -->
## Software Associado
Os seguintes implants e ferramentas utilizam decodificação em runtime como parte de seu mecanismo de evasão:
- [[s0531-grandoreiro|Grandoreiro]] - banking trojan brasileiro com decodificação multicamada de payload
- [[s0053-seaduke|SeaDuke]] - backdoor APT29 que decodifica configurações e módulos em memória
- [[s0013-plugx|PlugX]] - implant modular APT que carrega componentes adicionais via blobs criptografados
- [[s0046-cozycar|CozyCar]] - dropper APT29 com payloads codificados em múltiplos formatos
---
*Fonte: [MITRE ATT&CK - T1140](https://attack.mitre.org/techniques/T1140)*