Как запретить USB-устройства на уровне ядра
В некоторых инфраструктурах USB-устройства являются реальным вектором атак.
Для решения задач безопасности инфраструктуры от несанкционированного доступа посредством USB-устройств, в Linux существует довольно мощный инструмент встроенный в ядро USBGuard.
USBGuard создаёт политику разрешённых USB-устройств по их VID/PID и серийному номеру. Всё, что не разрешено — автоматически блокируется.
Установка и первичная настройка
Debian/Ubuntu
$ sudo apt install usbguard
Fedora
$ sudo dnf install -y usbguard usbguard-selinux usbguard-notifier
Arch
$ sudo pacman -S usbguard
Генерируем политику
$ sudo usbguard generate-policy > /etc/usbguard/rules.conf
Включаем автозапуск службы
$ sudo systemctl enable --now usbguard
По умолчанию все текущие устройства будут разрешены. После запуска новые — блокируются
Использование
Синтаксис команды usbguard:
usbguard [ОПЦИИ] <команда> [ОПЦИИ КОМАНДЫ]
где команда может принимать одно из следующих значений:
- get-parameter <name> — получить значение параметра времени выполнения;
- set-parameter <name> <value> — установить значение параметра времени выполнения;
- list-devices — вывести список всех USB-устройств, распознаваемых демоном USBGuard;
- allow-device <id|rule|p-rule> — разрешить устройству взаимодействовать с системой;
- block-device <id|rule|p-rule> — деавторизовать устройство;
- reject-device <id|rule|p-rule> — деавторизовать и удалить устройство из системы;
- list-rules — вывести набор правил (политику), используемый демоном USBGuard;
- append-rule <rule> — добавить правило в набор правил;
- remove-rule <id> — удалить правило из набора правил;
- generate-policy — сгенерировать набор правил (политику) на основе подключенных USB-устройств;
- watch — следить за событиями интерфейса IPC и выводить их на стандартный вывод;
- read-descriptor — прочитать дескриптор USB из файла и вывести его в удобочитаемой форме;
- add-user <name> — добавить пользователя/группу USBGuard IPC (требуются права root);
- remove-user <name> — удалить пользователя/группу USBGuard IPC (требуются права root).
Дополнительную информацию можно узнать на соответствующих страницах руководства, например:
$ usbguard add-user -h
Примеры:
вывести список подключенных устройств:
# 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: allow id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
временно заблокировать устройство с id 6:
# usbguard block-device 6
для постоянной блокировки и авторизации USB-устройство, следует использовать опцию -p. В этом случае в текущую политику будет добавлено правило для конкретного устройства:
# usbguard block-device 6 -p
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
USBGuard использует термины block и reject в следующих значениях:
- block — пока не взаимодействовать с этим устройством;
- reject — игнорировать это устройство, как будто его не существует.
Более подробно об утилите на официальной странице