# T1055.005 - Thread Local Storage
## Técnica Pai
Esta é uma sub-técnica de [[t1055-process-injection|T1055 - Process Injection]]. Utiliza o mecanismo de TLS callbacks do formato PE (Portable Executable) para injetar e executar código malicioso dentro de outro processo antes mesmo que o ponto de entrada legítimo sejá alcançado.
## Descrição
Adversários podem injetar código malicioso em processos via callbacks de *Thread Local Storage* (TLS) com o objetivo de evadir defesas baseadas em processos e, eventualmente, escalar privilégios. A injeção via TLS callback é um método de executar código arbitrário no espaço de endereço de um processo vivo e separado.
O TLS é um mecanismo do Windows que permite que cada thread de um processo mantenha seus próprios dados de estado. Executáveis no formato PE podem declarar um diretório TLS, que contém ponteiros para funções de callback invocadas automaticamente pelo sistema operacional durante a criação e destruição de threads - inclusive **antes** do ponto de entrada principal (`main()` ou `WinMain()`). Adversários exploram essa característica para inserir ponteiros maliciosos nesse diretório, fazendo com que o código de ataque sejá executado de forma antecipada e fora do fluxo de execução esperado.
A manipulação dos callbacks TLS é frequentemente realizada em conjunto com outras sub-técnicas de [[t1055-process-injection|Process Injection]], como [[t1055-012-process-hollowing|T1055.012 - Process Hollowing]], na qual um processo legítimo é esvaziado e seu espaço de memória é substituído por código malicioso. O resultado é que a execução ocorre sob a identidade de um processo legítimo, dificultando a detecção.
## Como Funciona
A técnica explora o ciclo de vida de threads no Windows em quatro fases principais:
1. **Localização do diretório TLS no PE-alvo:** O adversário mapeia a estrutura do executável-alvo na memória, localizando o *Image TLS Directory* dentro do cabeçalho PE. Esse diretório contém um array de ponteiros de função (`AddressOfCallBacks`).
2. **Alocação e escrita do payload:** Usando primitivas de [[t1055-process-injection|Process Injection]] (ex.: `VirtualAllocEx`, `WriteProcessMemory`), o adversário aloca memória no processo-alvo e escreve o shellcode ou DLL maliciosa nessa região.
3. **Redirecionamento do ponteiro TLS:** O array `AddressOfCallBacks` é sobrescrito com o endereço do payload injetado. A partir desse momento, qualquer nova thread criada no processo (ou a thread principal durante a inicialização) invocará o código malicioso.
4. **Execução antecipada:** Quando o SO cria ou destrói uma thread, o Windows itera sobre todos os ponteiros do array TLS e os chama antes de qualquer código do programa. O adversário obtém execução privilegiada de forma mascarada pelo processo legítimo hospedeiro.
A técnica é particularmente eficaz contra produtos de segurança que monitoram apenas o ponto de entrada canônico (`AddressOfEntryPoint`) e não inspecionam o array TLS de processos em execução.
## Attack Flow
```mermaid
graph TB
A["Processo-alvo selecionado<br/>(ex: svchost.exe, explorer.exe)"] --> B["Mapeamento da estrutura PE<br/>Image TLS Directory localizado"]
B --> C["Alocação de memória no processo<br/>VirtualAllocEx + WriteProcessMemory"]
C --> D["Payload escrito no espaço<br/>de memória do processo-alvo"]
D --> E["Array AddressOfCallBacks<br/>sobrescrito com endereço do payload"]
E --> F["Nova thread criada<br/>no processo hospedeiro"]
F --> G["Windows invoca TLS callbacks<br/>ANTES do entry point legítimo"]
G --> H["Código malicioso executa<br/>sob identidade do processo legítimo"]
H --> I["Evasão de EDR/AV<br/>+ acesso à memória do processo"]
```
## Exemplos de Uso
**Ursnif (Gozi):** O banking trojan [[s0386-ursnif|Ursnif]] utiliza TLS callbacks como mecanismo de anti-análise e injeção. O malware insere callbacks TLS em executáveis criados dinâmicamente para executar rotinas de descriptografia e carregamento de estágios adicionais antes que ferramentas de análise consigam interceptar o fluxo de execução principal.
**CANONSTAGER:** Loader documentado pelo MITRE ATT&CK como usuário desta técnica. Cria executáveis PE com diretórios TLS manipulados para carregar payloads finais de forma evasiva, evitando hooked entry points monitorados por soluções EDR.
**Packers e Crypters comerciais:** Ferramentas vendidas em fóruns clandestinos frequentemente incluem TLS callback injection como feature de evasão. O código malicioso é executado via callback antes que os hooks do AV sejam aplicados ao entry point, permitindo que o loader descriptografe e execute o payload real sem detecção.
**Cenário prático de ataque:**
Um adversário que comprometeu um sistema Windows pode usar [[t1055-012-process-hollowing|Process Hollowing]] para criar um `notepad.exe` suspenso, substituir seu código, modificar o diretório TLS do PE mapeado em memória para apontar para o shellcode injetado, e então retomar o processo. O sistema operacional invocará o callback malicioso antes do código legítimo do Notepad, estabelecendo um canal de C2 ou exfiltrando dados.
## Detecção
### Estrategia principal
A detecção eficaz requer monitoramento de modificações no espaço de memória de processos, especialmente em regiões relacionadas ao cabeçalho PE, combinado com inspeção de chamadas de API suspeitas em sequência.
**Indicadores comportamentais:**
- Chamadas a `WriteProcessMemory` direcionadas a offsets correspondentes ao `IMAGE_TLS_DIRECTORY` de um PE remoto
- Sequência `VirtualAllocEx` → `WriteProcessMemory` → modificação de ponteiros PE em outro processo
- Processos legítimos do sistema executando callbacks TLS apontando para regiões de memória alocadas dinâmicamente (sem backing de arquivo em disco)
- Criação de threads em processos cujo diretório TLS foi modificado após o carregamento do executável
**Fontes de telemetria:**
- ETW (Event Tracing for Windows) - providers de memória e criação de processos
- Sysmon Event ID 8 (CreateRemoteThread), Event ID 10 (ProcessAccess)
- EDR hooks em `NtWriteVirtualMemory`, `NtCreateThread`, `NtResumeThread`
### Regra de detecção (Sigma)
```yaml
title: Suspeita de Manipulação de Diretório TLS em Processo Remoto
status: experimental
description: >
Detecta sequência de chamadas API indicativa de TLS callback injection:
alocação de memória remota seguida de escrita em processo externo,
padrão associado a T1055.005.
logsource:
category: process_access
product: windows
detection:
selection_alloc:
CallTrace|contains:
- 'VirtualAllocEx'
- 'WriteProcessMemory'
selection_target:
TargetImage|endswith:
- '\svchost.exe'
- '\explorer.exe'
- '\notepad.exe'
- '\rundll32.exe'
selection_source_not_system:
SourceImage|startswith:
- 'C:\Windows\System32\'
SourceImage|contains:
- 'inject'
condition: selection_alloc and selection_target
falsepositives:
- Ferramentas legítimas de depuração (Visual Studio, WinDbg)
- Software de virtualização com hooking de processo
level: high
tags:
- attack.defense_evasion
- attack.t1055.005
```
## Mitigação
| ID | Mitigação | Descrição |
|---|-----------|-----------|
| M1040 | [[m1040-behavior-prevention-on-endpoint\|M1040 - Behavior Prevention on Endpoint]] | Soluções EDR e controles de comportamento em endpoint devem monitorar e bloquear chamadas de API associadas à injeção de processo, incluindo `WriteProcessMemory` direcionado a regiões de cabeçalho PE de processos externos. Recursos como Microsoft Defender Credential Guard e proteções de memória do kernel (Kernel Data Protection) reduzem a superfície de ataque. |
> [!tip] Controles complementares
> - **Attack Surface Reduction (ASR):** Regras do Microsoft Defender que bloqueiam técnicas de injeção de processo podem ser habilitadas em ambientes Windows modernos.
> - **CFG (Control Flow Guard):** Embora não impeça diretamente TLS callback injection, limita a capacidade do adversário de redirecionar o fluxo de controle para regiões arbitrárias de memória.
> - **Princípio do menor privilégio:** Restringir quais processos têm permissão de abrir handles com `PROCESS_VM_WRITE` em processos críticos do sistema.
## Contexto Brasil/LATAM
A técnica de TLS callback injection é frequentemente encontrada em campanhas de [[t1055-process-injection|injeção de processo]] direcionadas a instituições financeiras brasileiras, onde trojans bancários como [[s0386-ursnif|Ursnif]] e variantes regionais de RATs utilizam esse mecanismo para escapar de sandboxes e EDRs. O setor [[_sectors|financeiro]] brasileiro é alvo recorrente de adversários que empregam loaders avançados com múltiplas camadas de evasão.
Grupos de ameaça com histórico de atuação no Brasil - incluindo operadores de [[t1059-001-powershell|PowerShell]]-based loaders e dropers distribuídos via phishing - têm incorporado TLS callbacks em seus toolchains para contornar produtos de segurança amplamente utilizados no mercado nacional (Kaspersky, ESET, Symantec). A técnica também aparece em análises de campanhas de espionagem patrocinadas por Estados que têm o Brasil como alvo dentro do contexto de [[_campaigns|campanhas regionais]].
A combinação de TLS injection com [[t1027-obfuscated-files-or-information|ofuscação]] e [[t1055-012-process-hollowing|Process Hollowing]] é um padrão observado em malware distribuído por grupos de [[t1566-phishing|phishing]] que operam específicamente contra bancos e fintechs da América Latina.
## Referências
- MITRE ATT&CK - T1055.005: Thread Local Storage
- Microsoft PE Format specification - IMAGE_TLS_DIRECTORY
- Análise comportamental de [[s0386-ursnif|Ursnif]] por pesquisadores da Cisco Talos
- Documentação de CANONSTAGER - MITRE ATT&CK Software S1092
- Pesquisas sobre anti-análise em banking trojans direcionados ao Brasil
*Fonte: MITRE ATT&CK - T1055.005*