# T1205.001 - Port Knocking
## Descrição
**Port Knocking** é uma subtécnica de [[t1205-traffic-signaling|T1205 - Traffic Signaling]] em que adversários enviam uma sequência predefinida de tentativas de conexão a portas fechadas para ativar um backdoor ou abrir uma porta de escuta sem manter conexões persistentes abertas. A técnica permite que o atacante mantenha presença em um sistema sem expor qualquer porta visível em varreduras de rede convencionais, reduzindo drasticamente a superfície de detecção.
Ao contrário de um servidor ouvindo ativamente em uma porta, o mecanismo de port knocking permanece completamente invisível a scanners como Nmap, Shodan e ferramentas de monitoramento de portas abertas. Somente após a sequência correta de "batidas" é que o firewall do host ou um daemon dedicado abre a porta de comunicação - geralmente por frações de segundo ou por uma jánela curta de tempo.
A técnica foi originalmente documentada pela ferramenta **cd00r** (implementada em C usando libpcap), que sniffava pacotes silenciosamente sem abrir nenhuma porta. Implementações modernas utilizam `libpcap`, raw sockets, eBPF/BPFDoor e até pacotes ICMP ou UDP como sinal de knock, tornando a técnica aplicável a práticamente qualquer sistema Unix-like e dispositivos de rede.
> **Técnica pai:** [[t1205-traffic-signaling|T1205 - Traffic Signaling]]
> **Tática principal:** Defense Evasion (também: Command and Control, Persistence)
> **Plataformas:** Linux, macOS, Windows, Network Devices
---
## Como Funciona
O mecanismo de port knocking opera em quatro etapas fundamentais:
**1. Configuração prévia (pré-comprometimento):**
O adversário implanta um daemon ou módulo no host comprometido que monitora silenciosamente o tráfego de rede - usando `libpcap`, `raw sockets` ou chamadas BPF - sem abrir nenhuma porta visível. A sequência secreta de knock (ex.: TCP 7000, TCP 8000, TCP 9000) é codificada no malware ou passada por parâmetro de configuração.
**2. Envio da sequência de knock (lado do atacante):**
O operador do ataque envia pacotes SYN (ou UDP/ICMP) para as portas na sequência exata e, geralmente, dentro de uma jánela de tempo definida. Os pacotes são descartados pelo firewall do alvo, mas o daemon de escuta os detecta via análise passiva.
**3. Validação e ativação:**
Após detectar a sequência correta, o daemon executa uma ação: modifica uma regra de `iptables`/`nftables` para abrir uma porta, inicia um serviço de backdoor, ou estabelece uma conexão de saída (reverse shell) de volta ao atacante - eliminando a necessidade de portas de entrada abertas.
**4. Comúnicação e limpeza:**
A sessão ocorre na jánela aberta. Após o encerramento, a porta é fechada novamente. Alguns implementações usam knock de "encerramento" para limpar as regras do firewall, retornando o sistema ao estado invisível.
**Variações técnicas observadas:**
- **Knock via ICMP:** sequências de tipo/código ICMP como sinal (dificulta correlação por DPI)
- **Knock via TCP flags incomuns:** uso de pacotes com flags FIN+URG ou RST para sinalização
- **Knock criptografado (SPA - Single Packet Authorization):** uma única versão mais avançada onde o knock carrega um payload HMAC/AES autenticado, resistente a replay attacks
- **BPF-based knock:** uso de filtros BPF no kernel para captura passiva (visto em [[s1161-bpfdoor|BPFDoor]])
---
## Attack Flow
```mermaid
graph TB
A["Adversário - Pré-acesso"] --> B["Implantação de daemon<br/>(libpcap / raw socket / BPF)"]
B --> C["Daemon monitora tráfego<br/>em modo passivo - porta fechada"]
subgraph HOST_ALVO["Host Comprometido"]
C --> D["Nenhuma porta visível<br/>ao scanner externo"]
D --> E{"Sequência de knock<br/>detectada?"}
E -- Não --> D
E -- Sim --> F["Firewall abre porta<br/>ou conexão reversa inicia"]
F --> G["Sessão C2 ativa<br/>(SSH / shell / protocolo customizado)"]
G --> H["Sessão encerrada<br/>Porta fechada novamente"]
end
subgraph ATACANTE["Operador C2"]
I["Envia sequência SYN<br/>(TCP 7000→8000→9000)"] --> E
G --> J["Comando e controle<br/>executado"]
end
style HOST_ALVO fill:#1a1a2e,stroke:#e94560,color:#fff
style ATACANTE fill:#16213e,stroke:#0f3460,color:#fff
style F fill:#e94560,color:#fff
style G fill:#e94560,color:#fff
```
---
## Exemplos de Uso
### PROMETHIUM / StrongPity (APT turco)
O grupo [[g0056-promethium|PROMETHIUM]], ativo desde 2012 e vinculado a operações de espionagem contra alvos curdos e turcos, utilizou port knocking como mecanismo de ativação de backdoors em campanhas documentadas entre 2020 e 2022. O malware [[s1060-mafalda|Mafalda]], atribuído ao grupo, implementava um listener passivo que aguardava sequências de knock via TCP antes de estabelecer canal C2 criptografado.
### UNC3886 (China-nexus, espionagem em infraestrutura)
[[g1048-unc3886|UNC3886]], grupo de espionagem com nexo chinês especializado em appliances de rede e hypervisors VMware, utilizou port knocking em conjunto com o rootkit [[s1219-reptile|REPTILE]] em comprometimentos documentados pela Mandiant em 2023. O grupo explorou CVEs em VMware ESXi e FortiOS para implantar daemons de escuta passiva em dispositivos de borda, tornando a detecção extremamente difícil em ambientes com visibilidade limitada de tráfego E-W.
### BPFDoor (China-nexus, telecomúnicações)
[[s1161-bpfdoor|BPFDoor]] é um backdoor Linux que utiliza filtros BPF (Berkeley Packet Filter) no kernel para implementar port knocking de forma extremamente furtiva. Reportado pela Trend Micro em 2022, o malware foi identificado em telecos e governos no Oriente Médio e Ásia. Em vez de usar libpcap em userspace, o BPFDoor opera diretamente via chamada de sistema `setsockopt(SO_ATTACH_FILTER)`, tornando sua detecção ainda mais complexa.
### cd00r (ferramenta histórica / referência técnica)
[[s1204-cd00r|cd00r]] é a implementação de referência de port knocking usando libpcap, documentada originalmente por Ced Niçu. Serviu de base conceitual para múltiplas famílias de malware que adotaram o padrão. A ferramenta usa `pcap_open_live()` em modo promíscuo para capturar pacotes sem criar sockets de escuta.
### REPTILE e metaMain
[[s1219-reptile|REPTILE]] é um rootkit LKM (Loadable Kernel Module) de código aberto que inclui funcionalidade de port knocking nativa. [[s1059-metamain|metaMain]] é um implante modular utilizado por UNC3886 que se apoia na infraestrutura do REPTILE para receber knock e ativar comúnicação C2.
---
## Detecção
A detecção de port knocking é inerentemente difícil porque os pacotes de knock individualmente parecem tentativas de conexão descartadas - indistinguíveis de varreduras aleatórias. A estratégia eficaz combina análise de comportamento de firewall, auditoria de processos e análise de fluxo.
### Regra Sigma - Sequência de Portas Rejeitadas (Padrão de Knock)
```yaml
title: Possível Port Knocking - Sequência de Portas Rejeitadas
id: a3f2c1d8-9b4e-4f7a-8c3d-6e1f2a9b7c4d
status: experimental
description: >
Detecta múltiplas tentativas de conexão rejeitadas para portas diferentes
originadas do mesmo IP em curto intervalo de tempo, indicando possível
sequência de port knocking.
references:
- https://attack.mitre.org/techniques/T1205/001/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1205.001
logsource:
product: linux
service: iptables
detection:
selection:
type: "DROP"
proto: "TCP"
timeframe: 30s
condition: selection | count(dpt) by src > 3
falsepositives:
- Varreduras de rede legítimas (administração)
- Testes de conectividade automatizados
level: medium
```
### Regra Sigma - Daemon Escutando via libpcap/Raw Socket
```yaml
title: Processo Usando libpcap ou Raw Socket sem Justificativa
id: b7e4d2a1-3c8f-4a9b-9d5e-2f1c6b8a3e7f
status: experimental
description: >
Detecta processos que abrem raw sockets AF_PACKET ou carregam libpcap
sem corresponder a processos de captura conhecidos (tcpdump, wireshark, etc.)
references:
- https://attack.mitre.org/techniques/T1205/001/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1205.001
logsource:
product: linux
category: process_creation
detection:
selection:
CommandLine|contains:
- "AF_PACKET"
- "SOCK_RAW"
- "pcap_open_live"
filter_legit:
Image|endswith:
- "/tcpdump"
- "/wireshark"
- "/tshark"
- "/snort"
- "/suricata"
condition: selection and not filter_legit
falsepositives:
- Ferramentas de monitoramento customizadas
- Agentes de segurança legítimos
level: high
```
### Indicadores Adicionais de Detecção
| Indicador | Fonte de Dado | Relevância |
|-----------|--------------|-----------|
| Mudança súbita em regra iptables/nftables | `auditd` - syscall `setsockopt` | Alta |
| Novo processo ouvindo em porta após sequência DROP | Netstat / `ss` diff | Alta |
| Processo com descritor `AF_PACKET` sem root justificado | `/proc/net/packet` | Alta |
| Tráfego de saída repentino após silêncio de rede | NetFlow / Zeek | Média |
| Módulo BPF carregado por processo não-root | `bpftool prog list` | Alta |
---
## Mitigação
| ID | Mitigação | Implementação Recomendada |
|----|-----------|--------------------------|
| [[m1037-filter-network-traffic\|M1037 - Filter Network Traffic]] | Filtro de rede | Implementar regras de firewall stateful que registrem e alertem para padrões de rejeição sequencial do mesmo IP. Usar `iptables -m recent` para rastrear IPs com múltiplas tentativas em portas distintas. |
| Auditoria de processos | Monitoramento | Auditar todos os processos que utilizam `AF_PACKET` ou carregam `libpcap`. Processos não autorizados com essas capacidades devem gerar alerta imediato. |
| Segmentação de rede | Arquitetura | Implementar Zero Trust: nenhuma porta deve ser aberta para segmentos não confiáveis. Port knocking em ambientes ZTA é menos eficaz pois qualquer tráfego não autorizado já gera alerta. |
| Monitoramento de módulos kernel | LKM Auditing | Em Linux, monitorar `insmod`/`modprobe` para rootkits como REPTILE que implementam knock em kernel space. Ferramentas como Falco e auditd podem detectar carregamento suspeito de módulos. |
| HIDS/EDR com análise de syscall | Detecção | Soluções como Falco, Sysdig e auditd permitem correlacionar chamadas `setsockopt(SO_ATTACH_FILTER)` com processos suspeitos, identificando daemons BPF-based knock. |
---
## Contexto Brasil/LATAM
A técnica de port knocking é especialmente relevante no contexto brasileiro porque uma parcela significativa da infraestrutura crítica nacional - telecomúnicações, energia, serviços financeiros - opera appliances de rede e servidores Linux expostos à internet com monitoramento de segurança limitado.
**Grupos com nexo a espionagem ativa na região:**
- [[g1048-unc3886|UNC3886]] comprometeu appliances de borda de fabricantes com presença relevante no Brasil (VMware, Fortinet), usando port knocking para manter acesso persistente. A Mandiant documentou vítimas em telecomúnicações e governo no leste asiático com padrões de ataque replicáveis em LATAM.
- [[g0056-promethium|PROMETHIUM]] opera principalmente no Mediterrâneo e Oriente Médio, mas o modelo técnico de port knocking via [[s1060-mafalda|Mafalda]] é amplamente documentado e pode ser replicado por grupos com menor sofisticação.
**Infraestrutura de risco no Brasil:**
- Roteadores e firewalls com firmware desatualizado (Mikrotik, Cisco, FortiGaté) são alvos frequentes de implantação de backdoors com port knocking
- Provedores regionais de internet (ISPs) com capacidade limitada de NDR/NetFlow são alvos ideais
- Servidores Linux em nuvem pública (AWS, Azure, GCP) no Brasil frequentemente carecem de configuração de auditoria adequada para detectar processos com `AF_PACKET`
**Recomendação para SOCs brasileiros:**
Implementar regras de correlação em SIEM para sequências de rejeição TCP/UDP do mesmo IP externo em mais de 3 portas distintas em jánela de 60 segundos. Integrar [[t1040-network-sniffing|T1040 - Network Sniffing]] na caça a esse TTP, pois a captura passiva de pacotes é um pré-requisito técnico.
---
## Técnicas Relacionadas
- [[t1205-traffic-signaling|T1205 - Traffic Signaling]] (técnica pai)
- [[t1205-002-socket-filters|T1205.002 - Socket Filters]] (variante BPF)
- [[t1040-network-sniffing|T1040 - Network Sniffing]] (mecanismo de detecção de knock)
- [[t1106-native-api|T1106 - Native API]] (libpcap, raw sockets)
- [[t1059-command-scripting-interpreter|T1059 - Command and Scripting Interpreter]] (execução pós-knock)
- [[t1543-create-or-modify-system-process|T1543 - Creaté or Modify System Process]] (persistência do daemon)
- [[t1036-009-break-process-trees|T1036.009 - Break Process Trees]] (evasão combinada frequente)
---
## Referências
- [MITRE ATT&CK - T1205.001](https://attack.mitre.org/techniques/T1205/001/)
- [Mandiant - UNC3886 Uses VMware ESXi Zero-Days (2023)](https://www.mandiant.com/resources/blog/vmware-esxi-zero-day-temporary-account-creation)
- [Trend Micro - BPFDoor: An Evasive Linux Backdoor (2022)](https://www.trendmicro.com/en_us/research/22/e/network-evasion-bpfdoor-an-evasive-linux-backdoor.html)
- [Kaspersky - PROMETHIUM/StrongPity (2020)](https://securelist.com/strongpity-apt/)
- [cd00r - Original Port Knocking Tool](http://www.0xbadc0de.be/papers/cd00r.en.html)
- [Wikipedia - Port Knocking](https://en.wikipedia.org/wiki/Port_knocking)