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:c52b sem serial permite qualquer dispositivo com esse ID. Sempre incluir serial quando possível.
  • Não recarregar após editar regras: editar rules.conf sem reiniciar o daemon mantém a política antiga em memória.
  • Usar block em vez de reject para BadUSB: reject remove o dispositivo do kernel; block mantém-no visível. Para ameaças, usar reject.

Lista de verificação para implementação:

  • ✓ Instalar USBGuard em todas as estações Linux
  • ✓ Gerar rules.conf com dispositivos actuais antes de iniciar o daemon
  • ✓ Adicionar block match ou reject match como ú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.