USBGuard: Controlo de Dispositivos USB no Linux para PME
O USB é uma das principais vias de comprometimento em redes corporativas. Um pendrive malicioso, um teclado programável (BadUSB) ou um simples dispositivo desconhecido podem contornar firewalls e infectar estações de trabalho. O USBGuard é uma ferramenta de lista de permissões que controla quais dispositivos USB podem ligar-se a cada máquina Linux, bloqueando todo o resto por defeito.
ℹ O USBGuard permite definir políticas granulares por dispositivo USB — lista de permissões baseada em ID de fabricante, número de série ou porta.
1. Introdução ao USBGuard
O USBGuard é um serviço de fundo de código aberto que monitoriza o barramento USB através do kernel uevent e aplica regras em tempo real. Quando um dispositivo é ligado, o USBGuard avalia a política e decide se o autoriza, bloqueia ou rejeita. Por defeito, a política é de bloqueio total — apenas dispositivos explicitamente listados são permitidos.
Para PME com estações Linux, o USBGuard responde a três vectores críticos:
- BadUSB: dispositivos que emulam teclados e injectam comandos maliciosos sem interacção do utilizador.
- Exfiltração de dados: pendrives não autorizados que copiam ficheiros sensíveis da rede.
- Malware auto-run: dispositivos com cargas que se executam ao montar.
O daemon corre em espaço de utilizador e não requer módulos de kernel adicionais. Funciona em Debian, Ubuntu, Fedora, RHEL, Arch e derivados. Consulte a documentação do Arch Wiki para detalhes de configuração avançada.
2. Instalação
O USBGuard está disponível nos repositórios oficiais das principais distribuições. A instalação inclui o daemon, o utilitário CLI e as políticas base.
# Instalar no Debian/Ubuntu
sudo apt install usbguard
# Instalar no Fedora/RHEL
sudo dnf install usbguard
# Gerar política inicial (dispositivos actuais = allow)
sudo usbguard generate-policy > /etc/usbguard/rules.conf
# Iniciar e activar o serviço
sudo systemctl enable --now usbguard
# Verificar estado
systemctl status usbguard
O comando generate-policy cria regras allow para todos os dispositivos actualmente ligados. Isto é essencial — sem este passo, o USBGuard bloqueia tudo no arranque, incluindo teclados e ratos USB.
⚠ Nunca executar USBGuard sem primeiro gerar a lista de permissões de dispositivos actualmente ligados — bloqueia tudo por defeito, incluindo teclado e rato.
3. Configuração de Políticas
As políticas vivem em /etc/usbguard/rules.conf. Cada linha é uma regra com um verbo (allow, block, reject) seguido de condições de correspondência. A última regra é geralmente block match ou reject match, que define a política por defeito.
| Verbo | Comportamento |
|---|---|
allow |
Autoriza o dispositivo e comunica ao kernel |
block |
Bloqueia — dispositivo detectado mas não autorizado |
reject |
Rejeita — remove o dispositivo do barramento |
A diferença entre block e reject é importante: block mantém o dispositivo visível no sistema (pode ser autorizado manualmente depois); reject remove-o completamente do kernel.
4. Regras por Dispositivo
As regras podem filtrar por vários atributos do dispositivo: ID de fabricante/produto, número de série, nome, porta USB, tipo de interface ou uma combinação destes. Quanto mais específica a regra, mais granular o controlo.
# Permitir por ID de fabricante:product
allow id 046d:c52b serial "B5N123456" name "Logitech"
# Permitir teclado específico por número de série
allow id 046d:c534 serial "A1B2C3D4" name "Logitech Receiver" with-interface 03:01:01
# Bloquear dispositivo específico
block id 1234:5678
# Permitir apenas na porta 1-2
allow id 046d:c52b with-interface 03:01:01 via-port "1-2"
# Regra por defeito: bloquear tudo o resto
block match
# Verificar política antes de aplicar
usbguard check-rules /etc/usbguard/rules.conf
Após editar o ficheiro, recarregar a política sem reiniciar o daemon:
# Recarregar regras em tempo de execução
sudo usbguard check-rules /etc/usbguard/rules.conf && sudo systemctl restart usbguard
# Listar dispositivos actualmente ligados
usbguard list-devices
# Autorizar dispositivo em tempo de execução (temporário)
sudo usbguard allow-device --serial XXXXXX
# Bloquear dispositivo em tempo de execução
sudo usbguard block-device --id 1234:5678
# Listar dispositivos bloqueados
usbguard list-devices -b
ℹ Comandos allow-device e block-device são temporários — não persistem após reinício. Para tornar permanente, adicionar a regra a rules.conf.
5. USBGuard e Conformidade NIS2/CIS
A directiva NIS2 exige medidas técnicas e organizacionais para proteger sistemas de informação. O controlo de dispositivos USB enquadra-se em dois requisitos principais: controlo de acesso físico/lógico e protecção contra ameaças internas. O USBGuard responde directamente a estes pontos.
No benchmark CIS Controls v8, o USBGuard mapeia-se em:
| CIS Control | Descrição | Cobertura USBGuard |
|---|---|---|
| 8.4 | Permitir instalação/remoção de dispositivos apenas autorizados | Total — lista de permissões por ID/número de série |
| 10.3 | Configurar monitorização de alterações em rede | Parcial — registo de eventos USB |
| 13.5 | Proteger contra ameaças internas | Total — bloqueio de dispositivos não listados |
Para PME sujeitas a auditorias, o rules.conf serve como evidência documental de que apenas dispositivos aprovados podem ligar-se às estações. O registo de eventos em journald demonstra conformidade contínua.
6. Monitorização e Registos
O USBGuard regista todos os eventos USB no journald. Cada vez que um dispositivo é ligado, autorizado ou bloqueado, o serviço de fundo emite uma entrada com o registo de data/hora, o ID do dispositivo e a decisão aplicada.
# Verificar eventos USBGuard recentes
journalctl -u usbguard -n 50 --no-pager
# Seguir eventos em tempo real
journalctl -u usbguard -f
# Eventos de bloqueio apenas
journalctl -u usbguard | grep -i "block"
# Verificar dispositivos actualmente autorizados
usbguard list-devices -a
# Verificar dispositivos bloqueados
usbguard list-devices -b
# Exportar relatório de política actual
usbguard generate-policy
Para PME com múltiplas estações, recomenda-se enviar os registos do usbguard para um servidor central de syslog ou SIEM. O Curso Linux Dia 9 sobre firewalls aborda a configuração de registos centralizados, e a ferramenta fail2ban pode complementar o USBGuard para bloqueio automático de IPs com tentativas suspeitas. Para fundamentos de linha de comando, consulte o Curso Linux Dia 1.
7. Erros Comuns e Lista de Verificação
A maioria dos problemas com USBGuard resulta de configuração incorrecta ou de aplicar políticas sem testar primeiro. Estes são os erros mais frequentes e como os evitar:
- Esquecer generate-policy antes de iniciar: o daemon arranca com regras vazias e bloqueia teclado e rato. Sempre gerar a política inicial com os dispositivos actuais.
- Regras demasiado amplas: usar apenas
allow id 046d:c52bsem serial permite qualquer dispositivo com esse ID. Sempre incluir serial quando possível. - Não recarregar após editar regras: editar
rules.confsem reiniciar o daemon mantém a política antiga em memória. - Usar block em vez de reject para BadUSB:
rejectremove o dispositivo do kernel;blockmantém-no visível. Para ameaças, usarreject.
Lista de verificação para implementação:
- ✓ Instalar USBGuard em todas as estações Linux
- ✓ Gerar
rules.confcom dispositivos actuais antes de iniciar o daemon - ✓ Adicionar
block matchoureject matchcomo última regra - ✓ Incluir serial em regras de dispositivos sensíveis
- ✓ Testar com um pendrive não autorizado e confirmar bloqueio
- ✓ Configurar reenvio de registos para SIEM central
- ✓ Documentar a política para auditorias NIS2/CIS
- ✓ Rever a lista de permissões trimestralmente
O USBGuard é uma camada de defesa que complementa firewalls, EDR e políticas de acesso. Para PME com estações Linux expostas a utilizadores ou visitantes, o bloqueio por defeito com lista de permissões explícita é o modelo mais seguro. A implementação leva menos de 30 minutos por estação e reduz drasticamente a superfície de ataque via USB.