USBrip — утилита расширенной аналитики использования USB-устройств в Linux

UsbRip tool Linux

В этой статье рассказывается об инструменте 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

Отображение истории событий USB-устройств с помощью Usbrip

По умолчанию 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

Отображение истории внешних USB-устройств

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

Отображение краткой информации по USB-устройствам с помощью usbrip

Также здесь использована опция -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-устройства

Точно так же вы можете фильтровать события 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.

Поделитесь с друзьями

Добавить комментарий

0 комментариев
Вбудовані Відгуки
Переглянути всі коментарі
0
Ми любимо ваші думки, будь ласка, прокоментуйте.x