Questo contenuto non è disponibile nella lingua selezionata.
Chapter 13. Protecting systems against intrusive USB devices
USB devices can be loaded with spyware, malware, or trojans, which can steal your data or damage your system. As a Red Hat Enterprise Linux administrator, you can prevent such USB attacks with USBGuard.
13.1. USBGuard Copia collegamentoCollegamento copiato negli appunti!
With the USBGuard software framework, you can protect your systems against intrusive USB devices by using basic lists of permitted and forbidden devices based on the USB device authorization feature in the kernel.
The USBGuard framework provides the following components:
- The system service component with an inter-process communication (IPC) interface for dynamic interaction and policy enforcement
-
The command line to interact with a running
usbguard
system service - The rule language for writing USB device authorization policies
- The C++ API for interacting with the system service component implemented in a shared library
The usbguard
system service configuration file (/etc/usbguard/usbguard-daemon.conf
) includes the options to authorize the users and groups to use the IPC interface.
The system service provides the USBGuard public IPC interface. In Red Hat Enterprise Linux, the access to this interface is limited to the root user only by default.
Consider setting either the IPCAccessControlFiles
option (recommended) or the IPCAllowedUsers
and IPCAllowedGroups
options to limit access to the IPC interface.
Ensure that you do not leave the Access Control List (ACL) unconfigured as this exposes the IPC interface to all local users and allows them to manipulate the authorization state of USB devices and modify the USBGuard policy.
13.2. Installing USBGuard Copia collegamentoCollegamento copiato negli appunti!
Use this procedure to install and initiate the USBGuard framework.
Procedure
Install the
usbguard
package:yum install usbguard
# yum install usbguard
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create an initial rule set:
usbguard generate-policy > /etc/usbguard/rules.conf
# usbguard generate-policy > /etc/usbguard/rules.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Start the
usbguard
daemon and ensure that it starts automatically on boot:systemctl enable --now usbguard
# systemctl enable --now usbguard
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Verify that the
usbguard
service is running:Copy to Clipboard Copied! Toggle word wrap Toggle overflow List USB devices recognized by USBGuard:
usbguard list-devices
# usbguard list-devices 4: allow id 1d6b:0002 serial "0000:02:00.0" name "xHCI Host Controller" hash...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.3. Blocking and authorizing a USB device by using CLI Copia collegamentoCollegamento copiato negli appunti!
You can set USBGuard to authorize and block a USB device by using the usbguard
command in your terminal.
Prerequisites
-
The
usbguard
service is installed and running.
Procedure
List USB devices recognized by USBGuard, for example:
usbguard list-devices
# usbguard list-devices 1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00 ... 6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Authorize the device <6> to interact with the system:
usbguard allow-device <6>
# usbguard allow-device <6>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Deauthorize and remove the device <6>:
usbguard reject-device <6>
# usbguard reject-device <6>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Deauthorize and retain the device <6>:
usbguard block-device <6>
# usbguard block-device <6>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
USBGuard uses the terms block
and reject
with the following meanings:
block
- Do not interact with this device for now.
reject
- Ignore this device as if it does not exist.
13.4. Permanently blocking and authorizing a USB device Copia collegamentoCollegamento copiato negli appunti!
You can permanently block and authorize a USB device by using the -p
option. This adds a device-specific rule to the current policy.
Prerequisites
-
The
usbguard
service is installed and running.
Procedure
Configure SELinux to allow the
usbguard
daemon to write rules.Display the
semanage
Booleans relevant tousbguard
.semanage boolean -l | grep usbguard
# semanage boolean -l | grep usbguard usbguard_daemon_write_conf (off , off) Allow usbguard to daemon write conf usbguard_daemon_write_rules (on , on) Allow usbguard to daemon write rules
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Optional: If the
usbguard_daemon_write_rules
Boolean is turned off, turn it on.semanage boolean -m --on usbguard_daemon_write_rules
# semanage boolean -m --on usbguard_daemon_write_rules
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
List USB devices recognized by USBGuard:
usbguard list-devices
# usbguard list-devices 1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00 ... 6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Permanently authorize device
6
to interact with the system:usbguard allow-device 6 -p
# usbguard allow-device 6 -p
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Permanently deauthorize and remove device
6
:usbguard reject-device 6 -p
# usbguard reject-device 6 -p
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Permanently deauthorize and retain device
6
:usbguard block-device 6 -p
# usbguard block-device 6 -p
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
USBGuard
uses the terms block
and reject
with the following meanings:
block
- Do not interact with this device for now.
reject
- Ignore this device as if it does not exist.
Verification
Check that USBGuard rules include the changes you made.
usbguard list-rules
# usbguard list-rules
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.5. Creating a custom policy for USB devices Copia collegamentoCollegamento copiato negli appunti!
The following procedure contains steps for creating a rule set for USB devices that reflects the requirements of your scenario.
Prerequisites
-
The
usbguard
service is installed and running. -
The
/etc/usbguard/rules.conf
file contains an initial rule set generated by theusbguard generate-policy
command.
Procedure
Create a policy which authorizes the currently connected USB devices, and store the generated rules to the
rules.conf
file:usbguard generate-policy --no-hashes > ./rules.conf
# usbguard generate-policy --no-hashes > ./rules.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
--no-hashes
option does not generate hash attributes for devices. Avoid hash attributes in your configuration settings because they might not be persistent.Edit the
rules.conf
file with a text editor of your choice, for example:vi ./rules.conf
# vi ./rules.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Add, remove, or edit the rules as required. For example, the following rule allows only devices with a single mass storage interface to interact with the system:
allow with-interface equals { 08:*:* }
allow with-interface equals { 08:*:* }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow See the
usbguard-rules.conf(5)
man page for a detailed rule-language description and more examples.Install the updated policy:
install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Restart the
usbguard
daemon to apply your changes:systemctl restart usbguard
# systemctl restart usbguard
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Check that your custom rules are in the active policy, for example:
usbguard list-rules
# usbguard list-rules ... 4: allow with-interface 08:*:* ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.6. Creating a structured custom policy for USB devices Copia collegamentoCollegamento copiato negli appunti!
You can organize your custom USBGuard policy in several .conf
files within the /etc/usbguard/rules.d/
directory. The usbguard-daemon
then combines the main rules.conf
file with the .conf
files within the directory in alphabetical order.
Prerequisites
-
The
usbguard
service is installed and running.
Procedure
Create a policy which authorizes the currently connected USB devices, and store the generated rules to a new
.conf
file, for example,policy.conf
.usbguard generate-policy --no-hashes > ./policy.conf
# usbguard generate-policy --no-hashes > ./policy.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
--no-hashes
option does not generate hash attributes for devices. Avoid hash attributes in your configuration settings because they might not be persistent.Display the
policy.conf
file with a text editor of your choice, for example:vi ./policy.conf
# vi ./policy.conf ... allow id 04f2:0833 serial "" name "USB Keyboard" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown" ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Move selected lines into a separate
.conf
file.NoteThe two digits at the beginning of the file name specify the order in which the daemon reads the configuration files.
For example, copy the rules for your keyboards into a new
.conf
file.grep "USB Keyboard" ./policy.conf > ./10keyboards.conf
# grep "USB Keyboard" ./policy.conf > ./10keyboards.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Install the new policy to the
/etc/usbguard/rules.d/
directory.install -m 0600 -o root -g root 10keyboards.conf /etc/usbguard/rules.d/10keyboards.conf
# install -m 0600 -o root -g root 10keyboards.conf /etc/usbguard/rules.d/10keyboards.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Move the rest of the lines to a main
rules.conf
file.grep -v "USB Keyboard" ./policy.conf > ./rules.conf
# grep -v "USB Keyboard" ./policy.conf > ./rules.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Install the remaining rules.
install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Restart the
usbguard
daemon to apply your changes.systemctl restart usbguard
# systemctl restart usbguard
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Display all active USBGuard rules.
usbguard list-rules
# usbguard list-rules ... 15: allow id 04f2:0833 serial "" name "USB Keyboard" hash "kxM/iddRe/WSCocgiuQlVs6Dn0VEza7KiHoDeTz0fyg=" parent-hash "2i6ZBJfTl5BakXF7Gba84/Cp1gslnNc1DM6vWQpie3s=" via-port "7-2" with-interface { 03:01:01 03:00:00 } with-connect-type "unknown" ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Display the contents of the
rules.conf
file and all the.conf
files in the/etc/usbguard/rules.d/
directory.cat /etc/usbguard/rules.conf /etc/usbguard/rules.d/*.conf
# cat /etc/usbguard/rules.conf /etc/usbguard/rules.d/*.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Verify that the active rules contain all the rules from the files and are in the correct order.
13.7. Authorizing users and groups to use the USBGuard IPC interface Copia collegamentoCollegamento copiato negli appunti!
Use this procedure to authorize a specific user or a group to use the USBGuard public IPC interface. By default, only the root user can use this interface.
Prerequisites
-
The
usbguard
service is installed and running. -
The
/etc/usbguard/rules.conf
file contains an initial rule set generated by theusbguard generate-policy
command.
Procedure
Edit the
/etc/usbguard/usbguard-daemon.conf
file with a text editor of your choice:vi /etc/usbguard/usbguard-daemon.conf
# vi /etc/usbguard/usbguard-daemon.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow For example, add a line with a rule that allows all users in the
wheel
group to use the IPC interface, and save the file:IPCAllowGroups=wheel
IPCAllowGroups=wheel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow You can add users or groups also with the
usbguard
command. For example, the following command enables the joesec user to have full access to theDevices
andExceptions
sections. Furthermore, joesec can list and modify the current policy:usbguard add-user joesec --devices ALL --policy modify,list --exceptions ALL
# usbguard add-user joesec --devices ALL --policy modify,list --exceptions ALL
Copy to Clipboard Copied! Toggle word wrap Toggle overflow To remove the granted permissions for the joesec user, use the
usbguard remove-user joesec
command.Restart the
usbguard
daemon to apply your changes:systemctl restart usbguard
# systemctl restart usbguard
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.8. Logging USBguard authorization events to the Linux Audit log Copia collegamentoCollegamento copiato negli appunti!
Use the following steps to integrate logging of USBguard authorization events to the standard Linux Audit log. By default, the usbguard
daemon logs events to the /var/log/usbguard/usbguard-audit.log
file.
Prerequisites
-
The
usbguard
service is installed and running. -
The
auditd
service is running.
Procedure
Edit the
usbguard-daemon.conf
file with a text editor of your choice:vi /etc/usbguard/usbguard-daemon.conf
# vi /etc/usbguard/usbguard-daemon.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Change the
AuditBackend
option fromFileAudit
toLinuxAudit
:AuditBackend=LinuxAudit
AuditBackend=LinuxAudit
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Restart the
usbguard
daemon to apply the configuration change:systemctl restart usbguard
# systemctl restart usbguard
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Query the
audit
daemon log for a USB authorization event, for example:ausearch -ts recent -m USER_DEVICE
# ausearch -ts recent -m USER_DEVICE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow