# T1574.013 - KernelCallbackTable ## Técnica Pai Esta é uma sub-técnica de [[t1574-hijack-execution-flow|T1574 - Hijack Execution Flow]]. ## Descrição A `KernelCallbackTable` é uma estrutura interna do Windows armazenada no Process Environment Block (PEB) de processos GUI - aqueles que carregaram `user32.dll`. Ela contém um array de ponteiros para funções de callback invocadas pelo kernel quando o processo recebe mensagens de jánela do sistema operacional (eventos do tipo `WM_*`). Adversários abusam dessa estrutura para sequestrar o fluxo de execução de um processo legítimo sem precisar injetar código diretamente em sua thread principal. O payload malicioso é executado como consequência de uma mensagem de jánela legítima processada pelo próprio processo alvo - o que diferencia a técnica das abordagens clássicas de injeção de processo e reduz os indicadores de comprometimento visíveis para ferramentas de segurança convencionais. A técnica é especialmente valorizada por atores sofisticados como o [[g0032-lazarus-group|Lazarus Group]] porque permite executar código no contexto de um processo privilegiado e confiável - como `explorer.exe` ou `svchost.exe` - aproveitando suas permissões e tokens de segurança, enquanto os rastros podem ser apagados restaurando a tabela original após a execução do payload. ## Como Funciona O ataque explora a localização previsível da `KernelCallbackTable` no PEB. Em sistemas de 64 bits, o endereço do PEB está acessível via `gs:[0x60]`, e o campo `KernelCallbackTable` encontra-se no offset `0x058` do PEB. O processo de abuso segue cinco etapas principais: Primeiro, o adversário obtém o endereço da `KernelCallbackTable` a partir do PEB do processo alvo, utilizando a chamada de sistema `NtQueryInformationProcess()`. Em seguida, copia a tabela original para uma nova região de memória alocada no espaço de endereçamento do processo alvo via `VirtualAllocEx()`. Na terceira etapa, substitui um ponteiro de função na cópia - tipicamente `fnCOPYDATA`, que é acionado pela mensagem `WM_COPYDATA` - pelo endereço de um payload malicioso previamente gravado na memória do processo. Depois, atualiza o ponteiro da `KernelCallbackTable` no PEB do processo alvo para apontar para a tabela modificada, usando `WriteProcessMemory()`. Por fim, dispara a função substituída enviando a mensagem `WM_COPYDATA` ao processo alvo via `SendMessage()`. Quando o processo legítimo processa a mensagem, o kernel invoca o callback - que agora aponta para o payload. O código malicioso executa no contexto do processo legítimo, com todas as suas permissões. Após a execução, o payload pode restaurar a tabela original, eliminando os artefatos em memória e tornando a técnica particularmente resistente à análise forense post-mortem. A técnica pode ser combinada com [[t1620-reflective-code-loading|T1620 - Reflective Code Loading]] para que o payload sejá carregado diretamente da memória, sem toque em disco - maximizando a evasão de detecção baseada em arquivos. O uso de [[t1106-native-api|T1106 - Native API]] (chamadas diretas ao ntdll, ignorando as APIs documentadas do Win32) é igualmente comum para contornar hooks de userland instalados por EDRs. ## Attack Flow ```mermaid graph TB A([Processo do Atacante com acesso ao alvo]) --> B[NtQueryInformationProcess - lê PEB do processo alvo] B --> C[Localiza KernelCallbackTable no offset 0x058 do PEB] C --> D[VirtualAllocEx - aloca região de memória no processo alvo] D --> E[Copia tabela original para a nova região] E --> F[Substitui ponteiro fnCOPYDATA pelo endereço do payload] F --> G[WriteProcessMemory - atualiza PEB com tabela modificada] G --> H[SendMessage com WM_COPYDATA ao processo alvo] H --> I[Kernel invoca callback - executa payload] I --> J[Payload roda no contexto do processo legítimo] J --> K{Ação pós-exploração} K -->|Persistência| LAutostart K -->|Evasão| M[Restaura KernelCallbackTable original] K -->|C2| NCanal C2 style A fill:#b91c1c,color:#fff style J fill:#15803d,color:#fff style M fill:#7c3aed,color:#fff ``` ## Exemplos de Uso **Lazarus Group (Coreia do Norte):** O [[g0032-lazarus-group|Lazarus Group]] é o ator de ameaça mais documentado no uso desta técnica. Em campanhas de espionagem financeira e sabotagem atribuídas ao grupo, pesquisadores da Kaspersky e da Mandiant identificaram ferramentas personalizadas que utilizam a KernelCallbackTable para executar shellcode dentro de processos GUI legítimos do sistema. O grupo frequentemente encadeia a técnica com [[t1055-process-injection|T1055 - Process Injection]] e [[t1106-native-api|T1106 - Native API]] para estabelecer presença inicial antes do abuso da tabela de callbacks. **FinFisher / FinSpy:** O spyware comercial [[s0182-finfisher|FinFisher]], vendido historicamente a governos e forças de segurança para vigilância de alvos de alto valor, foi documentado utilizando a KernelCallbackTable como parte de seu mecanismo de evasão e persistência. A técnica permitia ao implante executar no contexto de processos do sistema sem disparar alertas de injeção de processo em soluções de segurança de endpoint da época. **Operações de ransomware sofisticadas:** Grupos de ransomware de alto nível, incluindo aqueles com conexões à Coreia do Norte, adotaram variantes desta técnica como alternativa às abordagens de injeção clássicas bloqueadas por EDRs modernos. A técnica é considerada uma evolução das técnicas de process hollowing e thread hijacking, sendo ensinada em cursos avançados de desenvolvimento de malware. ## Detecção ```yaml title: KernelCallbackTable Hijack via PEB Modification status: experimental logsource: category: process_access product: windows detection: selection_writepm: TargetImage|endswith: - '\explorer.exe' - '\svchost.exe' - '\RuntimeBroker.exe' CallTrace|contains: - 'WriteProcessMemory' selection_queryinfo: TargetImage|endswith: - '\explorer.exe' - '\svchost.exe' SourceImage|not|contains: - '\Windows\System32\' - '\Windows\SysWOW64\' filter_legit: SourceImage|contains: - '\MicrosoftEdge' - '\chrome.exe' condition: (selection_writepm or selection_queryinfo) and not filter_legit level: high ``` Indicadores comportamentais complementares a monitorar: processos GUI com `KernelCallbackTable` apontando para regiões de memória alocadas dinâmicamente (tipo `MEM_PRIVATE`), em vez de regiões pertencentes a módulos conhecidos; `WriteProcessMemory()` modificando offsets próximos ao PEB de um processo alvo; e `SendMessage()` com `WM_COPYDATA` disparado logo após sequência de chamadas a `NtQueryInformationProcess()` e `WriteProcessMemory()`. ## Mitigação | ID | Mitigação | Descrição | |----|-----------|-----------| | [[m1040-behavior-prevention-on-endpoint\|M1040]] | Behavior Prevention on Endpoint | Soluções EDR com capacidade de monitorar integridade do PEB em tempo de execução e detectar modificações anômalas no ponteiro `KernelCallbackTable`. Ferramentas como o Windows Defender Credential Guard e Virtualization-Based Security (VBS) podem limitar o acesso à memória de processos protegidos. | A mitigação desta técnica é estruturalmente difícil, pois explora um mecanismo legítimo do Windows. A defesa mais eficaz é a combinação de EDR com análise comportamental de chamadas de API em sequência suspeita, aliada à habilitação de Protected Process Light (PPL) para processos críticos do sistema - o que impede que processos não privilegiados leiam ou escrevam em seu espaço de memória. ## Contexto Brasil/LATAM A técnica KernelCallbackTable é relevante no Brasil e na América Latina principalmente no contexto de ataques de espionagem patrocinados por estados e campanhas de ransomware sofisticadas contra o setor financeiro e infraestrutura crítica. O [[g0032-lazarus-group|Lazarus Group]], responsável por roubos bilionários ao sistema financeiro global - incluindo o famoso ataque ao Banco Central de Bangladesh - demonstrou interesse no setor financeiro da região, que opera com sistemas de pagamento de alto volume como o PIX e a SWIFT. Operações financeiras que utilizam técnicas de evasão avançadas como a KernelCallbackTable representam uma ameaça crescente para instituições que dependem de EDRs convencionais sem capacidade de análise de memória em tempo de execução. A ausência de monitoramento de integridade do PEB na maioria dos ambientes SOC brasileiros torna a técnica eficaz mesmo contra organizações com investimento relevante em segurança. ## Referências - [[t1574-hijack-execution-flow|T1574 - Hijack Execution Flow]] - técnica pai - [[g0032-lazarus-group|Lazarus Group]] - principal ator documentado usando esta sub-técnica - [[s0182-finfisher|FinFisher]] - spyware comercial documentado com uso da técnica - [[t1055-process-injection|T1055 - Process Injection]] - frequentemente combinada - [[t1620-reflective-code-loading|T1620 - Reflective Code Loading]] - encadeada para carga de payload sem toque em disco - [[t1106-native-api|T1106 - Native API]] - mecanismo central de execução - [[m1040-behavior-prevention-on-endpoint|M1040 - Behavior Prevention on Endpoint]] - [[dc0009-process-access|DC0009 - Process Access]] - fonte de dados primária para detecção *Fonte: MITRE ATT&CK - T1574.013 (v16.2)*