Секрети Linux форензики, техніки трекінгу USB-підключень

24 січня 2024 3 хвилин Автор: Cyber Witcher

Linux форензика: Сліди USB-підключень у цифрових розслідуваннях

Linux-форензика в контексті трекінгу історії підключень USB-пристроїв є важливою складовою розслідування кіберзлочинів. Цей процес дозволяє виявляти і аналізувати діяльність користувачів, що може бути ключовим у визначенні порушень безпеки або несанкціонованого доступу до даних. У статті описано, як за допомогою команд Linux можна відстежувати підключення та відключення USB-пристроїв, а також техніки, які дозволяють детально аналізувати ці дані. Розглядаються як стандартні засоби операційної системи, так і спеціалізоване форензичне програмне забезпечення. Додатково акцентується увага на важливості знання та використання різних інструментів і команд Linux для трекінгу USB-підключень, які можуть виявити потенційні кіберзагрози.

У статті ви знайдете вичерпне дослідження конкретної теми, пов’язаної з технологіями чи програмуванням. Стаття містить поглиблений аналіз, докладні пояснення та, можливо, покрокові вказівки чи приклади, що стосуються теми. Він обслуговує професіоналів або ентузіастів у сфері технологій, пропонуючи ідеї та знання для поглиблення розуміння або вирішення конкретних технічних проблем.

  • Дисклеймер: Ця стаття створена з ознайомлювальною метою. У ній описано техніки форензики в Linux та методи трекінгу USB-підключень, щоб допомогти читачам зрозуміти ці процеси та дізнатися, як підвищити рівень кібербезпеки.

Форензика USB-підключень у Linux

Сьогодні ми вам розповімо про один дуже цікавий проект. Він носить назву usbrip і є невеликою консольною опенсорс утилітою для Linux-форензики, а саме для роботи з історією підключень USB-пристроїв. Програма написана на чистому Python 3 (з використанням деяких сторонніх модулів) і не вимагає залежностей крім Python 3.x інтерпретатора та пари рядків з requirements.txt , які дозволяються одним рядком за допомогою pip.

Скріншоти

Отримання історії підключень знімних USB-пристроїв.

Пошук додаткової інформації про USB-пристрій за ідентифікатором моделі (PID’у):

Опис

Як відомо, операційні системи на базі GNU/Linux дуже трепетно ​​ставляться до логування різноманітних подій, і підключення/відключення USB-пристроїв не є винятком. У сукупності з одним із пунктів UNIX-філософії про «текстові потоки, як універсальні інтерфейси» інформацію про артефакти таких подій (з різним ступенем подробиці) залежно від дистрибутива можна виявити в одному або кількох з наступних текстових файлів:

  • /var/log/kern.log*;

  • /var/log/syslog*;

  • /var/log/messages*;

  • /var/log/dmesg*;

  • /var/log/daemon.log*

FORENSIC-PROOF навіть показує нам таку картинку з цього приводу (трохи неповну, але неважливо):

Для своєї роботи usbrip знаходить універсальні для всіх збірок Linux, заснованих на Debian (Ubuntu, Linux Mint та ін.) та RPM (CentOS, Fedora, openSUSE та ін.), лог-файли, а саме: /var/log/syslog*або /var/log/messages*, парсить їх у пошуках потрібної інформації та виявляє знайдені сліди підключень USB-пристроїв в красиві таблички (або списки – як завгодно).

Також usbrip вміє:

  • Створювати списки авторизованих (довірених) пристроїв у вигляді JSON-файлів;

  • Шукати «події-порушників» на основі списку довірених пристроїв: такі події (підключення/відключення USB), у яких брали участь USB-пристрої, не зазначені як довірені;

  • Шукати додаткову інформацію про USB-пристрій за його VID (Vendor ID) та/або PID (Product ID).

Довідка

Отримати список доступних модулів:

$ python3 usbrip.py -h

Отримати список доступних підмодулів для конкретного модуля:

$ python3 usbrip.py <модуль> -h

Отримати список доступних опцій для конкретного підмодуля:

$ python3 usbrip.py <модуль> <підмодуль> -h

Синтаксис

$ python3 usbrip.py banner
Виведення на екран банера утиліти.

$ python3 usbrip.py events history [-q] [-t | -l] [-e] [-n КІЛЬКІСТЬ_ПОДІЙ] [-d ДАТА [ДАТА ...]] [-c СТОЛБЕЦЬ [СТОЛБЕЦЬ ...]] [-f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]]
Перегляд історії USB-з'єднань.

$ python3 usbrip.py events gen_auth <ВИХІДНИЙ_ФАЙЛ.JSON> [-a ОЗНАК [ОЗНАК ...]] [-q] [-e] [-n КІЛЬКІСТЬ ПОДІЙ] [-d ДАТА [ДАТА ...]] [-f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]]
Формування списку авторизованих (довірених) USB-пристроїв.

$ python3 usbrip.py events violations <ВХІДНИЙ_ФАЙЛ.JSON> [-a ОЗНАК [Ознака ...]] [-q] [-t | -l] [-e] [-n КІЛЬКІСТЬ_ПОДІЙ] [-d ДАТА [ДАТА ...]] [-c СТОЛБЕЦЬ [СТОЛБЕЦЬ ...]] [-f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]]
Пошук "подій-порушників" на основі списку довірених пристроїв.

$ python3 usbrip.py ids search [-q] [--vid VID] [--pid PID] [--offline]
Пошук додаткової інформації про пристрій за його VID та/або PID базою даних ідентифікаторів.

$ python3 usbrip.py ids download [-q]

Опції

Опції, що підтримуються підмодулями 'events history', 'events gen_auth', 'events violations', 'ids search', 'ids download':
    -q, --quiet
   опустити виведення банера, інформаційних (зелених) повідомлень, а також не ставити запитання щодо виконання

#####################################################################################

Опції, що підтримуються підмодулями 'events history', 'events gen_auth', 'events violations':
    -e, --external
    шукати тільки знімні USB-пристрої (які мають інформацію про від'єднання)

    -n КІЛЬКІСТЬ_ПОДІЙ, --number КІЛЬКІСТЬ_ПОДІЙ
    кількість останніх за датою подій, яка буде виведена

    -d ДАТА [ДАТА ...], --date ДАТА [ДАТА ...]
    список дат, за якими буде проводиться фільтрація подій під час пошуку

    -f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...], --file ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]
    список лог-файлів (якщо не вказано, пошук історії подій буде здійснено за лог-файлами за замовчуванням: /var/log/syslog* або /var/log/messages* залежно від версії ОС)
#####################################################################################

Опції, що підтримуються підмодулями 'events history', 'events violations':
    -t, --table
   сформувати висновок у вигляді таблиці (якщо розміру вікна терміналу не вистачає для коректного відображення таблиці, висновок автоматично буде сформовано у вигляді списку; при вказівці прапора -t висновок буде сформовано у вигляді таблиці примусово)

    -l, --list
    сформувати висновок у вигляді списку

    -c Стовпець [Стовпець ...], --column Стовпець [Стовпець ...]
    список стовпців, які будуть використані при побудові таблиці (має дію лише при формуванні виводу у вигляді таблиці); дозволені ключі: "conn", "user", "vid", "pid", "prod", "manufact", "serial", "port", "disconn".

#####################################################################################

Опції, що підтримуються підмодулями 'events gen_auth', 'events violations':
    -a ОЗНАК [ОЗНАК ...], --attribute ОЗНАК [ОЗНАК ...]
    список ознак, які будуть використані при побудові списку авторизованих пристроїв (а також при пошуку подій-порушників у разі підмодуля 'events violations'); дозволені ключі: "vid", "pid", "prod", "manufact", "serial".

#####################################################################################

Опції, що підтримуються підмодулями 'ids search', 'ids download':
    --vid VID
    vendor ID або ідентифікатор виробника USB-пристрою (зазвичай 4 шістнадцяткові цифри)

    --vid PID
    product ID або ідентифікатор моделі USB-пристрою (зазвичай 4 шістнадцяткові цифри)

    --offline
    якщо зазначено, пошук додаткової інформації про USB-пристрій за базою даних ідентифікаторів буде здійснено без попереднього її (бази) оновлення

Приклади використання

Показати історію підключень всіх USB-пристроїв, опускаючи банер, інформаційні (зелені) повідомлення, а також не ставлячи питання по ходу виконання ( -q, --quite), сформувавши висновок у вигляді списку ( -l, --list), включивши до нього 100 останніх знайдених подій ( -n КІЛЬКІСТЬ ПОДІЙ, –number КІЛЬКІСТЬ ПОДІЙ):

$ python3 usbrip.py events history -ql -n 100

Показати історію підключень знімних USB-пристроїв ( -e, --external), сформувавши висновок у формі таблиці з полями (стовпцями) “Connected”, “VID”, “PID”, “Disconnected” і “Serial Number” ( ) -c Стовпець [Стовпець …], –column Стовпець [Стовпець …], відфільтрувавши пошук за датами ( -d ДАТА [ДАТА ...], --date ДАТА [ДАТА ...]), взявши при цьому інформацію із зовнішніх лог-файлів ( -f ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...], --file ЛОГ_ФАЙЛ [ЛОГ_ФАЙЛ ...]):

$ python3 usbrip.py events history -et -c conn vid pid disconn serial -d "Dec  9" "Dec 10" -f /var/log/syslog.1 /var/log/syslog.2.gz

Побудувати таблицю історії підключень всіх USB-пристроїв та перенаправити виведення у файл для подальшого аналізу. У тому випадку, якщо потік виведення не стандартний stdout ( "|"або ">"наприклад) у вихідних даних не будуть присутніми спец. символи, які відповідають за колір шрифту в терміналі, тому текстовий файл не буде засмічений символами, що не читаються. Також потрібно зазначити, що usbrip використовує деякі UNICODE-константи, тому було б непогано відразу конвертувати кодування створюваного файлу в UTF-8 для їх коректного відображення (наприклад, за допомогою encov), а також використовувати символи нового рядка в Windows-стилі для кращої переносимості (наприклад за допомогою awk):

$ python3 usbrip.py history events -t | awk '{ sub("$", "\r"); print }' > usbrip.txt && enconv -x UTF8 usbrip.txt

Примітка: позбутися спец. символів, що відповідають за колір, можна і в тому випадку, якщо висновок вже був направлений у stdout. Для цього необхідно скопіювати отримані дані в новий файл usbrip.txtі додати ще одну awkінструкцію:

$ awk '{ sub("$", "\r"); gsub("\\x1B\\[[0-?]*[ -/]*[@-~]", ""); print }' usbrip.txt && enconv -x UTF8 usbrip.txt

Створити список довірених пристроїв у вигляді JSON-файлу ( trusted/auth.json), що містить поля «VID» та «PID» перших трьох пристроїв, підключених 26 вересня:

$ python3 usbrip.py events gen_auth trusted/auth.json -a vid pid -n 3 -d "Sep 26"

Знайти серед історії підключень знімних USB-пристроїв «події-порушники» на основі списку довірених пристроїв ( trusted/auth.json) по полю «PID» та сформувати висновок у вигляді таблиці з полями «Connected», «VID» та «PID»:

$ python3 usbrip.py events violations trusted/auth.json -a pid -et -c conn vid pid

Знайти додаткову інформацію про USB-пристрій на основі його VID’а та PID’а:

$ python3 usbrip.py ids search --vid 0781 --pid 5580

Завантажити/оновити базу даних ідентифікаторів USB-пристроїв (джерело тут ):

$ python3 usbrip.py ids download

Посилання

Забрати утиліту можна з Гітхаба , всі залежності для запуску та коректної роботи вказані в requirements.txt .

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.