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.

$ 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.

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.

5 1 vote
Рейтинг статьи

Автор публікації

Офлайн 2 місяці

rklm

Коментарі: 0Публікації: 3Реєстрація: 21-04-2021
Если Вам понравилась статья, то поделитесь ею в соц.сетях:
guest
0 комментариев
Inline Feedbacks
View all comments