# T1568.002 - Algoritmos de Geração de Domínio (DGA)
## Técnica Pai
Esta é uma sub-técnica de [[t1568-dynamic-resolution|T1568 - T1568 - Dynamic Resolution]].
## Descrição
Os **Algoritmos de Geração de Domínio** (DGA, do inglês *Domain Generation Algorithms*) são uma técnica em que o malware utiliza uma fórmula matemática para calcular automaticamente uma grande quantidade de domínios candidatos para comunicação com servidores de comando e controle (C2). Em vez de hardcodar um endereço fixo que poderia ser bloqueado imediatamente, o implante gera dezenas, centenas ou até milhares de domínios por período - e o atacante precisa registrar apenas uma pequena fração deles para manter o canal operacional.
Os DGAs se dividem em duas grandes categorias quanto à estrutura dos domínios gerados. O primeiro tipo produz strings aparentemente aleatórias concatenando letras individualmente - resultando em domínios como `istgmxdejdnxuyla.ru` ou `kqxjvprhbtc.net`, que são imediatamente suspeitos para um analista humano mas difíceis de bloquear por lista estática. O segundo tipo usa palavras inteiras como unidades básicas, combinando-as para formar domínios como `cityjulydish.net` ou `darkbluefish.org` - mais difíceis de detectar por heurística simples. Famílias como [[s0650-qakbot|QakBot]], [[s0608-conficker|Conficker]] e [[s0051-miniduke|MiniDuke]] são exemplos clássicos do uso de DGA, com implementações sofisticadas que incorporam a data como seed para que os domínios mudes diariamente.
Muitos DGAs modernos são **baseados em tempo** - o algoritmo usa a data atual como semente, gerando um conjunto diferente de domínios a cada hora, dia ou semana. Outros utilizam valores externos (como o preço de ações ou textos de notícias) como seeds pseudo-aleatórios, tornando a previsão dos domínios futuros ainda mais difícil para defensores. Quando o servidor C2 principal fica inacessível - por takedown, sinkhole ou bloqueio de firewall - o malware automaticamente busca o próximo domínio da lista, funcionando como [[t1008-fallback-channels|T1008 - Fallback Channels]] e garantindo resiliência à infraestrutura de ataque. Essa técnica é subtécnica de [[t1568-dynamic-resolution|T1568 - Dynamic Resolution]].
**Contexto Brasil/LATAM:** O Brasil é um dos países com maior volume de infecções por malware bancário da América Latina, e várias famílias que afetam instituições financeiras brasileiras - incluindo variantes de RATs como [[s1087-asyncrat|AsyncRAT]] e loaders distribuídos por [[g0127-ta551|TA551]] - utilizam DGA para manter comunicação C2 resiliente. A combinação de DGA com domínios registrados em ccTLDs brasileiros (`.com.br`) ou TLDs de baixo custo (`.top`, `.xyz`) é uma tática documentada para aumentar a aparência de legitimidade perante firewalls que confiam em domínios regionais. Equipes de SOC no Brasil devem implementar detecção de DGA baseada em entropia de nomes de domínio e monitoramento de volume de NXDOMAIN.
## Attack Flow
```mermaid
graph TB
A[Infecção Inicial] --> B[**T1568.002 DGA**]
B --> C[Registro de Domínio Ativo]
C --> D[Canal C2 Estabelecido]
D --> E[T1008 Fallback Channel]
```
## Como Funciona
**1. Preparação**
O desenvolvedor do malware implementa um algoritmo determinístico que aceita como entrada um ou mais parâmetros (data atual, string fixa, valor externo) e produz uma lista de domínios candidatos. O mesmo algoritmo é configurado nos servidores C2 do atacante. O atacante registra proativamente um subconjunto dos domínios que serão gerados nos próximos períodos.
**2. Execução**
Na máquina infectada, o malware executa o DGA com a data/hora atual e obtém uma lista de domínios candidatos para o período vigente. O implante consulta os domínios sequencialmente via DNS. Para a maioria dos domínios, recebe NXDOMAIN (não registrado). Quando encontra um domínio registrado pelo atacante, a resolução retorna o IP do servidor C2 e a sessão de controle é iniciada.
**3. Pós-execução**
A sessão C2 é estabelecida normalmente. Se defesas intermediárias realizarem sinkhole de alguns domínios DGA (registrando-os para análise), o malware continua iterando pela lista até encontrar um domínio controlado pelo atacante - a resiliência é proporcional à quantidade de domínios que o atacante registra antecipadamente.
**Exemplo:**
```bash
# Artefato de detecção: alto volume de consultas NXDOMAIN para domínios de aparência aleatória
# Sysmon Event ID 22 ou Windows DNS Client log captura esse padrão:
# Detecção via análise de entropia de caracteres nos nomes de domínio consultados:
# python3 -c "
# import math
# domain = 'istgmxdejdnxuyla'
# freq = {c: domain.count(c)/len(domain) for c in set(domain)}
# entropy = -sum(p * math.log2(p) for p in freq.values())
# print(f'Entropia: {entropy:.2f}') # > 3.5 = suspeito
# "
# Regra geral: domínios com entropia > 3.5 e comprimento > 12 chars = possível DGA
Get-WinEvent -LogName "Microsoft-Windows-DNS-Client/Operational" | Where-Object {$_.Message -match "NXDOMAIN"} | Group-Object -Property Message | Sort Count -Descending | Select -First 20
```
## Detecção
**Fontes de dados:** DNS query logs (Sysmon Event ID 22, Zeek dns.log, Windows DNS Debug logs), análise de entropia de nomes de domínio, volume de respostas NXDOMAIN por host, correlação de domínios com threat intelligence feeds (abuse.ch, OpenDNS), registros de proxy com age de domínio (newly registered domain detection).
```yaml
title: Domain Generation Algorithm (DGA) Detection via NXDOMAIN Spike
id: 7c9a1e34-d2f8-4b05-8e7a-3f1c6d092b47
status: experimental
description: Detecta possível atividade de DGA por meio de alto volume de consultas NXDOMAIN a domínios com alta entropia de caracteres, típico de malware iterando lista gerada algoritmicamente
logsource:
category: dns
product: windows
detection:
selection:
EventID: 22
QueryStatus: 'NXDOMAIN'
QueryName|re: '^[a-z0-9]{10,25}\.(ru|cn|top|xyz|pw|cc|tk|ml|ga|cf)