# 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/)*