Usbguard (Português)
USBGuard oferece um mecanismo de lista branca/negra para dispositivos USB. A inspiração para isso vem de exploits como BadUSB. Ele faz uso de uma infraestrutura de bloqueio de dispositivo incluída no kernel do Linux e consiste em um daemon e alguns front-ends.
Instalação
Instale o usbguard pacote, ou usbguard-gitAUR para a versão de desenvolvimento. O miniaplicativo Qt foi removido do USBGuard 0.7.5 e será mantido em uma forma simplificada como um projeto separado posteriormente. [1]
Configuração
O arquivo de configuração principal é encontrado em /etc/usbguard/usbguard-daemon.conf
. Para editá-lo, você precisa de privilégios de root.
Se você deseja controlar o daemon via IPC, certifique-se de adicionar seu nome de usuário ao IPCAllowedUsers
ou seu grupo para IPCAllowedGroups
para tornar as regras persistentes. Na maioria dos casos, você desejará isso.
Por padrão, o USBGuard bloqueia todos os dispositivos recém-conectados e os dispositivos conectados antes da inicialização do daemon são deixados como estão. Isso pode ser alterado com a opção PresentDevicePolicy
. Definindo esta chave para apply-policy
é a configuração mais segura, que garante a segurança mesmo quando o daemon é reiniciado.
Com a chave ImplicitPolicyTarget
você pode configurar o tratamento padrão dos dispositivos, se nenhuma regra corresponder. A opção mais segura aqui é block
.
Para obter uma documentação detalhada da configuração, consulte o arquivo de configuração muito bem comentado.
Uso
USBGuard tem um daemon principal, um CLI, uma interface DBUS e uma API via libusbguard.
Se você quiser usar o Qt GUI ou outro programa de comunicação via DBUS, enable e start usbguard-dbus.service
.
Se você deseja se comunicar apenas via API (com a ferramenta CLI ou outro software usando libusbguard) enable e start usbguard.service
.
O CLI está disponível via usbguard
.
Veja as man pages de acordo para mais informações.
Regras
Para configurar o USBGuard de acordo com suas necessidades, você pode editar /etc/usbguard/rules.conf
. No entanto, a edição manual das regras normalmente não é necessária. Você pode gerar um conjunto de regras com base em seus dispositivos USB conectados no momento executando usbguard generate-policy > /etc/usbguard/rules.conf
como root.
A sintaxe das regras é explicada formalmente aqui. Um exemplo de impressora hp conectada via USB pode ser assim:
allow id 03f0:0c17 serial "00CNFD234631" name "hp LaserJet 2020" hash "a0ef07fceb6fb77698f79a44a450121m" parent-hash "69d19c1a5733a31e7e6d9530e6k434a6" with-interface { 07:01:03 07:01:02 07:01:01 }
Uma regra começa com uma política. allow
coloca um dispositivo na lista de permissões, block
impede que o dispositivo seja processado agora e reject
remove o dispositivo do sistema.
Em seguida, segue um conjunto de atributos com suas opções, conforme detalhado a seguir.
Atributo | Descrição |
---|---|
id id-do-dispositivo-usb | Corresponde a um ID de dispositivo USB. |
id [operador] { id-do-dispositivo-usb ... } | Corresponde a um conjunto de IDs de dispositivos USB. |
hash "valor" | Corresponde a um hash calculado a partir dos valores de atributo do dispositivo e dos dados do descritor USB. O hash é calculado para cada dispositivo pelo USBGuard. |
hash [operador] { "valor" ... } | Corresponde a um conjunto de hashes de dispositivo. |
parent-hash "valor" | Corresponde a um hash do dispositivo pai. |
parent-hash [operador] { "valor" ... } | Corresponde a um conjunto de hashes de dispositivo pai. |
name "nome-do-dispositivo" | Corresponda ao atributo do nome do dispositivo USB. |
name [operador] { "nome-do-dispositivo" ... } | Combine um conjunto de nomes de dispositivos USB. |
serial "número-de-série" | Corresponde ao atributo de dispositivo USB iSerial. |
serial [operador] { "número-de-série" ... } | Corresponde a um conjunto de atributos de dispositivo USB iSerial. |
via-port "id-da-porta" | Corresponda a porta USB através da qual o dispositivo está conectado. Observe que alguns sistemas têm uma numeração de porta instável que muda após a reinicialização do sistema ou certos módulos do kernel são recarregados (e talvez em outros casos). Use o atributo parent-hash se quiser garantir que um dispositivo seja conectado por meio de um dispositivo pai específico. |
via-port [operador] { "id-da-porta" ... } | Combine um conjunto de portas USB. |
with-interface tipo-de-interface | Corresponde a um tipo de interface fornecido pelo dispositivo USB. |
with-interface [operador] { tipo-de-interface tipo-de-interface ... } | Compare um conjunto de tipos de interface com o conjunto de interfaces que o dispositivo USB fornece. |