# T1574.006 - Sequestro do Vinculador Dinâmico ## Técnica Pai Esta é uma sub-técnica de [[t1574-hijack-execution-flow|T1574 - Sequestro de Fluxo de Execução]]. ## Descrição Adversários podem executar payloads maliciosos ao manipular as variáveis de ambiente que o vinculador dinâmico (dynamic linker) utiliza para carregar bibliotecas compartilhadas em tempo de execução. No Linux, a variável `LD_PRELOAD` permite que um usuário especifique bibliotecas que serão carregadas antes de qualquer outra, com precedência sobre as bibliotecas do sistema. No macOS, a variável equivalente é `DYLD_INSERT_LIBRARIES`. Quando um processo é iniciado, o linker carrega essas bibliotecas antes das do sistema, o que significa que funções da biblioteca maliciosa substituem as funções legítimas de mesmo nome. Essa técnica é particularmente eficaz porque é difícil de detectar: o código malicioso é injetado dentro de processos legítimos, não há um binário estranho em execução isolada, e o mecanismo utilizado (`LD_PRELOAD`) é uma funcionalidade legítima do sistema operacional, amplamente usada por desenvolvedores para debug e testes. Quando aplicada ao daemon `sshd`, por exemplo, a biblioteca maliciosa é herdada por todos os processos filhos, resultando em execução persistente sob processos legítimos de sistema. Além da execução de código, o sequestro do vinculador dinâmico permite que adversários usem [[t1564-hide-artifacts|T1564 - Ocultação de Artefatos]]: ao sobrepor funções como `readdir()`, `fopen()` e `execve()`, a biblioteca maliciosa pode filtrar os resultados de comandos como `ls`, `ldd`, `ps` e `iptables`, tornando o malware invisível para o usuário e para ferramentas de segurança que dependem dessas chamadas de sistema. Famílias de malware como [[s0377-ebury|Ebury]] e [[s0394-hiddenwasp|HiddenWasp]] utilizam essa abordagem para criar rootkits em userspace. **Contexto Brasil/LATAM:** O grupo [[g0106-rocke|Rocke]], com foco em cryptojacking de servidores Linux expostos na internet, utilizou `LD_PRELOAD` para ocultar processos de mineração de criptomoedas e manter persistência em servidores comprometidos. Ambientes de cloud Linux - amplamente utilizados por empresas brasileiras para hospedar APIs, bancos de dados e serviços web - são alvos frequentes desse tipo de ataque. A técnica é especialmente relevante para servidores com acesso SSH exposto ou com configurações padrão inseguras. ## Attack Flow ```mermaid graph TB A[Acesso Inicial<br/>SSH Brute-force / Exploração de Serviço] --> B[Execução<br/>Shell em Contexto de Usuário ou Root] B --> C[Escrita de Biblioteca Maliciosa<br/>libevil.so em Diretório Gravável] C --> D{{"T1574.006<br/>Sequestro do Vinculador Dinâmico<br/>LD_PRELOAD / DYLD_INSERT_LIBRARIES"}} D --> E[Injeção em Processo Legítimo<br/>sshd, apache2, cron] E --> F[Ocultação de Artefatos<br/>Hooking de readdir / execve] F --> G[Persistência<br/>/etc/ld.so.preload ou .bashrc] G --> H[Execução Contínua<br/>Cryptomining / Backdoor / Exfiltração] ``` ## Como Funciona 1. **Preparação** - O adversário compila uma biblioteca compartilhada maliciosa (`.so` no Linux, `.dylib` no macOS) que implementa versões alternativas de funções do sistema (ex: `execve`, `read`, `write`, `getpid`). A biblioteca é transferida para o sistema comprometido, geralmente em `/tmp`, `/dev/shm` ou diretórios graváveis pelo usuário atual. 2. **Execução** - A variável `LD_PRELOAD` é configurada para apontar para a biblioteca maliciosa. Isso pode ser feito de forma temporária (apenas na sessão atual), ou persistente via `/etc/ld.so.preload` (que se aplica globalmente a todos os processos), `.bashrc` / `.profile` do usuário, ou scripts de inicialização de serviços. No macOS, `DYLD_INSERT_LIBRARIES` é configurado no ambiente de execução do processo alvo. 3. **Pós-execução** - A cada execução de um processo que carrega o linker dinâmico, a biblioteca maliciosa é injetada automaticamente. Funções sobrepostas podem interceptar credenciais, ocultar processos, coletar dados do processo legítimo ou estabelecer comunicação com infraestrutura de C2 - tudo isso dentro do espaço de memória de um processo confiável. **Exemplo - verificação de infecção via LD_PRELOAD (perspectiva defensiva):** ```bash # Verificar se /etc/ld.so.preload existe e tem conteúdo suspeito cat /etc/ld.so.preload # Checar variável LD_PRELOAD nos processos em execução for pid in $(ls /proc | grep -E '^[0-9]+); do env_val=$(cat /proc/$pid/environ 2>/dev/null | tr '\0' '\n' | grep LD_PRELOAD) [ -n "$env_val" ] && echo "PID $pid: $env_val" done # Listar bibliotecas carregadas por um processo suspeito ldd /proc/<PID>/exe 2>/dev/null ``` ## Detecção **Fontes de dados:** monitoramento de escrita em `/etc/ld.so.preload`, alertas de EDR para carregamento de bibliotecas não assinadas em processos de sistema, auditd com regras para `openat`/`write` em arquivos de configuração do linker, detecção de variáveis de ambiente `LD_PRELOAD` em processos filhos do `sshd` ou `cron`. ```yaml title: Modificação de /etc/ld.so.preload ou Uso de LD_PRELOAD Suspeito id: c8d4e5f6-a7b8-9012-cdef-345678901234 status: experimental logsource: product: linux service: auditd detection: selection_file: type: PATH name: "/etc/ld.so.preload" nametype: - CREATE - NORMAL selection_env: type: EXECVE a0|contains: "LD_PRELOAD" filter_package_managers: exe: - "/usr/bin/dpkg" - "/usr/bin/rpm" - "/usr/bin/apt" condition: (selection_file or selection_env) and not filter_package_managers falsepositives: - Ferramentas de profiling legítimas (ex: Valgrind, strace wrappers) - Bibliotecas de interceptação para testes de integração (ex: libfaketime) - Algumas implementações de Java/Node.js com agentes de instrumentação level: high tags: - attack.persistence - attack.privilege-escalation - attack.defense-evasion - attack.t1574.006 ``` ## Mitigação | Mitigação | Orientação Prática | |-----------|-------------------| | [[m1028-operating-system-configuration\|M1028 - Operating System Configuration]] | Remover o arquivo `/etc/ld.so.preload` se não utilizado; configurar sistemas com `nosuid` e `noexec` em pontos de montagem temporários; habilitar SELinux ou AppArmor para restringir carregamento de bibliotecas por processos críticos | | [[m1038-execution-prevention\|M1038 - Execution Prevention]] | Usar controles de integridade de código obrigatório (IMA/EVM no Linux) para verificar assinaturas de bibliotecas antes do carregamento; bloquear `LD_PRELOAD` em processos privilegiados via wrappers de `sudo` e configurações de PAM | ## Threat Actors que Usam - [[g0143-aquatic-panda|Aquatic Panda]] - utilizou técnicas de injeção de biblioteca em campanhas de espionagem contra setor de tecnologia e telecomúnicações - [[g0106-rocke|Rocke]] - empregou `LD_PRELOAD` em servidores Linux para ocultar mineradores de criptomoeda e manter persistência - [[g0096-apt41|APT41]] - combinou sequestro de linker dinâmico com outras técnicas de persistência em Linux em operações de espionagem de longa duração ## Software Associado - [[s0601-hildegard|Hildegard]] - malware de cryptomining para containers Kubernetes que usa `LD_PRELOAD` para evasão - [[s0394-hiddenwasp|HiddenWasp]] - rootkit Linux que injeta biblioteca maliciosa via `LD_PRELOAD` para ocultar processos e conexões - [[s0658-xcsset|XCSSET]] - malware macOS que explora `DYLD_INSERT_LIBRARIES` para injeção em processos de desenvolvimento - [[s1105-coathanger|COATHANGER]] - implante em dispositivos de rede FortiGaté que usa sequestro de linker para persistência furtiva - [[s0377-ebury|Ebury]] - rootkit SSH sofisticado que usa `LD_PRELOAD` para interceptar credenciais e ocultar sua presença em servidores Linux - [[s1220-medusa|MEDUSA]] - malware de acesso remoto que combina sequestro de linker com ofuscação de tráfego de rede ## Referências *Fonte: [MITRE ATT&CK - T1574.006](https://attack.mitre.org/techniques/T1574/006)*