如何使用 USBGuard 保护 Linux 免受恶意 USB 设备的侵害



您部署了完善的防火墙和其他网络安全策略,防止未经授权通过网络访问用户的台式计算机。 但是,您仍然需要阻止 USB 设备访问。 我们可以配置 Linux 桌面安全策略来保护您的计算机免受流氓 USB 设备(又名 BadUSB)的影响,方法是实施必要的
允许
和基于设备属性的黑名单功能。 例如,我可以定义授权哪种 USB 设备以及 USB 设备如何与 Linux 系统交互。 例如,我可以定义允许序列号为“XYZ”的 Yubikey 和序列号为“ABC”的 USB LTE 调制解调器的策略。 默认情况下,所有其他 USB 设备访问都被拒绝。

安装 USBGuard 和其他实用程序

USBGuard 仅适用于 Linux,以下教程不适用于 *BSD 或 macOS 等其他操作系统。

我们需要根据您的 Linux 发行版按如下方式安装 USBGuard。

Debian/Ubuntu 或 Linux mint

在 Debian/Ubuntu 或 Linux mint 上使用 apt 命令或 apt-get 命令:
$ sudo apt install usbguard usbutils udisks2

[sudo] password for vivek: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
usbutils is already the newest version (1:012-2).
udisks2 is already the newest version (2.8.4-1ubuntu2).
The following packages were automatically installed and are no longer required:
  linux-headers-5.4.0-84 linux-headers-5.4.0-84-generic linux-image-5.4.0-84-generic linux-modules-5.4.0-84-generic linux-modules-extra-5.4.0-84-generic
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  libqb0 libumockdev0 libusbguard0
The following NEW packages will be installed:
  libqb0 libumockdev0 libusbguard0 usbguard
0 upgraded, 4 newly installed, 0 to remove and 4 not upgraded.
Need to get 580 kB of archives.
After this operation, 2,131 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 https://archive.ubuntu.com/ubuntu focal/main amd64 libqb0 amd64 1.0.5-1 [63.9 kB]
Get:2 https://archive.ubuntu.com/ubuntu focal-updates/universe amd64 libumockdev0 amd64 0.14.1-1ubuntu0.1 [34.2 kB]
Get:3 https://archive.ubuntu.com/ubuntu focal/universe amd64 libusbguard0 amd64 0.7.6+ds-1build1 [350 kB]
Get:4 https://archive.ubuntu.com/ubuntu focal/universe amd64 usbguard amd64 0.7.6+ds-1build1 [132 kB]
Fetched 580 kB in 3s (229 kB/s)   
Selecting previously unselected package libqb0:amd64.
(Reading database ... 419085 files and directories currently installed.)
Preparing to unpack .../libqb0_1.0.5-1_amd64.deb ...
Unpacking libqb0:amd64 (1.0.5-1) ...
Selecting previously unselected package libumockdev0:amd64.
Preparing to unpack .../libumockdev0_0.14.1-1ubuntu0.1_amd64.deb ...
Unpacking libumockdev0:amd64 (0.14.1-1ubuntu0.1) ...
Selecting previously unselected package libusbguard0.
Preparing to unpack .../libusbguard0_0.7.6+ds-1build1_amd64.deb ...
Unpacking libusbguard0 (0.7.6+ds-1build1) ...
Selecting previously unselected package usbguard.
Preparing to unpack .../usbguard_0.7.6+ds-1build1_amd64.deb ...
Unpacking usbguard (0.7.6+ds-1build1) ...
Setting up libqb0:amd64 (1.0.5-1) ...
Setting up libumockdev0:amd64 (0.14.1-1ubuntu0.1) ...
Setting up libusbguard0 (0.7.6+ds-1build1) ...
Setting up usbguard (0.7.6+ds-1build1) ...
Created symlink /etc/systemd/system/dbus-org.usbguard.service → /lib/systemd/system/usbguard-dbus.service.
Created symlink /etc/systemd/system/multi-user.target.wants/usbguard-dbus.service → /lib/systemd/system/usbguard-dbus.service.
Created symlink /etc/systemd/system/basic.target.wants/usbguard.service → /lib/systemd/system/usbguard.service.
Processing triggers for systemd (245.4-4ubuntu3.13) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for dbus (1.12.16-2ubuntu2.1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.3) ...

Fedora 或 RHEL 和朋友

为了 FedoraRHEL 和 clone 使用 dnf 命令:
$ sudo dnf install usbguard usbutils udisks2

SUSE/OpenSUSE Linux

SUSE Enterprise Linux 或 OpenSUSE Linux 用户尝试如下 zypper 命令:
$ sudo zypper in usbguard usbutils udisks2 usbguard-tools

Loading repository data...
Reading installed packages...
Resolving package dependencies...
 
The following 5 NEW packages are going to be installed:
  udisks2 udisks2-lang usbguard usbguard-tools usbutils
 
The following recommended package was automatically selected:
  udisks2-lang
 
5 new packages to install.
Overall download size: 725.3 KiB. Already cached: 0 B. After the operation,
additional 3.0 MiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
Retrieving package udisks2-2.8.1-1.39.x86_64
                                         (1/5), 261.9 KiB (929.5 KiB unpacked)
Retrieving: udisks2-2.8.1-1.39.x86_64.rpm ..............................[done]
Retrieving package usbguard-0.7.8-bp153.1.19.x86_64
                                         (2/5), 122.1 KiB (314.0 KiB unpacked)
Retrieving: usbguard-0.7.8-bp153.1.19.x86_64.rpm .......................[done]
Retrieving package udisks2-lang-2.8.1-1.39.noarch
                                         (3/5), 163.3 KiB (  1.2 MiB unpacked)
Retrieving: udisks2-lang-2.8.1-1.39.noarch.rpm .........................[done]
Retrieving package usbguard-tools-0.7.8-bp153.1.19.x86_64
                                         (4/5),  66.1 KiB (179.7 KiB unpacked)
Retrieving: usbguard-tools-0.7.8-bp153.1.19.x86_64.rpm .................[done]
Retrieving package usbutils-014-3.3.1.x86_64
                                         (5/5), 111.9 KiB (362.2 KiB unpacked)
Retrieving: usbutils-014-3.3.1.x86_64.rpm ..............................[done]
 
Checking for file conflicts: ...........................................[done]
(1/5) Installing: udisks2-2.8.1-1.39.x86_64 ............................[done]
(2/5) Installing: usbguard-0.7.8-bp153.1.19.x86_64 .....................[done]
(3/5) Installing: udisks2-lang-2.8.1-1.39.noarch .......................[done]
(4/5) Installing: usbguard-tools-0.7.8-bp153.1.19.x86_64 ...............[done]
(5/5) Installing: usbutils-014-3.3.1.x86_64 ............................[done]

控制 usbguard 服务

使用 systemctl 命令在引导时配置 usbguard 服务或在应用新策略时重新启动它。 语法是:
$ sudo systemctl enable usbguard.service --now
$ sudo systemctl start usbguard.service
$ sudo systemctl stop usbguard.service
$ sudo systemctl restart usbguard.service
$ sudo systemctl status usbguard.service

usbguard 服务将在重新启动后持续存在,并在 Linux 上使用 systemctl 命令查找当前状态(点击放大)

列出当前的 USB 设备

使用 lsusb 命令或 usb-devices 命令显示有关系统中 USB 总线和连接到它们的设备的信息。 例如:
$ lsusb
$ usb-devices | less

lsusb 在我的 ThinkPad 笔记本电脑上运行

想要连接到系统的 USB 设备的图形摘要? 尝试:

$ sudo usbview

如何使用 USBGuard 保护 Linux 免受恶意 USB 设备的侵害

查看 USBGuard 规则

接下来 cd 以 root 用户身份进入 /etc/usbguard 目录。 所以以root用户登录:
$ sudo -i
### OR ###
$ su -

列出文件并查找 rules.conf 文件:
$ ls -l

total 16
drwxr-xr-x. 2 root root 4096 Mar 31 13:32 IPCAccessControl.d
-rw-------. 1 root root    0 Mar 31 13:32 rules.conf
drwxr-xr-x. 2 root root 4096 Mar 31 13:32 rules.d
-rw-------. 1 root root 5366 Mar 31 12:57 usbguard-daemon.conf

规则类型:

每个 USB 设备都有三种类型的目标规则:

  1. 允许 – 授权 USB 设备。
  2. 堵塞 – 不授权 USB 设备,但系统仍然可以使用 lsusb 命令看到(可见)该设备。 但是,用户不能使用 USB 设备,因为它在系统管理员授权之前一直被阻止。 (阻止设备)
  3. 拒绝 – 不授权 USB 设备,该设备对系统或用户不可见。 USB 设备需要重新插入才能再次可见。 (拒绝设备)

了解 /etc/usbguard/usbguard-daemon.conf

usbguard 服务从名为 /etc/usbguard/usbguard-daemon.conf 的文件中读取其默认值和选项:
$ sudo less /etc/usbguard/usbguard-daemon.conf
$ sudo grep -vE '^#|^$' /etc/usbguard/usbguard-daemon.conf

输出:

RuleFile=/etc/usbguard/rules.conf
ImplicitPolicyTarget=block
PresentDevicePolicy=apply-policy
PresentControllerPolicy=keep
InsertedDevicePolicy=apply-policy
AuthorizedDefault=none
RestoreControllerDeviceState=false
DeviceManagerBackend=uevent
IPCAllowedUsers=root
IPCAllowedGroups=root plugdev
IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/
DeviceRulesWithPort=false
AuditBackend=FileAudit
AuditFilePath=/var/log/usbguard/usbguard-audit.log
USBGuard 守护程序配置文件

选项描述
规则文件=路径USBGuard 守护进程将使用该文件从中加载策略规则集并写入通过 IPC 接口接收的新规则。
ImplicitPolicyTarget=目标如何处理与策略中的任何规则都不匹配的 USB 设备。 目标应该是允许、阻止或拒绝之一(从系统中逻辑删除设备节点)。
PresentDevicePolicy=策略如何处理守护程序启动时已连接的 USB 设备。 策略应该是允许、阻止、拒绝、保留(保持设备当前处于的任何状态)或应用策略(评估每个当前设备的规则集)之一。
PresentControllerPolicy=策略如何处理守护程序启动时已连接的 USB 控制器设备。 允许、阻止、拒绝、保留或应用策略之一。
InsertedDevicePolicy=策略如何处理守护程序启动后已连接的 USB 设备。 阻止、拒绝、应用策略之一。
RestoreControllerDeviceState=布尔值USBGuard 守护进程修改控制器设备的一些属性,例如新子设备实例的默认授权状态。 使用此设置,您可以控制守护程序在关闭时是否会尝试将属性值恢复到修改前的状态。
DeviceManagerBackend=后端要使用哪个设备管理器后端实现。 后端应该是 uevent(默认)或 umockdev 之一。
IPCAllowedUsers=用户名 [username …]由空格分隔的用户名列表,守护程序将接受来自其的 IPC 连接。
IPCAllowedGroups=组名 [groupname …]守护进程将接受来自的 IPC 连接的组名的空格分隔列表。
IPCAccessControlFiles=路径该位置的文件将被守护程序解释为 IPC 访问控制定义文件。 有关详细信息,请参阅 IPC 访问控制部分。
DeviceRulesWithPort=布尔值生成设备特定规则,包括“via-port”属性。
AuditBackend=后端USBGuard 审核事件日志后端。 后端值应该是 FileAudit 或 LinuxAudit 之一。
AuditFilePath=文件路径USBGuard 审计事件日志文件路径。 如果 AuditBackend 设置为 FileAudit,则为必需。

创建基本默认策略

如果 rules.conf 文件为空或需要设置新策略,请执行以下命令。

几乎所有 Linux 发行版都没有任何规则。 因此文件是空的。 要生成授权当前连接的 USB 设备的规则集(策略),请运行:
$ sudo usbguard generate-policy -X >/etc/usbguard/rules.conf

关于设置捕获所有策略的说明

默认的最后一条规则应该是拒绝或阻止。 例如,生成一个带有拒绝规则目标的新基本策略,运行:
$ sudo usbguard generate-policy -X -t block >/etc/usbguard/rules.conf

或者
$ sudo usbguard generate-policy -X -t reject >/etc/usbguard/rules.conf

建议将拒绝或阻止策略作为基本策略,因为:

  • 它定义了一个永久的 USBGuard 策略,允许特定的 USB 设备与 Linux 系统交互。
  • 换句话说,目前,已连接的设备被接受,但 USBGuard 将阻止或拒绝任何额外的 USB 设备。

使用
更多的
/ 猫 /
少命令

$ sudo more /home/student/rules.conf

示例输出:

allow id 1d6b:0002 serial "0000:00:14.0" name "xHCI Host Controller" hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0003 serial "0000:00:14.0" name "xHCI Host Controller" hash "prM+Jby/bFHCn2lNjQdAMbgc6tse3xVx+hZwjOPHSdQ=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0002 serial "0000:2c:00.0" name "xHCI Host Controller" hash "PwX8KDBTGiYfCyqnWn9KXV2puYMRc5J2oaMUcSSODtY=" parent-hash "pvCnfx3ZtzZduIZZbt74WeR01YZKEEkrJ0aOxulLMOA=" with-interface 09:00:00 with-connect-type ""
allow id 1d6b:0003 serial "0000:2c:00.0" name "xHCI Host Controller" hash "B2IRioS6Q505Wfk3rv9C5jLWo4iRtvS1rx0ZHSJGEl0=" parent-hash "pvCnfx3ZtzZduIZZbt74WeR01YZKEEkrJ0aOxulLMOA=" with-interface 09:00:00 with-connect-type ""
allow id 045e:082c serial "603378194521" name "Microsoft Ergonomic Keyboard" hash "/XFAtSRVsaZuf7PFiE9mvgEyRjrYL8NVMyDOqboFhrc=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" with-interface { 03:01:01 03:00:00 } with-connect-type "hotplug"
allow id 2109:2813 serial "" name "USB2.0 Hub" hash "TysTMKnN62ygTFPyigZ+0VmUsx067cMepEk76682Bo8=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-7" with-interface 09:00:00 with-connect-type "hotplug"
allow id 06cb:00bd serial "46b6e9623725" name "" hash "a9PN3kg0s7LvZgUVOnrGXSBaVPGD2RkCo/lm5dEjTRM=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" with-interface ff:00:00 with-connect-type "not used"
allow id 2109:0813 serial "" name "USB3.0 Hub" hash "VXFbt2m/i5krELu+kCSJysCj+m3eetVv3nfC72o9ceg=" parent-hash "B2IRioS6Q505Wfk3rv9C5jLWo4iRtvS1rx0ZHSJGEl0=" via-port "4-2" with-interface 09:00:00 with-connect-type "hotplug"
allow id 8087:0029 serial "" name "" hash "ATK8pCmQtUYaUnwqUVuYssrOMkW8pdCSdZO4OC6zEtg=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-14" with-interface { e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 } with-connect-type "not used"
allow id 1a40:0101 serial "" name "USB 2.0 Hub" hash "xe96rjr8V53Jw+g7q/yi0C1czVxatehiq7r4gn2dH6s=" parent-hash "TysTMKnN62ygTFPyigZ+0VmUsx067cMepEk76682Bo8=" via-port "1-7.4" with-interface 09:00:00 with-connect-type "unknown"
allow id 2109:0102 serial "0000000000000001" name "USB 2.0 BILLBOARD             " hash "9D+MQzO58xal2wcN4ROFKY33xyDuRLfAqDBlArhZi3M=" parent-hash "xe96rjr8V53Jw+g7q/yi0C1czVxatehiq7r4gn2dH6s=" with-interface 11:00:00 with-connect-type "unknown"

列出 USBGuard 守护程序使用的规则集(策略)

跑:
$ sudo usbguard list-rules

想要显示受特定规则影响的所有设备? 尝试:
$ sudo usbguard list-rules -d
$ sudo usbguard list-rules --show-devices

我们还可以显示具有特定标签的规则:
$ sudo usbguard list-rules -l {label_here}
$ sudo usbguard list-rules --label

列出 USBGuard 守护进程识别的所有 USB 设备:
$ sudo usbguard list-devices
$ sudo usbguard list-devices -a ## list allowed devices ##
$ sudo usbguard list-devices -b ## list blocked devices ##

测试 USBGuard

我将插入我的 USB 4G LTE 调制解调器,看看它是否被默认阻止并运行 lsusb:
$ lsusb

示例输出表明华为 USB 已连接到 USB 端口(设备 009:ID 12d1:157c)并且对系统可见:

Bus 004 Device 002: ID 2109:0813 VIA Labs, Inc. USB3.0 Hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 06cb:00bd Synaptics, Inc. 
Bus 001 Device 007: ID 2109:0102 VIA Labs, Inc. Microsoft Ergonomic Keyboard
Bus 001 Device 005: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 003: ID 2109:2813 VIA Labs, Inc. USB2.0 Hub
Bus 001 Device 009: ID 12d1:157c Huawei Technologies Co., Ltd. HUAWEI_MOBILE
Bus 001 Device 006: ID 8087:0029 Intel Corp. 
Bus 001 Device 002: ID 045e:082c Microsoft Corp. Microsoft Ergonomic Keyboard
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

但是,此设备被 USBGuard 阻止。 您将看到提示华为USB设备未授权使用的内核消息,如下所示:
$ sudo dmesg
$ sudo dmesg | grep -i 'authorized'

指示默认情况下 USBGuard 阻止 USB 调制解调器的示例输出:

[87467.670280] usb 1-2: new high-speed USB device number 8 using xhci_hcd
[87467.820572] usb 1-2: New USB device found, idVendor=12d1, idProduct=157c, bcdDevice= 1.02
[87467.820578] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[87467.820581] usb 1-2: Product: HUAWEI_MOBILE
[87467.820584] usb 1-2: Manufacturer: HUAWEI_MOBILE
[87467.820587] usb 1-2: SerialNumber: 0123456789ABCDEF
[87467.820928] usb 1-2: Device is not authorized for usage
[87477.196260] usb 1-2: USB disconnect, device number 8
[87477.682044] usb 1-2: new high-speed USB device number 9 using xhci_hcd
[87477.831578] usb 1-2: New USB device found, idVendor=12d1, idProduct=157c, bcdDevice= 1.02
[87477.831583] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[87477.831587] usb 1-2: Product: HUAWEI_MOBILE
[87477.831590] usb 1-2: Manufacturer: HUAWEI_MOBILE
[87477.831593] usb 1-2: SerialNumber: 0123456789ABCDEF
[87477.831931] usb 1-2: Device is not authorized for usage

我们可以使用以下命令查看被屏蔽的 USB 设备:
$ sudo usbguard list-devices -b

输出:

24: block id 12d1:157c serial "0123456789ABCDEF" name "HUAWEI_MOBILE" hash "8tSOgfYNylANtACo0ysV5qRAx5Ht+geWMd+QOVNcK70=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-2" with-interface { 08:06:50 02:0e:00 0a:00:02 0a:00:02 08:06:50 } with-connect-type "hotplug"

其中block的目标策略如下:

  1. 24 – 设备编号
  2. 块 ID 12d1:157c – USB 设备 ID
  3. 序列号“0123456789ABCDEF” – USB 设备序列号
  4. 名称“HUAWEI_MOBILE” – USB 设备名称

USB 设备号是动态生成的,在您的 Linux 系统上会有所不同。

暂时允许访问 USB 设备

默认情况下,我们知道 USBGuard 会阻止连接的 USB 设备,并将永远被禁止。 这意味着基于 USB 的攻击被阻止。 但是,如果我想授予访问合法 USB 设备的权限怎么办? 尝试以下命令更改阻止策略以允许使用设备# 24 带有设备块 ID 12d1:157c
$ sudo usbguard allow-device {device_ID}
$ sudo usbguard allow-device 24

我也可以使用如下规则:
$ sudo usbguard allow-device '12d1:157c serial "0123456789ABCDEF"'
$ sudo usbguard allow-device '12d1:1506 serial "0123456789ABCDEF"'

永久规则

我们可以使决定永久化。 特定于设备的允许规则将附加到当前策略:
$ sudo usbguard allow-device {device_ID} -p
$ sudo usbguard allow-device 24 -p

规则而不是 ID:
$ sudo usbguard allow-device '12d1:157c serial "0123456789ABCDEF"' -p
sudo usbguard allow-device '12d1:1506 serial "0123456789ABCDEF"' -p

这是我使用文本编辑器添加到 rules.conf 的规则:
$ sudo /etc/usbguard/rules.conf

附加以下内容

allow id 12d1:157c serial "0123456789ABCDEF" name "HUAWEI_MOBILE" hash "8tSOgfYNylANtACo0ysV5qRAx5Ht+geWMd+QOVNcK70=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-2" with-interface { 08:06:50 02:0e:00 0a:00:02 0a:00:02 08:06:50 } with-connect-type "hotplug"
allow id 12d1:1506 serial "" name "HUAWEI_MOBILE" hash "1lr2516yYIsSGGyDZrcgBBNJPlzzthtHbpH1SN5E/VA=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-2" with-interface { ff:02:12 ff:02:01 ff:02:16 ff:02:16 08:06:50 08:06:50 } with-connect-type "hotplug"

Save 和 close 文件。 重启服务:
$ sudo systemctl restart usbguard.service

确认

一旦添加规则,USBGurad 将立即授予 USB 设备访问权限。 现在我可以使用 USB LTE 调制解调器连接到 Internet 或查看美元磁盘:
udisksctl status

MODEL                     REVISION  SERIAL               DEVICE
--------------------------------------------------------------------------
SAMSUNG MZVLB1T0HBLR-000L7 5M2QEXF7  xyzfooooooooo1       nvme0n1 
SAMSUNG MZVLB1T0HBLR-000L7 5M2QEXF7  xyzfooooooooo2       nvme1n1 
HUAWEI TF CARD Storage    2.31      HUAWEI_TF_CARD_Storage-0:0 sda     
HUAWEI Mass Storage       2.31      HUAWEI_Mass_Storage-0:0 sr0   

也没有更多错误:
$ sudo dmesg

是的,我的 nmcli 或网络管理器也使用 USB LTE 调制解调器连接到 Internet。 以下是 ip 命令和 nmcli 命令的输出:
$ nmcli device status
$ nmcli device show ttyUSB0
$ ip a s | more
$ ip a s wwx001e101f0000

USB LTE 允许使用 USBGuard 保护 Linux 免受恶意 USB 设备的侵害

移除 USB 设备

要从规则集中删除由规则 ID 标识的规则,请运行
$ sudo usbguard list-devices -a # list rules #

记下 ID #27。例如:

27: allow id 12d1:1506 serial "" name "HUAWEI_MOBILE" hash "1lr2516yYIsSGGyDZrcgBBNJPlzzthtHbpH1SN5E/VA=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-2" with-interface { ff:02:12 ff:02:01 ff:02:16 ff:02:16 08:06:50 08:06:50 } with-connect-type "hotplug"

然后:
$ usbguard block-device {ID_HERE} -p
$ sudo usbguard block-device 27 -p

以上将取消对 ID # 27 的设备的授权。但我们也可以使用该规则:
$ usbguard block-device {RULE} -p
$ sudo usbguard block-device '12d1:157c serial "0123456789ABCDEF"' -p
$ sudo usbguard block-device '12d1:1506 serial "0123456789ABCDEF"' -p

当然,您可以编辑配置文件:
$ sudo /etc/usbguard/rules.conf

然后删除 USB 设备的条目,然后重新启动服务:
$ sudo systemctl restart usbguard.service
$ sudo systemctl status usbguard.service

故障排除提示

如果您是新的 Linux 开发人员或系统管理员,您可能会发现配置有点棘手。 尝试以下命令来查看和解决问题:

系统可以查看我的 USB 设备吗?

$ lsusb
$ sudo usbguard watch

USB 设备是否被阻止或允许?

$ sudo usbguard list-rules
$ sudo usbguard list-devices -b # blocked #
$ sudo usbguard list-devices -a # allowed #

检查系统日志

$ sudo dmesg
$ sudo dmesg | more
$ sudo journalctl -b -e
$ sudo journalctl -b -e -u usbguard.service
$ sudo cat /var/log/usbguard/usbguard-audit.log
$ sudo tail -f /var/log/usbguard/usbguard-audit.log

其他与 USB 相关的工具

$ nmcli
$ nmcli device status # usb network #
$ ip a s # networking #
$ lsblk # usb block device #
$ udisksctl status

获得帮助

跑:
$ usbguard -h
$ usbguard {sub-command} -h
$ usbguard list-devices -h

这是我看到的

 Usage: usbguard [OPTIONS] <command> [COMMAND OPTIONS] ...
 
 Options:
 
 Commands:
  get-parameter <name>           Get the value of a runtime parameter.
  set-parameter <name> <value>   Set the value of a runtime parameter.
  list-devices                   List all USB devices recognized by the USBGuard daemon.
  allow-device <id>              Authorize a device to interact with the system.
  block-device <id>              Deauthorize a device.
  reject-device <id>             Deauthorize and remove a device from the system.
 
  list-rules                     List the rule set (policy) used by the USBGuard daemon.
  append-rule <rule>             Append a rule to the rule set.
  remove-rule <id>               Remove a rule from the rule set.
 
  generate-policy                Generate a rule set (policy) based on the connected USB devices.
  watch                          Watch for IPC interface events and print them to stdout.
  read-descriptor                Read a USB descriptor from a file and print it in human-readable form.
 
  add-user <name>                Add USBGuard IPC user/group (requires root privilges)
  remove-user <name>             Remove USBGuard IPC user/group (requires root privileges)

加起来

本指南解释了如何使用 USBGuard,通过实施基于 USB 设备 ID 和序列号等属性的允许列表和阻止列表规则来保护您的 Linux 桌面或服务器免受恶意 USB 设备的侵害。 usbguard 服务在后台运行并基于规则,它将允许或阻止对 USB 设备的访问。 usbguard 命令也用于管理 USB 设备授权规则和调试问题。

参考

请使用以下手册页 人命令
$ man lsusb
$ man usbview
$ man usb-devices
$ man usbguard
$ man usbguard-daemon