# T1027.007 - Dynamic API Resolution
## Descrição
**Dynamic API Resolution** é uma sub-técnica de [[t1027-obfuscated-files-or-information|T1027 - Obfuscated Files or Information]] em que adversários resolvem endereços de funções de API em tempo de execução, em vez de listá-las estáticamente nas tabelas de importação do binário. O objetivo principal é dificultar a análise estática de malware por ferramentas como antivírus, EDRs e sandboxes que inspecionam a **Import Address Table (IAT)** para identificar funcionalidades maliciosas.
Em condições normais, um executável Windows declara explicitamente quais DLLs e funções irá usar. Analistas e sistemas de defesa exploram essa estrutura para fingerprinting rápido: se um binário importa `CreateRemoteThread`, `VirtualAllocEx` e `WriteProcessMemory`, é um forte indicador de injeção de processo. A Dynamic API Resolution elimina esses artefatos estáticos - o binário carrega as funções apenas no momento em que são necessárias, sem deixar rastros convencionais.
A técnica é amplamente usada por famílias de malware sofisticadas como [[s0013-plugx|PlugX]], [[s1160-latrodectus|Latrodectus]], [[s0534-bazar|Bazar]] e [[s1053-avoslocker|AvosLocker]], além de estar documentada em campanhas de grupos como [[g0129-mustang-panda|Mustang Panda]] e [[g0032-lazarus-group|Lazarus Group]].
> **Técnica pai:** [[t1027-obfuscated-files-or-information|T1027 - Obfuscated Files or Information]]
> **Tática:** [[_defense-evasion|Defense Evasion]]
> **Plataforma:** Windows
---
## Como Funciona
A Dynamic API Resolution opera em duas etapas fundamentais: **obfuscação em tempo de compilação** e **resolução em tempo de execução**.
### 1. Obfuscação dos nomes de função
Em vez de armazenar strings como `"VirtualAlloc"` ou `"CreateThread"` no binário, o malware:
- Calcula um **hash** do nome da função durante o desenvolvimento (ex: hash djb2, FNV-1a, CRC32 customizado)
- Armazena apenas o valor hash no binário (ex: `0xDEADBEEF`)
- Em alguns casos, criptografa até o próprio hash com XOR ou RC4 para dificultar ainda mais a análise
### 2. Resolução em tempo de execução
Durante a execução, o malware percorre manualmente as estruturas internas do Windows para localizar as funções:
1. Acessa o **Process Environment Block (PEB)** via `fs:[0x30]` (32-bit) ou `gs:[0x60]` (64-bit)
2. Navega até `PEB->Ldr->InMemoryOrderModuleList` para encontrar módulos carregados (`kernel32.dll`, `ntdll.dll`)
3. Itera sobre a **Export Address Table (EAT)** do módulo-alvo
4. Calcula o hash de cada nome de função exportada
5. Compara com o hash armazenado - ao encontrar o match, obtém o endereço real
6. Para funções não exportadas diretamente, usa `GetProcAddress()` ou `LoadLibrary()` + `GetProcAddress()` com strings ofuscadas
### 3. Variações avançadas
- **API Hashing com XOR:** o hash é mascarado com uma chave XOR antes de ser armazenado no binário
- **String stacking:** o nome da função é construído caractere a caractere em runtime, nunca existindo como string completa em memória
- **Heaven's Gaté:** em malware 32-bit rodando em sistema 64-bit, a resolução de API pode cruzar entre modos de processador
- **Syscall direto:** casos extremos onde o malware resolve o número do syscall e chama diretamente o kernel, bypassing ntdll.dll completamente (relacionado a [[t1106-native-api|T1106 - Native API]])
---
## Attack Flow
```mermaid
graph TB
A["🔴 Malware Executado<br/>Binário sem imports visíveis na IAT"] --> B
B["📦 Acesso ao PEB<br/>fs:[0x30] / gs:[0x60]<br/>Ldr → InMemoryOrderModuleList"] --> C
C["🔍 Iteração sobre módulos<br/>kernel32.dll / ntdll.dll<br/>Export Address Table"] --> D
D{"Hash Match?<br/>Hash(funcName) == 0xDEADBEEF"}
D -->|"Não"| C
D -->|"Sim"| E
E["✅ Endereço Resolvido<br/>Ponteiro de função armazenado<br/>em variável local / struct"] --> F
F["⚙️ Chamada de API Dinâmica<br/>call [rax] / jmp [rbx]<br/>Sem referência estática no binário"] --> G
G["🎯 Funcionalidade Maliciosa<br/>VirtualAlloc / WriteProcessMemory<br/>CreateRemoteThread / etc."] --> H
H["👁️ Análise Estática Cegada<br/>IAT vazia - ferramentas AV/EDR<br/>não detectam por assinatura de import"]
style A fill:#c0392b,color:#fff
style D fill:#e67e22,color:#fff
style E fill:#27ae60,color:#fff
style H fill:#8e44ad,color:#fff
```
---
## Exemplos de Uso
### Mustang Panda - PlugX e TONESHELL
O grupo [[g0129-mustang-panda|Mustang Panda]] (APT chinês, nexo Estado) usa extensivamente Dynamic API Resolution em seus implantes [[s0013-plugx|PlugX]] e [[s1239-toneshell|TONESHELL]]. O PlugX implementa hashing customizado para resolver funções de injeção de DLL e persistência, tornando variantes diferentes difíceis de correlacionar por assinatura estática. O TONESHELL, um backdoor mais recente, aplica a mesma técnica para chamadas de rede e execução de comandos.
### Lazarus Group - BLINDINGCAN e campanhas financeiras
O [[g0032-lazarus-group|Lazarus Group]] (DPRK) emprega Dynamic API Resolution em múltiplos implantes, incluindo BLINDINGCAN e outros backdoors de segunda fase usados contra instituições financeiras no Brasil e LATAM. A técnica permite que implantes sejam reused com hashes diferentes, frustrando correlação por assinatura de código.
### Latrodectus
O [[s1160-latrodectus|Latrodectus]], um loader moderno observado em 2024 como sucessor do IcedID, implementa API hashing para todas as suas chamadas críticas - carregamento de payload, persistência e comúnicação C2. O malware usa um algoritmo de hashing ROR-13 com salt customizado.
### Raccoon Stealer
O [[s1148-raccoon-stealer|Raccoon Stealer]] utiliza Dynamic API Resolution para ofuscar chamadas às APIs de acesso a credenciais do navegador, carteiras de criptomoeda e funções de coleta de dados do sistema operacional.
### AvosLocker
O ransomware [[s1053-avoslocker|AvosLocker]] resolve dinâmicamente funções relacionadas à enumeração e criptografia de arquivos, dificultando detecção por EDRs que monitoram padrões de importação típicos de ransomware.
---
## Detecção
### Sigma Rule - Carregamento dinâmico de API via GetProcAddress em sequência suspeita
```yaml
title: Suspicious Dynamic API Resolution via GetProcAddress Sequence
id: a3f2e1d0-4b5c-6789-abcd-ef0123456789
status: experimental
description: >
Detecta processos que chamam GetProcAddress com alta frequência em curto
intervalo de tempo, padrão associado a malware que resolve APIs dinâmicamente
para evadir análise estática de IAT.
references:
- https://attack.mitre.org/techniques/T1027/007/
- https://www.elastic.co/blog/hunting-for-lateral-movement-using-event-query-language
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1027.007
logsource:
category: process_access
product: windows
detection:
selection:
CallTrace|contains:
- 'kernel32.dll!GetProcAddress'
- 'kernelbase.dll!GetProcAddress'
timeframe: 10s
condition: selection | count() by SourceImage > 20
falsepositives:
- Aplicações legítimas com carregamento dinâmico intenso (algumas IDEs, frameworks)
- Instaladores complexos
level: medium
```
### Sigma Rule - PEB Walking via acesso direto a memória (comportamento de shellcode)
```yaml
title: PEB Walking Behavior - Suspicious Module Enumeration Pattern
id: b4e3f2c1-5d6e-7890-bcde-f01234567890
status: experimental
description: >
Detecta padrão de acesso à lista de módulos carregados via PEB (InMemoryOrderModuleList)
em contexto de processo não-sistema, característico de shellcode e loaders que
implementam API resolution manual sem usar GetProcAddress.
references:
- https://attack.mitre.org/techniques/T1027/007/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1027.007
logsource:
category: process_creation
product: windows
detection:
selection:
# Processos com IAT vazia ou mínima lançados de locais suspeitos
Image|endswith:
- '.exe'
Image|contains:
- '\Temp\'
- '\AppData\Local\'
- '\ProgramData\'
ImportedModules|count: 0
filter_legitimate:
Image|startswith:
- 'C:\Windows\System32\'
- 'C:\Program Files\'
condition: selection and not filter_legitimate
falsepositives:
- Aplicações empacotadas com UPX ou instaladores self-extracting legítimos
level: high
```
### Estrategias de detecção complementares
| Abordagem | Ferramenta | Indicador |
|-----------|-----------|-----------|
| Análise de importações | PE analyzers (CFF Explorer, pestudio) | Binário com IAT vazia ou mínima (apenas LoadLibrary/GetProcAddress) |
| Monitoramento de API em runtime | EDR / API hooking | Alto volume de chamadas GetProcAddress em curto intervalo |
| Memory scanning | Volatility, Rekall | Regiões RWX com code patterns de PEB walking |
| Sandbox behavioral | [[t1027-002-software-packing\|Emulação dinâmica]] | Resolução de funções antes de qualquer I/O observável |
| Análise de strings | FLOSS (FireEye) | Ausência de strings de API típicas em binário com funcionalidade rica |
---
## Mitigação
Não existem mitigações diretas para Dynamic API Resolution, pois é uma técnica de análise/evasão - não há como "desabilitar" a resolução dinâmica de APIs no sistema operacional. O foco defensivo é em **detecção e contexto**.
| Camada | Controle | Efetividade |
|--------|----------|-------------|
| **Endpoint** | EDR com monitoramento comportamental de chamadas de API (não apenas imports estáticos) | Alta - detecta o comportamento em runtime |
| **Análise de malware** | Ferramentas como FLOSS para extrair strings dinâmicas; emulação com speakeasy | Alta - revela APIs resolvidas sem executar o malware |
| **Sandbox** | Detonação em ambiente controlado com logging de todas as chamadas de API | Alta - captura o comportamento completo |
| **Code signing** | [[m1045-code-signing\|M1045 - Code Signing]] - prevenir execução de binários não assinados | Média - reduz superfície de ataque inicial |
| **Execution prevention** | [[m1038-execution-prevention\|M1038 - Execution Prevention]] - AppLocker, WDAC | Média - impede execução de binários de locais não confiáveis |
| **Antivirus/antimalware** | [[Antimalware]] com heurística comportamental | Baixa-Média - assinaturas estáticas são ineficazes; heurística pode ajudar |
---
## Contexto Brasil/LATAM
A Dynamic API Resolution é uma técnica de evasão madura que aparece consistentemente em campanhas direcionadas ao Brasil e à América Latina, especialmente em:
**Setor financeiro brasileiro:** Campanhas de banking trojans que visam clientes de bancos brasileiros (ITAÚ, Bradesco, Caixa) frequentemente empregam loaders com API hashing para passar pelos gateways de segurança corporativos. O ecossistema do malware bancário brasileiro tem adotado progressivamente técnicas avançadas de evasão antes restritas a APTs.
**Campanhas de espionagem industrial:** Grupos como [[g0129-mustang-panda|Mustang Panda]] e [[g0032-lazarus-group|Lazarus Group]] têm alvos no setor de petróleo e gás, mineração e governo brasileiro. Implantes utilizados nessas operações invariavelmente utilizam Dynamic API Resolution como camada base de evasão.
**Ransomware-as-a-Service:** Grupos de ransomware ativos na região (LockBit, BlackBasta, RansomHub) distribuem afiliados com builders que geram payloads com hashing customizado por campanha, dificultando correlação entre incidentes.
> **Recomendação para SOCs brasileiros:** Priorizar EDRs com capacidade de monitoramento de chamadas de API em runtime (CrowdStrike Falcon, SentinelOne, Microsoft Defender for Endpoint) sobre soluções baseadas exclusivamente em assinaturas estáticas. A técnica é específicamente projetada para burlar detecção baseada em IAT.
---
## Referências
- [MITRE ATT&CK - T1027.007](https://attack.mitre.org/techniques/T1027/007/)
- [MITRE ATT&CK - T1027 (técnica pai)](https://attack.mitre.org/techniques/T1027/)
- [FireEye FLOSS - Automated String Extraction](https://github.com/mandiant/flare-floss)
- [Elastic - Hunting for Dynamic API Resolution](https://www.elastic.co/blog/hunting-for-lateral-movement-using-event-query-language)
- [Speakeasy - Shellcode Emulation Framework](https://github.com/mandiant/speakeasy)
## Técnicas Relacionadas
- [[t1027-obfuscated-files-or-information|T1027 - Obfuscated Files or Information]] (técnica pai)
- [[t1027-002-software-packing|T1027.002 - Software Packing]]
- [[Decode Files or Information]]
- [[t1106-native-api|T1106 - Native API]]
- [[t1055-process-injection|T1055 - Process Injection]]
## Threat Actors que Usam
- [[g0129-mustang-panda|Mustang Panda]]
- [[g0032-lazarus-group|Lazarus Group]]
## Software Associado
- [[s1232-splatdropper|SplatDropper]] (malware)
- [[s1239-toneshell|TONESHELL]] (malware)
- [[s1160-latrodectus|Latrodectus]] (malware)
- [[s1237-canonstager|CANONSTAGER]] (malware)
- [[s0534-bazar|Bazar]] (malware)
- [[s1053-avoslocker|AvosLocker]] (malware)
- [[s1148-raccoon-stealer|Raccoon Stealer]] (malware)
- [[s0147-pteranodon|Pteranodon]] (malware)
- [[s1149-chimneysweep|CHIMNEYSWEEP]] (malware)
- [[s0013-plugx|PlugX]] (malware)
---
*Fonte: [MITRE ATT&CK - T1027.007](https://attack.mitre.org/techniques/T1027/007)*