USBGuard
USBGuard (https://usbguard.github.io/) предлагает механизм белого/чёрного списка для USB-устройств.
USBGuard решает, какое USB-устройство авторизовать, на основе политики, определенной набором правил. При подключении USB-устройства к системе служба последовательно сканирует существующие правила. Если соответствующее правило найдено, оно либо авторизует (разрешает), деавторизует (блокирует) или удаляет (отклоняет) устройство в зависимости от цели правила. Если соответствующее правило не найдено, решение принимается на основе неявной цели по умолчанию. Это неявное значение по умолчанию заключается в блокировке устройства до тех пор, пока пользователь не примет решение.
Установка и первоначальная настройка
Установить пакет usbguard:
# apt-get install usbguard
Создать исходный набор правил на основе подключенных в данный момент USB-устройств (в правила с действием «allow» будут добавлены все подключенные устройства):
#usbguard generate-policy > /etc/usbguard/rules.conf
#usbguard generate-policy --no-hashes > /etc/usbguard/rules.conf
Запустить службу usbguard и добавить её в автозагрузку:
# systemctl enable --now usbguard
Команда 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:0b.0" name "EHCI Host Controller" hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" parent-hash "BfFg9THiKJIvTnHGCjHfrWc00WcrIzhayJ9C3BiPYho=" via-port "usb1" with-interface 09:00:00 with-connect-type "" 2: allow id 1d6b:0001 serial "0000:00:06.0" name "OHCI PCI host controller" hash "lUN32sIeMBBlD8Pd82mxu95iCTw8oKlT8iZDeg628/o=" parent-hash "XokStAV3JXWqQkW0l6YD7ZPFcHse1OtwuGmVNBCe46E=" via-port "usb2" with-interface 09:00:00 with-connect-type "" 3: allow id 13fe:3e00 serial "11101094E6BA1A00A4A5200A" name "Silicon-Power4G" hash "0Dcf+ZVj7NkORO+RN1kxcP0rgDl6CqvqkcYkcf+0X/k=" parent-hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" via-port "1-1" with-interface 08:06:50 with-connect-type "unknown"
- временно заблокировать устройство с id 3:
$ usbguard block-device 3
- для постоянной блокировки или и авторизации USB-устройство, следует использовать опцию -p. В этом случае в текущую политику будет добавлено правило для конкретного устройства:
$ usbguard block-device 3 -p
- вывести список правил:
$ usbguard list-rules 4: allow id 1d6b:0002 serial "0000:00:0b.0" name "EHCI Host Controller" hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" parent-hash "BfFg9THiKJIvTnHGCjHfrWc00WcrIzhayJ9C3BiPYho=" via-port "usb1" with-interface 09:00:00 with-connect-type "" 5: allow id 1d6b:0001 serial "0000:00:06.0" name "OHCI PCI host controller" hash "lUN32sIeMBBlD8Pd82mxu95iCTw8oKlT8iZDeg628/o=" parent-hash "XokStAV3JXWqQkW0l6YD7ZPFcHse1OtwuGmVNBCe46E=" via-port "usb2" with-interface 09:00:00 with-connect-type "" 6: block id 090c:1000 serial "2010121200000186" name "USB DISK" hash "2dfdMHZxF5olAaNbsh68G4fpzD3iQLPL3+M7KHnSRjE=" parent-hash "SEiVqUWwefEKDMN9OJUyXkFIvvFPJmvPTRKIlVCvlvE=" via-port "1-1" with-interface 08:06:50 with-connect-type "unknown"
- дать пользователю user полный доступ к разделам «devices» и «exceptions», также, user будет иметь возможность просматривать и изменять текущую политику:
# usbguard add-user -u user --devices ALL --policy modify,list --exceptions ALL
- удалить права у пользователя user:
# usbguard remove-user -u user
Конфигурация
Основной файл конфигурации USBGuard — /etc/usbguard/usbguard-daemon.conf.
В параметре PresentDevicePolicy определяется как обращаться с устройствами, которые уже подключены, при запуске службы. По умолчанию для PresentDevicePolicy установлено значение apply-policy, т.е. USBGuard оценивает набор правил для каждого подключенного устройства. Это наиболее безопасный параметр, который обеспечивает безопасность даже при перезагрузке службы.
В параметре ImplicitPolicyTarget настраивается политика обработки устройств по умолчанию, если ни одно правило не соответствует. Самый безопасный вариант здесь — block.
По умолчанию служба usbguard записывает события в файл /var/log/usbguard/usbguard-audit.log (параметр AuditFilePath).
Правила
Набор правил USBGuard по умолчанию хранится в файле /etc/usbguard/rules.conf. Но ручное редактирование правил обычно не требуется.
Пример правила для принтера Canon, подключенного через USB:
allow id 04a9:177a name "Canon E400" serial "F572EC" via-port "1-2" hash "eql9yA8m+5VVMmhXOvbUzwNPDGCAPq+fxIQHvbptlsY="
Первое слово в правиле определяет политику:
- allow — добавляет устройство в белый список;
- block — останавливает обработку устройства;
- reject — удаляет устройство из системы.
Затем следует набор атрибутов с их параметрами.
USBGuard использует термины block и reject в следующих значениях:
- block — пока не взаимодействовать с этим устройством;
- reject — игнорировать это устройство, как будто его не существует.