В этой статье рассказывается об инструменте Usbrip, который позволяет автоматизировать отслеживание истории использования USB-устройств в системе.
Вступление
В настоящее время широко распространены USB-устройства: флэш-накопители, внешние накопители, мыши, клавиатуры, принтеры, зарядные устройства для мобильных телефонов. Как и любые другие события в системе, история USB-подключений также отслеживается ОС Linux. Каждый раз, когда вы подключаете или отключаете USB-устройство, соответствующая информация заносится в системные лог файлы:
- /var/log/dmesg
- /var/log/daemon.log
- /var/log/kern.log
- /var/log/syslog
- /var/log/messages
Вы можете вручную просмотреть эти файлы, чтобы узнать историю USB-подключений, или использовать инструмент, который позволит автоматизировать этот процесс представляя информацию в удобном формате. Одним из таких инструментов для отслеживания истории событий USB является утилита Usbrip.
О Usbrip
Usbrip — это инструмент для проведения расследований по истории использования USB-устройств в Linux. Он анализирует данные журнала вашей системы с помощью команды journelctl а также черпает информацию из файлов журналов системы, таких как /var/log/syslog, /var/log/messages и отображает собранную историю событий USB в стандартном выводе или файле.
Программа usbrip отслеживает характеристики USB-устройств и отображает их в следующих столбцах:
- Connected (Дата и время подключения)
- Host (Хост)
- VID (vendor ID) (идентификатор производителя)
- PID (product ID) (идентификатор продукта)
- Product (Имя устройства)
- Manufacturer (Производитель)
- Serial Number (Серийный номер)
- Port (Порт)
- Disconnected (Дата и время отключения)
Usbrip — это бесплатный инструмент с открытым исходным кодом, написанный на Python 3. Для тех, кому интересно, название Usbrip образовано от двух слов — USB и Ripper.
Возможности Usbrip
Usbrip имеет несколько интересных функций. Отметим следующие три примечательные особенности.
1. Поиск информации об использовании в системе несанкционированных USB устройств
Это основная цель инструмента Usbrip. Используя инструмент usbrip, мы можем доказать, что USB-устройство было подключено к определенной системе Linux определенным пользователем в течение определенного промежутка времени. В общем, мы можем использовать Usbrip в любых случаях, когда задействованы USB-устройства.
Usbrip позволяет экспортировать полученные данные по USB-соединениям в JSON файл. Почему используется именно JSON формат? Потому что он позволяет легко найти любые «несанкционированные события». Например, например можно создать файл, скажем auth.json
, и сохранить в нем список авторизованных или доверенных USB-устройств.
Этот auth.json
файл можно использовать, чтобы выяснить, какие USB-устройства были подключены и являются ли они авторизованными устройствами. Таким образом можно узнать, скопировал ли какой-либо пользователь что-то из вашей системы без вашего разрешения.
Обратите внимание, что если вы устанавливаете usbrip с помощью сценария установщика, auth.json
файл будет автоматически создан в папке /var/opt/usbrip/trusted/, то есть в том же месте куда устанавливается программа. Однако есть возможность выбрать произвольный каталог размещения для auth.json
2. Отображение подробных характеристик USB устройств
Если требуется узнать подробные технические характеристики USB-устройств, это можно сделать зная VID и PID устройства. Usbbrip черпает подробную информацию о поставщиках, устройствах и производимых моделях из usb.ids из публичной базы данных.
3. Резервное копирование событий USB
Если вы вручную установили Usbrip с опцией -s (—storages), вы можете автоматически создавать резервные копии событий USB с помощью планировщика crontab.
Давайте посмотрим, как установить и использовать Usbrip в Linux для сбора событий USB-подключения.
Установка Usbrip в Linux
Поскольку Usbrip написан на Python, мы можем установить его с помощью диспетчера пакетов Pip.
$ pip install usbrip
Но есть одно «но» — если установить usbrip с помощью pip, некоторые функции будут недоступны.
Чтобы получить полный функционал, вам необходимо установить usbrip, используя его скрипт установщика под названием install.sh
.
Во-первых, убедитесь, что вы установили необходимые зависимые пакеты:
- python3-venv
- p7zip
В Debian, Ubuntu и производных системах вы можете установить их следующей командой:
$ sudo apt install python3-venv p7zip-full
Теперь приступим к установке самой программы. Загрузите репозиторий usbrip:
$ git clone https://github.com/snovvcrash/usbrip.git usbrip
Приведенная выше команда клонирует содержимое репозитория usbrip и сохраняет его в каталоге с именем «usbrip» в текущем каталоге.
Переходим в каталог usbrip:
$ cd usbrip
Делаем скрипт установщика исполняемым:
$ chmod +x ./installers/install.sh
И, наконец, запускаем установщик при помощи команды:
$ sudo -H ./installers/install.sh -s
Здесь мы использовали -s флаг для включения модуля хранения. Это не только установит программу usbrip, но и создаст список доверенных USB-устройств, историю и также базу несанкционированных событий. В ходе установки устанавливается секретный пароль. Он будет использован при дальнейшем использовании программы.
После завершения установки можно удалить клонированный каталог:
$ cd
$ rm -r usbrip/
Как отобразить историю событий USB-устройств с помощью Usbrip в Linux
Перед тем, как начать пользование программой, давайте ознакомимся с перечнем общих опций и доступных флагов.
1. Получение помощи
Чтобы просмотреть раздел справки программы Usbrip, просто запустите:
$ usbrip --help
Результат данной команды:
usage: usbrip [-h] {banner,events,storage,ids} ...
positional arguments:
{banner,events,storage,ids}
banner show tool banner
events work with USB events
storage work with USB event storage
ids work with USB IDs
optional arguments:
-h, --help show this help message and exit
Как вы можете увидеть, есть четыре основные команды, а именно banner, events, storage и ids.
Чтобы просмотреть список возможностей данных команд, запустите:
$ usbrip <command> --help
Пример:
$ usbrip events --help
Чтобы вывести список всех параметров, относящихся к определенной команде, например events, запустите:
$ usbrip events genauth --help
2. Просмотр истории подключений USB-устройств.
Чтобы показать историю подключений USB-устройств, запустите:
$ usbrip events history
Вам будет предложено отобразить историю событий USB в консоли или сохранить в файле JSON. Если вы хотите отобразить результат, просто нажмите ENTER (по умолчанию) или введите цифру 2, чтобы сохранить его в файле JSON.
Выберем вывод по умолчанию и получаем следующее:
_ {{4}} {v2.2.2-1}
_ _ ___| |_ ___[e]___
| | |_ -| . | _[n] . |
|___|___|___|_| [5] _|
x[1]_| https://github.com/snovvcrash/usbrip
[*] Started at 2021-03-27 14:28:31
[14:28:31] [INFO] Trying to run journalctl...
[14:29:10] [INFO] Successfully runned journalctl
[14:29:11] [INFO] Reading journalctl output
100%|█████████████████████████████| 912197/912197 [00:04<00:00, 188838.07line/s] [?] How would you like your event history list to be generated? 1. Terminal stdout 2. JSON-file [>] Please enter the number of your choice (default 1): 1
[14:29:48] [INFO] Preparing collected events
[14:29:48] [WARNING] Terminal window is too small to display table properly
[14:29:48] [WARNING] Representation: list
USB-History-Events
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Connected: 2020-12-26 21:24:23
Host: ostechnix
VID: 0cf3
PID: 3002
Product: ∅
Manufacturer: ∅
Serial Number: ∅
Bus-Port: 1-1.4
Disconnected: 2020-12-26 21:24:24
.
.
.
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Connected: 2021-03-27 11:52:19
Host: ostechnix
VID: 046d
PID: c52b
Product: USB Receiver
Manufacturer: Logitech
Serial Number: ∅
Bus-Port: 1-1.2
Disconnected: ∅
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
[*] Shut down at 2021-03-27 14:29:48
[*] Time taken: 0:01:17.624936
По умолчанию Usbrip отображает результат табличном формате. Если окно терминала слишком мало для правильного отображения таблицы, вывод отображается в формате списка. Если вы хотите, чтобы Usbrip все равно отображал результат в формате таблицы добавьте ключ -t:
$ usbrip events history -t
Вы можете настроить вывод по своему вкусу. В следующем примере используем флаг -q/—quiet для исключения WARNING сообщений терминала. Опция -l/—list используется для отображения вывода в формате списка, опция -n/—number позволяет задать количество значений для вывода.
$ usbrip events history -ql -n 2
Приведенная выше команда покажет только 2 последних события истории USB без отображения WARNING и других информационных сообщений в терминале.
Пример вывода:
100%|█████████████████████████████| 912890/912890 [00:05<00:00, 159754.38line/s]
USB-History-Events
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Connected: 2021-03-27 10:16:08
Host: ostechnix
VID: 0cf3
PID: 3005
Product: ∅
Manufacturer: ∅
Serial Number: ∅
Bus-Port: 1-1.4
Disconnected: ∅
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Connected: 2021-03-27 11:52:19
Host: ostechnix
VID: 046d
PID: c52b
Product: USB Receiver
Manufacturer: Logitech
Serial Number: ∅
Bus-Port: 1-1.2
Disconnected: ∅
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
3. Как сохранить историю USB событий в файле
Вместо того, чтобы отображать историю событий в стандартном выводе, мы можем сохранить ее в файл в формате JSON.
Для этого запустите следующую команду:
$ usbrip events history
Введите 2, когда вам будет предложено выбрать, как вы хотите сохранить вывод. Вам будет предложено ввести расположение и имя выходного файла. Просто введите местоположение по вашему выбору, а также можете просто нажать ENTER, чтобы сохранить вывод в файл с именем history.json
в $HOME директорию.
_ {{4}} {v2.2.2-1}
_ _ ___| |_ ___[3]___
| | |_ -| . | _[N] . |
|___|___|___|_| [5] _|
x[1]_| https://github.com/snovvcrash/usbrip
[*] Started at 2021-03-29 11:49:40
[11:49:40] [INFO] Trying to run journalctl...
[11:49:41] [INFO] Successfully ran journalctl
[11:49:41] [INFO] Reading journalctl output
100%|███████████████████████████████| 15910/15910 [00:00<00:00, 235574.33line/s]
[?] How would you like your event history list to be generated?
1. Terminal stdout
2. JSON-file
[>] Please enter the number of your choice (default 1): 2
[>] Please enter the output file name
(default is "history.json")
:
[11:49:46] [INFO] Generating event history list (JSON)
[11:49:46] [INFO] New event history list: "/home/ostechnix/history.json"
[*] Shut down at 2021-03-29 11:49:46
[*] Time taken: 0:00:05.852216
Вы можете просмотреть содержимое полученного файла использовав команду:
$ usbrip events open history.json
4. Отображение истории событий внешних USB-устройств
Чтобы показать историю подключений внешних устройств, используйте флаги -e, —external:
$ usbrip events history -q -e
5. Отображение истории USB событий за определенный период времени
Мы можем использовать флаг -d, —date для просмотра истории USB устройств в заданный промежуток времени. Например, следующая команда отображает историю событий, которые произошли с января 2021 года по март 2021 года:
$ usbrip events history -q -d '2021-01-01' '2021-03-29'
6. Отображение информации о конкретном USB устройстве
Возможно, вам будет интересно просмотреть события USB-подключений по определенному устройству. Следующая команда предоставит вам короткую информацию с перечнем устройств, которая содержит только колонки «Connected», «Disconnected», «Serial» и «Product»:
$ usbrip events history -q -c conn disconn serial prod -n 20
Также здесь использована опция -n 20, для ограничения количества отображаемых записей.
7. Поиск информации о конкретных USB-устройствах
Возможно, вам будет интересно просмотреть историю событий определенного устройства. Для этого вы можете использовать флаг —manufact:
В следующем примере отобразим 15 недавних событий моего беспроводного приемника Logitech. Я также перечислил детали только в 4 столбцах, а именно: «Connected», «Disconnected», «Serial» и «Product».
$ usbrip events history -q -c conn disconn serial prod --manufact Logitech -n 15
Точно так же вы можете фильтровать события USB, объединив множество полей, таких как PID, VID, порт, имя хоста, серийный номер и т. д.
8. Создание списка доверенных USB-устройств
Чтобы создать список авторизованных USB-устройств, используйте опцию authgen:
$ sudo usbrip events genauth ~/auth.json -a vid pid -n 10 -d '2021-03-29'
Эта команда генерирует список доверенных USB-устройств в виде файла JSON с именем auth.json
содержащем информацию о первых 10 устройствах, подключенных с 29 марта 2021 года. Этот файл будет содержать сведения об атрибутах VID и PID.
9. Поиск нарушений безопасности
Если вы хотите проверить наличие несанкционированного доступа к USB, просто найдите auth.json
файл, который был создан ранее:
$ sudo usbrip events violations ~/auth.json
Вы также можете фильтровать вывод по своему вкусу.
Пример:
$ sudo usbrip events violations ~/auth.json -a pid -et --host ostechnix --manufact Logitech --serial 0123456789 -c conn disconn
Эта команда будет искать в истории событий внешних USB-устройств нарушения на основе списка доверенных USB-устройств (~/auth.json) по атрибуту «PID», ограничивать результирующие события теми, у которых в качестве имени хоста указано «ostechnix», «Logitech» в качестве производителя и «0123456789» в качестве серийного номера. Выводимый результат будет представлен в форме таблицы со столбцами «Connected» и «Disconnected».
Если USB-устройство отображается в истории, но не в auth.json
файле, мы можем сказать, что произошло событие нарушения политики безопасности
Дополнительные сведения об использовании Usbrip можно найти на странице проекта в GitHub.