# 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)*