# T1036.009 - Break Process Trees
## Descrição
**Break Process Trees** é uma subtécnica de [[t1036-masquerading|T1036 - Masquerading]] em que adversários manipulam a relação pai-filho entre processos do sistema operacional para ocultar processos maliciosos de ferramentas de detecção e resposta que dependem de análise de árvore de processos (process tree analysis).
Em sistemas Unix-like (Linux, macOS), toda execução de processo cria uma hierarquia: um processo pai (`parent process`) invoca um processo filho (`child process`). Ferramentas de segurança como EDRs, SIEMs e utilitários forenses como `pstree`, `htop` e `ps aux --forest` utilizam essa hierarquia para identificar comportamentos anômalos - por exemplo, `sshd` gerando um filho `bash` que executa `curl` é um padrão de ataque reconhecível. A técnica de Break Process Trees elimina esse contexto de forma intencional.
O método mais comum em Linux utiliza a sequência `fork() → fork() → exit()` no processo intermediário: o neto do processo original é adotado pelo `init` (PID 1) ou pelo `systemd`, tornando-se um processo órfão sem vínculo rastreável com o payload original. Ferramentas de detecção que monitoram exclusivamente relações pai-filho perdem a cadeia de contexto necessária para triagem.
Em macOS, variações incluem o uso de `launchd` como pai intermediário e chamadas `posix_spawn` com flags que modificam o relacionamento de processo. No Linux, a chamada `daemon()` da glibc automatiza a dupla bifurcação e a desconexão do terminal controlador.
> **Técnica pai:** [[t1036-masquerading|T1036 - Masquerading]]
> **Tática principal:** Defense Evasion
> **Plataformas:** Linux, macOS
---
## Como Funciona
### Mecanismo de Dupla Bifurcação (Double Fork)
A técnica se baseia em um padrão clássico de programação Unix para daemonizar processos, redirecionado para fins maliciosos:
**Etapa 1 - Fork inicial:**
O processo malicioso chama `fork()`, criando um processo filho (Filho 1). O processo pai original pode então terminar (`exit()`), ou continuar normalmente para criar aparência de legitimidade.
**Etapa 2 - Segundo fork:**
Filho 1 chama `fork()` novamente, criando Filho 2 (o neto do processo original). Filho 1 então termina (`exit()`).
**Etapa 3 - Adoção por init/systemd:**
Quando um processo pai termina antes de seus filhos, o kernel reparenta os filhos órfãos para o processo `init` (PID 1 - `systemd` em sistemas modernos). Filho 2 agora aparece com `ppid=1` - indistinguível de qualquer serviço do sistema.
**Etapa 4 - Execução do payload:**
Filho 2 executa o payload malicioso com `ppid=1`, eliminando qualquer rastreamento para o processo original que o iniciou.
### Chamada `daemon()`
A função `daemon(nochdir, noclose)` da glibc implementa automaticamente a dupla bifurcação, fecha descritores de arquivo, e opcionalmente muda o diretório para `/`. Adversários usam essa chamada para daemonizar malware com uma única linha de código, obtendo o mesmo efeito de desconexão de árvore.
### Variações Observadas
**Uso de `setsid()`:**
Adversários podem chamar `setsid()` para criar uma nova sessão sem terminal controlador, desvinculando o processo do grupo de sessão original. Embora não quebre o `ppid`, elimina contexto de sessão útil para análise forense.
**Namespace manipulation:**
Em ambientes de contêineres (Docker, Kubernetes), adversários podem criar novos namespaces PID via `unshare(CLONE_NEWPID)` para que o processo malicioso apareça com PID 1 dentro de seu próprio namespace, dificultando correlação com o namespace do host.
**`posix_spawn` com flags de reparentamento (macOS):**
No macOS, adversários podem usar `posix_spawn` com atributos que configuram o novo processo para ser adotado pelo `launchd` diretamente, produzindo efeito similar ao double-fork em Linux.
---
## Attack Flow
```mermaid
graph TB
A["Execução Inicial<br/>(payload entregue via<br/>phishing / exploit / C2)"] --> B["Processo malicioso<br/>iniciado com PPID<br/>do processo legítimo<br/>(ex: sshd, bash, python)"]
subgraph BREAK["Quebra da Árvore de Processos"]
B --> C["fork() - cria Filho 1<br/>PPID = processo original"]
C --> D["Filho 1: fork() novamente<br/>cria Filho 2 (Neto)"]
D --> E["Filho 1: exit()<br/>Processo intermediário<br/>encerrado"]
E --> F["Filho 2 reparentado<br/>pelo kernel para PID 1<br/>(init / systemd)"]
end
subgraph DETECCAO["Visibilidade da Ferramenta de Detecção"]
G["EDR/SIEM detecta<br/>cadeia: sshd → bash → payload"]
H["Após double-fork:<br/>processo aparece<br/>como filho de PID 1<br/>Sem contexto malicioso"]
G --> I["ALERTA gerado<br/>(relação suspeita detectada)"]
H --> J["SEM ALERTA<br/>(processo parece daemon legítimo)"]
end
B --> G
F --> H
subgraph C2["Operação Pós-Evasão"]
F --> K["Payload executa<br/>sem rastreamento<br/>para processo de origem"]
K --> L["Comúnicação C2<br/>estabelecida como<br/>daemon do sistema"]
end
style BREAK fill:#1a1a2e,stroke:#e94560,color:#fff
style DETECCAO fill:#16213e,stroke:#f39c12,color:#fff
style C2 fill:#0f3460,stroke:#27ae60,color:#fff
style F fill:#e94560,color:#fff
style J fill:#c0392b,color:#fff
style I fill:#27ae60,color:#fff
```
---
## Exemplos de Uso
### BPFDoor (China-nexus, telecomúnicações e governo)
[[s1161-bpfdoor|BPFDoor]] é o exemplo mais documentado de Break Process Trees em uso operacional. O backdoor Linux, atribuído a um grupo com nexo chinês e descoberto pela Trend Micro em 2022, utiliza a chamada `daemon()` da glibc para desconectar completamente da árvore de processos original após execução. O processo resultante aparece com `ppid=1` e geralmente adota um nome de processo que imita daemons legítimos (`/sbin/udevd`, `/usr/sbin/rsyslogd`). O BPFDoor combina essa técnica com [[t1205-001-port-knocking|T1205.001 - Port Knocking]] via filtros BPF para criar um dos backdoors mais furtivos já documentados em produção.
Vítimas confirmadas incluem organizações de telecomúnicações e governo no Oriente Médio e Ásia, com o mesmo modelo de ataque sendo considerado replicável em infraestrutura LATAM.
### Aplicação em Rootkits LKM
Rootkits de kernel como [[s1219-reptile|REPTILE]] combinam Break Process Trees com ocultação de PID no kernel - o processo malicioso não apenas aparece com `ppid=1`, como também é removido das listagens `/proc`, tornando-o invisível para ferramentas userspace como `ps`, `top` e `lsof`. A combinação torna o processo detectável apenas via análise direta da estrutura do kernel ou por ferramentas baseadas em eBPF que operam no mesmo nível de privilégio.
### Scripts de Pós-Exploração (Red Team / Pentest)
A técnica é amplamente utilizada em frameworks de red team e ferramentas de pós-exploração como:
- **Metasploit** - sessões Meterpreter em Linux utilizam migração de processo que pode incluir reparentamento via `fork/exec` para persistir em processos de longa duração
- **Cobalt Strike** (Linux beacons) - suporta `fork and run` como padrão para operações pós-exploração, executando tarefas em processos filho que terminam sem deixar rastro na árvore
- Scripts Python/Bash ad-hoc que implementam double-fork como primeiro passo após entrega de payload
---
## Detecção
A detecção eficaz de Break Process Trees requer visibilidade além das relações pai-filho estáticas. Ferramentas baseadas em eBPF, auditd e análise comportamental de sessão são mais eficazes do que análise de árvore de processos convencional.
### Regra Sigma - Processo Adotado por PID 1 com Comportamento Suspeito
```yaml
title: Processo com PPID=1 Exibindo Comportamento de Rede ou Escrita Suspeitos
id: e2b7f4c9-5a3d-4e8b-b9c2-3f6a1d8e4b7c
status: experimental
description: >
Detecta processos cujo pai é PID 1 (init/systemd) que realizam conexões
de rede de saída, escrita em arquivos suspeitos ou execução de comandos
de shell - padrão consistente com double-fork daemonization por malware.
references:
- https://attack.mitre.org/techniques/T1036/009/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1036.009
logsource:
product: linux
category: network_connection
detection:
selection:
ParentProcessId: 1
Initiated: "true"
filter_legit_daemons:
Image|endswith:
- "/sshd"
- "/crond"
- "/rsyslogd"
- "/NetworkManager"
- "/systemd-networkd"
- "/dockerd"
- "/kubelet"
condition: selection and not filter_legit_daemons
falsepositives:
- Daemons de sistema legítimos que estabelecem conexões de rede
- Serviços de monitoramento iniciados via systemd
level: medium
```
### Regra Sigma - Sequência fork/fork/exit via Auditd
```yaml
title: Sequência de Double Fork Detectada via Auditd Syscall
id: f1c9e3b8-7d2a-4f6c-c3b1-9e4d2f7c1a8e
status: experimental
description: >
Detecta padrão de double fork (fork → fork → exit do processo intermediário)
via monitoramento de syscalls com auditd. Indicativo de tentativa de
daemonização maliciosa para quebra de árvore de processos.
references:
- https://attack.mitre.org/techniques/T1036/009/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1036.009
logsource:
product: linux
service: auditd
detection:
selection_fork:
type: SYSCALL
syscall:
- clone
- fork
- vfork
selection_exit:
type: SYSCALL
syscall: exit_group
ppid|same_as: selection_fork.pid
timeframe: 2s
condition: selection_fork | count() by ppid > 1 and selection_exit
falsepositives:
- Daemons legítimos que usam a função daemon() da glibc
- Processos de serviço que bifurcam workers
level: low
```
### Regra Sigma - Uso Direto da Chamada daemon() via strace/ltrace
```yaml
title: Chamada daemon() por Processo Não-Privilegiado
id: a8d3f2c7-4b9e-5f1a-d7c4-8e2b3a6f9c1d
status: experimental
description: >
Detecta chamada à função daemon() da glibc por processos fora de
diretórios de binários de sistema, indicativo de malware que implementa
double-fork via wrapper de alto nível.
references:
- https://attack.mitre.org/techniques/T1036/009/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1036.009
logsource:
product: linux
category: process_creation
detection:
selection:
type: SYSCALL
syscall: prctl
a0: "4" # PR_SET_NAME - comumente chamado após daemon() para renomear processo
filter_system:
exe|startswith:
- "/usr/sbin/"
- "/usr/lib/systemd/"
- "/lib/systemd/"
- "/sbin/"
condition: selection and not filter_system
falsepositives:
- Aplicações de usuário que legitimamente se daemonizam
level: medium
```
### Estrategias de Detecção Complementares
| Método | Ferramenta | Eficácia |
|--------|-----------|---------|
| Monitoramento de `ppid=1` com comportamento anômalo | auditd + SIEM | Alta - combinado com análise comportamental |
| Rastreamento de sessão via `sessionid` (independente de ppid) | auditd `ses` field | Alta - sessão não muda com reparentamento |
| eBPF tracing com Falco ou Tetragon | Falco / Cilium Tetragon | Muito alta - opera no kernel, difícil de evadir |
| Baseline de processos com `ppid=1` por host | EDR + CMDB | Média - requer manutenção de baseline |
| Correlação de `loginuid` imutável via auditd | auditd | Alta - `loginuid` persiste mesmo após reparentamento |
**Chave de detecção:** O campo `loginuid` em auditd é definido no login do usuário e persiste em todos os processos filhos, mesmo após reparentamento por `init`. Um processo com `ppid=1` mas `loginuid` diferente de `-1` indica que foi reparentado artificialmente e merece investigação.
---
## Mitigação
A subtécnica T1036.009 é particularmente difícil de mitigar sem impactar funcionalidades legítimas, pois a dupla bifurcação é um padrão de programação Unix válido. A estratégia de defesa foca em detecção e contenção.
| Mitigação | Implementação | Prioridade |
|-----------|--------------|-----------|
| Habilitar auditd com regras de syscall | `auditctl -a always,exit -F arch=b64 -S clone,fork,vfork -k process_fork` | Alta |
| Usar `loginuid` para rastreamento imutável de sessão | Configurar auditd para incluir `auid` em todos os eventos | Alta |
| Implantar Falco ou Tetragon para rastreamento eBPF | Regras para processos `ppid=1` com comportamento de rede | Alta |
| Segmentação via namespaces Linux | Containers com seccomp profiles restringindo `clone` flags | Média |
| Baseline de processos legítimos com `ppid=1` | CMDB + EDR para alertar sobre novos processos fora do baseline | Média |
| HIDS com integridade de binários | AIDE, Tripwire - detecta novos executáveis criados por processos daemonizados | Média |
---
## Contexto Brasil/LATAM
A técnica de Break Process Trees é especialmente relevante no contexto de infraestrutura crítica brasileira porque a maioria dos servidores Linux em provedores de serviço e telecomúnicações no Brasil opera com configuração mínima de auditoria - sem auditd adequado, sem Falco, e com EDR frequentemente ausente ou focado apenas em Windows.
**Relevância de BPFDoor no Brasil:**
[[s1161-bpfdoor|BPFDoor]] representa o cenário de ameaça mais imediato: backdoor Linux extremamente furtivo que combina Break Process Trees com port knocking BPF, projetado exatamente para ambientes com pouca visibilidade de rede e processos. Provedores de telecomúnicações, ISPs regionais e operadoras de energia no Brasil compartilham as características de infraestrutura que tornaram as vítimas documentadas vulneráveis.
**Ambientes de contêiner em risco:**
Com a crescente adoção de Kubernetes e Docker no Brasil - especialmente em fintechs, govtech e telecomúnicações - variações da técnica que utilizam namespace manipulation (`unshare(CLONE_NEWPID)`) são relevantes. Containeres sem seccomp profiles restritivos permitem que adversários criem namespaces PID privados, tornando o processo malicioso ainda mais difícil de correlacionar com o host.
**Ausência de ferramentas adequadas:**
A maioria das equipes de SOC no Brasil opera com SIEM focado em logs Windows e eventos de autenticação. Logs de syscall Linux (auditd) raramente são ingeridos ou correlacionados. Esta lacuna torna a detecção de T1036.009 práticamente nula sem investimento específico em telemetria Linux.
**Recomendações imediatas:**
1. Habilitar auditd em todos os servidores Linux com regras mínimas de fork/exec e conexões de rede
2. Implementar Falco com regra de alerta para processos com `ppid=1` realizando conexões de rede de saída
3. Correlacionar `loginuid` em logs auditd para rastrear origem de processos além da relação pai-filho
4. Inventariar periodicamente processos com `ppid=1` via `ps -eo pid,ppid,comm,args | awk '$2==1'` e comparar com baseline
---
## Técnicas Relacionadas
- [[t1036-masquerading|T1036 - Masquerading]] (técnica pai)
- [[t1205-001-port-knocking|T1205.001 - Port Knocking]] (frequentemente combinada - BPFDoor)
- [[t1106-native-api|T1106 - Native API]] (fork, daemon, setsid - chamadas de sistema usadas)
- [[t1543-create-or-modify-system-process|T1543 - Creaté or Modify System Process]] (persistência do daemon resultante)
- [[t1055-process-injection|T1055 - Process Injection]] (frequentemente passo seguinte após break de árvore)
- [[t1036-005-masquerade-task-service|T1036.005 - Match Legitimaté Name or Location]] (combinado para renomear processo filho)
- [[t1564-004-ntfs-file-attributes|T1564.004 - NTFS File Attributes]] (técnica de evasão relacionada em Windows)
---
## Referências
- [MITRE ATT&CK - T1036.009](https://attack.mitre.org/techniques/T1036/009/)
- [Trend Micro - BPFDoor: An Evasive Linux Backdoor Leveraging BPF (2022)](https://www.trendmicro.com/en_us/research/22/e/network-evasion-bpfdoor-an-evasive-linux-backdoor.html)
- [The Linux Programming Interface - Stevens & Rago: UNIX Network Programming](https://man7.org/tlpi/)
- [Linux man page - daemon(3)](https://man7.org/linux/man-pages/man3/daemon.3.html)
- [Falco Rules - Process Spawned in Pod (similar pattern)](https://falco.org/docs/rules/)
- [auditd - Tracking loginuid across process reparenting](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/auditing-the-system_security-hardening)