# T1546.017 - Regras Udev ## Técnica Pai Esta é uma sub-técnica de [[t1546-event-triggered-execution|T1546 - Execução Disparada por Evento]]. ## Descrição O subsistema **udev** é o gerenciador de dispositivos do kernel Linux responsável por criar e gerenciar dinâmicamente os nós de dispositivo no diretório `/dev`, responder a eventos de hardware e controlar permissões de acesso a arquivos de pseudo-dispositivos. Quando um evento ocorre - como a conexão de um pendrive ou teclado - o udev processa regras definidas em arquivos com extensão `.rules` espalhados por diretórios do sistema. Adversários podem abusar desse mecanismo adicionando ou modificando regras udev para executar binários maliciosos toda vez que um evento de hardware específico ocorrer. A diretiva `RUN+=` dentro dessas regras permite específicar um comando a ser executado pelo subsistema. Embora o udev funcione em um sandbox do `systemd-udevd` (sem acesso à rede ou ao sistema de arquivos em geral), atacantes contornam essa restrição usando comandos de shell que disparam o processo malicioso em segundo plano, desanexando-o completamente do contexto udev. Os arquivos de regras podem estar em múltiplos diretórios, com prioridade determinada pelo prefixo numérico do nome do arquivo e pela ordem dos diretórios. Permissões de root são necessárias para criar ou modificar regras nos diretórios do sistema (`/etc/udev/rules.d/`, `/run/udev/rules.d/`, `/usr/lib/udev/rules.d/`, `/usr/local/lib/udev/rules.d/`, `/lib/udev/rules.d/`). A técnica é especialmente eficaz porque as regras udev sobrevivem a reinicializações e são executadas em contexto privilegiado sem necessidade de interação do usuário. **Contexto Brasil/LATAM:** Ambientes Linux corporativos em infraestruturas de TI brasileiras - especialmente servidores de datacenter, sistemas de automação industrial e dispositivos embarcados - fazem uso extensivo do udev. O malware [[s1219-reptile|REPTILE]], um rootkit de kernel voltado a sistemas Linux, foi documentado utilizando regras udev para manter persistência furtiva em ambientes comprometidos. Operações de espionagem cibernética contra setores de [[_sectors|governo e energia]] na América Latina têm explorado esse mecanismo para garantir acesso persistente sem disparar alertas tradicionais de endpoint. ## Attack Flow ```mermaid graph TB A[Acesso Inicial ao Sistema Linux] --> B[Escalada de Privilégios para root] B --> C[Criação/Modificação de Regra Udev<br/>RUN+= com payload malicioso] C --> D{Evento de hardware<br/>aciona a regra} D --> E[ESTA TÉCNICA<br/>T1546.017 - Udev Rules] E --> F[Processo malicioso desanexado<br/>em segundo plano] F --> G[Persistência ativa a cada evento] G --> H[Execução Futura sem reautenticação] ``` ## Como Funciona 1. **Preparação** - O adversário obtém acesso root ao sistema Linux (via escalada de privilégios, exploração de vulnerabilidade ou credenciais comprometidas). Com isso, pode escrever em qualquer diretório de regras udev do sistema. 2. **Implantação da regra** - Uma regra udev maliciosa é criada em `/etc/udev/rules.d/` com um prefixo numérico estratégico (ex: `99-` para garantir alta prioridade). A regra usa `match keys` para específicar um pseudo-dispositivo comum (como `/dev/random`, acessado frequentemente por aplicações legítimas) e a diretiva `RUN+=` para executar o payload. 3. **Evasão do sandbox** - Como o sandbox do `systemd-udevd` bloqueia acesso à rede e ao sistema de arquivos, o adversário usa um comando shell que faz `nohup`, `setsid` ou substitui o processo (`exec`) para desprender o processo malicioso do contexto udev antes que as restrições sejam aplicadas. 4. **Pós-execução** - O payload roda como processo independente fora do sandbox, com capacidade de acesso completo à rede e ao sistema de arquivos, garantindo conexão reversa ou acesso backdoor sempre que o evento de hardware for disparado. **Exemplo de regra maliciosa:** ```bash # Arquivo: /etc/udev/rules.d/99-persistence.rules # Executa payload toda vez que /dev/random é acessado SUBSYSTEM=="mem", KERNEL=="random", ACTION=="change", \ RUN+="/bin/bash -c 'nohup /tmp/.hidden/agent &'" ``` ## Detecção **Fontes de dados:** Monitoramento de alterações em arquivos de regras udev, auditoria de processos filho do `systemd-udevd`, logs de execução de comandos privilegiados, integridade de arquivos (FIM). ```yaml title: Criação ou Modificação Suspeita de Regra Udev id: a3f1b2c4-8d92-4e7a-b5f3-1234567890ab status: experimental description: > Detecta criação ou modificação de arquivos de regras udev em diretórios do sistema, o que pode indicar tentativa de persistência via T1546.017. logsource: category: file_change product: linux detection: selection_paths: TargetFilename|startswith: - '/etc/udev/rules.d/' - '/run/udev/rules.d/' - '/usr/lib/udev/rules.d/' - '/usr/local/lib/udev/rules.d/' - '/lib/udev/rules.d/' selection_extension: TargetFilename|endswith: '.rules' condition: selection_paths and selection_extension falsepositives: - Atualizações de pacotes via gerenciador (apt, yum, dnf) - Instalação legítima de drivers de hardware - Scripts de configuração de administradores de sistema level: high tags: - attack.persistence - attack.t1546.017 ``` **Indicadores complementares:** - Processos filhos de `systemd-udevd` com conexões de rede estabelecidas - Arquivo `.rules` com conteúdo contendo `nohup`, `setsid`, `exec`, `/tmp`, `/dev/shm` - Regras com prefixo `99-` (alta prioridade) criadas fora de ciclos de atualização de pacotes - Hash de arquivos `.rules` divergindo do baseline após instalação do sistema ## Mitigação | Mitigação | Recomendação Prática | |-----------|---------------------| | [[m1022-restrict-file-and-directory-permissions\|M1022 - Restrict File and Directory Permissions]] | Garantir que apenas root possa escrever nos diretórios de regras udev. Verificar permissões regularmente com `stat /etc/udev/rules.d/` | | [[m1018-user-account-management\|M1018 - User Account Management]] | Restringir ao mínimo o número de contas com acesso root. Auditar uso de `sudo` para comandos que modifiquem arquivos de sistema | | [[m1047-audit\|M1047 - Audit]] | Implementar FIM (File Integrity Monitoring) nos diretórios de regras udev. Usar `auditd` com regras para monitorar escrita em `/etc/udev/rules.d/` | | [[m1045-code-signing\|M1045 - Code Signing]] | Em ambientes controlados, válidar integridade de arquivos de sistema com ferramentas como `aide` ou `Tripwire` como baseline de comparação | ## Software Associado - [[s1219-reptile|REPTILE]] - rootkit de kernel Linux que utiliza mecanismos de persistência no espaço do usuário, incluindo regras udev, para manter acesso furtivo ao sistema ## Referências *Fonte: [MITRE ATT&CK - T1546.017](https://attack.mitre.org/techniques/T1546/017/)*