# T1036.011 - Overwrite Process Arguments
## Descrição
**Overwrite Process Arguments** é uma sub-técnica de [[t1036-masquerading|T1036 - Masquerading]] exclusiva de sistemas Linux. O adversário manipula os argumentos de linha de comando de um processo em memória - específicamente o conteúdo de `argv[0]` - para que ferramentas de monitoramento como `ps`, `top`, `htop` e leitores de `/proc/<PID>/cmdline` exibam um nome de processo completamente diferente do real.
A técnica não requer privilégios elevados: como os argumentos de processo são armazenados no espaço de memória de usuário (user-space) durante a inicialização, qualquer processo pode modificar seu próprio `argv` após o lançamento. O resultado é que um backdoor ou implante malicioso pode se apresentar como `[kworker/0:0]`, `sshd`, `cat resolv.conf` ou qualquer outro processo aparentemente legítimo para administradores e sistemas de monitoramento que consultam `/proc`.
O exemplo mais documentado desta técnica em ambiente real é o [[s1161-bpfdoor|BPFDoor]], um backdoor Linux sofisticado atribuído a ator de espionagem de nexo chinês (UNC4900 / Red Menshen), que usa exatamente esta técnica para se mascarar em servidores Linux comprometidos - frequentemente em infraestrutura de telecomúnicações e governo.
> **Técnica pai:** [[t1036-masquerading|T1036 - Masquerading]]
> **Tática:** [[_defense-evasion|Defense Evasion]]
> **Plataforma:** Linux (exclusivo)
---
## Como Funciona
### Fundamentos do Linux `/proc` e `argv`
No Linux, o kernel armazena os argumentos de linha de comando de um processo na pilha (stack) do processo no momento de seu lançamento. O `glibc` passa esses argumentos para a função `main()` como o array `argv[]`, onde:
- `argv[0]` - nome ou caminho do processo (ex: `/usr/sbin/sshd`)
- `argv[1]`, `argv[2]`, ... - argumentos subsequentes
O kernel expõe esses valores via o sistema de arquivos virtual `/proc`:
- `/proc/<PID>/cmdline` - linha de comando completa, delimitada por bytes nulos
- `/proc/<PID>/comm` - nome curto do processo (limitado a 15 caracteres, baseado no nome do executável)
Ferramentas como `ps`, `top`, `htop` e sistemas de monitoramento consultam `/proc/<PID>/cmdline` para exibir informações do processo.
### O Mecanismo de Sobrescrita
Como `argv` reside na memória de usuário do próprio processo, o processo pode modificar esse conteúdo livremente:
**Passo 1 - Apagar argumentos originais:** O malware sobrescreve cada byte de cada string de argumento com bytes nulos (`\0`). Isso apaga todo rastro de como o processo foi realmente iniciado.
**Passo 2 - Escrever o disfarce:** O malware escreve a string de disfarce na região de memória que antes continha `argv[0]`, por exemplo: `cat resolv.conf` ou `[kworker/0:1]` ou `sshd: /usr/sbin/sshd`.
**Passo 3 - Reflexo imediato em `/proc`:** Como `/proc/<PID>/cmdline` é uma jánela direta para essa memória, a mudança é refletida instantaneamente - sem necessidade de reiniciar o processo.
### Limitações e considerações
- **`/proc/<PID>/comm`** - este arquivo mostra o nome curto do executável com base no arquivo em disco, não em `argv[0]`. Um processo bem-disfarçado precisaria também alterar este arquivo (requer acesso de escrita a `/proc/self/comm`) ou garantir que o binário em disco tenha um nome convincente.
- **`/proc/<PID>/exe`** - link simbólico para o executável real em disco. Ferramentas forenses que verificam este link descobrirão o binário real, independente da manipulação de `argv`.
- **Comprimento da string:** A string de disfarce não pode ser mais longa que a string original de argumentos (sem realocação de memória), pois o espaço disponível é fixo.
---
## Attack Flow
```mermaid
graph TB
A["🔴 Implante Executado no Linux<br/>Ex: BPFDoor iniciado em /tmp/.x<br/>ou via cron / serviço comprometido"] --> B
B["🧹 Apagamento de Argumentos<br/>memset(argv[0], 0, tamanho_total)<br/>Todos os args sobrescritos com \\0"] --> C
C["✍️ Escrita do Disfarce<br/>strcpy(argv[0], 'cat resolv.conf')<br/>ou '[kworker/0:1]' / 'sshd'"] --> D
D["📁 /proc/PID/cmdline Atualizado<br/>Kernel reflete a memória user-space<br/>diretamente no procfs"] --> E
E{"Ferramenta de Monitoramento<br/>consulta ps / top / SIEM"}
E -->|"ps aux"| F1["✅ Mostra: 'cat resolv.conf'<br/>Aparenta processo benigno<br/>Analista ignora"]
E -->|"Forense avançada"| F2["🔍 /proc/PID/exe → link real<br/>Aponta para /tmp/.x ou binário suspeito<br/>Divergência detectada"]
F1 --> G["🎯 Persistência Furtiva<br/>Backdoor ativo, invisível para<br/>monitoramento convencional"]
F2 --> H["⚠️ Comprometimento Detectado<br/>Investigação de incidente iniciada"]
style A fill:#c0392b,color:#fff
style C fill:#e67e22,color:#fff
style F1 fill:#27ae60,color:#fff
style F2 fill:#2980b9,color:#fff
style G fill:#8e44ad,color:#fff
style H fill:#16a085,color:#fff
```
---
## Exemplos de Uso
### BPFDoor - O caso mais documentado
O [[s1161-bpfdoor|BPFDoor]] é o exemplo canônico desta técnica em ambiente real. Descoberto em 2022 por PwC e Sandfly Security, o BPFDoor é um backdoor Linux passivo que usa filtros BPF (Berkeley Packet Filter) para receber comandos sem abrir portas de rede - tornando-o invisível a varreduras de porta.
Como parte de seu arsenal de evasão, o BPFDoor sobrescreve seus argumentos de processo para se apresentar como:
- `/sbin/udevd -d` (daemon legítimo do udev)
- `avahi-daemon: registering [hostname.local]` (daemon Avahi/mDNS)
- `/usr/sbin/sshd -D` (servidor SSH)
- `cat /dev/null` (comando benigno)
- `kdmflush` (processo fictício que imita threads do kernel)
O BPFDoor foi observado em comprometimentos de longa duração (meses a anos) em provedores de telecomúnicações e organizações governamentais na Ásia, Oriente Médio e América Latina, com atribuição a ator de nexo chinês (rastreado como Red Menshen / UNC4900).
### Outros implantes Linux documentados
Embora o BPFDoor sejá o caso mais documentado, a técnica de sobrescrita de `argv` é uma prática conhecida entre desenvolvedores de software legítimo (daemons como PostgreSQL e Apache a utilizam para segurança) e foi adotada por outros implantes Linux menos documentados publicamente. Rootkits e backdoors avançados voltados a servidores Linux frequentemente incluem alguma forma de manipulação de identificação de processo.
---
## Detecção
A detecção de Overwrite Process Arguments requer ir além das ferramentas convencionais que consultam apenas `/proc/<PID>/cmdline`.
### Sigma Rule - Divergência entre cmdline e exe em processo suspeito
```yaml
title: Process Arguments Masquerading - cmdline vs exe Divergence
id: e3f4a5b6-7890-cdef-0123-456789abcdef
status: experimental
description: >
Detecta processos onde o conteúdo de /proc/PID/cmdline sugere um processo
benigno, mas o /proc/PID/exe aponta para um binário em localização suspeita.
Padrão característico de T1036.011 - Overwrite Process Arguments.
references:
- https://attack.mitre.org/techniques/T1036/011/
- https://www.pwc.com/gx/en/issues/cybersecurity/cyber-threat-intelligence/bpfdoor.html
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1036.011
logsource:
product: linux
category: process_creation
detection:
# Detectar processos cujo exe está em localização suspeita
# mas cujo cmdline parece legítimo (divergência)
selection_suspicious_path:
Image|startswith:
- '/tmp/'
- '/dev/shm/'
- '/var/tmp/'
- '/run/shm/'
- '/proc/'
filter_known_benign_cmdline:
CommandLine|startswith:
- '/sbin/'
- '/usr/sbin/'
- '/usr/bin/'
- '/bin/'
condition: selection_suspicious_path and filter_known_benign_cmdline
falsepositives:
- Scripts de deploy que copiam binários temporariamente para /tmp
level: high
```
### Sigma Rule - Processo com nome de kernel thread em espaço de usuário
```yaml
title: Userspace Process Masquerading as Kernel Thread
id: f4a5b6c7-8901-def0-1234-56789abcdef0
status: experimental
description: >
Detecta processos em espaço de usuário que se apresentam com nomes típicos
de kernel threads (entre colchetes), padrão de disfarce usado pelo BPFDoor
e técnicas similares de T1036.011.
references:
- https://attack.mitre.org/techniques/T1036/011/
author: RunkIntel
daté: 2026-03-25
tags:
- attack.defense_evasion
- attack.t1036.011
logsource:
product: linux
category: process_creation
detection:
selection:
# Processos com nome entre colchetes (imitando kworker, etc.)
Image|re: '^\[.*\]