Анти-форензика - защищаем Linux от вредоносных USB-устройств и кражи данных. Silk-guardian и USBGuard
Без воды сразу перейдем к теме статьи. Иногда необходимо защитить свой компьютер от вредоносных USB-устройств. Для этого существуют специальные решения, например такие как Silk-guardian и USBGuard. Первое выключают компьютер сразу же, как только происходят изменения в USB-портах. Это может быть полезно для защиты от USB Mouse Jiggler, BadUSB, а также для предотвращения передачи вредоносных файлов и кражи данных. USBGuard создает белый список USB-устройств и запрещает передачу данных с устройствами, которых нет в этом списке.
В данной статье будут рассмотрены две вышеописанные программы. Покажу как все это установить, настроить и использовать.
USBGuard
USBGuard устанавливается в Arch Linux через менеджер пакетов:sudo pacman -S usbguard
В KALI Linux:sudo apt install usbguard
После установки подключите все нужные устройства (если не сделали это ранее). Обязательно должна быть подключена клавиатура, чтобы в дальнейшем она оказалась в белом списке. После того, как вы подключили все нужные устройства, запустите генерацию того самого белого списка (на самом деле это файл правил, в котором прописаны разрешения для USB-устройств):sudo sh -c 'usbguard generate-policy > /etc/usbguard/rules.conf'
А далее запустите демон и добавьте его в автозагрузку:sudo systemctl enable usbguard.service --now
Теперь все новые устройства, которые будут подключаться к компьютеру по USB не смогут передавать никаких данных. Проверьте это, подключив USB-носитель к компьютеру. Например, я подключил флешку Kingston Traveler и вот как это выглядит на моем Arch Linux:
Как видно на скриншоте, я вывел список устройств с помощью lsusb. Kingston traveler отображается в этом списке, но ни файловый менеджер, ни df не могут обнаружить данное устройство, потому что оно не определяется как USB-носитель и никуда не смонтировано. Любая передача данных запрещена. Даже если бы я подключил сейчас новую клавиатуру, я бы не смог ей воспользоваться, потому что ее нет в файле правил USBGuard.
Чтобы воспользоваться флешкой, ей нужно разрешить доступ. Для этого используем команду sudo usbguard list-devices и смотрим ID флешки. Там будет строка примерно с таким содержимым: 21: block id 0951:1666 serial....... Из всего этого нам нужен ID 0951:1666. Используем его, чтобы разрешить доступ:sudo usbguard allow-device 0951:1666
Теперь мы можем смонтировать флешку и полноценно ей пользоваться:
Посмотреть справку можно командой usbguard --help:
Например, можно почитать текущие правила:sudo usbguard list-rules
Добавить новое:sudo usbguard append-rule <rule>
Или удалить существующее:sudo usbguard remove-rule <id>
Silk-guardian
Silk-guardian - это модуль ядра, который выключает компьютер, когда происходят какие-либо изменения в USB-портах. Помимо выключения он может делать удаление файлов, их перезапись и очистку оперативной памяти.
Установка:sudo pacman -S linux-headers или sudo apt install linux-headers в зависимости от вашего пакетного менеджера.git clone https://github.com/NateBrune/silk-guardiancd silk-guardianvim config.h, nano config.h или любой другой удобный вам способ отредактировать config.h. В данном конфиге нам нужно указать, какие файлы будут удалены при изменении в USB-портах, сколько итераций нужно для удаления файлов, белый список устройств, способ выключения и нужно ли очищать оперативную память при выключении:
Например, если мы хотим чтобы модуль не реагировал на клавиатуру, можно добавить ее в белый список. Сначала узнаем ее ID:lsusb
Потом добавляем этот ID в конфиг:
Чтобы загрузить модуль в ядро, используйте следующую команду:sudo insmod silk.ko
Проверить, загружен ли модуль можно следующей командой:lsmod | grep "silk"
Далее можете попробовать что-нибудь сделать с USB-портом компьютера, например подключить новое устройство или наоборот отключить. В результате должны будут выполниться те действия, которые мы указали в config.h. Т.к. я добавил клавиатуру в whitelist, модуль ничего не будет делать, если я ее подключу или отключу. Однако, если я подключу или отключу любое другое USB-устройство, модуль сразу начнет удалять и перезаписывать файлы, очищать оперативную память и выключит компьютер.
Чтобы выгрузить модуль из ядра, используйте sudo rmmod silk и проверьте с помощью lsmod:
После этого модуль будет деактивирован и вы сможете использовать USB-порты без ограничений.
Из явных недостатков можно отметить, что данный модуль не защитит от вредоносного устройства, если оно было подключено ДО запуска системы, т.к. модуль не может определять изменения в USB-портах когда система выключена. Из за этого есть риск попасться на аппаратный кейлоггер, но не забывайте про USBGuard, который может помочь в данной ситуации и защитить от неизвестных устройств, даже если они были подключены до запуска системы.